每天的專案會同步到 GitLab 上,可以前往 GitLab 查看。
有興趣的朋友歡迎留言 or 來信討論,我的信箱是 nickchen1998@gmail.com。
在 Langchain 當中,我們可以透過 Prompt 來設計我們的對話內容,Prompt 是一個可以讓我們設計對話內容的模板,透過這個模板我們可以設計出各種不同的對話內容。
下面是一個基本的範例
from langchain.prompts import PromptTemplate
# 創建一個 PromptTemplate 實例
template = PromptTemplate(
input_variables=["context", "question"],
template="""
Context: {context}
Question: {question}
Answer:
"""
)
# 使用模板生成 prompt
context = "LangChain 是一個強大的語言模型框架,旨在幫助開發者創建自然語言處理應用程序。它提供了多種工具和資源,讓開發者能夠更輕鬆地構建和部署語言模型。"
question = "LangChain 的主要特點是什麼?"
prompt = template.format(context=context, question=question)
print(prompt)
可以看到這樣我們可以取得一個基本的 prompt,並且這個 prompt 的型態是字串。
接著讓我們接著把他帶入 GPT 當中看看得到的對話:
from env_settings import EnvSettings
from langchain_openai import ChatOpenAI
env_settings = EnvSettings()
llm = ChatOpenAI(
api_key=env_settings.OPENAI_API_KEY,
model_name="gpt-4o"
)
ai_message = llm.invoke(prompt)
print(ai_message.content)
下面就是我們透過把剛剛產生的 prompt 帶入到 GPT 當中取得的結果:
同樣的,langchain 也有提供我們連續對話的模板,我們可以使用 ChatPromptTemplate 來進行連續對話的設計。
from pprint import pprint
from langchain.prompts import ChatPromptTemplate
# 取得對話紀錄
history = [
("human", "今天天氣如何?"),
("ai", "今天天氣晴朗,氣溫 25 度。"),
("human", "{question}")
]
# 創建 ChatPromptTemplate 實例
template = ChatPromptTemplate.from_messages(history)
messages = template.invoke({"question": "我今天該穿什麼?"}).messages
pprint(messages)
在程式碼當中你可以看到,我們利用 {question}
來保留我們的問題擺放的位置,而前面的部份我們則是塞了兩筆甲的對話紀錄給他,這樣我們就可以透過這個模板來進行連續對話的設計。
在使用 invoke 進行調用後,我們可以看到 langchain 幫我們整理出了一個完整的對話內容,並且對話的順序符合我們昨天所提到的 message 型態:
同樣我們再把資料送進去 GPT 看看結果:
from env_settings import EnvSettings
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
# 取得對話紀錄
history = [
("human", "今天天氣如何?"),
("ai", "今天天氣晴朗,氣溫 25 度。"),
("human", "{question}")
]
# 創建 ChatPromptTemplate 實例
template = ChatPromptTemplate.from_messages(history)
messages = template.invoke({"question": "我今天該穿什麼?"}).messages
env_settings = EnvSettings()
llm = ChatOpenAI(
api_key=env_settings.OPENAI_API_KEY,
model_name="gpt-4o"
)
ai_message = llm.invoke(messages)
print(ai_message.content)
下圖中可以看到,GPT 成功讀取到我們的對話紀錄,並且給予我們穿搭的建議:
今天我們介紹了 Prompt Template 以及 Chat Prompt Template,這兩個模板可以幫助我們更有效率的設計對話內容,明天我們將會介紹 function call 的使用,讓語言模型可以更加聰明的選擇需要使用的工具!