在之前的幾篇文章中,我們已經利用 OpenAI API 帶領大家深入探討並實作了基礎聊天機器人的架構。接著,我們將逐步介紹使用 LangChain 的實做方式。
我們將以「如何利用 LangChain 開發一個語言學習助理」為主題,逐一解析 LangChain 的各項功能,以期讓大家更清晰地了解每個功能在實際專案中的應用場景。
我們的專案目標是利用 LangChain 開發一個專門用於語言學習的聊天機器人。這個機器人在使用者首次對話時,會有一個教學內容設定助理來引導使用者選擇學習材料。我們提供兩種教學內容選擇方式:一是使用者可提供 YouTube URL,我們將下載相應的字幕作為教材(這點我們會採用模擬的方式,例如判斷出使用者輸入的 URL 後,固定讀取某個 Youtube 字幕檔來替代);二是使用者可選擇學習主題(例如生活用語、旅行用語、商業用語),我們會從我們的學習資料庫中隨機生成相應主題的例句,然後再用這個例句搜尋我們的學習材料庫。
一旦使用者完成學習內容的設定,我們會將對話控制權交給下一個教學內容生成助理,該助理會引導使用者選擇我們提供的四種學習方法:內容摘要、詞彙學習、例句學習以及相關詞彙延伸學習,然後再依照使用者選擇做學習教材的生成。
好了,以上是我們預計進行的方式的簡單說明。現在讓我們正式進入 LangChain 的詳細介紹。
在開始使用 LangChain 之前,有兩個基本的套件需要安裝。如果您尚未安裝,可以執行以下的 Jupyter Notebook 程式碼區塊來完成安裝。
!pip install openai
!pip install langchain
另外,您需要設定您的 OpenAI API Key。您可以使用以下程式碼將您的 API Key 存儲在 OPENAI_API_KEY
環境變數中。
import os
# 設定環境變數
os.environ['OPENAI_API_KEY'] = "你的 OpenAI API Key"
在今天的範例中,我們將僅用最簡單的程式碼來展示如何使用 LangChain 實作一個基礎的聊天機器人。詳細的 LangChain 程式碼的說明將在後續文章中逐步解釋。
from langchain.llms import OpenAI
# 你也可以直接使用參數設定 api key
#llm = OpenAI(openai_api_key='this_is_your_openai_api_key')
llm = OpenAI()
llm.predict("你好!很高興認識你!")
--- 以下是 LagnChain 的回覆 ---
>> 很高興也認識你!
LangChain 另一個常見的應用是提示訊息的參數化,也就是 LangChain 中的 PromptTemplate
。以下是一個範例:
from langchain.prompts import PromptTemplate
prompt = PromptTemplate.from_template("幫我這個軟體取個名字: {product}")
prompt.format(product="智慧化的語言教材編輯器")
--- 以下是 format 的輸出 ---
>> 幫我這個軟體取個名字: 智慧化的語言教材編輯器
大家可以看到,我們提示訊息透過一個大括弧的語法,即可以定義參數,再加上 from_template
函式的協助,LangChain 就會自動解析我們訊息中的參數名稱,例如上例的 prompt.format
即是我們將參數帶入提示訊息的其中一種方式。
至於要將參數帶入到我們的對話中,你可以使用下方的方式:
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)
chain.run("智慧化的語言教材編輯器")
--- 以下是實際的輸出內容 ---
>> SmartLangEd.
最後,我們將展示如何利用 LangChain 以最簡單的程式碼來實作一個具有記憶功能的聊天機器人。
# 這個是使用預設的 ConversationChain 的方式
from langchain import OpenAI, ConversationChain
llm = OpenAI(temperature=0)
conversation = ConversationChain(llm=llm)
user_input = input('請輸入你的訊息(bye for leave):')
print(f'User: {user_input}')
while user_input != 'bye':
response = conversation.run(user_input)
print(f'ai: {response}')
user_input = input('請輸入你的訊息(bye for leave):')
print(f'User: {user_input}')
以下則是我們與對話機器人的實際對話記錄:
User: 你好
ai: 你好!很高兴见到你!我是一个智能AI,我可以回答你的问题,或者我们可以聊聊天?
User: 請說出我的名字
ai: 很抱歉,我不知道你的名字。但是我可以猜测你的名字,你可以告诉我一些关于你的信息,比如你的国家,你的年龄,你的性别等等,这样我就可以猜测你的名字了!
User: 我叫做小明
ai: 小明,很高兴认识你!我可以给你提供一些有用的信息,比如你最喜欢的运动是什么?或者你最喜欢的电影是什么?
User: 我的名字是?
ai: 你的名字是小明。
希望透過這篇文章,大家能初步感受到 LangChain 可以如何協助我們簡化語言模型應用程式的開發。更多的細節和實作範例將在後續的文章中逐步和大家分享。
本文完整的程式碼可在後方連結找到: D15. LangChain 專案實做 - Hello LangChain.ipynb