本地部署LangLangChain-Chatchat

一. Langchain-Chatchat 源代码部署至本地

1.源码下载

1.1 在C盘或D盘新建工作根目录test,保存我们即将下载下来的源码

打开命令提示符(CMD)或 Git Bash,输入以下命令检查是否安装git

git --version

若显示下图说明已有git,否者去Git官方下载:Git

1.2 在Visual Studio Code中打开空目录test,在终端中输入下列命令,将源码下载到test文件夹下

git clone https://github.com/chatchat-space/Langchain-Chatchat.git

如何下载过慢,可以尝试以下镜像方式下载加快速度

git clone https://gitclone.com/github.com/chatchat-space/Langchain-Chatchat.git

下载完成后可以看到以下工作目录

2. Langchain-Chatchat 环境配置(强推使用anaconda进行环境配置管理)

2.1在Anaconda Prompt下使用如下命令创建一个基础环境

conda create -n chatchat python=3.9

打开pycharm选择刚刚建好的环境,在pycharm终端中可以看到我们已经激活环境

2.2 进入主项目目录,并安装 Langchain-Chatchat 依赖(如果下载速度过慢可以使用国内镜像源)

cd  Langchain-Chatchat/libs/chatchat-server/
pip install -e .

2.3 设置源代码根目录

cd Langchain-Chatchat/libs/chatchat-server/chatchat
export CHATCHAT_ROOT=/parth/to/chatchat_data

2.4 执行以下命令初始化项目配置文件和数据目录:

cd libs/chatchat-server
python chatchat/cli.py init

至此我们可以看到如下结果,说明我们的chatchat已经初始化成功。WARNING不用管因为我们还没有配置模型加载平台。这时会在chatchat-server目录下生成一些配置文件(作用会在后面说明),我们可以直接修改配置文件中的相应参数来达到我们目的效果

接下来我们输入以下命令启动chatchat交互页面

chatchat start -a

如果有以下报错说明httpx网络请求库更新了API,少了一些参数,我们只需要降级httpx的库版本即可

pip install httpx==0.27.2

3. Xinference模型部署平台安装(模型加载默认是在c盘,所以要保证c盘有着至少20G内存来运行模型,模型关闭后缓存自动释放,因此不用担心c盘内存占用问题)

!注意:这里一定要再新建一个环境来单独存放Xinference依赖包,不要和刚刚建的Langchain—chatchat依赖环境放在一起,因为这样会有一些库版本相互冲突引起一些奇奇怪怪的bug

3.1 新建环境

conda create -n xinference python==3.10

3.2 下载Xinference环境依赖

考虑到PyTorch(transformers) 引擎支持几乎有所的最新模型,我们只需下载Transformers引擎。(如果想要尝试非transformers架构下的语言模型,可以使用"pip install "xinference[all]"下载全部,但是过程中需要安装c++引擎等乱七八糟的东西,这里不再详细说了,可以上网自行查阅解决办法)

激活环境并输入下列命令安装依赖:

pip install "xinference[transformers]"

注意,我们使用这个命令默认安装的是cpu版本的pytorch,就意味着部署的大语言模型和词向量模型无法使用本地GPU加速推理,结果就是在模型推理时速度很慢,如果使用GPU加速推理,速度会有一点点提高但感觉可以忽略不计,因此暂且使用cpu版本

3.3 打开xinference交互页面,并下载相应模型至本地

进入xinference环境,并输入如下命令打开交互页面,下载语言模型和词嵌入模型(推荐qwen1.5-chat与bge-m3):

xinference-local --host 0.0.0.0 --port 9997

二. Langchain-Chatchat 主要模块功能介绍以及优化说明

1. 核心功能模块介绍

1.1 配置文件生成模块

该模块主要定义了如下配置的设置

  • 配置管理:通过 pydantic 和 BaseFileSettings 实现配置文件的加载和管理。

  • 路径管理:定义了项目的根目录、数据目录、日志目录等路径。

  • 模型配置:定义了与模型相关的配置,包括默认模型、平台配置、工具配置等。

  • 工具配置:定义了与工具相关的配置,如本地知识库、搜索引擎、SQL 查询等。

  • Prompt 模板:定义了不同场景下的 Prompt 模板,用于与 LLM 交互。

例如,当我们在本地运行多个模型时,我们可以让框架调用指定的模型,我们可以通过修改其默认参数,也可以制定一些prompt模板,让语言模型按照我们的需求回答相关内容,比如回答语气,立场,格式等等

1.2 Agent代理

在agent文件夹下定义了各种代理的调用api实现方法,比如说当用户的问题需要简单的科学计算时,会自动调用数学计算机的api用于简单的科学计算,当用户的问题是关于天气状况时,会调用weather_api进行天气查询

1.3 对话聊天功能

比如chat函数用于实现与LLM模型的对话功能。主要负责处理用户与LLM模型之间的对话。它首先通过`add_message_to_db`函数将用户的查询和对话信息保存到数据库中。然后,根据传入的参数,如历史对话记录、模型名称、温度等,构建一个适合LLM模型的输入提示(prompt)。接着,使用`LLMChain`对象发起对话请求,并通过`AsyncIteratorCallbackHandler`处理模型的异步响应。如果启用了流式输出,函数将逐个Token地返回响应结果;否则,会等待所有响应完成后,一次性返回整个对话结果。最后,通过`EventSourceResponse`将结果以服务器发送事件(SSE)的形式返回给客户端。

1.4 记忆缓存功能模块

该模块主要负责处理与对话相关的历史消息的缓存和管理。它通过`conversation_id`定位特定的对话,并根据需要从数据库中检索历史消息。通过`buffer`属性,可以获取到一个经过处理的消息列表,其中包括了人类用户和智能助手的交互消息。这个列表在超出最大令牌限制时会进行裁剪,以确保不会因为历史消息过多而影响性能。`memory_variables`属性和`load_memory_variables`方法用于处理内存变量,支持智能助手基于历史对话生成响应。`save_context`和`clear`方法在这个类中被设计为不执行任何操作,因为所有必要的历史信息都是即时从数据库中检索的。

注:各种函数模块介绍在markdown_docs文件夹中都有详细介绍,请读者根据需求自行阅读

2. 前端交互部分

2.1 基础显示

在实现网页的个性化配置时,使用了 st.set_page_config 方法来修改原本的网页图标和标题,同时利用 st.markdown 方法隐藏了 Streamlit 自带的 UI 元素,例如部署按钮和设置按钮。在侧边栏中,新建了一个选择框,允许用户选择身份类型,包括用户和管理员。

首先在webui.py中修改如下内容,实现改变logo和自动隐藏功能

在管理员登录页面,设置了一个输入框用于输入登录密码,并添加了一个确认按钮。通过 if-else 判断逻辑,验证密码的正确性,以此来决定用户是否能够成功登录。根据用户的身份不同,系统会在侧边栏菜单中展示不同的内容。为了确保用户在首次打开网页时默认身份为“用户”,使用了 st.session_state.user_role 来控制页面状态中用户的默认身份为了避免管理员在每次访问管理员页面时都需要重复输入密码,通过st.session_state.is_authenticated 来维护管理员的登录状态,确保他们在成功登录后能够直接进入管理员界面。

2.2 对话页面

对于“对话“选项,更改了原本的kb_chat(api: ApiRequest)函数增加了user参数,来动态控制渲染内容。对于管理员来说,为了方便调试要显示更加全面的信息。通过对user的if-else判断使管理员可以通过模型设置按钮来选择模型、平台以及Temperature参数,以及在模型回复时显示回复的参考资料。对于用户来说,要确保页面的简洁与易用只显示回复信息。

2.3 知识库管理页面

该页面不允许用户的更改,可以通过直接判断st.session_state中的身份状态与管理员验证状态来选择是否显示即可。其中选择向量库类型菜单中,选项由配置文件kbs_config给出,在langchain-chatchat框架中给出了如下选项:faiss: 配置本地向量搜索库 FAISS。 milvus: 配置 Milvus 向量数据库的连接信息。zilliz: 配置 Zilliz 云向量数据库的连接信息。pg: 配置 PostgreSQL 数据库的连接 URI。relyt: 配置另一实例的 PostgreSQL 数据库的连接 URI。es: 配置 Elasticsearch 搜索引擎的连接和认证信息。milvus_kwargs: 配置 Milvus 的额外参数(搜索与索引设置)。chromadb: 配置 ChromaDB

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值