LLM及LangChain開發筆記(12)_聊天模型的PromptTemplate_ChatPromptTemplate

 
https://livebook.manning.com/book/langchain-in-action/chapter-1/v-3/49



範例1.HumanMessagePromptTemplate
根據指定主題與風格,自動生成一首詩。
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)









留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

(2021年度)駕訓學科筆試準備題庫歸納分析_法規是非題

Crystal Report報表開發(二)_基礎操作排版對齊_基本組成部分介紹