AI 超级智能体项目 - 第三期:基础内容 笔记 (使用GEMINI)
- Prompt engineer 分兩種
- 1.1 系統預設提示詞
- 1.2 用戶提示詞
- token成本估算表格 給老闆看
- 精簡提示詞內容
- 定期清理對話上下文,或是以總結代替過於冗長的上下文
- 使用向量檢索代替直接輸入 不要將整個文檔作為Prompt 而是使用向量資歷褲或是RAG獲取相關段落
- 結構化代替自然語言:條列式點
- 提示詞資源
- 官方提供文檔,不同模型有不同
4.基礎提示技巧
- 4.1 明確指定任務和角色
- 4.2 提供足夠上下文前提和期望的輸出格式範例
- 4.3 使用結構化格式引導思維:列表、表格
- 4.4 明確輸出長度、格式、風格
- 進階提示詞技巧
- 5.1 chain of thought 引導'推理'步驟
- 5.2 給指導範例 few shot learning
- 5.3 分步驟理解 step by step
- 5.4 要求模型自我評估和修正
- 5.5 知識檢索和引用 要求模型給研究來源
- 5.6 多視角分析 要求模型從不同角度、不同思路去分析
- 5.7 給模型多模態參考資料
- 提示詞微調和優化 (重要!) 開發中會需要去調整提示詞提高AI的準確度,以下會有三個方法
- 6.1 迭代式:透過逐步修改和完善提示詞
- 6.2 邊界測試:透過測試極端case2得到模型的能力邊界,得到找出優化空間
- 6.3 提示詞模板化:透過固定模板加上插入參數的方式得到固定的回答效率
- 6.4 明確指出錯誤並要求AI修正:在使用AI幫助開發時非常有用
總結:任務越複雜,給的補充資料要越多! 經典:提問的智慧 https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md
- AI需求應用分析
- 調研、細化、找到核心需求、開發完成核心功能去測熱度:工程師應該去訓練自己找出問題的思維
- 很多新手小白都是想說要一次做完很多功能才能上線,其實這樣不對
- 而是將核新功能能做好後就必須先上線,去測試市場的接收度,避免浪費開發資源和時間(PM很懂)
- AI應用方案設計
- 8.1主題? 需求?
- 8.2 分析出核心需求
- 8.3 為完成核心需求選取技術:是否需要多輪對話、要設計怎樣的系統提示詞
- 8.4 SpringAI: Chat Client API
AI調用
- Client API 官方文檔 https://docs.spring.io/spring-ai/reference/api/chatclient.html
- Advisors API https://docs.spring.io/spring-ai/reference/api/advisors.html
- 調用AI的過程中做攔截器(middleware) 例如對話記憶、RAG 跟spring servlet MVC攔截器類似
- Before Advising、After Advising
- 攔截器advisor的執行順序是由getOrder決定的 不是代碼的出現順序
- Class 右鍵 Diagram 可以查看 Class繼承關係圖
- 可以把多個ChatAroundAdvisor組裝成CallAroundAdvisorChain 有順序的鏈條
- callAround stringAround 同步 異步區別
2.1幾個比較重要的Advisor
- MessageChatMemoryAdvisor
- PromptChatMemoryAdvisor
- VectorStoreChatMemoryAdvisor 2.2 chatmemory
- 負責管理歷史對話的CRUD
- InMemory
- Neo4j
- Cassandra
- Jdbc
- 自己實現:放在哪裡都可以 就實現chatmemory裡面的CRUD方法即可以
代碼實現
- 初始化ChatClient配置
▼text复制代码public SqlAssistantApp(GoogleGenAiChatModel googleGenAiChatModel) { //chatModel: 要放哪個模型就放哪個模型的Class 可以先打ChatModel ctrl點進去看繼承關係 就知道目前引入那些依賴的大模型可以用了 ChatMemoryRepository chatMemoryRepository = new InMemoryChatMemoryRepository(); //chatMemoryRepository: chatMemory的儲存位置 這裡使用InMemory ChatMemory chatMemory = MessageWindowChatMemory.builder() chatMemory: 設定對話上下文記憶功能,這邊指定儲存到剛剛設定的chatMemoryRepository .chatMemoryRepository(chatMemoryRepository) .maxMessages(10) .build(); chatClient = ChatClient.builder(googleGenAiChatModel) // chatClient: 與大模型通訊的設定,包含系統提示詞、Advisor注入剛剛的chatMemory記憶設定 .defaultSystem(SYSTEM_PROMPT) .defaultAdvisors(MessageChatMemoryAdvisor.builder(chatMemory).build()) .build(); }
- 實現多輪對話方法
▼text复制代码public String doChat(String message, String conversationId) { //message: 使用者提示詞、conversationId: 用於區隔不同對話 ChatResponse chatResponse = chatClient.prompt() .user(message) .advisors(advisor -> advisor.param(ChatMemory.CONVERSATION_ID, conversationId)) .call() .chatResponse(); //這邊回應可以使用.content()獲取簡單對話,也可以使用.chatResponse得到更多資訊metadata String content = chatResponse.getResult().getOutput().getText(); log.info("content: {}", content); return content; }
- 單元測試看看對話記憶功能 Class名稱->右鍵Go to -> Test -> Create new Test
上述重點
要搞懂以下名詞: 多看幾次官方文檔,善用ctrl+F去找關鍵字 https://docs.spring.io/spring-ai/reference/api/chatclient.html#_returning_a_chatresponse
- chatModel: 你要使用哪個大模型
- chatMemory: 設定對話上下文記憶功能,通常會注入chatMemoryRepository才知道記憶要儲存到哪裡
- chatMemoryRepository: chatMemory的儲存位置
- chatClient: chatClient: 與大模型通訊的設定,包含系統提示詞、Advisor注入剛剛的chatMemory記憶設定
- 大模型回應 : .call() -> .content or .chatResponse有更多細節資料
- 重點就是可能需要一直在intellij中,去看ctrl加左鍵源代碼,才能找到官方文檔中沒有說到的細節。
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
内容推荐
#求职# 求助 请问一下大家,星球有那种关于秋招企业投递汇总的表不[机智]
6
鱼神,想咨询一下目前Java的现状,先介绍一下我自身的情况吧本人是本科毕业一年,农学专业,在学校就对编程有兴趣,但是没时间去学校,现在迫切想转行去学Java,想了解一下目前的Java的就业咋样,现在就是在上班,但是工作自身干起来也很不顺心,一直想学习Java这块,就是在想报班好一些还是自学好一些,学成之后的出路怎么样,希望鱼神能给为小弟指点迷津
7
SpringAI + RAG + MCP 全栈 | AI 超级智能体企业级实战(26年必学) - 第三期:基础内容 笔记
3
AI超级智能体项目_踩坑记录_PGVector维度冲突
2
Code Log-AI超级智能体项目,开发日志。SpringAI + RAG + MCP 全栈 | AI 超级智能体企业级实战(26年必学)
3
作者分享
AI 超级智能体项目- 第二期:GEMINI AI 大模型接入 笔记
3
看完用戶中心15,大致上搞懂資料關係
✔️ UserMapper 繼承 BaseMapper<User>
✔️ UserService 繼承 IService<User>
✔️ UserServiceImpl 繼承 ServiceImpl<UserMapper, User> 並實作 UserService
┌─────────────────────────────┐
│ BaseMapper<T> │ ← MyBatis-Plus 內建
└─────────────▲──────────────┘
│
┌─────────┴─────────┐
│ UserMapper │ ← 你自己定義
└───────────────────┘
┌─────────────────────────────┐
│ IService<T> │ ← MyBatis-Plus 內建
└─────────────▲──────────────┘
│
┌─────────┴─────────┐
│ UserService │ ← 你自己定義介面
└───────────────────┘
▲
│ implements
│
┌──────────────────────────────────────────┐
│ ServiceImpl<UserMapper, User> │ ← MyBatis-Plus 內建
│ (內含 baseMapper、CRUD 實作) │
└───────────────────▲──────────────────────┘
│ extends
│
┌───────────────┴────────────────┐
│ UserServiceImpl │ ← 你自己的實作
└────────────────────────────────┘
2
251009
學習了用戶中心9-13視頻
原本學的是.net core 目前還在理解一些java的用法
1. Dependency Injection 對應
In .net core, UserService : IUserService is corresponds to Spring’s @Service(Interface) + @Resource.(Injection class)
2. Mybatis plus 有點像是generic repository 只要extends BaseMapper就能生成基本的CRUD (在.net core都要自己寫)
每日一句:
I feel invincible!
1
25.10.9
- 背了Java八股基礎,以及做出自己的學習筆記
明天:上班繼續背八股、下班學習用戶中心
2

