基于本地知識(shí)的問(wèn)答機(jī)器人langchain-ChatGLM 大語(yǔ)言模型實(shí)現(xiàn)方法詳解
背景
ChatGPT火了后,各種大語(yǔ)言模型(LLM)模型相繼被發(fā)布,完全開(kāi)源的有ChatGLM、BLOOM、LLaMA等。但是這些模型學(xué)到的知識(shí)是滯后的(比如ChatGPT的知識(shí)是截止到2021年),并且這些知識(shí)是通用領(lǐng)域的。
在實(shí)際應(yīng)用場(chǎng)景中,除閑聊機(jī)器人外,大多數(shù)機(jī)器人是為了完成特定任務(wù)的。比如數(shù)字人虛擬主播、某公司的智能客服等都需要圍繞具體的業(yè)務(wù)來(lái)進(jìn)行問(wèn)答。如何將具體業(yè)務(wù)知識(shí)融合到大語(yǔ)言模型里,是問(wèn)答機(jī)器人落地應(yīng)用需要考慮的一個(gè)重要問(wèn)題。
一、langchain-ChatGLM簡(jiǎn)介
langchain-ChatGLM是一個(gè)基于本地知識(shí)的問(wèn)答機(jī)器人,使用者可以自由配置本地知識(shí),用戶(hù)問(wèn)題的答案也是基于本地知識(shí)生成的。github鏈接為:GitHub - imClumsyPanda/langchain-ChatGLM: langchain-ChatGLM, local knowledge based ChatGLM with langchain | 基于本地知識(shí)的 ChatGLM 問(wèn)答。
二、以淘寶衣服為例,測(cè)試問(wèn)答效果
以淘寶衣服屬性構(gòu)建本地知識(shí),測(cè)試問(wèn)答效果。將淘寶鏈接為https://detail.tmall.com/item.htm?abbucket=6&id=656544342321&ns=1&spm=a230r.1.14.48.b3f84f64A9YLJ0的"寶貝詳情"和"尺碼推薦"整理成《local_knowledge_clothing_describe.txt》,內(nèi)容如下:
身高:160-170cm, 體重:90-115斤,建議尺碼M。 身高:165-175cm, 體重:115-135斤,建議尺碼L。 身高:170-178cm, 體重:130-150斤,建議尺碼XL。 身高:175-182cm, 體重:145-165斤,建議尺碼2XL。 身高:178-185cm, 體重:160-180斤,建議尺碼3XL。 身高:180-190cm, 體重:180-210斤,建議尺碼4XL。 身高:180-195cm, 體重:210-230斤,建議尺碼5XL。 面料分類(lèi):滌綸 圖案:幾何圖案 領(lǐng)型:連帽 衣門(mén)襟:拉鏈 顏色:黑色302春秋款(斜插口袋) 深灰色302春秋款(斜插口袋) 藍(lán)色302春秋款(斜插口袋) 米色302春秋款(斜插口袋) 黑色303春秋款(工裝口袋) 深灰色303春秋款(工裝口袋) 藍(lán)色303春秋款(工裝口袋) 黑色303(冬季棉衣款加棉加厚) 深灰色303(冬季棉衣款加棉加厚) 藍(lán)色303(冬季棉衣款加棉加厚) 黑色302(冬季棉衣款加棉加厚) 米色302(冬季棉衣款加棉加厚) 黑色303春秋款+黑色302春秋款 深灰色303春秋款+黑色302春秋款 袖型:收口袖 適用季節(jié):春秋 袖長(zhǎng):長(zhǎng)袖 厚?。撼R?guī) 適用場(chǎng)景:其他休閑 衣長(zhǎng):常規(guī)款 版型:寬松型 款式細(xì)節(jié):假兩件 工藝處理:涂層 適用對(duì)象:青少年 面料功能:防風(fēng) 穿搭方式:外穿 材質(zhì)成分:聚酯纖維100%
加載《local_knowledge_clothing_describe.txt》作為本地知識(shí),問(wèn)答效果如下所示:
用戶(hù):身高173,體重144斤,選什么尺寸客服: 您的身高為173厘米,體重為144斤,建議選擇尺碼為XL。這個(gè)尺寸適用于身高在170-178厘米之間,體重在130-150斤之間的人。選擇XL尺寸可以確保衣服能夠合適地遮蓋住身體,同時(shí)不會(huì)過(guò)小或過(guò)大,確保穿著舒適。用戶(hù):衣服是什么材質(zhì)客服: 衣服的材質(zhì)成分為聚酯纖維100%
從測(cè)試的問(wèn)答效果上來(lái)看,滿(mǎn)足了基本的要求,具體情況仍需要更多的實(shí)測(cè)結(jié)果來(lái)說(shuō)明。
三、langchain-ChatGLM的原理
先上圖,langchain-ChatGLM的架構(gòu)如下圖所示:

圖1、langchain-ChatGLM的架構(gòu)
3.1、從本地知識(shí)中獲取與用戶(hù)query相關(guān)的context
通過(guò)Faiss搜索得到與query_embedding關(guān)系最緊密的Top K個(gè)Document,將這些Document的內(nèi)容按換行符拼起來(lái)作為query的context。舉例說(shuō)明如下圖所示:

圖2、通過(guò)Faiss搜索得到query相關(guān)的context
3.2、用query和context填充模版得到prompt
模版示例如下,可根據(jù)問(wèn)答效果自行修改
prompt_template = """基于以下已知信息,簡(jiǎn)潔和專(zhuān)業(yè)的來(lái)回答用戶(hù)的問(wèn)題。不允許在答案中添加編造成分。
已知內(nèi)容:
{context}
問(wèn)題:
{query}"""將context和query填充到模版得到的prompt,加它輸入給ChatGLM-6B就能生成response。
四、langchain-ChatGLM使用中
五、問(wèn)答需要優(yōu)化的環(huán)節(jié)
個(gè)人認(rèn)為langchain-ChatGLM是一種使用本地知識(shí)進(jìn)行問(wèn)答的框架,它的實(shí)際問(wèn)答效果與下面兩個(gè)問(wèn)題相關(guān):
1、如何通過(guò)得到query相關(guān)性高的context,即與query相關(guān)的Document盡可能多的能被召回;
2、如何讓LLM基于query和context得到高質(zhì)量的response。
5.1、讓query相關(guān)的Document盡可能多的被召回
將本地知識(shí)切分成Document的時(shí)候,需要考慮Document的長(zhǎng)度、Document embedding質(zhì)量和被召回Document數(shù)量這三者之間的相互影響。在文本切分算法還沒(méi)那么智能的情況下,本地知識(shí)的內(nèi)容最好是已經(jīng)結(jié)構(gòu)化比較好了,各個(gè)段落之間語(yǔ)義關(guān)聯(lián)沒(méi)那么強(qiáng)。Document較短的情況下,得到的Document embedding的質(zhì)量可能會(huì)高一些,通過(guò)Faiss得到的Document與query相關(guān)度會(huì)高一些。
使用Faiss做搜索,前提條件是有高質(zhì)量的文本向量化工具。因此最好是能基于本地知識(shí)對(duì)文本向量化工具進(jìn)行Finetune。另外也可以考慮將ES搜索結(jié)果與Faiss結(jié)果相結(jié)合。
5.2、基于query和context讓LLM得到高質(zhì)量的response
有了query相關(guān)的context后,如何讓LLM生成高質(zhì)量的response,也是一個(gè)非常重要的問(wèn)題。優(yōu)化的點(diǎn)有兩個(gè):①、嘗試多個(gè)的prompt模版,選擇一個(gè)合適的,但是這個(gè)可能有點(diǎn)玄學(xué);②、用與本地知識(shí)問(wèn)答相關(guān)的語(yǔ)料,對(duì)LLM進(jìn)行Finetune。
補(bǔ)充:ChatGML模型對(duì)于硬件的要求比較高,內(nèi)存需要32G以上,半精度的 ChatGLM2-6B 模型需要大概 13GB 內(nèi)存。
查看專(zhuān)屬GPU內(nèi)存:因?yàn)镃hatGLM2內(nèi)存要求6GB以上才可以發(fā)揮出性能要求。
下表為ChatGLM2-2B的根據(jù)顯存大小決定的問(wèn)答性能。
| 量化等級(jí) | 最低 GPU 顯存(推理) | 最低 GPU 顯存(高效參數(shù)微調(diào)) |
|---|---|---|
| FP16(無(wú)量化) | 13 GB | 14 GB |
| INT8 | 8 GB | 9 GB |
| INT4 | 6 GB | 7 GB |
- linux環(huán)境部署清華大學(xué)大模型最新版 chatglm2-6b 圖文教程
- macbook安裝環(huán)境chatglm2-6b的詳細(xì)過(guò)程
- ChatGLM-6B+LangChain環(huán)境部署與使用實(shí)戰(zhàn)
- ChatGPT平替-?ChatGLM多用戶(hù)并行訪問(wèn)部署過(guò)程
- ChatGPT平替-ChatGLM環(huán)境搭建與部署運(yùn)行效果
- ChatGLM?集成LangChain工具詳解
- 基于prompt?tuning?v2訓(xùn)練好一個(gè)垂直領(lǐng)域的chatglm-6b
- 最簡(jiǎn)化ChatGLM2-6b小白部署教程【windows系統(tǒng),16G內(nèi)存即可,對(duì)顯卡無(wú)要求,CPU運(yùn)行】
相關(guān)文章
python基礎(chǔ)之定義類(lèi)和對(duì)象詳解
這篇文章主要為大家詳細(xì)介紹了python的定義類(lèi)和對(duì)象,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02
Python?tkinter中l(wèi)abel控件動(dòng)態(tài)改變值問(wèn)題
這篇文章主要介紹了Python?tkinter中l(wèi)abel控件動(dòng)態(tài)改變值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
Python管理Word文檔屬性與統(tǒng)計(jì)信息完整指南
在日常辦公自動(dòng)化場(chǎng)景中,為?Word?文檔添加元數(shù)據(jù)信息是提升文檔管理效率的重要手段,本文將介紹如何使用?Python?實(shí)現(xiàn)?Word?文檔的屬性管理和信息統(tǒng)計(jì)功能,感興趣的小伙伴可以了解下2026-04-04
Python調(diào)用Prometheus監(jiān)控?cái)?shù)據(jù)并計(jì)算
Prometheus是一套開(kāi)源監(jiān)控系統(tǒng)和告警為一體,由go語(yǔ)言(golang)開(kāi)發(fā),是監(jiān)控+報(bào)警+時(shí)間序列數(shù)據(jù)庫(kù)的組合。本文將介紹Python如何調(diào)用Prometheus實(shí)現(xiàn)數(shù)據(jù)的監(jiān)控與計(jì)算,需要的可以參考一下2021-12-12

