基于Langchain-Chatchat + ChatGLM 本地部署知识库

news/2025/1/31 3:26:44/

一、相关环境

参考链接: Github:https://github.com/chatchat-space/Langchain-Chatchat

Langchain-chatchat版本:v0.3.1

安装环境:Ubuntu:22.04,CUDA:12.1

二、搭建过程

2.1 环境配置

2.1.1 创建chatchat虚拟环境

  • 创建chatcaht虚拟环境
conda create -n chat python=3.11 -y
conda activate chat
  • 克隆仓库
git clone https://github.com/chatchat-space/Langchain-Chatchat.git
#进入目录
cd Langchain-Chatchat
  • 安装依赖
pip install "langchain-chatchat[xinference]" -U

使用模型推理框架并加载模型,这里用到的是Xinference。

【注意】为避免依赖冲突,请将 Langchain-Chatchat 和模型部署框架如 Xinference 等放在不同的 Python 虚拟环境中,比如 conda, venv, virtualenv 等。

2.1.2 创建xinference虚拟环境

  • 创建xinference虚拟环境
conda create -n xinf python=3.10 -y
conda activate xinf
  • 安装依赖
pip install "xinference[transformers]"
pip install sentence-transformers
  • 启动xinference
xinference-local --host 0.0.0.0 --port 9997

image.png

2.2 模型推理框架并加载模型(xinference)

image.png

image.png

在xinference加载模型

image.png

  • 在xinference加载本地模型

在启动 Xinference 服务后,到项目 tools/model_loaders 目录下执行

streamlit run xinference_manager.py

image.png

按照页面提示为指定模型设置本地路径即可

image.png

2.3 初始化项目配置与数据目录

打开 chatchat:

设置 Chatchat 存储配置文件和数据文件的根目录,在文件夹中新建一个chatchat_data 文件夹:

image.png

data 文件夹

# on linux or macos 
export CHATCHAT_ROOT=/path/to/chatchat_data 
# on windows 
set CHATCHAT_ROOT=/path/to/chatchat_data

若不设置该环境变量,则自动使用当前目录。

执行初始化:

chatchat init

该命令会执行以下操作:

  • 创建所有需要的数据目录
  • 复制 samples 知识库内容
  • 生成默认 yaml 配置文件

image.png

数据库中的内容

image.png

初始化成功

修改配置文件,需要根据步骤 2.2 模型推理框架并加载模型中选用的模型推理框架与加载的模型进行模型接入配置,具体参考 model_settings.yaml 中的注释。主要修改以下内容:

# 默认选用的 LLM 名称DEFAULT_LLM_MODEL: glm4-chat# 默认选用的 Embedding 名称DEFAULT_EMBEDDING_MODEL: bge-m3# 将 `LLM_MODEL_CONFIG` 中 `llm_model, action_model` 的键改成对应的 LLM 模型
# 在 `MODEL_PLATFORMS` 中修改对应模型平台信息

配置知识库路径(basic_settings.yaml),这步可以不做,如果你就是用前面配置好的数据库地址。

默认知识库位于CHATCHAT_ROOT/data/knowledge_base,如果你想把知识库放在不同的位置,或者想连接现有的知识库,可以在这里修改对应目录即可。

# 知识库默认存储路径KB_ROOT_PATH: D:\chatchat-test\data\knowledge_base# 数据库默认存储路径。如果使用sqlite,可以直接修改DB_ROOT_PATH;如果使用其它数据库,请直接修改SQLALCHEMY_DATABASE_URI。DB_ROOT_PATH: D:\chatchat-test\data\knowledge_base\info.db# 知识库信息数据库连接URISQLALCHEMY_DATABASE_URI: sqlite:///D:\chatchat-test\data\knowledge_base\info.db

配置知识库(kb_settings.yaml)(可选):

默认使用 FAISS 知识库,如果想连接其它类型的知识库,可以修改 和 kbs_config。

支持的数据文件类型很多,包括PDF、TXT、MP4、CSV、MD等,但是要注意放置到对应的文件夹下面:

image.png

直接将文件放在这些文件夹内即可

2.4 初始化知识库

进行知识库初始化前,请确保已经启动模型推理框架及对应 embedding 模型(也就是 Xinference 框架要启动着),且已按照上述步骤 2.3 完成模型接入配置。

chatchat kb -r

image.png

出现这个就说明已经加载好了

更多功能可以查看:

chatchat kb --help

参数说明:

  • -r, --recreate:重新创建矢量存储。如果存在此选项,则使用它。已将文档文件复制到内容文件夹,但矢量存储尚未填充或DEFAUL_VS_TYPE/DEFAUL_EMBEDING_MODEL已更改。
  • --create-table:如果不存在,则创建空表。
  • --clear-table:创建空表,或在重新创建矢量存储之前删除数据库表。
  • -u, --db-update:数据库中存在文件的矢量存储更新。如果要重新创建矢量存储,请使用此选项。文件存在于数据库中,跳过文件存在于本地文件夹。
  • -i, --incremental:本地文件夹中存在文件的增量更新矢量存储,数据库中不存在。如果您希望逐步创建矢量,请使用此选项。
  • --trim-db:删除本地数据库中不存在的文档文件夹中的文档。用于删除用户在文件浏览器中删除的文档文件。
  • --trim-folder: 删除本地文件夹中不存在的文档文件数据库。用于释放本地磁盘空间,删除未使用的文档文件。
  • -n, --kb-name TEXT:指定要操作的知识库名称。默认值为KB_ROOT_PATH中存在的所有文件夹。
  • -e, --embed-model TEXT:指定嵌入模型。
  • --import-from-db TEXT:从指定的sqlite数据库导入表。

--help:显示此消息并退出。

2.5 启动项目

chatchat start -a

image.png

三、遇见问题

pip install openai==0.28.1

http://www.ppmy.cn/news/1568046.html

相关文章

linux如何修改密码,要在CentOS 7系统中修改密码

要在CentOS 7系统中修改密码,你可以按照以下步骤操作: 步骤 1: 登录到系统 在登录提示符 localhost login: 后输入你的用户名。输入密码并按回车键。 步骤 2: 修改密码 登录后,使用 passwd 命令来修改密码: passwd 系统会提…

RocketMQ 中如何实现消息的可靠传递?

引言 作为头部消息队列开源中间件,学习其中的技术方案并且总结可靠性和健壮性,提升我们的架构思维和解决问题的能力 。 在 RocketMQ 中实现消息的可靠传递可以从多个方面入手,涵盖生产者、Broker 以及消费者等不同环节。 生产者端 1. 同步…

【java学习笔记】@Autowired注解 使用方法和作用 | 配合@Component注解使用 | IOC控制反转

原本在类中,要用什么对象,就直接new一个对象。这种原始的方式 是由应用本身去控制实例的。 用了Autowired注解后,就相当于把实例(对象)的控制权 交给外部容器来统一管理(降低耦合)。&#xff08…

Java设计模式:结构型模式→组合模式

Java 组合模式详解 1. 定义 组合模式(Composite Pattern)是一种结构型设计模式,它允许将对象组合成树形结构以表示“部分-整体”的层次。组合模式使得客户端能够以统一的方式对待单个对象和对象集合的一致性,有助于处理树形结构…

使用 Python 和 Tesseract 实现验证码识别

验证码识别是一个常见且实用的技术需求,尤其是在自动化测试和数据采集场景中。通过开源 OCR(Optical Character Recognition,光学字符识别)工具 Tesseract,结合 Python 的强大生态,我们可以高效实现验证码识…

基于微信小程序的社团活动助手php+论文源码调试讲解

4 系统设计 4.1 系统设计主要功能 通过市场调研及咨询研究,了解了用户的使用需求,于是制定了管理员和用户模块。功能结构图如下所示: 图4-1系统功能结构图 4.2 数据库设计 4.2.1 数据库设计规范 数据可设计要遵循职责分离原则,即…

03.04、化栈为队

03.04、化栈为队 1、题目描述 实现一个 MyQueue 类,该类用两个栈来实现一个队列。 2、解题思路 本题要求使用两个栈来实现一个队列。队列遵循先进先出(FIFO)的原则,而栈遵循后进先出(LIFO)的原则。因此…

【Elasticsearch 】悬挂索引(Dangling Indices)

Elasticsearch 悬挂索引(Dangling Indices)解析与管理 1. 悬挂索引的定义 悬挂索引(Dangling Indices)是指存在于节点上但未被集群元数据识别的索引分片。这些索引分片不会参与到集群的正常索引操作中。 2. 悬挂索引的产生原因…