基于 AutoFlow 快速搭建基于 TiDB 向量搜索的本地知識庫問答機器人

導讀

本文將詳細介紹如何通過 PingCAP 開源項目 AutoFlow 實現快速搭建基于 TiDB 的本地知識庫問答機器人。如果提前準備好 Docker、TiDB 環境,整個搭建過程估計在 10 分鐘左右即可完成,無須開發任何代碼。
文中使用一篇 TiDB 文檔作為本地數據源作為示例,在實際情況中,您可以基于自己的企業環境用同樣的方法快速構造企業內部知識庫問答機器人。

背景知識

AutoFlow 是 PingCAP 開源的一個基于 Graph RAG、使用 TiDB 向量存儲和 LlamaIndex 構建的對話式知識庫聊天助手。https://tidb.ai 也是 PingCAP 基于 AutoFlow 實現的一個 TiDB AI 智能問答系統,我們可以向 tidb.ai 咨詢任何有關 TiDB 的問題,比如 “TiDB 對比 MySQL 有什么優勢?”

TiDB 對比 MySQL 有什么優勢

以下是 tidb.ai 的回答,從結果來說,tidb.ai 非常準確的理解了用戶的問題并給出了相應的回答。它首先給出 TiDB 優勢及 MySQL 限制的詳細說明,然后給出一個結論性的總結,最后給出更多的參考鏈接。

tidb.ai 的回答

基于 TiDB 實現問答系統的基本流程

相信通過前面的一些介紹,大家對 tidb.ai 的能力已經有了一個清楚的認識。TiDB 的使用人員很幸運,因為有了 tidb.ai,幾乎任何有關 TiDB 的問題都可以在這個統一的平臺得到相應的解答,一方面節省了自己人工去查找 TiDB 官方文檔或 AskTUG 論壇的時間,另一方面 tidb.ai 擁有比普通大模型更專業的 TiDB 知識問答。

在技術實現上,tidb.ai 背后主要使用到 TiDB 的 Graph RAG 技術、TiDB 向量檢索功能以及 LLM 大模型的使用。實際上,在 AutoFlow 出來之前,我們也可以通過 python 編程開發的方式基于 LLM+RAG+TiDB 實現一套問答系統。主要的開發流程如下:

  1. 準備私域文本數據
  2. 對文本進行切分
  3. 通過 Embedding 將文本轉為向量數據
  4. 把向量數據保存到 TiDB
  5. 獲得用戶輸入問題并進行向量化,然后從 TiDB 中進行相似度搜索
  6. 將上述片段和歷史問答作為上下文,與用戶問題一起傳入大模型,最后輸出結果

開發流程

基于 AutoFlow 搭建本地知識庫問答系統

基于 python 開發這樣一套問答系統,一般要結合大模型常用開發框架如 Langchain,Langchain 集成了多種文件格式或 URL 網址的導入功能。如果希望給這個系統增加 Web 界面的能力,還需要引入前端可視化工具,如 Gradio 或 Steamlit。但是如果使用開源的 AutoFlow,即使對于沒有任何開發背景的同學來說,搭建一套這樣的問答系統也是一件輕而易舉的事情,以下我們具體演示整個搭建的過程。

環境準備

在環境準備階段,我們主要需要準備以下幾項內容:

  • Docker 環境

需要確保 AutoFlow 運行的機器上具備 Docker 運行環境,因為 AutoFlow 項目中的應用是基于 docker 容器環境運行的。有關 Docker 運行環境的準備工作本文不作說明,安裝完成后可使用 docker run hello-world 命令驗證安裝成功。

  • AutoFlow 項目

AutoFlow 是一個開源的 github 項目,地址為 https://github.com/pingcap/autoflow。下載之后需要在 AutoFlow 根目錄下配置相關信息,包括 TiDB 數據庫連接信息、EMBEDDING 維度等。

cat > .env <<'EOF'
ENVIRONMENT=production# 可使用 python3 -c "import secrets; print(secrets.token_urlsafe(32))" 生成密鑰
SECRET_KEY="some_secret_key_that_is_at_least_32_characters_long"TIDB_HOST=<ip>
TIDB_PORT=<port>
TIDB_USER=<username>
TIDB_PASSWORD=<password>
TIDB_DATABASE=tidbai_test
# 非 TiDB serverless 環境需要將 TIDB_SSL 設置為 false
TIDB_SSL=falseEMBEDDING_DIMS=1024
EMBEDDING_MAX_TOKENS=4096
EOF
  • 帶向量功能的 TiDB 環境

TiDB 最新發布的 v8.4 版本,支持向量搜索功能(實驗特性)。向量搜索是一種基于數據語義的搜索方法,可以提供更相關的搜索結果。有關 TiDB 向量搜索功能,參考 https://docs.pingcap.com/zh/tidb/v8.4/vector-search-overview

需要確保 TiDB 8.4 集群正常運行,且已經創建有 AutoFlow 配置中指定的 TIDB_DATABASE 數據庫(必須為空庫)。

mysql> select version();
+--------------------+
| version()          |
+--------------------+
| 8.0.11-TiDB-v8.4.0 |
+--------------------+
1 row in set (0.00 sec)mysql> create database tidbai_test;
Query OK, 0 rows affected (0.52 sec)
  • 智譜 AI API Key

注冊并登錄智譜 AI 平臺 https://bigmodel.cn/, 在個人中心->API kys 添加新的 API Key 并復制保存。注意,如果免費創建的用戶已經超過一定的時效期限,API Key 將是無效的。

智譜 AI API Key

數據初始化

運行數據遷移以創建所需的表并創建初始管理員用戶

cd autoflow
docker compose -f docker-compose-cn.yml run backend /bin/sh -c "alembic upgrade head"
docker compose -f docker-compose-cn.yml run backend /bin/sh -c "python bootstrap.py"

創建初始管理員用戶

當看到如上輸出結果時,說明初始化這一步已經成功(注意保存好紅色字體中的密碼以備后面使用)。這時我們去 TiDB 數據庫中查看,發現 tidbai_test 這個庫中已經自動創建出了相應的表并有一些初始化數據,符合預期。

初始化數據

啟動知識庫應用

運行以下 docker compose 命令啟動知識庫應用程序

cd autoflow
docker compose -f docker-compose-cn.yml up -d --force-recreate

啟動知識庫應用

網頁訪問和配置知識庫應用

應用啟動成功后,我們可以直接通過默認的 3000 端口訪問相應的界面進行下一步操作了。使用默認管理員用戶 admin@example.com 以及上述應用啟動打印的密碼進行登錄。

網頁訪問和配置知識庫應用

登錄成功后,會彈出如下圖所示的提示框,后面我們只要按照提示框一步步進行相應配置即可。

注意:3000 這個端口是 TiDB 數據庫默認的 Grafana 端口號,如果把 AutoFlow 部署在和 Grafana 相同的節點,需要考慮端口沖突問題。

提示框

  1. 配置 LLM

此步驟需要配置的內容包括:

  • 模型名稱
  • 模型提供商(選擇 OpenAI Like)
  • 模型型號(如 glm-4-0520)
  • 智譜AI API KEY(見環境準備階段)
  • 高級選項-> api_base 路徑(需與 LLM 對應)
  • 是否默認 LLM(是或否)

配置 LLM

配置完成后,點擊 Create LLM 創建 LLM 關聯。需要注意的是,這里提供的 API Key 必須是一個有效的 Key,如果創建 API Key 的賬戶本身就過時,創建 LLM 時可能就會遇到以下報錯。如果只是為了測試用途,可以重新注冊一個賬號并取得一個新的 API Key 試用。

Failed to create LLM
Error code: 429 - {'error': {'code': '1113', 'message': '您的賬戶已欠費,請充值后重試。'}}
  1. 配置 Embedding 模型

此步驟需要配置的內容包括:

  • embedding名稱
  • 模型提供商(選擇 OpenAI Like)
  • 模型型號(如 embedding-2)
  • 智譜AI API KEY(與上述相同)

配置 Embedding 模型

配置完成后,點擊 Create Embedding Model 創建 Embedding 模型。需要注意的是,這里的 Model 必須要與環境變量中的 EMBEDDING_DIMS 對應,否則可能會出現以下類似報錯。

Failed to create Embedding Model
Currently we only support 1536 dims embedding, got 1024 dims.
  1. 配置數據來源

這里的數據來源可以是本地文件,也可以是具體的網址。這里我們配置具體有關 TiDB 和 MySQL 兼容性的網頁 https://docs.pingcap.com/zh/tidb/stable/mysql-compatibility 為數據來源。具體配置內容包括:

  • 數據源名稱
  • 數據源描述
  • 網頁 URL(可以配置一個或多個)
  • 是否 build 知識圖譜 Index(是或否)

配置數據來源

配置完成后,點擊 Create Datasource 創建數據來源。當然,如果有本地文件,也可以直接導入本地文件并創建數據源。另外如果不是在初始化時配置數據源,我們也可以在后續的過程中手動添加更多的數據源,下圖顯示將一個本地的文檔導入為數據源。

將一個本地的文檔導入為數據源

  1. 查看索引創建進度

上述步驟配置完成后,應用將基于配置的數據源進行向量化并創建索引,這需要一定的時間,具體耗時跟數據源的多少以及機器的配置都有關。通過頁面左側菜單欄-> Index Progress 查看索引創建進度,綠色代表索引創建成功,藍色代表正在創建,紅色代表創建失敗。下圖表示 Vector Index 已經創建成功,Knowlege Graph Index 正在創建中。當兩個圖表都變成綠色時,代表全部創建成功。

查看索引創建進度

體驗智能問答

至此,我們已經完成了配置數據源并完成了向量化存儲及向量索引的創建。在網頁的左側菜單欄中,我們可以點擊 Datasources 查看當前數據源, LLMs 查看當前 LLM,Embedding Model 查看 Embedding 模型。

菜單欄

我們現在也可以開始向自己搭建的 tidb.ai 咨詢有關 TiDB 的問題了,比如提問 “TiFlash 高性能列式分析引擎”。從結果可以看出,本地知識庫問答機器人引用導入的文檔并作出了相似回答,而假如我們刪除數據源之后再提出相同的問題,它的回答是 Empty Response。下圖對比充分說明了 TiDB 向量搜索在基礎 LLM 大模型的增強能力。

體驗智能問答

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62182.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62182.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62182.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

生信技能63 - 構建gnomAD變異位點的SQLite查詢數據庫

將數據量巨大的gnomAD數據庫,通過SQLite數據庫尋找gnomAD中存在的各種變異注釋信息(如等位基因計數,深度,次要等位基因頻率等),查詢300.000個變量的查詢需要大約40秒,通過染色體編號+位置+REF+ALT即可進行快速查詢。 1. gnomAD變異注釋VCF文件字段 gnomAD VCF各版本包…

【前端】將vue的方法掛載到window上供全局使用,也方便跟原生js做交互

【前端】將vue的方法掛載到window上供全局使用&#xff0c;也方便跟原生js做交互 <template><div><el-button click"start">調用方法</el-button></div> </template> <script> // import { JScallbackProc } from ./JScal…

基于XML的AOP開發

AOP 為 Aspect Oriented Programming 的縮寫&#xff0c;意思為面向切面編程。 AOP相關術語&#xff1a; 目標對象(Target)&#xff1a; 你要去代理的對象&#xff0c;可以理解為之前很單純的那個對象。 代理對象(Proxy)&#xff1a; 你把你那個單純的對象給我&#xff0c…

記錄blender學習過程中遇到的問題

物體發射的方向不對 被發射物體&#xff08;例如一棵樹&#xff09;n鍵看旋轉歸0 切換正視圖 將被發射物體的局部坐標的Z軸 指向 全局方向的X軸時 并且把粒子系統設置的物體旋轉勾選上 方向就對了 做倒角發現有問題 檢查縮放應用、面朝向、有沒有重合點&#xff08;融合點&am…

Ubuntu系統中Redis的安裝步驟及服務配置

目錄 內容概括 系統環境 安裝方式 1、apt包管理器安裝 &#xff08;1&#xff09;安裝redis服務 &#xff08;2&#xff09;安裝客戶端&#xff08;進入命令行操作使用&#xff0c;包含redis-cli&#xff09; &#xff08;3&#xff09;安裝檢驗 &#xff08;4&#xf…

半導體設備中的微型導軌應如何選擇合適的潤滑油?

微型導軌的潤滑對于保證其高精度和高穩定性至關重要&#xff0c;尤其是在半導體設備中&#xff0c;微型導軌的潤滑油選擇需要考慮多個因素&#xff0c;以確保設備的最佳性能和壽命。以下是一些關鍵點&#xff1a; 1、黏度&#xff1a;潤滑油的黏度是影響其流動性和潤滑效果的重…

RocketMq詳解:六、RocketMq的負載均衡機制

上一章&#xff1a;《SpringBootAop實現RocketMq的冪等》 文章目錄 1.背景1.1 什么是負載均衡1.2 負載均衡的意義 2.RocketMQ消息消費2.1 消息的流轉過程2.2 Consumer消費消息的流程 3.RocketMq的負載均衡策略3.1 Broker負載均衡3.2 Producer發送消息負載均衡3.3 消費端的負載均…

yocto的xxx.bb文件在什么時候會拷貝文件到build目錄

在 Yocto 中&#xff0c;.bb 文件用于描述如何構建和安裝一個軟件包&#xff0c;而文件在構建過程中的拷貝操作通常會在某些特定的步驟中進行。具體來說&#xff0c;文件會在以下幾個階段被拷貝到 build 目錄&#xff08;或者更準確地說&#xff0c;拷貝到目標目錄 ${D}&#x…

主打極致性價比,AMD RX 8600/8800顯卡定了

*以下內容僅為網絡爆料及傳聞&#xff0c;一切以官方消息為準。 這誰能想到&#xff0c;率先掏出下一代桌面獨立顯卡的不是老大哥 NVIDIA&#xff0c;也不是 AMD&#xff0c;反而是三家中存在感最弱的 Intel&#xff01; 就在 12 月 3 日&#xff0c;Intel 正式發布了自家第二…

數組哪些方法會觸發Vue監聽,哪些不會觸發監聽

發現寶藏 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。【寶藏入口】。 在 Vue 中&#xff0c;數組的變化是通過 響應式 系統來監聽的。Vue 使用 getter 和 setter 來追蹤數組的變化&#xff0c;并在數…

npm, yarn, pnpm之間的區別

前言 在現代化的開發中&#xff0c;一個人可能同時開發多個項目&#xff0c;安裝的項目越來越多&#xff0c;所隨之安裝的依賴包也越來越臃腫&#xff0c;而且有時候所安裝的速度也很慢&#xff0c;甚至會安裝失敗。 因此我們就需要去了解一下&#xff0c;我們的包管理器&#…

工業檢測基礎-工業相機選型及應用場景

以下是一些常見的工業檢測相機種類、檢測原理、應用場景及選型依據&#xff1a; 2D相機 檢測原理&#xff1a;基于二維圖像捕獲&#xff0c;通過分析圖像的明暗、紋理、顏色等信息來檢測物體的特征和缺陷.應用場景&#xff1a;廣泛應用于平面工件的外觀檢測&#xff0c;如檢測…

C語言連接數據庫

文章目錄 一、初始化數據庫二、創建數據庫連接三、執行增刪改查語句1、增刪改2、查 四、執行增刪改查語句 接下來我簡單的介紹一下怎么用C語言連接數據庫。 初始化數據庫創建數據庫連接執行增刪改查語句關閉數據庫連接 一、初始化數據庫 // 數據庫初始化 MYSQL mysql; MYSQL* r…

優化LabVIEW數據運算效率的方法

在LabVIEW中進行大量數據運算時&#xff0c;提升計算效率并減少時間占用是開發過程中常遇到的挑戰。為此&#xff0c;可以從多個角度著手優化&#xff0c;包括合理選擇數據結構與算法、并行處理、多線程技術、硬件加速、內存管理和界面優化等。通過采用這些策略&#xff0c;可以…

開源模型應用落地-安全合規篇-用戶輸入價值觀判斷(四)

一、前言 在深度合規功能中,對用戶輸入內容的價值觀判斷具有重要意義。這一功能不僅僅是對信息合法性和合規性的簡單審核,更是對信息背后隱含的倫理道德和社會責任的深刻洞察。通過對價值觀的判斷,系統能夠識別可能引發不當影響或沖突的內容,從而為用戶提供更安全、更和諧的…

計算機的錯誤計算(一百七十六)

摘要 利用某一大語言模型計算 的值&#xff0c;輸出為 0 . 例1. 在某一大語言模型下&#xff0c;計算 的值。其中sin中值取弧度。結果保留16位有效數字。 直接貼圖吧&#xff1a; 點評&#xff1a; &#xff08;1&#xff09;以上為一個大模型給的答案。從其回答可知&…

數據結構與算法——1204—遞歸分治法

1、斐波那契數列優化 使用滾動變量&#xff0c;保存當前計算結果和前兩項值 (1)RAB (2)更新計算對象&#xff0c;AB&#xff0c;BR #include<iostream> using namespace std;int fun(int n) {if (n 0)return 0;if (n 1 || n 2)return 1;int num11;int num21;int su…

openstack內部rpc消息通信源碼分析

我們知道openstack內部消息隊列基于AMQP協議&#xff0c;默認使用的rabbitmq 消息隊列。談到rabbitmq&#xff0c;大家或許并不陌生&#xff0c;但或許會對oslo message有些陌生。openstack內部并不是直接使用rabbitmq&#xff0c;而是使用了oslo.message 。oslo.message 后端的…

Python 3 和 MongoDB 的集成使用

Python 3 和 MongoDB 的集成使用 MongoDB 是一個流行的 NoSQL 數據庫&#xff0c;以其靈活的數據模型和強大的查詢功能而聞名。Python 3 作為一種廣泛使用的編程語言&#xff0c;與 MongoDB 的集成變得日益重要。本文將介紹如何在 Python 3 環境中集成和使用 MongoDB&#xff…

Postman自定義腳本Pre-request-script以及Test

這兩個都是我們進行自定義script腳本的地方&#xff0c;分別是在請求執行的前后運行。 我們舉兩個可能經常運用到的場景。 (一)請求A先執行&#xff0c;請求B使用請求A響應結果作為參數。如果我們不用自定義腳本&#xff0c;可能得先執行請求A&#xff0c;然后手動復制響應結果…