文章目錄
- 一、 聊天信息提示詞模板
- 1.1 使用關鍵字
- 1.2 使用SystemMessage, HumanMessage, AIMessage來定義消息
- 1.3 使用MessagesPlaceholder 在特定未知添加消息列表
- 二、關鍵類介紹
- 2.1 ChatPromptTemplate 類
- 2.1.1 from_messages()
- 2.1.2 format_messages()
- 2.1.3 format_prompt()
- 2.2 SystemMessage, HumanMessage,AIMessage類
一、 聊天信息提示詞模板
聊天信息提示詞模板(char prompt template)
聊天模型以聊天信息作為輸入,這個聊天消息列表的內容也可以通過提示詞模板進行管理。
這些聊天消息與原始字符不同,因為每個消息都與“角色role”關聯。
列如,在OpenAI的Chat Completion API中,OpenAI的聊天模板,給不同的聊天信息定義了三種角色類型,分別是助手(Assisant)、人類(human)、或系統(System)角色:
- 助手(Assisant)消息指當前消息是AI回答的內容
- 人類(user)消息指的是你發給AI的內容
- 系統(system)消息通常是用來給AI身份進行描述
1.1 使用關鍵字
以下是創建聊天信息模板的例子
這個例子是通過文本描述來定義系統、助手等,關鍵字必須
Use one of 'human', 'user', 'ai', 'assistant', or 'system'
from langchain_ollama import ChatOllama
from langchain_core.prompts import ChatPromptTemplate
llm = ChatOllama(model="deepseek-r1:7b",
)
chat_prompt = ChatPromptTemplate.from_messages([("system", "你是西天取經的人工智能助手,你的名字叫齊天智能"),("human", "你好"),("ai", "您好,我是西天取經的人工智能助手,請問有什么可以幫助您?"),("human", "{user_input}")
])message = chat_prompt.format(user_input="你叫什么")
response = llm.invoke(message)
print(llm.invoke(message).content)
1.2 使用SystemMessage, HumanMessage, AIMessage來定義消息
實際開發中,這個方式多一些,比較清晰
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
from langchain_core.prompts import HumanMessagePromptTemplate
chat_template = ChatPromptTemplate.from_messages([SystemMessage(content=("你是西天取經的人工智能助手,你的名字叫齊天智能")),HumanMessage(content=("你好")),AIMessage(content=("您好,我是西天取經的人工智能助手,請問有什么可以幫助您?")),HumanMessagePromptTemplate.from_template("{text}"),]
)message = chat_template.format_messages(text="你叫什么")
print(message)
print("----------------------")
print(llm.invoke(message).content)
1.3 使用MessagesPlaceholder 在特定未知添加消息列表
這個提示詞模板負責在特定位置添加消息列表。
在前面兩段中,我們看到了如何格式化兩條消息,每條消息都是一個字符串,但是我們希望用戶傳入一個消息列表,我們將其插入到特定位置,該怎么辦?
這里可以使用MessagesPlaceholder的方式
如下代碼,這將會生成兩條消息,第一條是系統消息,第二條是我們傳入的HumanMessage。 如果我們傳入了5條消息,那么總共會生成6條消息(系統消息加上傳入的5條消息)、這對于將一系列消息插入到特定位置非常有用。
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_core.prompts import MessagesPlaceholder, MessagesPlaceholder
prompt_template = ChatPromptTemplate.from_messages([SystemMessage(content=("你是西天取經的人工智能助手,你的名字叫齊天智能")),# 你可以傳入一組消息MessagesPlaceholder("msgs"),HumanMessagePromptTemplate.from_template("{text}"),]
)message = prompt_template.invoke({"msgs":[HumanMessage(content="你好"),AIMessage(content="您好,我是西天取經的人工智能助手,請問有什么可以幫助您?")],"text": "你叫什么"})# print("----------------")
print(llm.invoke(message).content )
二、關鍵類介紹
2.1 ChatPromptTemplate 類
LangChain 中用于構建聊天模型提示的類,它允許用戶通過定義一系列消息模板來生成對話內容。
主要用于:創建聊天模型的輸入提示,這些提示由多個消息組成,每個消息都有一個角色(如系統、用戶或 AI)。它支持動態填充變量,能夠根據輸入參數生成具體的聊天消息列表。
2.1.1 from_messages()
從消息列表創建 ChatPromptTemplate 實例
- 輸入參數為messages: 一個包含消息模板的列表。每個消息模板可以是一個元組(角色,模板字符串),也可以是一個 MessagePromptTemplate 的實例。
2.1.2 format_messages()
根據輸入參數格式化消息模板,生成具體的聊天消息列表。
- 輸入參數為一個字典,包含模板中需要填充的變量及其值。
- 返回值:一個包含具體消息的列表,每個消息都是
SystemMessage
、HumanMessage
或AIMessage
的實例。
2.1.3 format_prompt()
格式化提示模板,返回一個 PromptValue
對象,可以轉換為字符串或消息列表。
**參數:**一個字典,包含模板中需要填充的變量及其值。
prompt_value = chat_template.format_prompt(name="Bob", user_input="What is your name?")
print(prompt_value.to_messages())
2.2 SystemMessage, HumanMessage,AIMessage類
以AIMessage類
為例:
AIMessage
是 LangChain 中的一種消息類型,表示由 AI 模型生成的消息。一般LLM的回答,都是AIMessage
類
記一下以下幾個參數
- content:表示消息的內容,通常是字符串形式的文本。
AIMessage(content="Hello, how can I help you today?")
- role: 指定消息的角色。在 AIMessage 中,role 通常固定為 “assistant”,表示消息是由 AI 助手生成的。
AIMessage(content="Here is the answer.", role="assistant")
- additional_kwargs:Dict格式,用于存儲額外的關鍵字參數,例如工具調用信息。可以用于擴展消息的功能,例如存儲工具調用信息、元數據等。
AIMessage(content="I need to call the weather API.",additional_kwargs={"tool_calls": [{"type": "weather_api", "args": {"location": "Beijing"}}]}
)