READ THIS IN ENGLISH
LangChain-Chatchat (原Langchain-ChatGLM)
基於ChatGLM 等大語言模型與Langchain 等應用框架實現,開源、可離線部署的RAG 與Agent 應用專案。
概述
功能介紹
0.3.x 功能一覽
已支持的模型推理框架與模型
快速上手
pip 安裝部署
原始碼安裝部署/開發部署
Docker 部署
專案里程碑
聯絡我們
?️ 一種利用langchain 思想實現的基於本地知識庫的問答應用,目標期望建立一套對中文場景與開源模型支援友好、可離線運行的知識庫問答解決方案。
?受GanymedeNil 的專案document.ai 和AlexZhangji 創建的ChatGLM-6B Pull Request 啟發,建立了全流程可使用開源模型實現的本地知識庫問答應用。本計畫的最新版本可使用Xinference、Ollama 等框架來存取GLM-4-Chat、 Qwen2-Instruct、 Llama3 等模型,依託於langchain 框架支援透過基於FastAPI 提供的API 呼叫服務,或使用基於Streamlit 的WebUI 進行操作。
✅ 本專案支援市面上主流的開源LLM、 Embedding 模型與向量資料庫,可實現全部使用開源模型離線私有部署。同時,本計畫也支援OpenAI GPT API 的調用,並將在後續持續擴充各類模型及模型API 的存取。
⛓️ 本項目實現原理如下圖所示,過程包括加載文件-> 讀取文本-> 文本分割-> 文本矢量化-> 問句向量化-> 在文本向量中匹配出與問句向量最相似的top k
個-> 匹配出的文本作為上下文和問題一起添加到prompt
中-> 提交給LLM
生成回答。
? 原理介紹視頻
從文件處理角度來看,實作流程如下:
? 本項目未涉及微調、訓練過程,但可利用微調或訓練對本項目效果進行最佳化。
? AutoDL 鏡像中0.3.0
版本所使用代碼已更新至本項目v0.3.0
版本。
? Docker 映像將會在近期更新。
?? 如果你想對本專案做出貢獻,歡迎移步開髮指南以取得更多開發部署相關資訊。
功能 | 0.2.x | 0.3.x |
---|---|---|
模型存取 | 本地:fastchat 線上:XXXModelWorker | 本地:model_provider,支援大部分主流模型載入框架在線:oneapi 所有模型存取均相容於openai sdk |
Agent | ❌不穩定 | ✅針對ChatGLM3和Qwen進行最佳化,Agent能力顯著提升 |
LLM對話 | ✅ | ✅ |
知識庫對話 | ✅ | ✅ |
搜尋引擎對話 | ✅ | ✅ |
文件對話 | ✅僅向量檢索 | ✅統一為File RAG功能,支援BM25+KNN等多種檢索方式 |
資料庫對話 | ❌ | ✅ |
多模態圖片對話 | ❌ | ✅ 推薦使用qwen-vl-chat |
ARXIV文獻對話 | ❌ | ✅ |
Wolfram對話 | ❌ | ✅ |
文生圖 | ❌ | ✅ |
本地知識庫管理 | ✅ | ✅ |
WEBUI | ✅ | ✅更好的多會話支援,自訂系統提示詞... |
0.3.x 版本的核心功能由Agent 實作,但使用者也可以手動實現工具呼叫:
操作方式 | 實現的功能 | 適用場景 |
---|---|---|
選取"啟用Agent",選擇多個工具 | 由LLM自動進行工具調用 | 使用ChatGLM3/Qwen或線上API等具備Agent能力的模型 |
選取"啟用Agent",選擇單一工具 | LLM僅解析工具參數 | 使用的模型Agent能力一般,不能很好的選擇工具想手動選擇功能 |
不選取"啟用Agent",選擇單一工具 | 不使用Agent功能的情況下,手動填入參數進行工具調用 | 使用的模式不具備Agent能力 |
不選取任何工具,上傳一張圖片 | 圖片對話 | 使用qwen-vl-chat 等多模態模型 |
更多功能和更新請實際部署體驗.
本項目中已經支援市面上主流的如GLM-4-Chat 與Qwen2-Instruct 等新近開源大語言模型和Embedding 模型,這些模型需要用戶自行啟動模型部署框架後,透過修改配置資訊存取項目,本項目已支援的本地模型部署框架如下:
模型部署框架 | Xinference | LocalAI | Ollama | FastChat |
---|---|---|---|---|
OpenAI API 介面對齊 | ✅ | ✅ | ✅ | ✅ |
加速推理引擎 | GPTQ, GGML, vLLM, TensorRT, mlx | GPTQ, GGML, vLLM, TensorRT | GGUF, GGML | vLLM |
接入模型類型 | LLM, Embedding, Rerank, Text-to-Image, Vision, Audio | LLM, Embedding, Rerank, Text-to-Image, Vision, Audio | LLM, Text-to-Image, Vision | LLM, Vision |
Function Call | ✅ | ✅ | ✅ | / |
更多平台支援(CPU, Metal) | ✅ | ✅ | ✅ | ✅ |
異質 | ✅ | ✅ | / | / |
叢集 | ✅ | ✅ | / | / |
操作文檔連結 | Xinference 文檔 | LocalAI 文檔 | Ollama 文檔 | FastChat 文檔 |
可用模型 | Xinference 已支援模型 | LocalAI 已支援模型 | Ollama 已支援模型 | FastChat 已支援模型 |
除上述本地模型載入框架外,專案中也為可存取線上API 的One API 框架存取提供了支持,支援包括OpenAI ChatGPT、Azure OpenAI API、Anthropic Claude、智譜清言、百川等常用線上API 的接入使用。
Note
關於Xinference 載入本機模型: Xinference 內建模型會自動下載,如果想讓它載入本機下載好的模型,可以在啟動Xinference 服務後,到專案tools/model_loaders 目錄下執行streamlit run xinference_manager.py
,依照頁面提示為指定模型設定本地路徑即可.
? 軟體方面,本專案已支援在Python 3.8-3.11 環境中進行使用,並已在Windows、macOS、Linux 作業系統中進行測試。
?硬體方面,因0.3.0 版本已修改為支援不同模型部署框架接入,因此可在CPU、GPU、NPU、MPS 等不同硬體條件下使用。
從0.3.0 版本起,Langchain-Chatchat 提供以Python 庫形式的安裝方式,具體安裝請執行:
pip install langchain-chatchat -U
Important
為確保所使用的Python 庫為最新版,建議使用官方Pypi 來源或清華源。
Note
因模型部署框架Xinference 接取Langchain-Chatchat 時需要額外安裝對應的Python 依賴函式庫,因此如需搭配Xinference 框架使用時,建議使用下列安裝方式:
pip install "langchain-chatchat[xinference]" -U
從0.3.0 版本起,Langchain-Chatchat 不再根據使用者輸入的本地模型路徑直接進行模型加載,涉及到的模型種類包括LLM、Embedding、Reranker 及後續會提供支援的多模態模型等,均改為支援市面常見的各大模型推理框架接入,如Xinference、Ollama、LocalAI、FastChat、One API 等。
因此,請確認在啟動Langchain-Chatchat 專案之前,先進行模型推理框架的運行,並載入所需使用的模型。
這裡以Xinference 舉例, 請參考Xinference文件進行框架部署與模型載入。
Warning
為避免依賴衝突,請將Langchain-Chatchat 和模型部署框架如Xinference 等放在不同的Python 虛擬環境中, 例如conda, venv, virtualenv 等。
從0.3.1 版本起,Langchain-Chatchat 使用本地yaml
檔案的方式進行配置,使用者可以直接查看並修改其中的內容,伺服器會自動更新無需重新啟動。
設定Chatchat 儲存設定檔和資料檔案的根目錄(可選)
# on linux or macosexport CHATCHAT_ROOT=/path/to/chatchat_data# on windowsset CHATCHAT_ROOT=/path/to/chatchat_data
若不設定該環境變量,則自動使用目前目錄。
執行初始化
chatchat init
該命令會執行以下操作:
建立所有需要的資料目錄
複製samples 知識庫內容
產生預設yaml
設定檔
修改設定檔
配置模型(model_settings.yaml)
需要根據步驟2.模型推理框架並載入模型中選用的模型推理框架與載入的模型進行模型接入配置,具體參考model_settings.yaml
中的註釋。主要修改以下內容:
# 預設選用的LLM 名稱DEFAULT_LLM_MODEL: qwen1.5-chat # 預設選用的Embedding 名稱DEFAULT_EMBEDDING_MODEL: bge-large-zh-v1.5# 將`LLM_MODEL_CONFIFI` 中`actionm_delp在`MODEL_PLATFORMS` 中修改對應模型平台訊息
配置知識庫路徑(basic_settings.yaml)(可選)
預設知識庫位於CHATCHAT_ROOT/data/knowledge_base
,如果你想把知識庫放在不同的位置,或者想連接現有的知識庫,可以在這裡修改對應目錄即可。
# 知識庫預設儲存路徑 KB_ROOT_PATH: D:chatchat-testdataknowledge_base # 資料庫預設儲存路徑。如果使用sqlite,可以直接修改DB_ROOT_PATH;如果使用其它資料庫,請直接修改SQLALCHEMY_DATABASE_URI。 DB_ROOT_PATH: D:chatchat-testdataknowledge_baseinfo.db # 知識庫資訊資料庫連接URI SQLALCHEMY_DATABASE_URI: sqlite:///D:chatchat-testdataknowledge_baseinfo.db
配置知識庫(kb_settings.yaml)(可選)
預設使用FAISS
知識庫,如果想連接其它類型的知識庫,可以修改DEFAULT_VS_TYPE
和kbs_config
。
Warning
進行知識庫初始化前,請確保已啟動模型推理架構及對應embedding
模型,且已依照上述步驟3完成模型存取配置。
chatchat kb -r
更多功能可以查看chatchat kb --help
出現以下日誌即為成功:
----------------------------------------------------------------------------------------------------
知识库名称 :samples
知识库类型 :faiss
向量模型: :bge-large-zh-v1.5
知识库路径 :/root/anaconda3/envs/chatchat/lib/python3.11/site-packages/chatchat/data/knowledge_base/samples
文件总数量 :47
入库文件数 :42
知识条目数 :740
用时 :0:02:29.701002
----------------------------------------------------------------------------------------------------
总计用时 :0:02:33.414425
Note
知識庫初始化的常見問題
此問題常出現於新建虛擬環境中,可透過以下方式確認:
from unstructured.partition.auto import partition
如果該語句卡住無法執行,可以執行以下命令:
pip uninstall python-magic-bin# check the version of the uninstalled packagepip install 'python-magic-bin=={version}'
然後按照本節指引重新建立知識庫即可。
chatchat start -a
出現以下介面即為啟動成功:
Warning
由於chatchat 設定預設監聽位址DEFAULT_BIND_HOST
為127.0.0.1, 所以無法透過其他ip 存取。
如需透過機器ip 進行存取(如Linux 系統), 需要到basic_settings.yaml
中將監聽位址修改為0.0.0.0。
資料庫對話配置請移步這裡資料庫對話設定說明
原始碼安裝部署請參考開髮指南
docker pull chatimage/chatchat:0.3.1.3-93e2c87-20240829 docker pull ccr.ccs.tencentyun.com/langchain-chatchat/chatchat:0.3.1.3-93e2c87-20240829 # 國內鏡像
Important
強烈建議: 使用docker-compose 部署, 具體參考README_docker
0.3.x 結構改變很大,強烈建議您按照文件重新部署. 以下指南不保證100%相容和成功. 記得提前備份重要資料!
首先依照安装部署
中的步驟設定運行環境,修改設定文件
將0.2.x 專案的knowledge_base 目錄拷貝到配置的DATA
目錄下
2023年4月
: Langchain-ChatGLM 0.1.0
發布,支援基於ChatGLM-6B 模型的本地知識庫問答。
2023年8月
: Langchain-ChatGLM
改名為Langchain-Chatchat
,發表0.2.0
版本,使用fastchat
作為模型載入方案,支援更多的模型和資料庫。
2023年10月
: Langchain-Chatchat 0.2.5
發布,推出Agent 內容,開源專案在Founder Park & Zhipu AI & Zilliz
舉辦的黑客馬拉松獲得三等獎。
2023年12月
: Langchain-Chatchat
開源專案獲得超過20K stars.
2024年6月
: Langchain-Chatchat 0.3.0
發布,帶來全新專案架構。
?讓我們一起期待未來Chatchat 的故事···
本專案代碼遵循Apache-2.0 協定。
? Langchain-Chatchat 計畫微信交流群,如果你也對這個計畫有興趣,歡迎加入群組聊天參與討論交流。
? Langchain-Chatchat 項目官方公眾號,歡迎掃碼關注。
如果本項目有幫助到您的研究,請引用我們:
@software{langchain_chatchat, title = {{langchain-chatchat}}, author = {Liu, Qian and Song, Jinke, and Huang, Zhiguo, and Zhang, Yuxuan, and glide-the, and liunux4odoo}, year = 2024, journal = {GitHub repository}, publisher = {GitHub}, howpublished = {url{https://github.com/chatchat-space/Langchain-Chatchat}} }