LangChain-Chatchat 基于 ChatGLM 等大语言模型与 Langchain 等应用框架实现,开源、可离线部署的 RAG 与 Agent 应用项目,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。
本文我们通过先简单介绍 LangChain-Chatchat 的原理,让大家有个大概认知,然后通过手把手一步一步教大家搭建自己的本地大模型知识库,如下所示就是我们的最终成果,相信通过这篇文章,你也能快速搭建自己的本地大模型知识库!
一、Langchain-Chatchat 介绍
本项目支持市面上主流的开源 LLM、 Embedding 模型与向量数据库,可实现全部使用开源模型离线私有部署。与此同时,本项目也支持 OpenAI GPT API 的调用,并将在后续持续扩充对各类模型及模型 API 的接入。
1、实现原理
本项目实现原理如下图所示,过程包括加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的 top k个 -> 匹配出的文本作为上下文和问题一起添加到 prompt中 -> 提交给 LLM生成回答。如下图所示
从文档处理角度来看,实现流程如下:
2、功能介绍
最新的 0.3.x 版本功能如下列表所示
0.3.x 版本的核心功能由 Agent 实现,但用户也可以手动实现工具调用:
3、模型框架支持
本项目中已经支持市面上主流的如 GLM-4-Chat 与 Qwen2-Instruct 等新近开源大语言模型和 Embedding 模型,这些模型需要用户自行启动模型部署框架后,通过修改配置信息接入项目,本项目已支持的本地模型部署框架如下:
除上述本地模型加载框架外,项目中也为可接入在线 API 的 One API 框架接入提供了支持,支持包括 OpenAI ChatGPT、Azure OpenAI API、Anthropic Claude、智谱清言、百川 等常用在线 API 的接入使用。
二、从零开始上手
1、软硬件要求
💡 软件方面,本项目已支持在 Python 3.8-3.11 环境中进行使用,并已在 Windows、macOS、Linux 操作系统中进行测试。
💻 硬件方面,因 0.3.0 版本已修改为支持不同模型部署框架接入,因此可在 CPU、GPU、NPU、MPS 等不同硬件条件下使用。
2、安装对应库
我们使用 pip 进行 langchain-chatchat 安装,并且采用清华源,具体安装命令如下所示
pip install langchain-chatchat -U -i https://pypi.tuna.tsinghua.edu.cn/simple/
因模型部署框架 Xinference 接入 Langchain-Chatchat 时需要额外安装对应的 Python 依赖库,因此如需搭配 Xinference 框架使用时,需要进行对应的安装:
安装 Chatchat 库,实现模型后处理
pip install "langchain-chatchat[xinference]" -U -i https://pypi.tuna.tsinghua.edu.cn/simple/
安装 xinference 库,实现模型推理
pip install "xinference[all]" -U -i https://pypi.tuna.tsinghua.edu.cn/simple/
3、xinference
安装完相应的库之后,启动 xinference 以进行模型部署,通过命令行执行
xinference-local --host 0.0.0.0 --port 9997
启动后访问:IP:9997 即可进入 xinference 主界面,如下所示
选择我们需要部署的模型,比如我这里选择 qwen2-instruct 进行部署。填写相应的参数,进行一键部署。第一次部署会下载模型,可以选择国内阿里达摩院通道 modelscope 下载,速度较快
下载完成会自动部署,部署完成后,会展示在 Running 中,可以通过打开模型 UI进行访问
我们还需要安装一个一个向量模型,我们选择 bge-m3 这个向量模型,安装部署如下所示
4、初始化项目配置
从 0.3.1 版本起,Langchain-Chatchat 使用本地 yaml 文件的方式进行配置,用户可以直接查看并修改其中的内容,服务器会自动更新无需重启。
(1)设置 Chatchat 存储配置文件和数据文件的根目录(可选)
若不设置该环境变量,则自动使用当前目录。
# on linux or macos
export CHATCHAT_ROOT=/path/to/chatchat_data
# on windows
set CHATCHAT_ROOT=/path/to/chatchat_data
(2)执行初始化
执行初始化命令,生成配置文件
chatchat init
该命令会执行以下操作:
-
创建所有需要的数据目录
-
复制 samples 知识库内容
-
生成默认 yaml 配置文件
(3)修改配置文件
修改配置模型 model_settings.yaml
# 默认选用的 LLM 名称
DEFAULT_LLM_MODEL: qwen2-chat
# 默认选用的 Embedding 名称
DEFAULT_EMBEDDING_MODEL: bge-m3
# 将 `LLM_MODEL_CONFIG` 中 `llm_model, action_model` 的键改成对应的 LLM 模型
# 在 `MODEL_PLATFORMS` 中修改对应模型平台信息
修改基础配置文件 basic_settings.yaml
# API 服务器地址。其中 public_host 用于生成云服务公网访问链接(如知识库文档链接)
API_SERVER:
host: X.x.x.x # 自己服务器IP
port: 7861 # 自己配置对应端口
# WEBUI 服务器地址
WEBUI_SERVER:
host: x.x.x.x # 自己服务器IP
port: 8501 # 自己配置对应端口
5、初始化知识库
在进行知识库初始化前,请确保已经启动模型推理框架及对应 embedding 模型,执行以下命令进行知识库初始化
chatchat kb -r
出现以下日志即为成功:
----------------------------------------------------------------------------------------------------
知识库名称 :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
6、启动项目
执行以下命令启动项目
chatchat start -a
默认地址为:IP:8501,进入 chatchat 前端页面,如下所示,我们就可以与它进行对话问答了!
看到这,恭喜你已经在脑海中搭建了自己的本地大模型知识库,心动不如行动,赶紧去动手试试吧,有问题欢迎留言交流!
如果你喜欢本文,欢迎点赞,并且关注我们的微信公众号:Python技术极客,我们会持续更新分享 Python 开发编程、数据分析、数据挖掘、AI 人工智能、网络爬虫等技术文章!让大家在Python 技术领域持续精进提升,成为更好的自己!
添加作者微信(coder_0101),拉你进入行业技术交流群,进行技术交流