LangChain-Chatchat:基于LangChain和ChatGLM2-6B构建本地离线私有化知识库
时间:2024-05-04 15:50:28 来源:网络cs 作者:利杜鹃 栏目:卖家故事 阅读:
自从去年GPT模型火爆以来,降低了很多个人和企业进入人工智能领域的门槛,对于大模型尤其是开源的大模型国内应该比较受关注和期待,毕竟高额的成本也能将不少人阻挡在门外,其次,大家都希望在产品中集成LLM的能力,结合业务来落地智能化应用,提升产品的竞争力,最直接的应用就是构建知识库。
下面汇总了一下之前介绍的有关构建知识库相关的文章和视频,包含了开源和闭源多种不同的解决方案,从使用情况来看,因为都是开源产品,所以在架构和功能完整性上可能都不够全面,因为一直在持续的迭代过程,如果是站在一个中小企业的角度,去选型一款比较符合企业构建本地知识库需求的产品来评估,从以下介绍的开源产品目前的实现效果和未来规划目标来看,个人觉得Quivr从设计上来讲更加符合应用需求,前提是增加企业已有文档库、数据库纳入知识库的能力,扩展Danswer提高的功能,完善并丰富对于开源或者闭源模型的支持(目前暂时支持较弱)尤其是对于中文支持不错的国产模型比如ChatGLM2等,另外一种方案就是今天介绍的LangChain-Chatchat刚好可以与Quivr互补,其对于模型的支持很丰富,但对于业务端的属性支持较弱,只支持单个用户单个知识库,不能建立多个知识库通过权限来隔离。
当然不排除还有其它更合适的解决方案,至少开源的产品或多或少很难直接拿来作为生产级别去应用,还得需要进行二开去完善,大部分做的相对成熟的开源产品基本上都是走商业化路线,或者开源通过服务收费,比如模型微调训练,构建特定行业应用的大模型和对外提供模型API能力。
[文章]Quivr 基于GPT和开源LLMs构建本地知识库 (更新篇)
[文章]Danswer 快速指南:不到15分钟打造您的企业级开源知识问答系统
[文章]Genoss GPT简介:使用 Genoss 模型网关实现多个LLM模型的快速切换与集成
[文章]Cohere 正式发布企业知识库助手 Coral
[文章]基于ChatGLM-6B构建本地私有化离线知识库
[文章]Flowise|无代码 ChatBot 构建平台|LangChain
[文章]Quivr 基于Supabase构建本地知识库
[视频]Quivr 基于Supabase构建本地知识库
[视频]PrivateGPT:免费构建本地私有化知识库[部署教程]
在构建企业级知识库方面,有许多解决方案和产品可供选择,包括开源和闭源。这些解决方案的核心技术基于LangChain,如Quivr结合Supabase、PrivateGPT和ChatGLM 6B等。同时,也有无代码平台Flowise,基于LangChain.js提供丰富的内置组件,帮助用户快速构建聊天机器人、智能客户和知识问答等应用。
为了解决模型扩展和维护的问题,Stan Girard开发了Genoss,通过创建简单的API使得模型扩展能力完全解耦。此外,Danswer是一个开源项目,具有Connectors连接器优势,可以方便地将文档资料添加到向量数据库中进行索引。
在选择本地私有化模型时,清华大学开源的ChatGPT-6B模型对中文支持友好,并可在消费级显卡上运行。大语言模型的发展为智能客服、文档检索和代码搜索等场景提供了便利,提高了生产力。Coral这款AI知识库助手致力于解决企业痛点,重新定义生产力。
总之,在构建企业级知识库时,有多种解决方案可供选择。根据实际需求和场景来选择合适的方案,运用大语言模型的技术优势,提高企业生产力和效率。
二、介绍
2.1、ChatGLM2-6B
ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本,在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上,ChatGLM2-6B 引入了如下新特性:
更强大的性能:基于 ChatGLM 初代模型的开发经验,我们全面升级了 ChatGLM2-6B 的基座模型。ChatGLM2-6B 使用了 GLM 的混合目标函数,经过了 1.4T 中英标识符的预训练与人类偏好对齐训练,评测结果显示,相比于初代模型,ChatGLM2-6B 在 MMLU(+23%)、CEval(+33%)、GSM8K(+571%) 、BBH(+60%)等数据集上的性能取得了大幅度的提升,在同尺寸开源模型中具有较强的竞争力。
更长的上下文:基于 FlashAttention 技术,我们将基座模型的上下文长度(Context Length)由 ChatGLM-6B 的 2K 扩展到了 32K,并在对话阶段使用 8K 的上下文长度训练。对于更长的上下文,我们发布了 ChatGLM2-6B-32K 模型。LongBench 的测评结果表明,在等量级的开源模型中,ChatGLM2-6B-32K 有着较为明显的竞争优势。
更高效的推理:基于 Multi-Query Attention 技术,ChatGLM2-6B 有更高效的推理速度和更低的显存占用:在官方的模型实现下,推理速度相比初代提升了 42%,INT4 量化下,6G 显存支持的对话长度由 1K 提升到了 8K。
更开放的协议:ChatGLM2-6B 权重对学术研究完全开放,在填写问卷进行登记后亦允许免费商业使用。
2.2、LangChain-Chatchat 介绍
LangChain-Chatchat (原 Langchain-ChatGLM): 基于 Langchain 与 ChatGLM 等大语言模型的本地知识库问答应用实现。一种利用 LangChain 思想实现的基于本地知识库的问答应用,其目标是期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。
它的核心思路是通过使用 FastChat 接入 Vicuna, Alpaca, LLaMA, Koala, RWKV 等模型,然后依托于 LangChain 框架支持通过基于 FastAPI 提供的 API 调用服务,或使用基于 Streamlit 的 WebUI 进行操作。
依托于本项目支持的开源 LLM 与 Embedding 模型,全部可使用开源模型离线私有部署实现。与此同时,本项目也支持 OpenAI GPT API 的调用,并将在后续持续扩充对各类模型及模型 API 的接入。
本项目实现原理如下图所示,过程包括加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的 top k
个 -> 匹配出的文本作为上下文和问题一起添加到 prompt
中 -> 提交给 LLM
生成回答。
三、模型支持
LangChain-Chatchat 默认使用的 LLM 模型为 THUDM/chatglm2-6b,默认使用的 Embedding 模型为 moka-ai/m3e-base 为例。
3.1、LLM 模型支持
目前最新的版本中基于 FastChat 进行本地 LLM 模型接入,目前已经正式接入支持的模型达 30+,具体清单如下:
meta-llama/Llama-2-7b-chat-hf
Vicuna, Alpaca, LLaMA, Koala
BlinkDL/RWKV-4-Raven
camel-ai/CAMEL-13B-Combined-Data
databricks/dolly-v2-12b
FreedomIntelligence/phoenix-inst-chat-7b
h2oai/h2ogpt-gm-oasst1-en-2048-open-llama-7b
lcw99/polyglot-ko-12.8b-chang-instruct-chat
lmsys/fastchat-t5-3b-v1.0
mosaicml/mpt-7b-chat
Neutralzz/BiLLa-7B-SFT
nomic-ai/gpt4all-13b-snoozy
NousResearch/Nous-Hermes-13b
openaccess-ai-collective/manticore-13b-chat-pyg
OpenAssistant/oasst-sft-4-pythia-12b-epoch-3.5
project-baize/baize-v2-7b
Salesforce/codet5p-6b
StabilityAI/stablelm-tuned-alpha-7b
THUDM/chatglm-6b
THUDM/chatglm2-6b
tiiuae/falcon-40b
timdettmers/guanaco-33b-merged
togethercomputer/RedPajama-INCITE-7B-Chat
WizardLM/WizardLM-13B-V1.0
WizardLM/WizardCoder-15B-V1.0
baichuan-inc/baichuan-7B
internlm/internlm-chat-7b
Qwen/Qwen-7B-Chat
HuggingFaceH4/starchat-beta
任何 EleutherAI 的 pythia 模型,如 pythia-6.9b
在以上模型基础上训练的任何 Peft 适配器。为了激活,模型路径中必须有 peft
。注意:如果加载多个peft模型,你可以通过在任何模型工作器中设置环境变量 PEFT_SHARE_BASE_WEIGHTS=true
来使它们共享基础模型的权重。
以上模型支持列表可能随 FastChat 更新而持续更新,可参考 FastChat 已支持模型列表。
除本地模型外,本项目也支持直接接入 OpenAI API,具体设置可参考 configs/model_configs.py.example
中的 llm_model_dict
的 openai-chatgpt-3.5
配置信息。
3.2、Embedding 模型支持
对于构建文本向量的模型,目前支持调用 HuggingFace 中的 Embedding 模型,目前已支持的 Embedding 模型达 15+,具体支持清单如下:
moka-ai/m3e-small
moka-ai/m3e-base
moka-ai/m3e-large
BAAI/bge-small-zh
BAAI/bge-base-zh
BAAI/bge-large-zh
BAAI/bge-large-zh-noinstruct
text2vec-base-chinese-sentence
text2vec-base-chinese-paraphrase
text2vec-base-multilingual
shibing624/text2vec-base-chinese
GanymedeNil/text2vec-large-chinese
nghuyong/ernie-3.0-nano-zh
nghuyong/ernie-3.0-base-zh
OpenAI/text-embedding-ada-002
四、项目部署
4.1、环境说明
这里就用阿里云的海外GPU服务器来演示如何部署基于ChatGLM2-6B本地知识库,服务器基本配置信息如下:
CPU:8核(vCPU)
内存:30 GiB
GPU:NVIDIA A10 显存 24GB
4.2、安装 Conda
如果是全新的服务器,首次需要安装Conda,在终端中,使用以下命令下载Miniconda安装脚本:wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
使用以下命令运行安装脚本: bash Miniconda3-latest-Linux-x86_64.sh
按照安装程序的提示进行安装。您可以选择安装位置和环境变量设置等选项。
安装完成后,关闭终端并重新打开一个新终端,在新终端中,使用以下命令激活conda环境:
source ~/.bashrc
使用以下命令检查conda是否成功安装: conda --version
如果conda成功安装,您将看到conda的版本号,我这里安装的是conda 23.5.2。
4.3、安装 Python
首先,确信你的机器安装了 Python 3.8 - 3.11 版本
python --version Python 3.8.17
如果没有安装或者低于这个版本,可使用conda安装环境
conda create -p /opt/langchain-chatchat/pyenv python=3.8
激活Python虚拟环境conda activate /opt/langchain-chatchat/pyenv关闭环境conda deactivate /opt/langchain-chatchat/pyenv# 删除环境conda env remove -p /opt/langchain-chatchat/pyenv
这里的路径可根据大家的实际情况来调整即可
root@iZ6we7hvjs7veky0zq7at1Z:/opt/langchain-chatchat# conda activate /opt/langchain-chatchat/pyenv(/opt/langchain-chatchat/pyenv) root@iZ6we7hvjs7veky0zq7at1Z:/opt/langchain-chatchat# python --versionPython 3.8.17(/opt/langchain-chatchat/pyenv) root@iZ6we7hvjs7veky0zq7at1Z:/opt/langchain-chatchat#
更新py库
pip3 install --upgrade pip
4.4、项目依赖
# 拉取仓库$ git clone https://github.com/chatchat-space/Langchain-Chatchat.git# 进入目录$ cd Langchain-Chatchat
使用pypi源安装全部依赖(默认依赖包括基本运行环境(FAISS向量库)。如果要使用 milvus/pg_vector 等向量库,请将 requirements.txt 中相应依赖取消注释再安装)
pip install -r requirements.txt -i https://pypi.python.org/simple
说明:默认安装不指定镜像[pip install -r requirements.txt]安装过程可能会出现依赖或者其它奇怪的错误,建议指定镜像源下载,国外的服务器用pypi镜像,国内的服务器可以用阿里源或者清华源。
# 使用阿里源$ pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/# 使用清华源$ pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
安装依赖的时候可能会出现如下错误:
Could not find a version that satisfies the requirement setuptools_scm (from versions: none)
%20这个错误通常在安装或配置setuptools_scm
包时遇到问题时出现。只需要重新安装setuptools_scm
。
pip%20install%20--index-url%20https://pypi.org/simple/%20setuptools_scm
%204.5、下载模型
%20因为模型文件一般比较大(ChatGLM2-6B的模型权重文件差不多12G),首先需要先安装Git%20LFS
%20#%20添加Git%20LFS的APT存储库。运行以下命令将Git%20LFS的APT存储库添加到您的系统中:curl%20-s%20https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh%20|%20sudo%20bash#%20安装Git%20LFS。运行以下命令来安装Git%20LFS:sudo%20apt-get%20install%20git-lfs#%20安装完成后,您可以运行以下命令来验证Git%20LFS是否已成功安装:git%20lfs%20version#%20如果成功安装,您将看到Git%20LFS的版本信息。git-lfs/3.4.0%20(GitHub;%20linux%20amd64;%20go%201.20.6)
%20下载模型放入指定文件目录中
%20#%20下载%20LLM%20模型$%20git%20clone%20https://huggingface.co/THUDM/chatglm2-6b%20/your_path/chatglm-6b#%20下载%20Embedding%20模型$%20git%20clone%20https://huggingface.co/GanymedeNil/text2vec-large-chinese%20/your_path/text2vec#%20模型需要更新时,可打开模型所在文件夹后拉取最新模型文件/代码$%20git%20pull
%20将your_path换成你模型的实际下载路径即可,我这里将模型放在%20/opt/langchain-chatchat/models
%20目录。
$%20git%20clone%20https://huggingface.co/THUDM/chatglm2-6b%20/opt/langchain-chatchat/models/chatglm-6b$%20git%20clone%20https://huggingface.co/moka-ai/m3e-base%20/opt/langchain-chatchat/models/m3e-base
%204.6、设置配置项
%20复制模型相关参数配置模板文件%20configs/model_config.py.example%20存储至项目路径下%20./configs
%20路径下,并重命名为%20model_config.py
。
cp%20model_config.py.example%20model_config.py
%20复制服务相关参数配置模板文件%20configs/server_config.py.example%20存储至项目路径下%20./configs
%20路径下,并重命名为%20server_config.py
。
cp%20server_config.py.example%20server_config.py
%20在开始执行%20Web%20UI%20或命令行交互前,请先检查%20configs/model_config.py
%20和%20configs/server_config.py
%20中的各项模型参数设计是否符合需求:
llm_model_dict
%20对应模型的%20local_model_path
%20属性中,如:%20llm_model_dict={%20%20%20%20"chatglm2-6b":%20{%20%20%20%20%20%20%20%20%20%20%20%20"local_model_path":%20"/opt/langchain-chatchat/models/chatglm-6b",%20%20%20%20%20%20%20%20%20%20%20%20"api_base_url":%20"http://localhost:8888/v1",%20%20#%20"name"修改为%20FastChat%20服务中的"api_base_url"%20%20%20%20%20%20%20%20%20%20%20%20"api_key":%20"EMPTY"%20%20%20%20%20}}
%20请确认已下载至本地的%20Embedding%20模型本地存储路径写在%20embedding_model_dict
%20对应模型位置,如:%20embedding_model_dict%20=%20{%20%20%20%20%20"m3e-base":%20"/opt/langchain-chatchat/models/m3e-base",}
%20如果你选择使用OpenAI的Embedding模型,请将模型的%20key
写入%20embedding_model_dict
中。使用该模型,你需要鞥能够访问OpenAI官的API,或设置代理。
4.7、知识库初始化
%20当前项目的知识库信息存储在数据库中,在正式运行项目之前请先初始化数据库(我们强烈建议您在执行操作前备份您的知识文件)。
%20如果您是从%200.1.x
%20版本升级过来的用户,针对已建立的知识库,请确认知识库的向量库类型、Embedding%20模型与%20configs/model_config.py
%20中默认设置一致,如无变化只需以下命令将现有知识库信息添加到数据库即可:%20$%20python%20init_database.py
%20如果您是第一次运行本项目,知识库尚未建立,或者配置文件中的知识库类型、嵌入模型发生变化,或者之前的向量库没有开启%20normalize_L2
,需要以下命令初始化或重建知识库:%20$%20python%20init_database.py%20--recreate-vs
%204.8、启动LLM服务
%20如需使用开源模型进行本地部署,需首先启动%20LLM%20服务,如果启动在线的API服务(如%20OPENAI%20的%20API%20接口),则无需启动%20LLM%20服务。
%20这里选择基于多进程脚本%20llmapi.py%20启动%20LLM%20服务的方式,在项目根目录下,执行%20server/llmapi.py%20脚本启动%20LLM%20模型服务:
%20$%20python%20server/llm_api.py
%20如果部署服务器具备单张或者多张GPU显卡,只需在%20llmapi.py%20中修改%20createmodelworkerapp%20函数中,修改如下三个参数:
%20gpus=None,%20num_gpus=1,%20max_gpu_memory="20GiB"
%20其中,gpus
%20控制使用的显卡的ID,如果%20"0,1";%20num_gpus
%20控制使用的卡数;max_gpu_memory
%20控制每个卡使用的显存容量。
4.9、启动API服务
%20在线调用API服务的情况下,直接执执行%20server/api.py%20脚本启动%20API%20服务;
%20python%20server/api.py
%20启动%20API%20服务后,可访问%20localhost:7861
%20或%20{API%20所在服务器%20IP}:7861
%20FastAPI%20自动生成的%20docs%20进行接口查看与测试。
FastAPI%20docs%20界面
%20%204.9、启动 Web UI 服务
使用 Langchain-Chatchat 主题色启动 Web UI 服务(默认使用端口 8501
)
$ streamlit run webui.py --theme.base "light" --theme.primaryColor "#165dff" --theme.secondaryBackgroundColor "#f5f5f5" --theme.textColor "#000000"
Web UI 对话界面: %20%20Web%20UI%20知识库管理页面:
%20%20
说明:安装过程中如果遇到其它的问题,建议先去官方GitHub的FAQ中看看,大部分问题已经有解决方案了。 https://github.com/chatchat-space/Langchain-Chatchat/blob/master/docs/FAQ.md
五、Docker 环境部署
如果想快速部署 LangChain-Chatchat 产品来体验,可以选择Docker一键部署的方式,比较简单,只需要先安装Docker 容器,在Unbuntu环境中如何安装 Docker & Docker Compose,可以参考文章 《Quivr 基于GPT和开源LLMs构建本地知识库 (更新篇)》中的3.2节。这里不过多赘述。 Windows安装Docker更简单。
Docker镜像使用的版本一般会稍微滞后一些,如果想快速体验最新的版本按前面开发模式部署会更合适一点。
LangChain-Chatchat项目使用的 Docker 镜像地址是:
registry.cn-beijing.aliyuncs.com/chatchat/chatchat:0.2.0
docker run -d --gpus all -p 80:8501 registry.cn-beijing.aliyuncs.com/chatchat/chatchat:0.2.0
该版本镜像大小 33.9GB
,使用 v0.2.0
,以 nvidia/cuda:12.1.1-cudnn8-devel-ubuntu22.04
为基础镜像
该版本内置一个 embedding
模型:m3e-large
,内置 chatglm2-6b-32k
该版本目标为方便一键部署使用,请确保您已经在Linux发行版上安装了NVIDIA驱动程序
请注意,您不需要在主机系统上安装CUDA工具包,但需要安装 NVIDIA Driver
以及 NVIDIA Container Toolkit
,请参考安装指南
首次拉取和启动均需要一定时间,首次启动时请参照下图使用 docker logs -f <container id>
查看日志
如遇到启动过程卡在 Waiting..
步骤,建议使用 docker exec -it <container id> bash
进入 /logs/
目录查看对应阶段日志
六、References
ChatGLM2-6B
https://github.com/THUDM/ChatGLM2-6B
LangChain-Chatchat
https://github.com/chatchat-space/Langchain-Chatchat
阅读本书更多章节>>>>如果你对这篇文章感兴趣,而且你想要了解更多关于AI领域的实战技巧,可以关注「技术狂潮AI」公众号。在这里,你可以看到最新最热的AIGC领域的干货文章和案例实战教程。
本文链接:https://www.kjpai.cn/gushi/2024-05-04/164802.html,文章来源:网络cs,作者:利杜鹃,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!
上一篇:总结!聊一聊三种三维重建经典算法
下一篇:返回列表