Langchain-Chatchat/README.md

14 KiB
Raw Blame History

基于本地知识库的 ChatGLM 等大语言模型应用实现

目录

介绍

🤖 一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。

💡GanymedeNil 的项目 document.aiAlexZhangji 创建的 ChatGLM-6B Pull Request 启发,建立了全流程可使用开源模型实现的本地知识库问答应用。本项目的最新版本中通过使用 FastChat 接入 Vicuna, Alpaca, LLaMA, Koala, RWKV 等模型,依托于 langchain 框架支持通过基于 FastAPI 提供的 API 调用服务,或使用基于 Streamlit 的 WebUI 进行操作。

依托于本项目支持的开源 LLM 与 Embedding 模型,本项目可实现全部使用开源模型离线私有部署。与此同时,本项目也支持 OpenAI GPT API 的调用,并将在后续持续扩充对各类模型及模型 API 的接入。

⛓️ 本项目实现原理如下图所示,过程包括加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的 top k个 -> 匹配出的文本作为上下文和问题一起添加到 prompt中 -> 提交给 LLM生成回答。

📺 原理介绍视频

实现原理图

从文档处理角度来看,实现流程如下:

实现原理图2

🚩 本项目未涉及微调、训练过程,但可利用微调或训练对本项目效果进行优化。

🐳 Docker镜像registry.cn-beijing.aliyuncs.com/isafetech/chatmydata:1.0 (感谢 @InkSong🌲

💻 运行方式docker run -d -p 80:7860 --gpus all registry.cn-beijing.aliyuncs.com/isafetech/chatmydata:1.0

变更日志

参见 版本更新日志

0.1.x升级过来的用户请注意,在完成“开发部署 3 设置配置项”之后,需要将现有知识库迁移到新格式,具体见知识库初始化与迁移

模型支持

本项目中默认使用的 LLM 模型为 THUDM/chatglm2-6b,默认使用的 Embedding 模型为 moka-ai/m3e-base 为例。

LLM 模型支持

本项目最新版本中基于 FastChat 进行本地 LLM 模型接入,支持模型如下:

以上模型支持列表可能随 FastChat 更新而持续更新,可参考 FastChat 已支持模型列表

Embedding 模型支持

本项目支持调用 HuggingFace 中的 Embedding 模型,已支持的 Embedding 模型如下:

Docker 整合包

🐳 Docker镜像地址registry.cn-beijing.aliyuncs.com/isafetech/chatmydata:1.0 🌲

💻 一行命令运行:

docker run -d -p 80:7860 --gpus all registry.cn-beijing.aliyuncs.com/isafetech/chatmydata:1.0
  • 该版本镜像大小 25.2G,使用v0.1.16,以 nvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04为基础镜像
  • 该版本内置两个 embedding模型:m3e-basetext2vec-large-chinese,内置 fastchat+chatglm-6b
  • 该版本目标为方便一键部署使用请确保您已经在Linux发行版上安装了NVIDIA驱动程序
  • 请注意您不需要在主机系统上安装CUDA工具包但需要安装 NVIDIA Driver以及 NVIDIA Container Toolkit,请参考安装指南
  • 首次拉取和启动均需要一定时间,首次启动时请参照下图使用 docker logs -f <container id>查看日志
  • 如遇到启动过程卡在 Waiting..步骤,建议使用 docker exec -it <container id> bash进入 /logs/目录查看对应阶段日志

Docker 部署

为了能让容器使用主机GPU资源需要在主机上安装 NVIDIA Container Toolkit。具体安装步骤如下:

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit-base
sudo systemctl daemon-reload 
sudo systemctl restart docker

安装完成后,可以使用以下命令编译镜像和启动容器:

docker build -f Dockerfile-cuda -t chatglm-cuda:latest .
docker run --gpus all -d --name chatglm -p 7860:7860  chatglm-cuda:latest

#若要使用离线模型,请配置好模型路径,然后此 repo 挂载到 Container
docker run --gpus all -d --name chatglm -p 7860:7860 -v ~/github/langchain-ChatGLM:/chatGLM  chatglm-cuda:latest

开发部署

软件需求

本项目已在 Python 3.8.1 - 3.10CUDA 11.7 环境下完成测试。已在 Windows、ARM 架构的 macOS、Linux 系统中完成测试。

1. 开发环境准备

参见 开发环境准备

2. 下载模型至本地

如需在本地或离线环境下运行本项目,需要首先将项目所需的模型下载至本地,通常开源 LLM 与 Embedding 模型可以从 HuggingFace 下载。

以本项目中默认使用的 LLM 模型 THUDM/chatglm2-6b 与 Embedding 模型 moka-ai/m3e-base 为例:

下载模型需要先安装Git LFS,然后运行

$ git clone https://huggingface.co/THUDM/chatglm2-6b

$ git clone https://huggingface.co/moka-ai/m3e-base

3. 设置配置项

复制文件 configs/model_config.py.example 存储至项目路径下 ./configs 路径下,并重命名为 model_config.py

在开始执行 Web UI 或命令行交互前,请先检查 configs/model_config.py 中的各项模型参数设计是否符合需求:

  • 请确认已下载至本地的 LLM 模型本地存储路径写在 llm_model_dict 对应模型的 local_model_path 属性中,如:
llm_model_dict={
                "chatglm2-6b": {
                        "local_model_path": "/Users/xxx/Downloads/chatglm2-6b",
                        "api_base_url": "http://localhost:8888/v1",  # "name"修改为fastchat服务中的"api_base_url"
                        "api_key": "EMPTY"
                    },
                }
  • 请确认已下载至本地的 Embedding 模型本地存储路径写在 embedding_model_dict 对应模型位置,如:
embedding_model_dict = {
                        "m3e-base": "/Users/xxx/Downloads/m3e-base",
                       }

4. 启动 API 服务或 Web UI

4.1 启动LLM服务

在项目根目录下,执行 server/llm_api.py 脚本启动 LLM 模型服务:

$ python server/llm_api.py

以如上方式启动LLM服务会以nohup命令在后台运行fastchat服务如需停止服务可以运行如下命令

$python server/llm_api_shutdown.py --serve all 

亦可单独停止一个fastchat服务模块可选[all, controller,model_worker,openai_api_server]

4.2 启动API服务

启动LLM服务后,执行 server/api.py 脚本启动 API 服务

$ python server/api.py

4.3 启动Web UI服务

执行 webui.py 启动 Web UI 服务

$ python webui.py

常见问题

参见 常见问题

路线图

项目交流群

二维码

🎉 langchain-ChatGLM 项目微信交流群,如果你也对本项目感兴趣,欢迎加入群聊参与讨论交流。