RAG+Agent人工智慧平臺:RAGflow實現GraphRA知識庫問答,打造極致多模態問答與AI編排流體驗

汀丶發表於2024-09-20

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命令使更改立即生效。
  1. 確保 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
    
  2. 克隆倉庫:

    $ git clone https://github.com/infiniflow/ragflow.git
    
  3. 進入 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,可能需要一定時間拉取。請耐心等待。

    映象拉在太慢的化參考連結:映象拉去提速

  4. 伺服器啟動成功後再次確認伺服器狀態:

    $ 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 可能並未完全啟動成功。

  5. 在你的瀏覽器中輸入你的伺服器對應的 IP 地址並登入 RAGFlow。

    上面這個例子中,您只需輸入 http://IP_OF_YOUR_MACHINE 即可:未改動過配置則無需輸入埠(預設的 HTTP 服務埠 80)。

  6. 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_PORTMYSQL_PASSWORDMINIO_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 原始碼啟動服務

如需從原始碼啟動服務,請參考以下步驟:

  1. 克隆倉庫
$ git clone https://github.com/infiniflow/ragflow.git
$ cd ragflow/
  1. 建立虛擬環境(確保已安裝 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/
  1. 複製入口指令碼並配置環境變數
$ 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
  1. 啟動基礎服務
$ cd docker
$ docker compose -f docker-compose-base.yml up -d 
  1. 檢查配置檔案
    確保docker/.env中的配置與conf/service_conf.yaml中配置一致, service_conf.yaml中相關服務的IP地址與埠應該改成本機IP地址及容器對映出來的埠。

  2. 啟動服務

$ chmod +x ./entrypoint.sh
$ bash ./entrypoint.sh
  1. 啟動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 
  1. 部署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 PDF
Table EXCEL, CSV/TXT
Paper PDF
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

相關文章