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