1.背景
本qiang~這兩週關注到一個很火的開源文件問答系統Kotaemon,從8月28日至今短短兩週時間,github星標迅猛增長10K,因此計劃深挖一下其中的原理及奧秘。
本篇主要是Kotaemon的簡介資訊,涉及到主要特點,與傳統文件RAG的區別,如何部署、以及效果演示。
後續內容會針對核心模組進行拆解研讀,敬請期待~
2.簡介
Kotaemon是一個RAG UI頁面,主要面向DocQA的終端使用者和構建自己RAG pipeline的開發者。
2.1終端使用者
1)提供了一個基於RAG問答的簡單且最小化的UI介面
2)支援諸多LLM API提供商(如OpenAI, Cohere)和本地部署的LLM(如ollama和llama-cpp-python)
2.2開發者
1)提供了一個構建RAG文件問答pipeline的框架
2)使用Gradio開發,基於提供的UI可以自定義並檢視RAG pipeline的執行過程
3.主要特點
1)託管自己的QA Web UI: 支援多使用者登入,支援檔案私有或公開,支援與他人協助分享
2)管理LLM和Embedding模型: 支援本地LLM和流行的API提供商
3)混合RAG pipeline: 支援全文字和向量的混合檢索,以及re-ranking來保障檢索質量
4)支援多模態文件:支援對含有圖片及表格的N多個文件進行問答,支援多模態文件解析
5)帶有高階引文的文件預覽: 系統預設提供具體的引用資訊,保障LLM回答的準確性。直接在瀏覽器內的PDF查閱器檢視引文,並高亮顯示。
6)支援複雜推理方法:使用問題分解來回答覆雜/多跳問題。支援使用ReAct、ReWoo及其他Agent進行推理
7)可調節的設定UI:調整檢索和生成過程的引數資訊,包括檢索過程和推理過程設定
4.與傳統文件RAG的區別
(1)在web ui介面直接PDF預覽,並透過LLM的引用回撥方法高亮有關聯的句子,極大地有助於仔細檢查LLM的上下文
(2)支援複雜推理方法。目標是支援更多的基於Agent的推理框架,如問題拆解、多跳問題、React、ReWoo等
(3)支援在頁面配置中更改prompt,也可以調整想要使用的檢索和推理模組
(4)擴充套件性好,基於gradio開發,可輕鬆新增或刪除UI元件來自定義RAG pipeline
5.安裝部署
5.1終端使用者
- 可在github的release頁面下載最新的kotaemon-app.zip,並解壓縮
- 進入scripts,根據系統安裝,如windows系統雙擊run_windows.bat,linux系統bash run_linux.sh
- 安裝後,程式要求啟動ketem的UI,回答”繼續”
- 如果啟動,會自動在瀏覽器中開啟,預設賬戶名和密碼是admin/admin
5.2開發者
5.2.1使用Docker安裝推薦
# 執行 docker run -e GRADIO_SERVER_NAME=0.0.0.0 -e GRADIO_SERVER_PORT=7860 -p 7860:7860 -it --rm ghcr.io/cinnamon/kotaemon:latest # 訪問ui地址:http://localhost:7860/ |
5.2.2原始碼安裝
# 建立虛擬環境 conda create -n kotaemon python=3.10 conda activate kotaemon
# 下載原始碼 git clone https://github.com/Cinnamon/kotaemon cd kotaemon
# 安裝依賴 pip install -e "libs/kotaemon[all]" pip install -e "libs/ktem"
# 更新環境變數檔案.env,如API key # (可選) 如果想瀏覽器內部展示PDF,可以下載PDF_JS viewer,解壓到libs/ktem/ktem/assets/prebuilt目錄
# 開啟web服務,並使用admin/admin登入 python app.py |
5.2.3應用定製
應用資料預設儲存在./ktem_app_data檔案,如果想要遷移到新機器,只需將該資料夾複製即可。
為了高階使用者或特殊用途,可以自定義.env和flowsetting.py檔案
(1)flowsetting.py設定
# 設定文件儲存引擎(該引擎支援全文檢索) KH_DOCSTORE=(Elasticsearch | LanceDB | SimpleFileDocumentStore)
# 設定向量儲存引擎(支援向量檢索) KH_VECTORSTORE=(ChromaDB | LanceDB | InMemory)
# 是否啟用多模態QA KH_REASONINGS_USE_MULTIMODAL=True
# 新增新的推理pipeline或修改已有的 KH_REASONINGS = [ "ktem.reasoning.simple.FullQAPipeline", "ktem.reasoning.simple.FullDecomposeQAPipeline", "ktem.reasoning.react.ReactAgentPipeline", "ktem.reasoning.rewoo.RewooAgentPipeline", ] ) |
(2).env設定
該檔案提供另一種方式來設定模型和憑據。
# 可以設定OpenAI的連線 OPENAI_API_BASE=https://api.openai.com/v1 OPENAI_API_KEY=<your OpenAI API key here> OPENAI_CHAT_MODEL=gpt-3.5-turbo OPENAI_EMBEDDINGS_MODEL=text-embedding-ada-002 |
5.2.4設定本地LLM及Embedding模型
(1)推薦Ollama OpenAI相容的服務
#安裝ollama並啟動程式,可參考https://github.com/ollama/ollama
#拉取模型 ollama pull llama3.1:8b ollama pull nomic-embed-text |
(2)在Resources頁面中的LLMs和Embedding分別設定LLM和Embedding
api_key: ollama base_url: http://localhost:11434/v1/ model: llama3.1:8b (for llm) | nomic-embed-text (for embedding) |
(3)使用本地模型用於RAG
1)將本地LLM和Embedding模型設定為default
2)將File Collection中的Embedding設定為本地模型(例如: ollama
3)在Retrieval Setting頁面,選擇本地模型作為LLM相關得分模型。如果你的機器無法同時處理大量的LLM並行請求,可以不選中”Use LLM relevant scoring”
4)現在就可以上傳檔案進行文件問答體驗了。
6.效果體驗
眼過千遍,不如手過一遍~
本qiang~採用原始碼安裝部署,使用openai的LLM模型gpt-4o-mini和Embedding模型text-embedding-3-small(如何使用免費版本的openai進行api體驗,可以私信聯絡~)。其次,使用MindSearch的論文進行測試驗證。
6.1構建文件索引資訊
6.1.1上傳文件
6.1.2使用simple推理策略
simple推理策略對應的flowsettings.py中的FullQAPipeline。問題: “what are the components of MindSearch?”,效果如下:
6.1.3使用complex推理策略
complex推理策略對應的flowsettings.py中的FullDecomposeQAPipeline,即將複雜問題拆分為簡單子問題。問題: “Please describe the performance of MindSearch on both open-source and closed-source datasets.?”
6.1.4使用react推理策略
React是一種RAG Agent技術,將使用者的問題進行計劃設計,並迭代迴圈執行,滿足特定結束調節。React可以結合工具進行呼叫,如搜尋引擎、Wiki百科等。問題:”Tell me somethong about 'University of Science and Technology of China'”
6.1.5使用ReWoo推理策略
ReWoo也是一種RAG Agent技術,第一階段制訂分步計劃,第二階段解決每個分步,也可以使用工具幫助推理過程,完成所有階段後,ReWoo將總結答案。問題:”Tell me somethong about 'University of Science and Technology of China' and 'shanghai ai Laboratory '”
6.2構建GraphRAG索引資訊
Kotaemon整合了微軟此前開源的GraphRAG框架,該框架包含圖譜及索引構建、圖譜檢索等步驟。問題: “the author’s of this paper”
7.總結
一句話足矣~
本文主要針對開源文件問答系統Kotaemon的介紹,包括主要功能特點,與傳統文件RAG的區別,部署教程以及效果體驗等。
目前Kotaemon針對中文語言支援不友好,但既然可以透過ollama進行部署LLM和Embedding模型,因此支援中文語言也是相對容易開發整合的。
後續系列會針對該框架中的檢索和推理模組做一個詳細的原始碼維度分析,敬請期待~
如果針對部署過程中存在疑問或部署不成功,或者想免費獲取使用openai的客官,可私信溝通。
如有問題或者想要合作的客官,可私信溝通。
8.參考
(1) Kotaemon倉庫: https://github.com/Cinnamon/kotaemon