LLM及LangChain開發筆記(12)_聊天模型的PromptTemplate_ChatPromptTemplate
根據指定主題與風格,自動生成一首詩。
import openai import os from dotenv import load_dotenv, find_dotenv _ = load_dotenv(find_dotenv()) # read local .env file openai.api_key = os.getenv('OPENAI_API_KEY') from langchain.chat_models import ChatOpenAI chat = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.0) from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate human_template = HumanMessagePromptTemplate.from_template(""" 請寫首詩,按以下主題與風格: 主題:{theme} 風格:{style} """) chat_prompt = ChatPromptTemplate.from_messages([human_template]) theme = "描述大海的美麗" style = "用唐代的七言詩,共四句,每句七個字" chat_prompt_value = chat_prompt.format_prompt( theme=theme, style = style ) response = chat.invoke(chat_prompt_value.to_messages()) print(response.content)
建立 Prompt 模板(HumanMessage)
- 使用者輸入的 prompt 格式定義。
- 使用 {theme} 和 {style} 變數讓提示更通用化。
把HumanMessagePromptTemplate 封裝進 ChatPromptTemplate,組成一段完整的 prompt 結構。
填入實際主題與風格
- 利用 .format_prompt(...) 將主題與風格填入模板中,產生一組可傳給 GPT 的 PromptValue。
- 呼叫模型生成詩
使用 .to_messages() 轉成 GPT 能理解的對話格式(List[BaseMessage])
呼叫 chat.invoke(...) 向 GPT 輸入詩詞需求
- SystemMessagePromptTemplate 定義 AI 的角色與行為
- HumanMessagePromptTemplate 定義使用者輸入的格式
- AIMessagePromptTemplate 定義模型回應的格式
- ChatPromptTemplate 將以上模板整合為完整對話格式
範例2.SystemMessagePromptTemplate與AIMessagePromptTemplate
範例2-1.
from langchain.prompts.chat import ( SystemMessagePromptTemplate, HumanMessagePromptTemplate, AIMessagePromptTemplate, ChatPromptTemplate ) system_template = SystemMessagePromptTemplate.from_template(""" 你是一個寫詩的助手,創作時採用如下風格: 風格:{style} """) human_template = HumanMessagePromptTemplate.from_template("{input}") ai_template = AIMessagePromptTemplate.from_template("{response} - {sign_off}") # create the list of messages chat_prompt = ChatPromptTemplate.from_messages([ system_template, human_template, ai_template ]) chat_prompt_value = chat_prompt.format_prompt( style = "用唐代的七言詩,共四句,每句七個字", # 詩的創作風格(格式變數) sign_off="作者:李白", # 結尾署名(可能來自 template) input="描述大海的美麗", # 使用者輸入的主題 response="碧波蕩漾海天寬,浩渺無垠盡眼前。\n涛聲如訴韻悠揚,海鷗翱翔舞風翻。" # 模型回應(例如在 few-shot 中做示範) ) print(chat_prompt_value.to_messages())
建立各種訊息模板
- 設定 AI 的角色:你是寫詩助手,會根據給定的 {style} 進行創作。
- 模擬使用者輸入的格式,內容來自 {input}。
- 模擬 AI 回應格式:用 {response} 填入詩句,最後加上署名 {sign_off}。
組成 ChatPromptTemplate
- 將上述三種訊息組合成一個完整對話樣板(System → Human → AI)。
用參數填入 template
- 以實際資料代入前面定義的模板變數,建立一個 chat_prompt_value(內含多則訊息)。
打印 messages 結構
- 這邊將 chat_prompt_value 轉換為可送入 GPT 模型的 messages 結構。
範例2-2.加入新問題&模型回應
在已有範例的基礎上,追加一則新問題,模擬多輪對話。(風格會延續前面定義的詩風)

from langchain.schema import HumanMessage messages = chat_prompt_value.to_messages() messages.append( HumanMessage(content="描述太陽的偉大") ) response = chat(messages) print(response.content)
留言
張貼留言