保姆级教程!手把手教你从零开始基于 Langchain-Chatchat 搭建本地大模型知识库

图片

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),拉你进入行业技术交流群,进行技术交流

在图论中,数据结构用于表示图有三种常见的方法:邻接矩阵、邻接表和链式前向星。 1. **邻接矩阵**:这是一种二维数组(或矩阵)的表示法,其中行代表图中的顶点,列也代表顶点,每个元素(通常是布尔值或整数)表示两个顶点之间是否存在边。如果(i, j)位置的值为1或非零,表示顶点i和j相连;反之则表示不连接。邻接矩阵存储空间占用大,但查找任意两点间是否有边的时间复杂度是O(1),对于稠密图效率高。 2. **邻接表**:这是一种基于链表的数据结构,每个顶点都有一个链表,列表中的节点包含与该顶点相邻的所有其他顶点。这样,对于稀疏图来说,节省了大量空间,因为只存储实际存在的边。查找某个顶点的邻居需要遍历链表,时间复杂度为O(degree),其中degree是顶点的度(即相邻顶点的数量),对查找速度不利。 3. **链式前向星**:这是一种特殊的邻接表,通常用于构建树形图或有向无环图(DAG)的拓扑排序。在这种结构中,每个顶点有一条指向其子节点的链,形成一棵树状结构,且所有指向同一个顶点的边都是从父节点到子节点的。相比于一般的邻接表,链式前向星更直观地反映了图的层次关系,但查找路径可能需要沿着链逐向前,时间复杂度取决于目标节点的位置。 总结一下,邻接矩阵适合于稠密图,查询速度快,但空间消耗较大;邻接表适用于稀疏图,节省空间,但查找慢;链式前向星则常用于特定类型图的快速搜索,并能体现拓扑结构。选择哪种数据结构主要看图的具体特征和应用需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coder_风逝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值