【 SpringAI核心特性 | Prompt工程 】

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 ModelAI 模型接口對接 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 應用。


大功告成!

出處:編程導航

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/92033.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/92033.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/92033.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

windows wsl2-06-docker hello world

hello-world 例子 就像其他任何一門語言一樣&#xff0c;我們來體驗 docker 的 hello world $ docker run hello-world但是報錯 :~$ docker run hello-world Unable to find image hello-world:latest locally docker: Error response from daemon: Get "https://registry…

Python知識點4-嵌套循環break和continue使用死循環

一、循環【重點掌握】 1.嵌套循環類似于嵌套if語句 語法&#xff1a; while 表達式1&#xff1a;while 表達式2&#xff1a;語句# 1. # 循環5次&#xff0c;打印0~4 m 0 while m < 5:print(m)m 1 # 循環3次&#xff0c;打印0~2 n 0 while n < 3:print(n)n 1print(&qu…

將HTML+JS+CSS數獨游戲包裝為安卓App

HTMLJSCSS制作一個數獨游戲-CSDN博客 中開發了一個數獨游戲&#xff0c;這個數獨游戲提供了一次性回退到指定步驟的輔助功能&#xff0c;在解決復雜數獨問題時十分有幫助&#xff0c;可作為玩數獨游戲的輔助工具&#xff0c;因此&#xff0c;考慮將它改裝成安卓App安裝在手機上…

編程語言Java入門——核心技術篇(一)封裝、繼承和多態

同專欄基礎知識篇寫在這里&#xff0c;有興趣的可以去看看&#xff1a; 編程語言Java入門——基礎知識篇&#xff08;一&#xff09;-CSDN博客 編程語言Java入門——基礎知識篇&#xff08;二&#xff09;-CSDN博客 編程語言Java入門——基礎知識篇&#xff08;三&#xff0…

【39】MFC入門到精通——C++ /MFC操作文件行(讀取,刪除,修改指定行)

文章目錄1 通過關鍵詞&#xff0c;讀取某一行 &#xff08;3種方法&#xff09;2 刪除 指定行3 修改 指定行1 通過關鍵詞&#xff0c;讀取某一行 &#xff08;3種方法&#xff09; 通過定位關鍵詞&#xff0c;讀取某一行信息,返回CString //通過定位關鍵詞&#xff0c;讀取某…

5 種可行的方法:如何將 Redmi 聯系人備份到 Mac

將 Redmi 聯系人備份到 Mac 是防止因手機損壞、丟失或更換設備而導致數據丟失的重要措施。雖然云服務提供了便利性&#xff0c;但擁有離線備份可以提供額外的安全性&#xff0c;而無需完全依賴互聯網。如果您想知道如何將 Redmi 聯系人備份到 Mac&#xff0c;本文將為您介紹 5 …

LeRobot 具身智能機械臂 SO-ARM100 從搭建到訓練全流程

今天給大家分享一下 LeRobot 具身智能機械臂 SO-ARM100 的完整使用流程&#xff0c;包括設備組裝、環境配置、遠程控制、數據錄制到模型訓練的全過程。適合剛入門具身智能的小伙伴參考學習。 一、前期準備與資源獲取 在開始之前&#xff0c;我們需要準備好相關的資源和工具&a…

LINUX720 SWAP擴容;新增邏輯卷;邏輯卷擴容;數據庫遷移;gdisk

SWAP空間擴展 方法一 增加硬盤或分區擴展 swap -s mkswap /dev/sdd6 blkid /dev/sdd6 swapon /dev/sdd6 swapon -s vim /etc/fstab /dev/sdd6 swap swap defaults 0 0 開機自動擴容 swap -s [rootweb ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sd…

Python 進程間通信:TCP安全加密數據傳輸

最近在寫安全方面的程序&#xff0c;有需求&#xff0c;就做了這些TCP加密數據傳輸類。 utils.safeUtils的內容詳見&#xff1a; SafeObj&#xff1a;Python 高安全性加密數據容器類-CSDN博客SafeKey&#xff1a;Python 高安全性加密密碼容器類-CSDN博客 如有任何問題或漏洞歡迎…

Windows批量修改文件屬性方法

標題使用icacls命令&#xff08;推薦批量操作&#xff09;打開管理員權限的命令提示符&#xff08;CMD&#xff09;執行以下命令&#xff1a;cmd icacls "文件夾路徑" /grant 用戶名:(OI)(CI)F /T /C 參數說明&#xff1a;(OI)&#xff1a;對象繼承 - 適用于文件夾(C…

Entity Component System架構

ECS架構 1 簡介 在當今快速發展的軟件開發領域&#xff0c;游戲開發、實時模擬等場景對系統的性能、靈活性和可擴展性提出了極高的要求。傳統的面向對象架構在面對復雜且動態變化的實體時&#xff0c;往往會出現代碼耦合度高、擴展性差等問題。? ECS&#xff08;Entity - Com…

.vscode 擴展配置

一、vue快捷鍵配置 在項目.vscode下新建vue3.0.code-snippets 每當輸入vue3.0后自動生成代碼片段 {"Vue3.0快速生成模板": {"scope": "vue","prefix": "Vue3.0","body": ["<template>"," &…

一個基于阿里云的C端Java服務的整體項目架構

1.背景介紹 總結一下工作使用到的基于通常的公有云的項目整體架構&#xff0c;如何基于公有云建設安全可靠的服務&#xff0c;以阿里云為例的整體架構&#xff1b;1. 全局流量治理層&#xff08;用戶請求入口&#xff09;1.1 域名與 DNS 解析域名注冊與備案&#xff1a;通過阿里…

《剝開洋蔥看中間件:Node.js請求處理效率與錯誤控制的深層邏輯》

在Node.js的運行時環境中&#xff0c;中間件如同一系列精密咬合的齒輪&#xff0c;驅動著請求從進入到響應的完整旅程&#xff0c;而洋蔥模型則是這組齒輪的傳動系統。它以一種看似矛盾的方式融合了順序與逆序、分離與協作——讓每個處理環節既能獨立工作&#xff0c;又能感知全…

GaussDB union 的用法

1 union 的作用union 運算符用于組合兩個或更多 select 語句的結果集。2 union 使用前提union 中的每個 select 語句必須具有相同的列數這些列也必須具有相似的數據類型每個 select 語句中的列也必須以相同的順序排列3 union 語法select column_name(s) from table1 union sele…

構建足球實時比分APP:REST API與WebSocket接入方案詳解

在開發足球實時比分應用時&#xff0c;數據接入方式的選擇直接影響用戶體驗和系統性能。本文將客觀分析REST API和WebSocket兩種主流接入方案的技術特點、適用場景和實現策略&#xff0c;幫助開發者做出合理選擇。一、REST API&#xff1a;靈活的數據獲取方案核心優勢標準化接口…

Linux文件系統三要素:塊劃分、分區管理與inode結構解析

理解文件系統 我們知道文件可以分為磁盤文件和內存文件&#xff0c;內存文件前面我們已經談過了&#xff0c;下面我們來談談磁盤文件。 目錄 一、引入"塊"概念 解析 stat demo.c 命令輸出 基本信息 設備信息 索引節點信息 權限信息 時間戳 二、引入"分區…

基于paddleDetect的半監督目標檢測實戰

基于paddleDetect的半監督目標檢測實戰前言相關介紹前提條件實驗環境安裝環境項目地址使用paddleDetect的半監督方法訓練自己的數據集準備數據分割數據集配置參數文件PaddleDetection-2.7.0/configs/semi_det/denseteacher/denseteacher_ppyoloe_plus_crn_l_coco_semi010.ymlPa…

計算機網絡:(十)虛擬專用網 VPN 和網絡地址轉換 NAT

計算機網絡&#xff1a;&#xff08;十&#xff09;虛擬專用網 VPN 和網絡地址轉換 NAT前言一、虛擬專用網 VPN1. 基礎概念與作用2. 工作原理3. 常見類型4. 協議對比二、NAT&#xff1a;網絡地址轉換1. 基礎概念與作用2. 工作原理與類型3. 優缺點與問題4. 進階類型三、VPN 與 N…

數位 dp

數位dp 特點 問題大多是指“在 [l,r][l,r][l,r] 的區間內&#xff0c;滿足……的數字的個數、種類&#xff0c;等等。” 但是顯然&#xff0c;出題人想要卡你&#xff0c;rrr 肯定是非常大的&#xff0c;暴力枚舉一定超時。 于是就有了數位 dp。 基本思路 數位 dp 說白了…