0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Rust創(chuàng)建一個基于ChatGPT的RAG助手

jf_wN0SrCdH ? 來源: Second State ? 2023-10-24 17:34 ? 次閱讀

如今,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 的準確度不如 fine-tune 高,但是 RAG 的性能比更適合普羅大眾,因為 RAG 更簡化,更高效。RAG 的優(yōu)勢有以下幾點:

相較于微調(diào)大模型需要 GPU 算力等硬件設(shè)備支持,RAG 只需要在軟件層面添加向量數(shù)據(jù)庫,操作起來更加簡單,成本也更低。

當有數(shù)據(jù)更新時,RAG 允許開發(fā)者通過添加新的 embedding 以保證內(nèi)容的時效性,但是微調(diào)大模型則需要反復(fù)重新訓(xùn)練模型,耗費資源比較多

fine-tune RAG
是否需要 GPU 資源
開發(fā)周期
更新/刪除知識 需要重新訓(xùn)練 更新 embedding
適合場景 賦予大模型某種能力 賦予大模型某種知識
結(jié)果準確度 高于 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)的。

59405d16-7245-11ee-939d-92fbcf53809c.jpg

為了方便大家理解基于 ChatGPT 的 RAG 助手,我在這里補充了一張在 Learn Rust 助手詢問問題的流程圖。從用戶問一個問題開始,Agent 就要和向量數(shù)據(jù)庫和 LLM 打交道,為沒有記憶的大模型補充手腳、眼睛和記憶。

下面我們來詳細看看怎么使用 Rust 構(gòu)建 RAG 助手。開源的代碼分為兩部分,一部分是利用向量數(shù)據(jù)庫創(chuàng)建 embedding,另一部分是把加好 embedding 的向量數(shù)據(jù)庫與我們常用的工具結(jié)合起來。這兩部分代碼都是完全用 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 導(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)容。打開終端命令行工具,輸入下面的命令行。

//獲取源代碼及準備好的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 機器人。

當 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 助手的全部過程。當然你也可以把 ChatGPT 換成其他的大模型,比如 Llama2。

使用 Rust 構(gòu)建 LLM Agent 并沒有那么難!如果你正在發(fā)愁不知道怎么把 Rust 用起來,來試試構(gòu)建這個 RAG Agent 吧。你可以構(gòu)建企業(yè)手冊助手、開發(fā)手冊助手、開源項目助手等等。

下一篇文章,我們將詳細解讀這個 RAG 助手的 Rust 源代碼,幫助大家更好地理解這背后的原理。敬請期待!

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機器人
    +關(guān)注

    關(guān)注

    210

    文章

    27982

    瀏覽量

    205531
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    27

    文章

    4627

    瀏覽量

    128439
  • python
    +關(guān)注

    關(guān)注

    54

    文章

    4756

    瀏覽量

    84283
  • Rust
    +關(guān)注

    關(guān)注

    1

    文章

    228

    瀏覽量

    6523
  • ChatGPT
    +關(guān)注

    關(guān)注

    28

    文章

    1523

    瀏覽量

    7247

原文標題:手把手教你用 Rust 實現(xiàn)一個基于 ChatGPT 的 RAG 助手

文章出處:【微信號:Rust語言中文社區(qū),微信公眾號:Rust語言中文社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何使用Rust連接Redis

    ] redis = "0.22" Redis基礎(chǔ)用法和示例 連接Redis 連接Redis非常簡單,只需要使用redis::Client來創(chuàng)建連接即可,如下所示: use redis::Client; fn ma
    的頭像 發(fā)表于 09-19 16:22 ?2110次閱讀

    如何在Rust中使用Memcached

    Memcached協(xié)議的實現(xiàn),使得開發(fā)者可以在Rust中使用Memcached。 基礎(chǔ)用法 創(chuàng)建連接 使用Rust語言Memcached需要先創(chuàng)建
    的頭像 發(fā)表于 09-19 16:30 ?1142次閱讀

    Rust GUI實踐之Rust-Qt模塊

    Rust-Qt 是 Rust 語言的 Qt 綁定庫,它允許 Rust 開發(fā)者使用 Qt 框架來創(chuàng)建
    的頭像 發(fā)表于 09-30 16:43 ?1460次閱讀

    Rust的多線程編程概念和使用方法

    的 std::thread::Thread 結(jié)構(gòu)體表示。我們可以通過下面的代碼來創(chuàng)建Thread: use std::thread; fn
    的頭像 發(fā)表于 09-20 11:15 ?876次閱讀

    【國產(chǎn)FPGA+OMAPL138開發(fā)板體驗】(原創(chuàng))6.FPGA連接ChatGPT 4

    OMAP-L138(定點/浮點DSP C674x+ARM9)+ FPGA處理器的開發(fā)板。 編寫用于FPGA訪問ChatGPT 4的程序代碼是
    發(fā)表于 02-14 21:58

    chatGPT幫我寫硬件代碼,是懂行的,好助手!#chatgpt #物聯(lián)網(wǎng)開發(fā) #python開發(fā)板

    ChatGPT
    蘇州煜瑛微電子科技有限公司
    發(fā)布于 :2023年02月17日 15:27:42

    只會用Python?教你在樹莓派上開始使用Rust

    項目,請創(chuàng)建新目錄,然后輸入mkdir YourFoldercd YourFolder使用Cargo創(chuàng)建
    發(fā)表于 05-20 08:00

    科技大廠競逐AIGC,中國的ChatGPT在哪?

    推出了ChatGPT,嘗試在這里與它交談”,還包括鏈接,任何人都可以點擊鏈接,免費與ChatGPT交談。 與Siri、小愛同學(xué)等語音助手
    發(fā)表于 03-03 14:28

    Rust代碼中加載靜態(tài)庫時,出現(xiàn)錯誤 ` rust-lld: error: undefined symbol: malloc `怎么解決?

    我正在 MCUXpresso IDE 中創(chuàng)建靜態(tài)庫。我正在使用 redlib 在我的代碼中導(dǎo)入 ` [i]stdlib.h`。它成功地構(gòu)建了
    發(fā)表于 06-09 08:44

    用于打印漂亮的Rust結(jié)構(gòu)和枚舉表tabled

    易于使用的庫,用于打印漂亮的 Rust 結(jié)構(gòu)和枚舉表。
    的頭像 發(fā)表于 10-09 10:23 ?1294次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>個</b>用于打印漂亮的<b class='flag-5'>Rust</b>結(jié)構(gòu)和枚舉表tabled

    Rust開發(fā)的壓測工具rsb

    Rust 開發(fā)的壓測工具,項目地址:rsb,給 star 鼓勵下。
    的頭像 發(fā)表于 03-21 09:32 ?797次閱讀

    什么是RAG,RAG學(xué)習(xí)和實踐經(jīng)驗

    高級的RAG能很大程度優(yōu)化原始RAG的問題,在索引、檢索和生成上都有更多精細的優(yōu)化,主要的優(yōu)化點會集中在索引、向量模型優(yōu)化、檢索后處理等模塊進行優(yōu)化
    的頭像 發(fā)表于 04-24 09:17 ?578次閱讀
    什么是<b class='flag-5'>RAG</b>,<b class='flag-5'>RAG</b>學(xué)習(xí)和實踐經(jīng)驗

    如何手擼自有知識庫的RAG系統(tǒng)

    用于自然語言處理任務(wù),如文本生成、問答系統(tǒng)等。 我們通過下幾個步驟來完成基于京東云官網(wǎng)文檔的RAG系統(tǒng) 數(shù)據(jù)收集 建立知識庫 向量檢索 提示詞與模型 數(shù)據(jù)收集 數(shù)據(jù)的收集再整個
    的頭像 發(fā)表于 06-17 14:59 ?440次閱讀

    OpenAI向部分用戶推出ChatGPT語音助手

    據(jù)智通財經(jīng)APP報道,OpenAI正在為其部分尊貴的用戶們精心呈現(xiàn)備受矚目的ChatGPT語音助手,盡管此款助手原定于今年6月底的發(fā)布因為可能存在的安全隱患問題而被暫時擱置。
    的頭像 發(fā)表于 07-31 15:41 ?407次閱讀

    如何用Rust編寫ChatGPT桌面應(yīng)用(保姆級教程)

    為什么我們需要桌面應(yīng)用 原因?qū)嵲谔?,我們需要便捷?導(dǎo)出 記錄,需要在回答長度超長的時候自動加上“繼續(xù)”,需要 收藏 些很酷很實用的prompt...... (首先我假設(shè)你是
    的頭像 發(fā)表于 09-25 11:19 ?219次閱讀
    如何用<b class='flag-5'>Rust</b>編寫<b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>ChatGPT</b>桌面應(yīng)用(保姆級教程)