每天的專案會同步到 GitLab 上,可以前往 GitLab 查看。
有興趣的朋友歡迎留言 or 來信討論,我的信箱是 nickchen1998@gmail.com。
接下來就讓我們快速使用 langchain 串接 GPT API,首先我們需要確定安裝這兩個套件
poetry add langchain
poetry add langchain-openai
接著看一下下方的這段程式碼:
你會發現,透過 Langchain 的 ChatOpenAI
類別,我們可以很輕鬆的串接 GPT API,只需要提供 API Key 和 Model Name 就可以了。
在程式碼的最後,我們透過 invoke 來進行對話,並且印出回應的內容。
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"
)
print(llm.invoke("你好,請簡短告訴我你可以為我提供什麼服務?").content)
執行結果:
眼尖的朋友可能會發現,在前一個部分我們在印出 GPT 回應的內容,是直接印出 content
的屬性。這個段落我們就要來介紹在 langchain 中常用的 message 類型。
在 langchain 中,我們有以下幾種常用的 message 類型:
類型 | 說明 |
---|---|
SystemMessage | 常用於給予語言模型一些設定提示,例如:角色、語言等。 |
HumanMessage | 為使用者給予語言模型的內容,通常會用來存放使用者的提問。 |
AIMessage | 為語言模型回傳的訊息。 |
ToolMessage | 當今天語言模型判斷需要使用到一些額外的工具,這個類型通常會存放呼叫工具後產出的訊息。 |
一般來說,Message 的種類順序如下:
SystemMessage -> HumanMessage -> AIMessage
SystemMessage 通常會在對話開始時被使用,在整個對話流程當中也只允許出現一次,而 HumanMessage 和 AIMessage 則會在對話中不斷的被使用。並且
都是以先 HumanMessage 再 AIMessage 這樣的順序一個接一個出現,不能有兩個 HumanMessage 或是兩個 AIMessage 的情況。至於 ToolMessage
的部分則是通常會出現在 AIMessage 之後 HumanMessage 之前,並且可以出現許多次。
下方程式碼可以看到我們透過 SystemMessage 設定了語言模型的角色,並且嘗試問他可以用設定以外的語言回答問題,會得到否定的結果。
from env_settings import EnvSettings
from langchain_openai import ChatOpenAI
from langchain_core.messages import SystemMessage, HumanMessage
env_settings = EnvSettings()
llm = ChatOpenAI(
api_key=env_settings.OPENAI_API_KEY,
model_name="gpt-4o"
)
ai_message = llm.invoke([
SystemMessage(content="你是一個繁體中文機器人,會理解使用者的提問並使用繁體中文回答。"),
HumanMessage(content="你好,請問你可以用英文回答我的問題嗎?"),
])
print(ai_message.content)
執行結果:
今天我們介紹了該如何使用 langchain 串接 GPT API,並且介紹了 langchain 中常用的 message 類型。明天我們將會介紹如何進行連續問答,讓語言模型擁有記憶力。