如何快速用LangChain打造一個(gè)智能問(wèn)答小客服??jī)H需40行代碼!(含代碼)

我們?cè)撊绾螒?yīng)用LangChain進(jìn)行多種的開發(fā)呢?在寫一些項(xiàng)目的時(shí)候我們經(jīng)常離不開要閱讀一些開源產(chǎn)品的代碼,而這個(gè)智能問(wèn)答小客服就是在LangChain源代碼上進(jìn)行微小改動(dòng)寫出來(lái)的,能夠更加清晰LangChain的結(jié)構(gòu)。一起來(lái)看看吧!希望通過(guò)這個(gè)例子能幫助大家更加理解LangChain。
框架設(shè)計(jì)

組件一覽:
組件類型子類型TextLoader索引組件文本加載器RecursiveCharacterTextSplitter索引組件文本分割器RetrievalQA鏈組件對(duì)話鏈ChatOpenAI模型組件LLMOpenAIEmbeddings模型組件文本嵌入模型Chroma索引組件VectorStores
準(zhǔn)備工作
安裝依賴
設(shè)置密鑰
導(dǎo)入庫(kù)和TXT加載器
開始編碼
加載文本數(shù)據(jù)
使用TextLoader加載名為qa.txt的文本文件,并將其存儲(chǔ)在data變量中。
分割文本
使用RecursiveCharacterTextSplitter將文本數(shù)據(jù)分割成多個(gè)片段,存儲(chǔ)在all_splits變量中。
chunk_size
是將這個(gè)長(zhǎng)字符串按照設(shè)置的字符數(shù)拆分。
chunk_overlap
參數(shù)用于指定文本切分時(shí)的重疊量(overlap),表示每個(gè)分塊的前后兩個(gè)分塊之間會(huì)有多少個(gè)字符是重復(fù)的。這樣做的目的是避免關(guān)鍵信息被切分。
創(chuàng)建向量?jī)?chǔ)存器
創(chuàng)建一個(gè)Chroma向量存儲(chǔ)器,并使用OpenAIEmbeddings作為嵌入器,將分割后的文本片段作為輸入,存儲(chǔ)在vectorstore變量中。
用戶輸入循環(huán)
進(jìn)入一個(gè)無(wú)限循環(huán),提示用戶輸入問(wèn)題。
創(chuàng)建問(wèn)答鏈
創(chuàng)建一個(gè)ChatOpenAI實(shí)例,使用"GPT-3.5-turbo"模型和溫度值為0。然后,使用RetrievalQA.from_chain_type方法,將ChatOpenAI實(shí)例和vectorstore作為檢索器,創(chuàng)建一個(gè)問(wèn)答鏈。
獲取并打印回答
將用戶輸入的問(wèn)題作為查詢傳遞給問(wèn)答鏈,并將結(jié)果存儲(chǔ)在ret變量中。然后,打印出回答結(jié)果。
運(yùn)行主函數(shù)
如果當(dāng)前文件被直接執(zhí)行(而不是被導(dǎo)入為模塊),則調(diào)用run()函數(shù)。
qa.txt
內(nèi)容
問(wèn)題:扎染圍巾的活動(dòng)時(shí)長(zhǎng)是多少?
答案:扎染圍巾的活動(dòng)時(shí)長(zhǎng)是1.5—2小時(shí)。
問(wèn)題:扎染圍巾的價(jià)格是多少元一位?
答案:扎染圍巾的價(jià)格是120元/人。
問(wèn)題:制作土耳其水拓畫的活動(dòng)時(shí)長(zhǎng)是多少?
答案:制作土耳其水拓畫的活動(dòng)時(shí)長(zhǎng)是1.5—2小時(shí)。
問(wèn)題:制作土耳其水拓畫的價(jià)格是多少元一位?
答案:制作土耳其水拓畫的價(jià)格是100元/人。
問(wèn)題:北京絹人(標(biāo)準(zhǔn)版)的制作價(jià)格是多少元一位?
答案:北京絹人(標(biāo)準(zhǔn)版)的制作價(jià)格是150元/人。
問(wèn)題:北京絹人(唐人坊精裝版)的制作價(jià)格是多少元一位?
答案:北京絹人(唐人坊精裝版)的制作價(jià)格是200元/人。
問(wèn)題:捕夢(mèng)網(wǎng)的制作活動(dòng)時(shí)長(zhǎng)是多少?
答案:捕夢(mèng)網(wǎng)的制作活動(dòng)時(shí)長(zhǎng)是1—1.5小時(shí)。
問(wèn)題:捕夢(mèng)網(wǎng)的制作價(jià)格是多少元一位?
答案:捕夢(mèng)網(wǎng)的制作價(jià)格是130元/人。
問(wèn)題:馬卡龍塑料框的光影紙雕燈制作價(jià)格是多少元一位?
答案:馬卡龍塑料框的光影紙雕燈制作價(jià)格是160元/人。
問(wèn)題:木框的光影紙雕燈制作價(jià)格是多少元一位?
答案:木框的光影紙雕燈制作價(jià)格是180元/人。
問(wèn)題:弦絲畫制作的活動(dòng)時(shí)長(zhǎng)是多少?
答案:弦絲畫制作活動(dòng)時(shí)長(zhǎng)是2—3小時(shí)。
問(wèn)題:用弦絲畫制作福字是多少元一位?
答案:用弦絲畫制作福字、旺字等單字款價(jià)格120元/人。
問(wèn)題:用弦絲畫制作旺字是多少元一位?
答案:用弦絲畫制作福字、旺字等單字款價(jià)格120元/人。
問(wèn)題:用弦絲畫制作喜字是多少元一位?
答案:用弦絲畫制作福字、旺字等單字款價(jià)格120元/人,其他圖案款請(qǐng)咨詢?cè)斦劇?/p>
問(wèn)題:端午節(jié)香囊的制作價(jià)格是多少元一位?
答案:端午節(jié)香囊價(jià)格100元/人。
問(wèn)題:中秋節(jié)月餅的制作價(jià)格是多少元一位?
答案:中秋節(jié)月餅價(jià)格120元/人。
執(zhí)行結(jié)果演示
(可以換種問(wèn)法嘗試,我把“活動(dòng)時(shí)長(zhǎng)”改為“時(shí)間”嘗試了一下)

報(bào)錯(cuò)與解決
在運(yùn)行代碼中遇到過(guò)兩種問(wèn)題:
報(bào)錯(cuò)1:Number of requested results 4 is greater than number of elements in index 1, updating n_results = 1
解決辦法:增加txt文本的長(zhǎng)度或減少切割長(zhǎng)度

報(bào)錯(cuò)2:(無(wú)關(guān)緊要,可以忽略)python3.10/site-packages/sklearn/svm/_classes.py:32: FutureWarning: The default value of dual
will change from True
to 'auto'
in 1.5. Set the value of dual
explicitly to suppress the warning.
?warnings.warn(
解決辦法:加入代碼
import warnings
warnings.filterwarnings('ignore', category=FutureWarning)

完整代碼
完整代碼在githhub搜qq31682216/chatgpt_all,第一個(gè)項(xiàng)目便是。
小結(jié)
以上就是我在配置并使用用LangChain打造一個(gè)源代碼智能問(wèn)答小客服分享,希望可以幫到各位!歡迎關(guān)注或發(fā)私信與我共同討論更多大模型領(lǐng)域知識(shí)~