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