<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

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

3天內不再提示

如何使用Rust創建一個基于ChatGPT的RAG助手

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

如今,ChatGPT 已經成為家喻戶曉的名字,每個開發者都主動或被動地使用過 ChatGPT 或者是基于 ChatGPT 的產品。ChatGPT 很好,但是應用到實際工作與生活場景,ChatGPT 經常會出現一些幻覺,“一本正經”地為我們提供一些錯誤答案,沒有辦法為我們提供專業的意見或指導。那我們如何讓 ChatGPT 具備某個專業領域的知識,提升回答的正確率,從而讓 ChatGPT 真的用起來?比如訓練 ChatGPT 成為企業的智能客服助手,解放客服的雙手。

如何構建一個具有專業知識的機器人

為了解決這個問題,一般我們有兩種解決方法。第一種是利用自己的數據在大模型的基礎上進行 fine-tune(微調),訓練出一個具備相關領域的知識的大模型,另一種方法稱作 RAG (Retrieval-Augmented Generation),檢索增強生成,利用向量數據庫的能力,將專業的知識數據轉換成多個向量,然后再利用大模型的能力進行檢索,最后回答問題。兩種方法各有自己的優勢和劣勢,總體來說,盡管 RAG 的準確度不如 fine-tune 高,但是 RAG 的性能比更適合普羅大眾,因為 RAG 更簡化,更高效。RAG 的優勢有以下幾點:

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

當有數據更新時,RAG 允許開發者通過添加新的 embedding 以保證內容的時效性,但是微調大模型則需要反復重新訓練模型,耗費資源比較多

fine-tune RAG
是否需要 GPU 資源
開發周期
更新/刪除知識 需要重新訓練 更新 embedding
適合場景 賦予大模型某種能力 賦予大模型某種知識
結果準確度 高于 RAG 低于 fine-tune

如何使用 Rust 創建一個基于 ChatGPT 的 RAG 助手

常見的構建 RAG 助手的工具是以 Python 為主的 langchain,但是如何使用 Rust 來構建呢?這就需要我們有一套圍繞 Rust 語言打造的 LLM 工具鏈。flows.network 就是這樣一個專門為 Rust 開發者打造的構建 LLM Agent 的平臺。和 langchain 一樣,flows.network 為 Rust 開發者包裝了常用的 LLM 工具庫,比如 ChatGPT 、Claude、Llama2 以及我們常用的 SaaS 工具 GitHub 、Discord、Telegram、Slack。但是更進一步的是,flows.network 是一個 serverless Rust 平臺,開發者只需構建業務邏輯,編譯以及部署 Rust 函數都由平臺完成。

具體到構建基于 ChatGPT 的 RAG 助手,flows.network 已經開源了一套開箱即用的框架供 Rust 開發者使用。最近新發布 Learn Rust 助手就是基于這套框架所實現的。

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

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

下面我們來詳細看看怎么使用 Rust 構建 RAG 助手。開源的代碼分為兩部分,一部分是利用向量數據庫創建 embedding,另一部分是把加好 embedding 的向量數據庫與我們常用的工具結合起來。這兩部分代碼都是完全用 Rust 編寫的。

這篇文章主要聚焦如何搭建 RAG 知識庫助手,不會對代碼進行詳細解釋。對源代碼感興趣的朋友,敬請期待我們下一篇文章。

首先先來看第一部分在向量數據庫中創建 embedding。

在創建 embedding 的這個 demo repo 我們需要做三件事:

fork 這個 repo,把文件 text1.txt 里的內容換成自己的內容。這里要注意 embedding 的方法,要把相似的內容放在一個 embedding 里,每個空行代表一個 embedding。你也可以直接在本地存儲自己的 embedding。

將 RAG-embedding repo 的代碼部署在 flows.network 上,得到一個可以訪問向量數據庫的 webhook。

在這個 webhook 中添加 embedding 的內容以及命名 collection。

第一步是主要是開發者自己的工作,你可以選擇手動分段,也可以選擇使用算法進行分段。

第二步需要用到 flows.network, 簡單來說,我們需要把包含源代碼的 repo 導入到 flows.network 平臺,并且添加 OpenAI 的 API key。因為把 text 轉換成 embedding 的工作是調用 OpenAI 的 embedding API 完成的。部署完成后,我們會在頁面看到一個 webhook 鏈接。這個 webhook 鏈接需要保存下來,因為接下來我們將通過這個 wbhook 添加 embedding 的內容。

//webhook示例
https://code.flows.network/webhook/I9GNgD5HKhFLY25DsOUI

第三步是用 curl 為這個向量數據庫添加 embedding 內容。打開終端命令行工具,輸入下面的命令行。

//獲取源代碼及準備好的txt文件
gitclonehttps://github.com/alabulei1/demo-RAG-embeddings.git
cddemo-RAG-embeddings

//上傳創建好的 embedding 文件。
//Webhook鏈接要替換成在flows.network生成的鏈接
//collection_name可以隨意替換,要記住這個名字,后面需要用到
//"@test1.txt"根據實際情況替換即可
curl"https://code.flows.network/webhook/I9GNgD5HKhFLY25DsOUI?collection_name=laokeshi&vector_size=1536&reset=1"-XPOST--data-binary"@test1.txt"

//添加成功后,終端會提示總共創建了多少個embedding
Successfullyinserted7records.Thecollectionnowhas7recordsintotal

看到終端輸出如上的命令行,就意味著我們的 embedding 已經創建好了。

下面的視頻展示了如何在 flows.network 上部署這個創建 embedding 的 repo,并且在得到webhook 鏈接后,如何把 embedding 添加到向量數據庫。

接下來就可以將這些 embedding 與其他 SaaS 工具自由組裝。這時候就用到我們的第二個 demo repo:使用這些 embedding 創建一個 discord 機器人(Agent),讓用戶能夠在 Discord 直接咨詢相關問題。

同樣,我們需要將 RAG-discord-bot demo repo 導入到 flows.network 進行部署。我們需要配置五個環境變量。discod_token 和 bot_id 是設置 Discord 機器人的。這兩個參數在 Discord 的開發者中心獲取。

還有一個 collection_name ,這里要填入我們在上一步創建 embedding 的是所設置的 collection_name 的值, 讓 Discord agent 知道去找哪個數據庫檢索相關內容。

另外兩個是 Agent 本身的信息。error-mesg 是發生錯誤時,給用戶的錯誤提示信息,system_promopt 是 agent 總的 Prompt,給 ChatGPT 規劃任務。

同樣,下面有一個視頻展示了如何在 flows.network 上導入 github repo,創建這個 Discord 機器人。

當 flow 的狀態變成 ready 后,就可以去 server 里找剛剛創建的 Discord 機器人,讓這個 Discord 機器人回答問題。注意,這時的 Discord 機器人應該是 online 的狀態,如果 Discord 機器人是 offline 的狀態,請檢查 Discord 機器人是否設置正確。

這就是使用 Rust 創建一個基于 ChatGPT 的 RAG 助手的全部過程。當然你也可以把 ChatGPT 換成其他的大模型,比如 Llama2。

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

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

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 機器人
    +關注

    關注

    206

    文章

    27107

    瀏覽量

    201594
  • gpu
    gpu
    +關注

    關注

    27

    文章

    4435

    瀏覽量

    126838
  • python
    +關注

    關注

    52

    文章

    4686

    瀏覽量

    83514
  • Rust
    +關注

    關注

    1

    文章

    224

    瀏覽量

    6400
  • ChatGPT
    +關注

    關注

    27

    文章

    1435

    瀏覽量

    5014

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

文章出處:【微信號:Rust語言中文社區,微信公眾號:Rust語言中文社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何在Rust中使用Memcached

    了Memcached協議的實現,使得開發者可以在Rust中使用Memcached。 基礎用法 創建連接 使用Rust語言Memcached需要先創建一個連接??梢允褂?memcache
    的頭像 發表于 09-19 16:30 ?897次閱讀

    Rust GUI實踐之Rust-Qt模塊

    Rust-Qt 是 Rust 語言的一個 Qt 綁定庫,它允許 Rust 開發者使用 Qt 框架來創建跨平臺的圖形界面應用程序。Qt 是一個跨平臺的應用程序框架,它提供了一系列的工具和
    的頭像 發表于 09-30 16:43 ?1005次閱讀

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

    Rust是一種強類型、高性能的系統編程語言,其官方文檔中強調了Rust的標準庫具有良好的并發編程支持。Thread是Rust中的一種并發編程方式,本文將介紹Rust中thread的相關
    的頭像 發表于 09-20 11:15 ?526次閱讀

    【國產FPGA+OMAPL138開發板體驗】(原創)6.FPGA連接ChatGPT 4

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

    chatGPT幫我寫硬件代碼,是懂行的,好助手!#chatgpt #物聯網開發 #python開發板

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

    DAQ助手使用與虛擬采集卡創建

    簡單幾步,學會labviewDAQ助手和虛擬采集卡創建,沒有采集卡也樣可以。
    發表于 07-26 10:00

    創建1TCP任務+3UDP任務時為什么最后任務創建失敗

    創建1TCP任務+3UDP任務時,最后任務不能成功創建。程序是在探索者附帶的LWIP_網
    發表于 04-17 04:35

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

    項目,請創建新目錄,然后輸入mkdir YourFoldercd YourFolder使用Cargo創建
    發表于 05-20 08:00

    RUST在嵌入式開發中的應用是什么

    的文檔、有用的錯誤消息、友好編譯器、流的工具,只是Rust的幾個好處。它帶有集成的包管理器和構建工具,支持自動完成和類型檢查的智能多編輯器,
    發表于 12-24 08:34

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

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

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

    我正在 MCUXpresso IDE 中創建靜態庫。我正在使用 redlib 在我的代碼中導入 ` [i]stdlib.h`。它成功地構建了
    發表于 06-09 08:44

    不到1分鐘開發GPT應用!各路大神瘋狂整活,網友:ChatGPT就是新iPhone

    這個說法并不準確。盡管ChatGPT等語言模型已經在定程度上改變了我們獲取信息、學習知識的方式,但它們并不能替代人類進行創造性思考和創造性活動。 雖然些人可能會利用ChatGPT
    發表于 11-19 12:06

    搜索出生的百川智能大模型RAG爬坑之路總結

    今天對百川的RAG方法進行解讀,百川智能具有深厚的搜索背景,來看看他們是怎么爬RAG的坑的吧~
    的頭像 發表于 01-05 15:02 ?876次閱讀
    搜索出生的百川智能大模型<b class='flag-5'>RAG</b>爬坑之路總結

    什么是RAG,RAG學習和實踐經驗

    高級的RAG能很大程度優化原始RAG的問題,在索引、檢索和生成上都有更多精細的優化,主要的優化點會集中在索引、向量模型優化、檢索后處理等模塊進行優化
    的頭像 發表于 04-24 09:17 ?160次閱讀
    什么是<b class='flag-5'>RAG</b>,<b class='flag-5'>RAG</b>學習和實踐經驗
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>