iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0

在之前的幾篇文章中,我們已經利用 OpenAI API 帶領大家深入探討並實作了基礎聊天機器人的架構。接著,我們將逐步介紹使用 LangChain 的實做方式。

我們將以「如何利用 LangChain 開發一個語言學習助理」為主題,逐一解析 LangChain 的各項功能,以期讓大家更清晰地了解每個功能在實際專案中的應用場景。

專案目標

https://ithelp.ithome.com.tw/upload/images/20230919/20154415uOFjSt2dKH.png
我們的專案目標是利用 LangChain 開發一個專門用於語言學習的聊天機器人。這個機器人在使用者首次對話時,會有一個教學內容設定助理來引導使用者選擇學習材料。我們提供兩種教學內容選擇方式:一是使用者可提供 YouTube URL,我們將下載相應的字幕作為教材(這點我們會採用模擬的方式,例如判斷出使用者輸入的 URL 後,固定讀取某個 Youtube 字幕檔來替代);二是使用者可選擇學習主題(例如生活用語、旅行用語、商業用語),我們會從我們的學習資料庫中隨機生成相應主題的例句,然後再用這個例句搜尋我們的學習材料庫。

一旦使用者完成學習內容的設定,我們會將對話控制權交給下一個教學內容生成助理,該助理會引導使用者選擇我們提供的四種學習方法:內容摘要、詞彙學習、例句學習以及相關詞彙延伸學習,然後再依照使用者選擇做學習教材的生成。

好了,以上是我們預計進行的方式的簡單說明。現在讓我們正式進入 LangChain 的詳細介紹。

Hello 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.

有記憶功能的 ChatBot

最後,我們將展示如何利用 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


上一篇
[D14] 我的第一個聊天機器人 - 回應訊息功能評估
下一篇
[D16] LangChain 專案實做 - 內容摘要
系列文
以 OpenAI 以及 LangChain 實做我的聊天機器人41
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言