LangChain是什么?LangChain是一個(gè)開(kāi)源框架,主要用于提供一些工具、接口幫你快速創(chuàng)建由大語(yǔ)言模型(Large Language Model,即后文的llm)和聊天模型支持的應(yīng)用程序。LangChain本身只是幫忙調(diào)用大模型構(gòu)建特定功能的應(yīng)用,因此大模型還是不可缺少的一步。接下來(lái)將由站長(zhǎng)百科詳細(xì)為大家介紹LangChain入門(mén)及部署。
一、LangChain準(zhǔn)備環(huán)境
1、安裝LangChain相關(guān)Python包
pip install langchain pip install -qU langchain-openai pip install "langserve[all]"
2、準(zhǔn)備LangSmith的API Key(不是必要步驟,但是是免費(fèi)的)
什么是LangSmith:就是一個(gè)可以調(diào)試、測(cè)試、評(píng)估和監(jiān)控基于任何LLM框架構(gòu)建的鏈和智能代理的框架,他能與LangChain無(wú)縫集成。其實(shí)就是用它來(lái)觀察大模型進(jìn)行了哪些調(diào)用,讓你清楚你的大模型內(nèi)部咋工作的。所以其實(shí)這在開(kāi)發(fā)LangChain應(yīng)用中不是必須的。怎么監(jiān)控的?就是你可以進(jìn)入這個(gè)監(jiān)控頁(yè)面,看到你提問(wèn)了什么,大模型回答了什么。
登錄LangChain官網(wǎng),點(diǎn)擊“sign up”登錄,沒(méi)有賬號(hào)就注冊(cè)一個(gè)。
點(diǎn)擊“Tracing Projects”。
點(diǎn)擊要監(jiān)控的項(xiàng)目即可進(jìn)入前面的監(jiān)控畫(huà)面,這兒一個(gè)項(xiàng)目應(yīng)該對(duì)應(yīng)的是一個(gè)LangSmith的API。
如何申請(qǐng)LangSmith的API?
還是這個(gè)界面,點(diǎn)擊“New Project”。
點(diǎn)擊“Generate API Key”。
復(fù)制保存好你的API Key。
怎么使用?就是配置為Python程序的環(huán)境變量。
3、準(zhǔn)備語(yǔ)言模型的API
前文提到開(kāi)發(fā)LangChain應(yīng)用需要一個(gè)大模型,我們通常是調(diào)用其他廠商提供的api,如Openai、Gemini、通義千問(wèn)等。
LangChain官方教程使用的是OpenAI,本文使用OpenAI的中轉(zhuǎn)API進(jìn)行演示。OpenAI的API是收費(fèi)的且訪問(wèn)不方便,通義千問(wèn)等國(guó)內(nèi)廠商的api一般有免費(fèi)額度。
如何獲取OpenAI的API?
- 方法一(推薦):像我一樣,去某寶或某多多買個(gè)中轉(zhuǎn)的api,價(jià)格便宜,幾塊錢(qián)就可以開(kāi)始學(xué)習(xí),搜索關(guān)鍵字是“中轉(zhuǎn)api”。
- 方法二:申請(qǐng)官方的API,要錢(qián)比較麻煩,我沒(méi)申請(qǐng)過(guò),可查看其他博客教程。
4、準(zhǔn)備環(huán)境變量
使用你的IDE創(chuàng)建一個(gè)Python項(xiàng)目
在.py文件(就是你書(shū)寫(xiě)大模型代碼的Python文件,后文無(wú)特殊說(shuō)明使用main.py。同理,如果你使用的是Jupyter NoteBook,就是在.ipynb文件同級(jí)目錄)的同級(jí)目錄下創(chuàng)建一個(gè)全名為.env的文件,這個(gè)文件是用于存放環(huán)境變量的,我們把環(huán)境變量定義在里面,然后py文件可通過(guò)load_dotenv()方法快速加載這些環(huán)境變量,例如我的項(xiàng)目文件結(jié)構(gòu)是這樣的:
在.env文件(全名就是“.env”,不能做任何修改)中書(shū)寫(xiě)定義環(huán)境變量:
- OPENAI_API_KEY:就是你的大模型的API Key,一般是sk開(kāi)頭。
- OPENAI_BASE_URL:指定 OpenAI API 的基礎(chǔ) URL 地址。如果你購(gòu)買的OpenAI的直連API就不需要設(shè)置這個(gè)環(huán)境變量,如果是某寶某多購(gòu)買的中轉(zhuǎn)API則一般會(huì)提供給你一個(gè)中轉(zhuǎn)地址,形為https://api…/v1,這個(gè)時(shí)候就需要設(shè)置OPENAI_BASE_URL為該網(wǎng)站。
- LANGCHAIN_TRACING_V2:設(shè)置為true。
- LANGCHAIN_API_KEY:前文申請(qǐng)到的LangSmith的API,這就是LangSmith的用法。
二、部署LangChain案例
這里給出一個(gè)最簡(jiǎn)單的案例。注意,這個(gè)案例一定是正確的,如果報(bào)錯(cuò)則一定是環(huán)境缺少包或者環(huán)境變量沒(méi)配置等問(wèn)題。
py文件內(nèi)容:
結(jié)合代碼中的注釋我相信你能看懂這個(gè)簡(jiǎn)單案例的功能(調(diào)用大模型,讓他把“今天天氣怎么樣?”這句話翻譯為英文并輸出)。
執(zhí)行結(jié)果(輸出類似,模型成功翻譯):
如果你設(shè)置了LangSmith的API進(jìn)行跟蹤,則還可以查看LangSmith的結(jié)果:
點(diǎn)擊每一行的Name可以查看該跟蹤對(duì)話的詳情:
接下來(lái),后文將以此為案例為基礎(chǔ)進(jìn)行擴(kuò)展,介紹一些更強(qiáng)大的功能。
使用StrOutputParser對(duì)模型結(jié)果進(jìn)行解析
注意前文打印大模型返回結(jié)果的方法:print(model.invoke(messages).content),其中model.invoke(messages)的結(jié)果是一個(gè)AIMessage對(duì)象,該對(duì)象的content值記錄了大模型的輸出結(jié)果。
但其實(shí)LangChain提供了一個(gè)類StrOutputParser專門(mén)解析出這部分內(nèi)容進(jìn)行打印
使用方法:
但其實(shí)AIMessage對(duì)象也有專門(mén)的方法打印模型的輸出:
使用ChatPromptTemplate構(gòu)建輸入消息列表
在簡(jiǎn)單案例中,我們是向模型的invoke方法直接傳入的構(gòu)建的消息列表(即,messages=[…]),這是這種列表無(wú)法從用戶處獲得變量對(duì)消息列表進(jìn)行設(shè)置,故引入ChatPromptTemplate
ChatPromptTemplate能從用戶輸入中獲取變量構(gòu)建Prompt傳給大模型進(jìn)行調(diào)用,其使用方法如下:
這里(“system”, “把下面的語(yǔ)句翻譯為{language}。”)等價(jià)于SystemMessage(content=“把下面的語(yǔ)句翻譯為英文?!?;(“user”, “{text}”)等價(jià)于HumanMessage(content=“今天天氣怎么樣?”)。但是在定義ChatPromptTemplate時(shí)只能使用前者,即下面的方法
打印結(jié)果如下,可以看見(jiàn)同樣構(gòu)建了和簡(jiǎn)單案例一樣的消息隊(duì)列作為Prompt,但是具有了更高的可定制性。
通過(guò)LCEL連接各組件
LECL的全稱是LangChain Expression Language。其實(shí)他的用處就是使用“|”運(yùn)算符鏈接LangChain應(yīng)用的各個(gè)組件,如提示詞模版ChatPromptTemplate、大語(yǔ)言模型ChatOpenAI、輸出解析器StrOutputParser。連接的方法如下:
此時(shí)直接向chain的invoke方法傳入?yún)?shù)即可調(diào)用大模型得到一樣的輸出結(jié)果。
三、使用LangServe把大模型包裝成可供調(diào)用的服務(wù)
LangServe可以把我們的LangChain應(yīng)用包裝為一個(gè)服務(wù)供別人調(diào)用,包裝方法如下:
隨后便可以對(duì)該服務(wù)進(jìn)行訪問(wèn),LangChain提供了一個(gè)網(wǎng)頁(yè)界面實(shí)現(xiàn)對(duì)LangServe服務(wù)的快速訪問(wèn),網(wǎng)頁(yè)地址為http://localhost:8000/chain/playground/,注意端口,path值與代碼一一對(duì)應(yīng)。同樣能得到類似的結(jié)果。
四、使用阿里云免費(fèi)大模型
或者可以使用其他免費(fèi)大模型平臺(tái),例如阿里云的百煉平臺(tái):
阿里云官網(wǎng):點(diǎn)擊直達(dá)
1、進(jìn)入通義千問(wèn)網(wǎng)頁(yè),點(diǎn)擊API服務(wù)。
2、使用阿里云賬號(hào)登錄(沒(méi)有就注冊(cè)一個(gè))后點(diǎn)擊管理控制臺(tái)。
3、右上角點(diǎn)擊API-KEY。
4、點(diǎn)擊創(chuàng)建我的API-KEY,創(chuàng)建好之后點(diǎn)擊查看可以復(fù)制該API-KEY。
6、然后在千問(wèn)代碼中作如下修改:
在.env文件定義環(huán)境變量:DASHSCOPE_API_KEY=“sk-ff817b7f4…”
main.py創(chuàng)建大模型時(shí)使用:llm = Tongyi(),一個(gè)簡(jiǎn)單的演示如下:
————————————————
本文參考:https://blog.csdn.net/qq_62888264/article/details/143222574
-
廣告合作
-
QQ群號(hào):4114653