基于 LangChain-Chatchat 实现的本地知识库的问答应用 - 快速上手(检索增强生成 (RAG) 大模型)
基于 LangChain-Chatchat 实现的本地知识库的问答应用-快速上手(检索增强生成(RAG)大模型)
基于 ChatGLM 等大语言模型与 Langchain 等应用框架实现,开源、可离线部署的检索增强生成(RAG)大模型知识库项目。
1.介绍
一种利用 langchain思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。
受 GanymedeNil 的项目 document.ai和 AlexZhangji创建的 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
生成回答。
从文档处理角度来看,实现流程如下:
本项目未涉及微调、训练过程,但可利用微调或训练对本项目效果进行优化。
AutoDL 镜像 中
0.2.10
版本所使用代码已更新至本项目v0.2.10
版本。Docker 镜像 已经更新到
0.2.10
版本。本次更新后同时支持 DockerHub、阿里云、腾讯云镜像源:
本项目有一个非常完整的Wiki , README 只是一个简单的介绍,仅仅是入门教程,能够基础运行。如果你想要更深入的了解本项目,或者想对本项目做出贡献。请移步 Wiki界面
2. 解决的痛点
该项目是一个可以实现 __完全本地化__推理的知识库增强方案, 重点解决数据安全保护,私域化部署的企业痛点。本开源方案采用Apache License
,可以免费商用,无需付费。
我们支持市面上主流的本地大语言模型和 Embedding 模型,支持开源的本地向量数据库。支持列表详见Wiki
3.快速实现案例
3.1. 环境配置
首先,确保你的机器安装了 Python 3.8 - 3.11 (我们强烈推荐使用 Python3.11)。
接着,创建一个虚拟环境,并在虚拟环境内安装项目的依赖
如果在安装"pip install -r requirements.txt "遇到报错:
解决方案
参考链接:https://github.com/chatchat-space/Langchain-Chatchat/issues/1268
https://github.com/chatchat-space/Langchain-Chatchat/issues/2054
请注意,LangChain-Chatchat 0.2.x
系列是针对 Langchain 0.0.x
系列版本的,如果你使用的是 Langchain 0.1.x
系列版本,需要降级您的Langchain
版本。
3.2. 模型下载
如需在本地或离线环境下运行本项目,需要首先将项目所需的模型下载至本地,通常开源 LLM 与 Embedding 模型可以从 HuggingFace 下载。
以本项目中默认使用的 LLM 模型 THUDM/ChatGLM3-6B 与 Embedding 模型 BAAI/bge-large-zh 为例:
下载模型需要先安装 Git LFS,然后运行
如果遇到模型下载缓慢的情况,可以从魔塔下载
chatglm3-6b: https://modelscope.cn/models/ZhipuAI/chatglm3-6b/files
bge-large-zh-v1.5: https://modelscope.cn/models/AI-ModelScope/bge-large-zh-v1.5/files
3.3 Embedding 模型介绍
FlagEmbedding 专注于检索增强 llm 领域,目前包括以下项目:
Long-Context LLM: Activation Beacon, LongLLM QLoRA
Fine-tuning of LM : LM-Cocktail
Embedding Model: Visualized-BGE, BGE-M3, LLM Embedder, BGE Embedding
Reranker Model: llm rerankers, BGE Reranker
Benchmark: C-MTEB
BGE-M3-多语言
(Paper, Code)在这个项目中,我们发布了 BGE-M3,它是第一个具有多功能、多语言和多粒度特性的文本检索模型。
多功能:可以同时执行三种检索功能:单向量检索、多向量检索和稀疏检索。
多语言:支持 100 多种工作语言。
多粒度:它能够处理不同粒度的输入,从短句子到长达 8192 个词汇的长文档。
在本项目中,为了提高单一检索模式的性能,提出了一种新的自知识蒸馏方法。我们优化了批处理策略,支持大批处理大小,这可以在对长文本或大型语言模型进行向量微调时简单使用。我们还构建了一个用于文档检索的数据集,并提出了一个简单的策略来提高长文本的建模能力。训练代码和微调数据将在不久的将来开源。
Visualized-BGE-多模态
官方链接在这个项目中,我们发布了 Visualized-BGE。通过引入 image token embedding,Visualized-BGE 可以被用来编码混合图文数据。它可以被应用在广泛的多模态检索任务中,包括但不限于:多模态知识检索,多模态查询的图像检索等。
LongLLM QLoRA
我们通过 QLoRA 微调将 Llama-3-8B-Instruct 的上下文长度从 8K 扩展到 80K。 整个训练过程非常高效,在一台 8xA800 (80G) GPU 机器上仅需要 8 个小时。 该模型在 NIHS、主题检索和长上下文语言理解等广泛的评估任务中表现出卓越的性能; 同时,它在短上下文中也很好地保留了其原有的能力。 如此强大的长文本能力主要归因于 GPT-4 生成的仅 3.5K 合成数据,这表明 LLM 具有扩展其原始上下文的固有(但在很大程度上被低估)潜力。 事实上,一旦有更多的计算资源,该方法可以将上下文长度扩展更长。
Activation Beacon
由于有限的上下文窗口长度,有效利用长上下文信息是对大型语言模型的一个巨大挑战。Activation Beacon 将 LLM 的原始激活压缩为更紧凑的形式,以便它可以在有限的上下文窗口中感知更长的上下文。它是一种有效、高效、兼容、低成本(训练)的延长 LLM 上下文长度的方法。更多细节请参考技术报告和代码。
LM-Cocktail
模型合并被用于提高单模型的性能。我们发现这种方法对大型语言模型和文本向量模型也很有用, 并设计了”语言模型鸡尾酒“方案,其自动计算融合比例去融合基础模型和微调模型。利用 LM-Cocktail 可以缓解灾难性遗忘问题,即在不降低通用性能的情况下提高目标任务性能。通过构造少量数据样例,它还可以用于为新任务生成模型,而无需进行微调。它可以被使用来合并生成模型或向量模型。更多细节请参考技术报告和代码。
LLM Embedder
LLM-Embedder 向量模型是根据 LLM 的反馈进行微调的。它可以支持大型语言模型的检索增强需求,包括知识检索、记忆检索、示例检索和工具检索。它在 6 个任务上进行了微调:问题回答,对话搜索,长对话,长文本建模、上下文学习和工具学习。更多细节请参考./FlagEmbedding/llm_embedder/README.md
BGE Reranker
交叉编码器将对查询和答案实时计算相关性分数,这比向量模型(即双编码器)更准确,但比向量模型更耗时。因此,它可以用来对嵌入模型返回的前 k 个文档重新排序。我们在多语言数据上训练了交叉编码器,数据格式与向量模型相同,因此您可以根据我们的示例 轻松地对其进行微调。更多细节请参考./FlagEmbedding/reranker/README.md
我们提供了新版的交叉编码器,支持更多的语言以及更长的长度。使用的数据格式与向量模型类似,但是新增了 prompt 用于微调以及推理。您可以使用特定的层进行推理或使用完整的层进行推理,您可以根根据我们的示例 轻松地对其进行微调。更多细节请参考./FlagEmbedding/llm_reranker/README.md
BGE Embedding
BGE Embedding 是一个通用向量模型。 我们使用retromae 对模型进行预训练,再用对比学习在大规模成对数据上训练模型。你可以按照我们的示例 在本地数据上微调嵌入模型。我们还提供了一个预训练示例 。请注意,预训练的目标是重构文本,预训练后的模型无法直接用于相似度计算,需要进行微调之后才可以用于相似度计算。更多关于 bge 的训练情况请参阅论文和代码.
注意 BGE 使用 CLS 的表征作为整个句子的表示,如果使用了错误的方式(如 mean pooling)会导致效果很差。
C-MTEB
中文向量榜单,已整合入 MTEB 中。更多细节参考 论文 和代码.
Embedding 模型列表
3.4 ChatGLM3-6B
ChatGLM3-6B 是 ChatGLM 系列最新一代的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B 引入了如下特性:
更强大的基础模型: ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。在语义、数学、推理、代码、知识等不同角度的数据集上测评显示,ChatGLM3-6B-Base 具有在 10B 以下的预训练模型中最强的性能。
更完整的功能支持: ChatGLM3-6B 采用了全新设计的 Prompt 格式,除正常的多轮对话外。同时原生支持工具调用(Function Call)、代码执行(Code Interpreter)和 Agent 任务等复杂场景。
更全面的开源序列: 除了对话模型 ChatGLM3-6B 外,还开源了基础模型 ChatGLM-6B-Base、长文本对话模型 ChatGLM3-6B-32K。
模型下载
git 下载
代码调用
3.5. 初始化知识库和配置文件
按照下列方式初始化自己的知识库和简单的复制配置文件
配置文件下内容
basic_config.py.example
kb_config.py.example
model_config.py.example
prompt_config.py.example
server_config.py.example
4. 一键启动
按照以下命令启动项目
5. 启动界面示例
如果正常启动,你将能看到以下界面
FastAPI Docs 界面
Web UI 启动界面示例:
Web UI 对话界面:
Agent-Tool 效果
Web UI 知识库管理页面:
版权声明: 本文为 InfoQ 作者【汀丶人工智能】的原创文章。
原文链接:【http://xie.infoq.cn/article/702bf12669121ad9ca000cbfb】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论