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

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

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

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

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

如今,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)的。

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

為了方便大家理解基于 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)期待!

審核編輯:湯梓紅

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

    關(guān)注

    210

    文章

    28102

    瀏覽量

    205843
  • gpu
    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)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何使用Rust連接Redis

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

    如何在Rust中使用Memcached

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

    Rust GUI實(shí)踐之Rust-Qt模塊

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

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

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

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

    OMAP-L138(定點(diǎn)/浮點(diǎn)DSP C674x+ARM9)+ FPGA處理器的開發(fā)板。 編寫個(gè)用于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

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

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

    科技大廠競(jìng)逐AIGC,中國(guó)的ChatGPT在哪?

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

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

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

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

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

    個(gè)Rust開發(fā)的壓測(cè)工具rsb

    個(gè)Rust 開發(fā)的壓測(cè)工具,項(xiàng)目地址:rsb,給個(gè) star 鼓勵(lì)下。
    的頭像 發(fā)表于 03-21 09:32 ?821次閱讀

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

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

    如何手?jǐn)]個(gè)自有知識(shí)庫(kù)的RAG系統(tǒng)

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

    OpenAI向部分用戶推出ChatGPT語(yǔ)音助手

    據(jù)智通財(cái)經(jīng)APP報(bào)道,OpenAI正在為其部分尊貴的用戶們精心呈現(xiàn)備受矚目的ChatGPT語(yǔ)音助手,盡管此款助手原定于今年6月底的發(fā)布因?yàn)榭赡艽嬖诘陌踩[患問題而被暫時(shí)擱置。
    的頭像 發(fā)表于 07-31 15:41 ?431次閱讀

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

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