SpringAI

机器学习:

  • 定义:人工智能的子领域,通过数据驱动的方法让计算机学习规律,进行预测或决策。
  • 核心方法

    • 监督学习(如线性回归、SVM)。

    • 无监督学习(如聚类、降维)。

    • 强化学习(如Q-learning)。

  • 特点:依赖特征工程,模型复杂度较低,适用于中小型数据。

深度学习:

  • 定义:基于深层神经网络的机器学习方法,可自动提取特征。
  • 关键技术

    • 神经网络架构:CNN(图像)、RNN/LSTM(序列数据)、Transformer。

    • 优化算法:反向传播、梯度下降(如Adam优化器)。

  • 优势:处理高维数据(如图像、文本),减少人工特征工程。

自然语言处理:

  • 目标:使计算机理解、生成人类语言。

  • 技术演进

    • 传统方法:词袋模型、TF-IDF、隐马尔可夫模型。

    • 深度学习方法:词嵌入(Word2Vec)、预训练模型(BERT、GPT)。

  • 任务:机器翻译、情感分析、文本生成等。

大语言模型:

  • 定义:参数量巨大(数亿至万亿)的深度学习模型,专注于语言任务。

  • 代表模型:GPT系列、BERT、T5。

  • 核心技术

    • Transformer架构:自注意力机制(捕捉长距离依赖)。

    • 预训练与微调:在大规模语料上预训练(如掩码语言建模),再针对下游任务微调。

大模型底层原理:

T:基于Transformer的神经网络

P:通过大量数据预训练,掌握自然语言规律

G:基于上文计算概率,生成下一个token

模型部署:

云部署:

优点:前期成本低、部署维护简单、弹性扩展、全球访问

缺点:数据隐私、网络依赖、长期成本高

本地部署:

优点:数据安全、不依赖外部网络、长期成本低、高度定制

缺点:初始成本高、维护复杂、部署周期长

开放API:

优点:前期成本极低、无需部署、无需维护、全球访问

缺点:数据隐私、网络依赖、长期成本高、定制限制

调用大模型:

传统应用和大模型应用:

大模型应用是基于大模型的推理、分析、生成能力,结合传统编程能力,开发出的各种应用

AI应用开发技术架构:

Fine-tuning(模型微调)

针对特有业务场景对基础大模型做数据训练与微调,以满足特定场景的需求。

SpringAI:

是一个大模型应用框架。其目标是将Spring生态系统的设计原则(如可移植性的模块化设计)应用于人工智能邻域。可以无缝接入Spring生态体系,快速改造传统项目。

对话机器人-入门

引入依赖:

配置模型:

配置客户端:

创建项目:

引入依赖自动完成

配置:

创建包config,包下创建相应类

创建controller包,包下创建相应的类:

手动加入

阻塞式,响应时间较长

流式默认采用event事件流,默认情况没有编码

需要在@RequestMapping注解后自己设置响应的类型

system设定:

这里是controller和前端的对话

对话机器人-会话日志

对chatclinet做修改加入环绕增强

修改配置文件,新增日志相关:

在application.yaml加入

日志功能通过环绕通知来去实现的

对话机器人-前端对接

解决跨域问题

对话机器人-会话记忆

步骤:

定义会话存储方式:

存储在内部的会话记忆

配置会话记忆:

添加会话id:

第三排:匿名环绕增强器

配置类中

添加

对话机器人-会话历史

新增接口:

public interface ChatHistoryRepository {

/**

* 保存会话记录

* @param type

* @param charId

*/

void save(String type,String charId);

/**

* 获取会话记录

* @param type

* @return

*/

List<String> getChatIds(String type);

}

接口实现:

/**

* @author TonySong

* @date 2025/4/12 0012

* @time 10:35

*/

@Component

public class InMemoryChatRepository implements ChatHistoryRepository{

private final Map<String,List<String>> chatHistory= new HashMap<>();

@Override

public void save(String type, String charId) {

// if(!chatHistory.containsKey(type)){

// chatHistory.put(charId,new ArrayList<>());

// }

// List<String> charIds = chatHistory.get(type);

List<String> charIds = chatHistory.computeIfAbsent(type, k -> new ArrayList<>());

if(charIds.contains(charId)){

return;

}

charIds.add(charId);

}

@Override

public List<String> getChatIds(String type) {

// List<String> list = chatHistory.get(type);

// return list==null? List.of():list;

return chatHistory.getOrDefault(type,List.of());

}

}

修改会话实现:

/**

* @author TonySong

* @date 2025/4/11 0011

* @time 17:39

*/

@RestController

@RequestMapping("/ai")

@RequiredArgsConstructor//启用带参构造完成创建

public class ChatController {

private final ChatClient chatClient;

private final ChatHistoryRepository chatHistoryRepository;

@RequestMapping(value = "/chat",produces = "text/html;charset=utf-8")

public Flux<String> chat(@RequestParam(value = "message",defaultValue = "你是谁") String message) {

//1、保存会话

chatHistoryRepository.save("chat",message);

//2、获取会话

return chatClient

.prompt()

.user(message)

.stream()

.content();

}

}

相关推荐
小冷coding19 小时前
【面试】结合项目整理的场景面试题,覆盖 Java 基础、锁、多线程、数据库、分布式锁 / 事务、消息中间件等核心维度
java·数据库·面试
鬼先生_sir19 小时前
SpringCloud-GateWay网关
java·spring cloud·gateway
卓怡学长19 小时前
m319个人网站的设计与实现
java·数据库·spring·tomcat·maven·intellij-idea
Zzj_tju19 小时前
Java 从入门到精通(十二):File 与 IO 流基础,为什么程序“读写文件”时总是容易出问题?
java·python·php
橘子编程20 小时前
操作系统原理:从入门到精通全解析
java·linux·开发语言·windows·计算机网络·面试
飞Link20 小时前
LangGraph 核心架构解析:节点 (Nodes) 与边 (Edges) 的工作机制及实战指南
java·开发语言·python·算法·架构
xuhaoyu_cpp_java20 小时前
Boyer-Moore 投票算法
java·经验分享·笔记·学习·算法
JavaEdge.20 小时前
Chrome加载已解压的扩展程序-清单文件缺失或不可读取 无法加载清单
java
iReachers20 小时前
HTML打包EXE配置管理教程:多项目打包设置一键保存、加载与切换
java·前端·javascript
XiYang-DING20 小时前
【Java】堆
java·开发语言