機器學習:
-
定義:人工智能的子領域,通過數據驅動的方法讓計算機學習規律,進行預測或決策。
-
核心方法:
-
監督學習(如線性回歸、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();
? ? }
}