iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0

每天的專案會同步到 GitLab 上,可以前往 GitLab 查看。
有興趣的朋友歡迎留言 or 來信討論,我的信箱是 nickchen1998@gmail.com

本日大綱

  • Prompt Template
  • Chat Prompt Template

Prompt Template

在 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 的型態是字串。
基本 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 當中取得的結果:
基本 prompt 結果

Chat Prompt Template

同樣的,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 型態:

ChatPromptTemplate 截圖

同樣我們再把資料送進去 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 成功讀取到我們的對話紀錄,並且給予我們穿搭的建議:
ChatPromptTemplate 結果

內容預告

今天我們介紹了 Prompt Template 以及 Chat Prompt Template,這兩個模板可以幫助我們更有效率的設計對話內容,明天我們將會介紹 function call 的使用,讓語言模型可以更加聰明的選擇需要使用的工具!


上一篇
Day 03 - 讓語言模型有記憶 - 連續對話
下一篇
Day 05 - Function Call (Tool)
系列文
初探 Langchain 與 LLM:打造簡易問診機器人13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言