iT邦幫忙

2024 iThome 鐵人賽

DAY 2
0

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

本日大綱

  • 串接 GPT API
  • 常用 message 介紹

串接 GPT API

接下來就讓我們快速使用 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)

執行結果:

執行結果

常用 message 介紹

眼尖的朋友可能會發現,在前一個部分我們在印出 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 類型。明天我們將會介紹如何進行連續問答,讓語言模型擁有記憶力。


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

尚未有邦友留言

立即登入留言