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