RAG+Agent人工智慧平臺:RAGflow實現GraphRA知識庫問答,打造極致多模態問答與AI編排流體驗
1.RAGflow簡介
-
最近更新:
- 2024-09-13 增加知識庫問答搜尋模式。
- 2024-09-09 在 Agent 中加入醫療問診模板。
- 2024-08-22 支援用RAG技術實現從自然語言到SQL語句的轉換。
- 2024-08-02 支援 GraphRAG 啟發於 graphrag 和思維導圖。
- 2024-07-23 支援解析音訊檔案。
- 2024-07-08 支援 Agentic RAG: 基於 Graph 的工作流。
- 2024-06-27 Q&A 解析方式支援 Markdown 檔案和 Docx 檔案,支援提取出 Docx 檔案中的圖片和 Markdown 檔案中的表格。
- 2024-05-23 實現 RAPTOR 提供更好的文字檢索。
-
主要功能
-
"Quality in, quality out"
- 基於深度文件理解,能夠從各類複雜格式的非結構化資料中提取真知灼見。
- 真正在無限上下文(token)的場景下快速完成大海撈針測試。
-
基於模板的文字切片
- 不僅僅是智慧,更重要的是可控可解釋。
- 多種文字模板可供選擇
-
有理有據、最大程度降低幻覺(hallucination)
- 文字切片過程視覺化,支援手動調整。
- 有理有據:答案提供關鍵引用的快照並支援追根溯源。
-
相容各類異構資料來源
- 支援豐富的檔案型別,包括 Word 文件、PPT、excel 表格、txt 檔案、圖片、PDF、影印件、影印件、結構化資料、網頁等。
-
自動化的 RAG 工作流
- 全面最佳化的 RAG 工作流可以支援從個人應用乃至超大型企業的各類生態系統。
- 大語言模型 LLM 以及向量模型均支援配置。
- 基於多路召回、融合重排序。
- 提供易用的 API,可以輕鬆整合到各類企業系統。
-
- 系統架構
2.快速開始
- 環節要求
- CPU >= 4 核
- RAM >= 16 GB
- Disk >= 50 GB
- Docker >= 24.0.0 & Docker Compose >= v2.26.1
如果你並沒有在本機安裝 Docker(Windows、Mac,或者 Linux), 可以參考文件 Install Docker Engine 自行安裝。
2.1 啟動伺服器
vm.max_map_count
是Linux核心中的一個重要引數,它定義了一個程序可以擁有的最大記憶體對映區域數。記憶體對映區域通常指的是記憶體對映檔案、匿名記憶體對映等。
-
效能最佳化
:透過增加vm.max_map_count的值,可以允許應用程式建立更多的記憶體對映區域,從而提高效能和效率。特別是對於需要頻繁訪問大量檔案或資料的應用程式,這種最佳化效果尤為明顯。 -
穩定性保障
:如果應用程式嘗試建立的記憶體對映區域數超過了系統設定的限制,可能會導致對映失敗,進而引發效能問題或直接導致應用程式崩潰。因此,合理設定vm.max_map_count引數有助於保障系統的穩定性。 -
設定方法
臨時設定
:可以透過sysctl
命令臨時修改vm.max_map_count的值,但這種更改在系統重啟後會失效。例如,要將vm.max_map_count的值設定為262144,可以執行sudo sysctl -w vm.max_map_count=262144
命令。永久設定
:為了確保在系統重啟後vm.max_map_count的值仍然有效,需要將該值寫入到/etc/sysctl.conf
檔案中。新增或更新vm.max_map_count=262144
(或其他所需的數值)到該檔案中,並儲存更改。之後,可以透過執行sudo sysctl -p
命令使更改立即生效。
-
確保
vm.max_map_count
不小於 262144:如需確認
vm.max_map_count
的大小:$ sysctl vm.max_map_count
如果
vm.max_map_count
的值小於 262144,可以進行重置:# 這裡我們設為 262144: $ sudo sysctl -w vm.max_map_count=262144
你的改動會在下次系統重啟時被重置。如果希望做永久改動,還需要在 /etc/sysctl.conf 檔案裡把
vm.max_map_count
的值再相應更新一遍:vm.max_map_count=262144
-
克隆倉庫:
$ git clone https://github.com/infiniflow/ragflow.git
-
進入 docker 資料夾,利用提前編譯好的 Docker 映象啟動伺服器:
$ cd ragflow/docker $ chmod +x ./entrypoint.sh $ docker compose -f docker-compose-CN.yml up -d
請注意,執行上述命令會自動下載 RAGFlow 的開發版本 docker 映象。如果你想下載並執行特定版本的 docker 映象,請在 docker/.env 檔案中找到 RAGFLOW_VERSION 變數,將其改為對應版本。例如 RAGFLOW_VERSION=v0.11.0,然後執行上述命令。
核心映象檔案大約 9 GB,可能需要一定時間拉取。請耐心等待。
映象拉在太慢的化參考連結:映象拉去提速
-
伺服器啟動成功後再次確認伺服器狀態:
$ docker logs -f ragflow-server
出現以下介面提示說明伺服器啟動成功:
____ ______ __ / __ \ ____ _ ____ _ / ____// /____ _ __ / /_/ // __ `// __ `// /_ / // __ \| | /| / / / _, _// /_/ // /_/ // __/ / // /_/ /| |/ |/ / /_/ |_| \__,_/ \__, //_/ /_/ \____/ |__/|__/ /____/ * Running on all addresses (0.0.0.0) * Running on http://127.0.0.1:9380 * Running on http://x.x.x.x:9380 INFO:werkzeug:Press CTRL+C to quit
如果您跳過這一步系統確認步驟就登入 RAGFlow,你的瀏覽器有可能會提示
network abnormal
或網路異常
,因為 RAGFlow 可能並未完全啟動成功。 -
在你的瀏覽器中輸入你的伺服器對應的 IP 地址並登入 RAGFlow。
上面這個例子中,您只需輸入 http://IP_OF_YOUR_MACHINE 即可:未改動過配置則無需輸入埠(預設的 HTTP 服務埠 80)。
-
在 service_conf.yaml 檔案的
user_default_llm
欄配置 LLM factory,並在API_KEY
欄填寫和你選擇的大模型相對應的 API key。詳見 llm_api_key_setup。
部署遇到問題解決(🔺)
資源不足問題,ES會佔用較多資源建議設定大一些
修改.env檔案,根據自己記憶體資源進行設定,我就設定了70G,es預設吃一半
#Increase or decrease based on the available host memory (in bytes)
MEM_LIMIT=72864896288
遇到知識庫構建,索引構建卡住無法解析
問題描述:索引構建過程一直卡著,經過排查發現是系統盤空間不夠95%+了,報錯如下
ApiError('search_phase_execution_exception', meta=ApiResponseMeta(status=503, http_version='1.1', headers={'X-elastic-product': 'Elasticsearch', 'content-type': 'application/vnd.elasticsearch+json;compatible-with=8', 'content-length': '365'}, duration=0.004369974136352539, node=NodeConfig(scheme='http', host='es01', port=9200, path_prefix='', headers={'user-agent': 'elasticsearch-py/8.12.1 (Python/3.11.0; elastic-transport/8.12.0)'}, connections_per_node=10, request_timeout=10.0, http_compress=False, verify_certs=True, ca_certs=None, client_cert=None, client_key=None, ssl_assert_hostname=None, ssl_assert_fingerprint=None, ssl_version=None, ssl_context=None, ssl_show_warn=True, _extras={})), body={'error': {'root_cause': [{'type': 'no_shard_available_action_exception', 'reason': None}], 'type': 'search_phase_execution_exception', 'reason': 'all shards failed', 'phase': 'query', 'grouped': True, 'failed_shards': [{'shard': 0, 'index': 'ragflow_304817a205d211efa4de0242ac160005', 'node': None, 'reason': {'type': 'no_shard_available_action_exception', 'reason': None}}]}, 'status': 503})
- 如果系統盤空間不夠,請對docker遷移
修改Docker預設儲存路徑參考
遷移後問題解決:
不得不說,ragflow的文件解析能力還挺強的
2.2 系統配置
系統配置涉及以下三份檔案:
- .env:存放一些基本的系統環境變數,比如
SVR_HTTP_PORT
、MYSQL_PASSWORD
、MINIO_PASSWORD
等。 - service_conf.yaml:配置各類後臺服務。
- docker-compose-CN.yml: 系統依賴該檔案完成啟動。
請務必確保 .env 檔案中的變數設定與 service_conf.yaml 檔案中的配置保持一致!
./docker/README 檔案提供了環境變數設定和服務配置的詳細資訊。請一定要確保 ./docker/README 檔案當中列出來的環境變數的值與 service_conf.yaml 檔案當中的系統配置保持一致。
如需更新預設的 HTTP 服務埠(80), 可以在 docker-compose-CN.yml 檔案中將配置 80:80
改為 <YOUR_SERVING_PORT>:80
。
所有系統配置都需要透過系統重啟生效:
$ docker compose -f docker-compose-CN.yml up -d
2.3 原始碼編譯、安裝 Docker 映象
如需從原始碼安裝 Docker 映象:
$ git clone https://github.com/infiniflow/ragflow.git
$ cd ragflow/
$ docker build -t infiniflow/ragflow:v0.11.0 .
$ cd ragflow/docker
$ chmod +x ./entrypoint.sh
$ docker compose up -d
2.4 原始碼啟動服務
如需從原始碼啟動服務,請參考以下步驟:
- 克隆倉庫
$ git clone https://github.com/infiniflow/ragflow.git
$ cd ragflow/
- 建立虛擬環境(確保已安裝 Anaconda 或 Miniconda)
$ conda create -n ragflow python=3.11.0
$ conda activate ragflow
$ pip install -r requirements.txt
如果 cuda > 12.0,需額外執行以下命令:
$ pip uninstall -y onnxruntime-gpu
$ pip install onnxruntime-gpu --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-cuda-12/pypi/simple/
- 複製入口指令碼並配置環境變數
$ cp docker/entrypoint.sh .
$ vi entrypoint.sh
使用以下命令獲取python路徑及ragflow專案路徑:
$ which python
$ pwd
將上述 which python
的輸出作為 PY
的值,將 pwd
的輸出作為 PYTHONPATH
的值。
LD_LIBRARY_PATH
如果環境已經配置好,可以註釋掉。
#此處配置需要按照實際情況調整,兩個 export 為新增配置
PY=${PY}
export PYTHONPATH=${PYTHONPATH}
#可選:新增 Hugging Face 映象
export HF_ENDPOINT=https://hf-mirror.com
- 啟動基礎服務
$ cd docker
$ docker compose -f docker-compose-base.yml up -d
-
檢查配置檔案
確保docker/.env中的配置與conf/service_conf.yaml中配置一致, service_conf.yaml中相關服務的IP地址與埠應該改成本機IP地址及容器對映出來的埠。 -
啟動服務
$ chmod +x ./entrypoint.sh
$ bash ./entrypoint.sh
- 啟動WebUI服務
$ cd web
$ npm install --registry=https://registry.npmmirror.com --force
$ vim .umirc.ts
#修改proxy.target為http://127.0.0.1:9380
$ npm run dev
- 部署WebUI服務
$ cd web
$ npm install --registry=https://registry.npmmirror.com --force
$ umi build
$ mkdir -p /ragflow/web
$ cp -r dist /ragflow/web
$ apt install nginx -y
$ cp ../docker/nginx/proxy.conf /etc/nginx
$ cp ../docker/nginx/nginx.conf /etc/nginx
$ cp ../docker/nginx/ragflow.conf /etc/nginx/conf.d
$ systemctl start nginx
3. 案例快速實踐
3.1 模型接入
- 商業模型接入:
參考連結:國內大模型LLM選擇以及主流大模型快速使用教程
- ollama接入
參考連結:Ollama簡化流程,OpenLLM靈活部署,LocalAI本地最佳化
- xinference 接入
Xinference實戰指南
3.0 知識庫構建
Template | Description | File format |
---|---|---|
General | Files are consecutively chunked based on a preset chunk token number. | DOCX, EXCEL, PPT, PDF, TXT, JPEG, JPG, PNG, TIF, GIF |
Q&A | EXCEL, CSV/TXT | |
Manual | ||
Table | EXCEL, CSV/TXT | |
Paper | ||
Book | DOCX, PDF, TXT | |
Laws | DOCX, PDF, TXT | |
Presentation | PDF, PPTX | |
Picture | JPEG, JPG, PNG, TIF, GIF | |
One | The entire document is chunked as one. | DOCX, EXCEL, PDF, TXT |
Knowledge Graph | DOCX、EXCEL、PPT、IMAGE、PDF、TXT、MD、JSON、EML |
- "General" 分塊方法說明
支援的檔案格式為DOCX、EXCEL、PPT、IMAGE、PDF、TXT、MD、JSON、EML、HTML。
此方法將簡單的方法應用於塊檔案:
系統將使用視覺檢測模型將連續文字分割成多個片段。
接下來,這些連續的片段被合併成Token數不超過“Token數”的塊。
- "Q&A" 分塊方法說明
此塊方法支援 excel 和 csv/txt 檔案格式。
如果檔案以 excel 格式,則應由兩個列組成 沒有標題:一個提出問題,另一個用於答案, 答案列之前的問題列。多張紙是 只要列正確結構,就可以接受。
如果檔案以 csv/txt 格式為 用作分開問題和答案的定界符。
未能遵循上述規則的文字行將被忽略,並且 每個問答對將被認為是一個獨特的部分。
- "Knowledge Graph" 分塊方法說明
支援的檔案格式為DOCX、EXCEL、PPT、IMAGE、PDF、TXT、MD、JSON、EML
檔案分塊後,使用分塊提取整個文件的知識圖譜和思維導圖。此方法將簡單的方法應用於分塊檔案: 連續的文字將被切成大約 512 個 token 數的塊。
接下來,將分塊傳輸到 LLM 以提取知識圖譜和思維導圖的節點和關係。
- 支援embedding model
- BAAI/bge-large-zh-v1.5
- BAAI/bge-base-en-v1.5
- BAAI/bge-large-en-v1.5
- BAAI/bge-small-en-v1.5
- BAAI/bge-small-zh-v1.5
- jinaai/jina-embeddings-v2-base-en
- jinaai/jina-embeddings-v2-small-en
- nomic-ai/nomic-embed-text-v1.5
- sentence-transformers/all-MiniLM-L6-v2
- maidalun1020/bce-embedding-base_v1
智慧問答 & AI 編排流
Agent模組--->模板選擇--->HR招聘助手
- 技術文件
- Quickstart
- User guide
- References
- FAQ