机器学习:
- 定义:人工智能的子领域,通过数据驱动的方法让计算机学习规律,进行预测或决策。
-
核心方法:
-
监督学习(如线性回归、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();
}
}