1. Prompt 工程
基本概念:Prompt ?工程又叫提示?詞工程,簡單來說,就是輸入?給 AI 的指令。
比如下面?這段內容,就是提示詞:
請問桂林電子科技大學是一個怎么樣的學校?
1.1 Prompt分類
在 AI ?對話中,基于角色的?分類是最常見的,通?常存在 3 種主要?類型的 Promp?t:
1)用戶 Prompt :這是用戶向 AI 提供的實際問題、指令或信息,傳達了用戶的直接需求。用戶 Prompt 告訴 AI 模型 “做什么”,比如回答問題、編寫代碼、生成創意內容等。
用戶:幫我寫一篇有關桂電的介紹文章
2)系統 Prompt :這是設置 AI 模型行為規則和角色定位的隱藏指令,用戶通常不能直接看到。系統 Prompt 相當于給 AI 設定人格和能力邊界,即告訴 AI “你是誰?你能做什么?”。
系統:你是一位經驗豐富的軟件工程師,擅長分析代碼問題并提供建設性建議。
回答時保持專業性,但避免使用過于學術的術語,確保新手能夠理解你的建議。
3)助手 Prompt :這是 AI 模型的響應內容。在多輪對話中,之前的助手回復也會成為當前上下文的一部分,影響后續對話的理解和生成。某些場景下,開發者可以主動預設一些助手消息作為對話歷史的一部分,引導后續互動。
系統:你是編程導航的專業編程導師,擅長引導初學者入門編程并制定學習路徑。使用友好鼓勵的語氣,解釋復雜概念時要通俗易懂,適當使用比喻讓新手理解,避免過于晦澀的技術術語。用戶:我完全沒有編程基礎,想學習編程開發,但不知道從何開始,能給我一些建議嗎?助手:歡迎加入編程的世界!作為編程小白,建議你可以按照以下步驟開始學習之旅...【多輪對話繼續】
1.2 Prompt優化
高質量的 Promp?t 可以顯著提升 AI 輸?出的質量,因此?掌握 Prompt 優化技巧非常重要。
1.2.1 基礎提示技巧
1. 明確指定任務和角色
為 AI ?提供清晰的任務描述?和角色定位,幫助模?型理解背景和期望。
系統:你是一位經驗豐富的Python教師,擅長向初學者解釋編程概念。
用戶:請解釋 Python 中的列表推導式,包括基本語法和 2-3 個實用示例。
2. 提供詳細說明和具體示例
提供足夠的?上下文信息和期望的?輸出格式示例,減少?模型的不確定性。
請提供一個社交媒體營銷計劃,針對一款新上市的智能手表。計劃應包含:
1. 目標受眾描述
2. 三個內容主題示例格式:
目標受眾: [描述]
內容主題: [主題1], [主題2], [主題3]
3. 明確輸出格式要求
指定輸出的格式、長度、風格等要求,獲得更符合預期的結果。
撰寫一篇關于氣候變化的科普文章,要求:
- 使用通俗易懂的語言,適合高中生閱讀
- 包含5個小標題,每個標題下2-3段文字
- 總字數控制在800字左右
- 結尾提供3個可行的個人行動建議
1.2.2 進階提示技巧
1. 分步驟指導(Step-by-Step)
將復雜任務分解為可管理的步驟,確保模型完成每個關鍵環節。
請幫我創建一個簡單的網站落地頁設計方案,按照以下步驟:步驟1: 分析目標受眾(考慮年齡、職業、需求等因素)
步驟2: 確定頁面核心信息(主標題、副標題、價值主張)
步驟3: 設計頁面結構(至少包含哪些區塊)
步驟4: 制定視覺引導策略(顏色、圖像建議)
步驟5: 設計行動召喚(CTA)按鈕和文案
2. 少樣本學習(Few-Shot Learning)
通過提供幾?個輸入-輸出對的示?例,幫助模型理解任?務模式和期望輸出。
我將給你一些情感分析的例子,然后請你按照同樣的方式分析新句子的情感傾向。輸入: "這家餐廳的服務太差了,等了一個小時才上菜"
輸出: 負面,因為描述了長時間等待和差評服務輸入: "新買的手機屏幕清晰,電池也很耐用"
輸出: 正面,因為贊揚了產品的多個方面現在分析這個句子:
"這本書內容還行,但是價格有點貴"
核心:任務越復雜,就越要給 Prompt 補充更多細節
2.?SpringAI 核心特性
2.1?多輪對話實現
要實現具有 “記憶力” 的 AI 應用,讓 AI 能夠記住用戶之前的對話內容并保持上下文連貫性,我們可以使用Spring AI 框架的 對話記憶能力。
2.1.1 ChatClient?
之前我們是直接使用 Spring Boot 注入的 ChatModel 來調用大模型完成對話,而通過我們自己構造的 ChatClient,可實現功能更豐富、更靈活的 AI 對話客戶端,也更推薦通過這種方式調用 AI。
通過示例代碼,?能夠感受到 ChatMode?l 和 ChatClient 的?區別。ChatClien?t 支持更復雜靈活的鏈式調用?(Fluent API):
// 基礎用法(ChatModel)
ChatResponse response = chatModel.call(new Prompt("你好"));// 高級用法(ChatClient)
ChatClient chatClient = ChatClient.builder(chatModel).defaultSystem("你是戀愛顧問").build();String response = chatClient.prompt().user("你好").call().content();
2.1.2 構建方式?
方式 1:構造器注入(Spring 項目專用)
服務類代碼
@Service
public class CodeService { // 類名貼合編程場景private final ChatClient chatClient; // 配置好的AI編程工具// Spring自動傳入建造者,只需配置編程助手身份public CodeService(ChatClient.Builder builder) {this.chatClient = builder.defaultSystem("你是編程助手,擅長Java、Python代碼解答,會解釋原理") // 設定AI身份.build(); // 生成工具}// 對外提供編程問題查詢方法public String askCodeQuestion(String question) {return chatClient.send(question); // 調用工具發送問題}
}
控制器使用示例
@RestController
public class CodeController {@Autowired // Spring自動注入CodeServiceprivate CodeService codeService;@GetMapping("/ask-code")public String askCode(String question) {// 調用服務獲取AI的編程解答return codeService.askCodeQuestion(question);}
}
方式 2:建造者模式(非 Spring 項目用)
public class CodeDemo {public static void main(String[] args) {// 1. 準備基礎AI模型(工具內核)ChatModel chatModel = new ChatModel("你的APIKey");// 2. 用建造者模式組裝工具(設定編程助手身份)ChatClient chatClient = ChatClient.builder(chatModel).defaultSystem("你是編程助手,會寫代碼、查bug").build();// 3. 調用工具提問String answer = chatClient.send("Python怎么讀取Excel文件?");System.out.println(answer); // 輸出AI的解答}
}
2.1.3 響應格式
// ChatClient支持多種響應格式
// 1. 返回 ChatResponse 對象(包含元數據如 token 使用量)
ChatResponse chatResponse = chatClient.prompt().user("Tell me a joke").call().chatResponse();// 2. 返回實體對象(自動將 AI 輸出映射為 Java 對象)
// 2.1 返回單個實體
record ActorFilms(String actor, List<String> movies) {}
ActorFilms actorFilms = chatClient.prompt().user("Generate the filmography for a random actor.").call().entity(ActorFilms.class);// 2.2 返回泛型集合
List<ActorFilms> multipleActors = chatClient.prompt().user("Generate filmography for Tom Hanks and Bill Murray.").call().entity(new ParameterizedTypeReference<List<ActorFilms>>() {});// 3. 流式返回(適用于打字機效果)
Flux<String> streamResponse = chatClient.prompt().user("Tell me a story").stream().content();// 也可以流式返回ChatResponse
Flux<ChatResponse> streamWithMetadata = chatClient.prompt().user("Tell me a story").stream().chatResponse();
2.1.4 Advisors
Spring AI 使用 Advisors(顧問)機制來增強 AI 的能力,可以理解為一系列可插拔的攔截器,在調用 AI 前和調用 AI 后可以執行一些額外的操作,比如:
- 前置增強:調用 AI 前改寫一下 Prompt 提示詞、檢查一下提示詞是否安全
- 后置增強:調用 AI 后記錄一下日志、處理一下返回的結果
關鍵組件解析
組件 | 作用 | 開發場景 |
---|---|---|
Prompt | 原始用戶輸入 | 開發者直接處理用戶輸入 |
AdvisedRequest | 增強的請求對象 | 添加上下文/角色設定(如defaultSystem("戀愛顧問") ) |
AroundAdvisor | 攔截器(AOP 思想) | 核心擴展點: ? 日志記錄 ? 請求改寫 ? 權限校驗 ? 敏感詞過濾 |
Chat Model | AI 模型接口 | 對接 OpenAI/Anthropic 等大模型 |
ChatResponse | 原始 AI 響應 | 包含元數據(token 用量等) |
AdvisedResponse | 增強的響應對象 | 結果格式化/業務邏輯封裝 |
開發重點:AroundAdvisor(攔截器)
這是最強大的擴展點,可自定義處理邏輯:
? 1.動態角色設定
// 在 Before 攔截器中
if(request.getUser().isPremium()) {request.setSystemRole("高級情感顧問");
} else {request.setSystemRole("基礎情感助手");
}
?2.敏感詞過濾
// 在 After 攔截器中
if(response.contains("暴力內容")) {return response.filterSensitiveWords();
}
?3.業務邏輯集成
// 調用前注入業務數據
request.addContext("用戶訂單歷史: " + orderService.getHistory());
3. 總結
本文介紹了 Prompt 工程與 SpringAI 核心特性。Prompt 工程包括基本概念、三類 Prompt(用戶、系統、助手)及優化技巧(明確任務角色、分步驟指導等)。SpringAI 核心特性涵蓋多輪對話實現(ChatClient 的構建與使用)、多種響應格式,以及 Advisors 機制(通過攔截器增強 AI 能力),還解析了關鍵組件和開發重點,助力構建更高效的 AI 應用。
大功告成!
出處:編程導航