如今,ChatGPT 已經(jīng)成為家喻戶曉的名字,每個(gè)開發(fā)者都主動(dòng)或被動(dòng)地使用過 ChatGPT 或者是基于 ChatGPT 的產(chǎn)品。ChatGPT 很好,但是應(yīng)用到實(shí)際工作與生活場(chǎng)景,ChatGPT 經(jīng)常會(huì)出現(xiàn)一些幻覺,“一本正經(jīng)”地為我們提供一些錯(cuò)誤答案,沒有辦法為我們提供專業(yè)的意見或指導(dǎo)。那我們?nèi)绾巫?ChatGPT 具備某個(gè)專業(yè)領(lǐng)域的知識(shí),提升回答的正確率,從而讓 ChatGPT 真的用起來?比如訓(xùn)練 ChatGPT 成為企業(yè)的智能客服助手,解放客服的雙手。
如何構(gòu)建一個(gè)具有專業(yè)知識(shí)的機(jī)器人
為了解決這個(gè)問題,一般我們有兩種解決方法。第一種是利用自己的數(shù)據(jù)在大模型的基礎(chǔ)上進(jìn)行 fine-tune(微調(diào)),訓(xùn)練出一個(gè)具備相關(guān)領(lǐng)域的知識(shí)的大模型,另一種方法稱作 RAG (Retrieval-Augmented Generation),檢索增強(qiáng)生成,利用向量數(shù)據(jù)庫(kù)的能力,將專業(yè)的知識(shí)數(shù)據(jù)轉(zhuǎn)換成多個(gè)向量,然后再利用大模型的能力進(jìn)行檢索,最后回答問題。兩種方法各有自己的優(yōu)勢(shì)和劣勢(shì),總體來說,盡管 RAG 的準(zhǔn)確度不如 fine-tune 高,但是 RAG 的性能比更適合普羅大眾,因?yàn)?RAG 更簡(jiǎn)化,更高效。RAG 的優(yōu)勢(shì)有以下幾點(diǎn):
相較于微調(diào)大模型需要 GPU 算力等硬件設(shè)備支持,RAG 只需要在軟件層面添加向量數(shù)據(jù)庫(kù),操作起來更加簡(jiǎn)單,成本也更低。
當(dāng)有數(shù)據(jù)更新時(shí),RAG 允許開發(fā)者通過添加新的 embedding 以保證內(nèi)容的時(shí)效性,但是微調(diào)大模型則需要反復(fù)重新訓(xùn)練模型,耗費(fèi)資源比較多
fine-tune | RAG | |
---|---|---|
是否需要 GPU 資源 | 是 | 否 |
開發(fā)周期 | 長(zhǎng) | 短 |
更新/刪除知識(shí) | 需要重新訓(xùn)練 | 更新 embedding |
適合場(chǎng)景 | 賦予大模型某種能力 | 賦予大模型某種知識(shí) |
結(jié)果準(zhǔn)確度 | 高于 RAG | 低于 fine-tune |
如何使用 Rust 創(chuàng)建一個(gè)基于 ChatGPT 的 RAG 助手
常見的構(gòu)建 RAG 助手的工具是以 Python 為主的 langchain,但是如何使用 Rust 來構(gòu)建呢?這就需要我們有一套圍繞 Rust 語(yǔ)言打造的 LLM 工具鏈。flows.network 就是這樣一個(gè)專門為 Rust 開發(fā)者打造的構(gòu)建 LLM Agent 的平臺(tái)。和 langchain 一樣,flows.network 為 Rust 開發(fā)者包裝了常用的 LLM 工具庫(kù),比如 ChatGPT 、Claude、Llama2 以及我們常用的 SaaS 工具 GitHub 、Discord、Telegram、Slack。但是更進(jìn)一步的是,flows.network 是一個(gè) serverless Rust 平臺(tái),開發(fā)者只需構(gòu)建業(yè)務(wù)邏輯,編譯以及部署 Rust 函數(shù)都由平臺(tái)完成。
具體到構(gòu)建基于 ChatGPT 的 RAG 助手,flows.network 已經(jīng)開源了一套開箱即用的框架供 Rust 開發(fā)者使用。最近新發(fā)布 Learn Rust 助手就是基于這套框架所實(shí)現(xiàn)的。
為了方便大家理解基于 ChatGPT 的 RAG 助手,我在這里補(bǔ)充了一張?jiān)?Learn Rust 助手詢問問題的流程圖。從用戶問一個(gè)問題開始,Agent 就要和向量數(shù)據(jù)庫(kù)和 LLM 打交道,為沒有記憶的大模型補(bǔ)充手腳、眼睛和記憶。
下面我們來詳細(xì)看看怎么使用 Rust 構(gòu)建 RAG 助手。開源的代碼分為兩部分,一部分是利用向量數(shù)據(jù)庫(kù)創(chuàng)建 embedding,另一部分是把加好 embedding 的向量數(shù)據(jù)庫(kù)與我們常用的工具結(jié)合起來。這兩部分代碼都是完全用 Rust 編寫的。
這篇文章主要聚焦如何搭建 RAG 知識(shí)庫(kù)助手,不會(huì)對(duì)代碼進(jìn)行詳細(xì)解釋。對(duì)源代碼感興趣的朋友,敬請(qǐng)期待我們下一篇文章。
首先先來看第一部分在向量數(shù)據(jù)庫(kù)中創(chuàng)建 embedding。
在創(chuàng)建 embedding 的這個(gè) demo repo 我們需要做三件事:
fork 這個(gè) repo,把文件 text1.txt 里的內(nèi)容換成自己的內(nèi)容。這里要注意 embedding 的方法,要把相似的內(nèi)容放在一個(gè) embedding 里,每個(gè)空行代表一個(gè) embedding。你也可以直接在本地存儲(chǔ)自己的 embedding。
將 RAG-embedding repo 的代碼部署在 flows.network 上,得到一個(gè)可以訪問向量數(shù)據(jù)庫(kù)的 webhook。
在這個(gè) webhook 中添加 embedding 的內(nèi)容以及命名 collection。
第一步是主要是開發(fā)者自己的工作,你可以選擇手動(dòng)分段,也可以選擇使用算法進(jìn)行分段。
第二步需要用到 flows.network, 簡(jiǎn)單來說,我們需要把包含源代碼的 repo 導(dǎo)入到 flows.network 平臺(tái),并且添加 OpenAI 的 API key。因?yàn)榘?text 轉(zhuǎn)換成 embedding 的工作是調(diào)用 OpenAI 的 embedding API 完成的。部署完成后,我們會(huì)在頁(yè)面看到一個(gè) webhook 鏈接。這個(gè) webhook 鏈接需要保存下來,因?yàn)榻酉聛砦覀儗⑼ㄟ^這個(gè) wbhook 添加 embedding 的內(nèi)容。
//webhook示例 https://code.flows.network/webhook/I9GNgD5HKhFLY25DsOUI
第三步是用 curl 為這個(gè)向量數(shù)據(jù)庫(kù)添加 embedding 內(nèi)容。打開終端命令行工具,輸入下面的命令行。
//獲取源代碼及準(zhǔn)備好的txt文件 gitclonehttps://github.com/alabulei1/demo-RAG-embeddings.git cddemo-RAG-embeddings //上傳創(chuàng)建好的 embedding 文件。 //Webhook鏈接要替換成在flows.network生成的鏈接 //collection_name可以隨意替換,要記住這個(gè)名字,后面需要用到 //"@test1.txt"根據(jù)實(shí)際情況替換即可 curl"https://code.flows.network/webhook/I9GNgD5HKhFLY25DsOUI?collection_name=laokeshi&vector_size=1536&reset=1"-XPOST--data-binary"@test1.txt" //添加成功后,終端會(huì)提示總共創(chuàng)建了多少個(gè)embedding Successfullyinserted7records.Thecollectionnowhas7recordsintotal
看到終端輸出如上的命令行,就意味著我們的 embedding 已經(jīng)創(chuàng)建好了。
下面的視頻展示了如何在 flows.network 上部署這個(gè)創(chuàng)建 embedding 的 repo,并且在得到webhook 鏈接后,如何把 embedding 添加到向量數(shù)據(jù)庫(kù)。
接下來就可以將這些 embedding 與其他 SaaS 工具自由組裝。這時(shí)候就用到我們的第二個(gè) demo repo:使用這些 embedding 創(chuàng)建一個(gè) discord 機(jī)器人(Agent),讓用戶能夠在 Discord 直接咨詢相關(guān)問題。
同樣,我們需要將 RAG-discord-bot demo repo 導(dǎo)入到 flows.network 進(jìn)行部署。我們需要配置五個(gè)環(huán)境變量。discod_token 和 bot_id 是設(shè)置 Discord 機(jī)器人的。這兩個(gè)參數(shù)在 Discord 的開發(fā)者中心獲取。
還有一個(gè) collection_name ,這里要填入我們?cè)谏弦徊絼?chuàng)建 embedding 的是所設(shè)置的 collection_name 的值, 讓 Discord agent 知道去找哪個(gè)數(shù)據(jù)庫(kù)檢索相關(guān)內(nèi)容。
另外兩個(gè)是 Agent 本身的信息。error-mesg 是發(fā)生錯(cuò)誤時(shí),給用戶的錯(cuò)誤提示信息,system_promopt 是 agent 總的 Prompt,給 ChatGPT 規(guī)劃任務(wù)。
同樣,下面有一個(gè)視頻展示了如何在 flows.network 上導(dǎo)入 github repo,創(chuàng)建這個(gè) Discord 機(jī)器人。
當(dāng) flow 的狀態(tài)變成 ready 后,就可以去 server 里找剛剛創(chuàng)建的 Discord 機(jī)器人,讓這個(gè) Discord 機(jī)器人回答問題。注意,這時(shí)的 Discord 機(jī)器人應(yīng)該是 online 的狀態(tài),如果 Discord 機(jī)器人是 offline 的狀態(tài),請(qǐng)檢查 Discord 機(jī)器人是否設(shè)置正確。
這就是使用 Rust 創(chuàng)建一個(gè)基于 ChatGPT 的 RAG 助手的全部過程。當(dāng)然你也可以把 ChatGPT 換成其他的大模型,比如 Llama2。
使用 Rust 構(gòu)建 LLM Agent 并沒有那么難!如果你正在發(fā)愁不知道怎么把 Rust 用起來,來試試構(gòu)建這個(gè) RAG Agent 吧。你可以構(gòu)建企業(yè)手冊(cè)助手、開發(fā)手冊(cè)助手、開源項(xiàng)目助手等等。
下一篇文章,我們將詳細(xì)解讀這個(gè) RAG 助手的 Rust 源代碼,幫助大家更好地理解這背后的原理。敬請(qǐng)期待!
審核編輯:湯梓紅
-
機(jī)器人
+關(guān)注
關(guān)注
210文章
28102瀏覽量
205843 -
gpu
+關(guān)注
關(guān)注
28文章
4673瀏覽量
128564 -
python
+關(guān)注
關(guān)注
55文章
4767瀏覽量
84375 -
Rust
+關(guān)注
關(guān)注
1文章
228瀏覽量
6542 -
ChatGPT
+關(guān)注
關(guān)注
29文章
1546瀏覽量
7353
原文標(biāo)題:手把手教你用 Rust 實(shí)現(xiàn)一個(gè)基于 ChatGPT 的 RAG 助手
文章出處:【微信號(hào):Rust語(yǔ)言中文社區(qū),微信公眾號(hào):Rust語(yǔ)言中文社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論