Prompt 是引導 AI 模型生成特定輸出的輸入格式,Prompt 的設計和措辭會顯著影響模型的響應。
最開始Prompt只是單純的文本文字,后面可以包含占位符,可以識別消息的角色。
比如包含占位符的Prompt,也就是我們講的消息模板(PromptTemplate),可以通過消息模板動態創建Prompt.
@RestController
@RequestMapping("/ai/v1")
public class PromptController {@Autowiredprivate ChatModel chatModel;@RequestMapping("/prompt/chat")public String chat(String role,String input) {PromptTemplate promptTemplate = new PromptTemplate("現在你作為一個${role},請根據你的專業知識回答我的問題," +"如果不是你的專業領域的請拒絕回答,直接說不知道,不要做任何解釋," +"好的,接下來請回答我的問題:${input}");Prompt prompt = promptTemplate.create(Map.of("role", role, "input", input));return chatModel.call(prompt).getResult().getOutput().getContent();}
}
識別消息的角色:
Prompt 中的主要角色(Role)包括:
- 系統角色(System Role):指導 AI 的行為和響應方式,設置 AI 如何解釋和回復輸入的參數或規則。這類似于在發起對話之前向 AI 提供說明。
- 用戶角色(User Role):代表用戶的輸入 - 他們向 AI 提出的問題、命令或陳述。這個角色至關重要,因為它構成了 AI 響應的基礎。
- 助手角色(Assistant Role):AI 對用戶輸入的響應。這不僅僅是一個答案或反應,它對于保持對話的流暢性至關重要。通過跟蹤 AI 之前的響應(其“助手角色”消息),系統可確保連貫且上下文相關的交互。助手消息也可能包含功能工具調用請求信息。它就像 AI 中的一個特殊功能,在需要執行特定功能(例如計算、獲取數據或不僅僅是說話)時使用。
- 工具/功能角色(Tool/Function Role):工具/功能角色專注于響應工具調用助手消息返回附加信息。
?Prompt 類充當有組織的一系列 Message 對象和請求 ChatOptions 的容器。每條消息在提示中都體現了獨特的角色,其內容和意圖各不相同。這些角色可以包含各種元素,從用戶查詢到 AI 生成的響應再到相關背景信息。這種安排可以實現與 AI 模型的復雜而詳細的交互,因為提示是由多條消息構成的,每條消息都被分配了在對話中扮演的特定角色。
比如下面的Demo:
@RequestMapping("/prompt/chat1")public String chat1(String input){UserMessage userMessage = new UserMessage(input);SystemMessage systemMessage = new SystemMessage("你是一個助手,請回答我的問題");Prompt prompt = new Prompt(systemMessage, userMessage);return chatModel.call(prompt).getResult().getOutput().getContent();}
?SystemMessage,UserMessage都代表了不同角色的Message,Prompt可以區分不同的角色消息
Message又有一個消息類型
MessageType是一個枚舉類