大家好,我是學(xué)生大使 Jambo。在上一個(gè)系列中,我們介紹了關(guān)于 Azure OpenAI API 的使用。如果你有跟著教程使用過,那么你應(yīng)該能感覺到僅僅是調(diào)用 API 是非常簡(jiǎn)單的,繁瑣的是如何將 API 與你的應(yīng)用結(jié)合起來。接下來,我將會(huì)介紹一個(gè)名為 LangChain 的庫(kù),它可以幫助你更方便地將 Azure OpenAI 結(jié)合到你的應(yīng)用中。
我也會(huì)將這個(gè)做成一個(gè)系列,最終目標(biāo)是實(shí)現(xiàn)一個(gè)可以根據(jù)資料庫(kù)回答問題的聊天機(jī)器人。
為什么要用 LangChain
許多開發(fā)者希望將像 GPT 這樣的大語(yǔ)言模型整合到他們的應(yīng)用中。而這些應(yīng)用不僅僅是簡(jiǎn)單地將用戶的輸入傳遞給 GPT,然后將 GPT 的輸出返回給用戶。
這些應(yīng)用可能需要根據(jù)特定的資料源來回答問題,因此需要考慮如何存儲(chǔ)和查找資料?;蛘咝枰碛脩舻妮斎?,保存以前的消息記錄并提取重點(diǎn)。如果你希望模型按照特定的格式輸出文本,那么你需要在 prompt(提示)中詳細(xì)描述格式,甚至需要提供示例。這些 prompt 通常是應(yīng)用程序后臺(tái)進(jìn)行管理,用戶往往不會(huì)注意到它們的存在。對(duì)于一些復(fù)雜的應(yīng)用程序,一個(gè)問題可能需要多個(gè)執(zhí)行動(dòng)作。例如聲稱可以自動(dòng)完成指定項(xiàng)目的 AutoGPT,實(shí)際上是根據(jù)目標(biāo)和作者編寫的 prompt 生成所需的動(dòng)作并以JSON格式輸出,然后程序再執(zhí)行相應(yīng)的動(dòng)作。
LangChain 基本上已經(jīng)將這些你可能會(huì)使用到的功能打包好了,只需要規(guī)劃程式邏輯并調(diào)用函數(shù)即可。此外,LangChain 的這些功能與具體使用的模型API無關(guān),不必為不同的語(yǔ)言模型編寫不同的代碼,只需更換 API 即可。
基本用法
在使用 LangChain 之前,建議先了解 Azure OpenAI API 的調(diào)用,否則即使是使用 LangChain,參數(shù)和用法也可能不容易理解。具體可以參考我之前的系列教程:用 Python 調(diào)用 Azure OpenAi API
LangChain 將由文字續(xù)寫(補(bǔ)全)的語(yǔ)言模型稱為 llm ,擁有聊天界面(輸入為聊天記錄)的語(yǔ)言模型稱為聊天模型。接下來我們也會(huì)用 Azure OpenAI API 來進(jìn)行示例。
安裝
因?yàn)?LangChain 在調(diào)用 OpenAI 的 API 時(shí),實(shí)際上會(huì)使用 OpenAI 提供的 SDK,因此我們還需要一并安裝 openai
。
pip install langchain
pip install openai
生成文本
實(shí)例化模型對(duì)象
在使用 API 之前,我們需要先設(shè)置環(huán)境變量。如果你使用的是 OpenAI 原生的接口,就只需要設(shè)置 api_key
;如果是 Azure OpenAI API 則還需要設(shè)置 api_version
和 api_base
,具體的值與使用 openai
庫(kù)調(diào)用 Azure API 一樣,可以參考我之前的教程:用 Python 調(diào)用 Azure OpenAi API
import os
os.environ["OPENAI_API_KEY"] = ""
os.environ["OPENAI_API_VERSION"] = ""
os.environ["OPENAI_API_BASE"] = ""
當(dāng)然,這些值也可以在 terminal 中使用 export
(在 Linux 下)命令設(shè)置,或者在 .env 文件中設(shè)置,然后用 python-dotenv
庫(kù)導(dǎo)入進(jìn)環(huán)境變量。
LangChain 的大語(yǔ)言模型(llm)的類都封裝在 llms
中,我們需要從中導(dǎo)入 AzureOpenAI
類,并設(shè)置相關(guān)的參數(shù)。其中指定模型的參數(shù)名是 deployment_name
,剩下的參數(shù)就是 OpenAI API 的參數(shù)了。事實(shí)上,上面在環(huán)境變量中設(shè)置的 API 信息也可以在這里作為參數(shù)傳入,但考慮到便利性和安全性,仍建議在環(huán)境變量中設(shè)置 API 信息。
要注意的是,prompt 和 stop 參數(shù)并不是在這里傳入的(stop 可以但是會(huì)報(bào)警告),而是在下面生成文本時(shí)傳入。
from langchain.llms import AzureOpenAI
llm = AzureOpenAI(
deployment_name="text-davinci-003",
temperature=0.9,
max_tokens=265,
)
另外,如果你使用的是原生 OpenAI API ,那么導(dǎo)入的類應(yīng)該是 OpenAI
,并且指定模型的參數(shù)名是 model_name
,例如:
from langchain.llms import AzureOpenAI
llm = AzureOpenAI(model_name="text-davinci-003")
序列化 LLM 配置
假如你需要對(duì)多個(gè)場(chǎng)景有不同的 llm 配置,那么將配置寫在代碼中就會(huì)不那么簡(jiǎn)單靈活。在這種情況下,將 llm 配置保存在文件中顯然會(huì)更方便。文章來源:http://www.zghlxwxcb.cn/news/detail-502849.html
from langchain.llms import OpenAI
from langchain.llms.loading import load_llm
LangChain 支持將 llm 配置以 json 或 yaml 的格式讀取或保存。假設(shè)我現(xiàn)在有一個(gè) llm.json
文件,內(nèi)容如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-502849.html
{
"model_name": "text-davinci-003",
"temperature": 0.7,
"max_tokens": 256,
"top_p": 1.0,
"frequency_penalty": 0.0,
"presence_penalty": 0.0,
"n": 1,
"be
到了這里,關(guān)于用 LangChain 構(gòu)建基于資料庫(kù)的問答機(jī)器人(一):基礎(chǔ)用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!