基于LangChain实现的知识库问答工具Langchain-Chatchat

基于embedding+LangChain+ChatGLM2-6B 构建行业知识库

Langchain-Chatchat

LangChain 中文文档

langchain

本文使用的Langchain-Chatchat版本是0.2.7

一、构建垂类行业知识库的两种方案

  • 方案一:使用开源LLM本地部署和微调

    • 优点:数据最安全,因为不管是模型还是训练数据都在本地
    • 缺点:要调教出一个足够出色的模型,需要耗费较多的人力物力(当然相比于预训练已经好太多了)
    • 具体实施:(LLAMA、ChatGLM2)+(Lora、P-Tuningv2、promote-tunning等)
    • 开源方案:LLaMA-Factory
  • 方案二:基于LLM+向量数据库

    • 优点:成本相对低,更简单,无需训练甚至无需微调
    • 缺点:如果使用选择ChatGPT等云端大模型,则需牺牲掉一些隐私性
    • 具体实施:LangChain + FAISS +(ChatGPT、ChatGLM2、baichuan)
    • 开源方案:Quivr、PrivateGPT、LangChain-Chatchat

二、LangChain + 向量数据库 + 开源大模型的实现方案

在这里插入图片描述

  1. 将私有知识库内容经过拆分、向量化之后,存入向量知识库
  2. 将用户的问题也进行向量化,利用向量相似性算法(例如余弦相似性)找到向量知识库最匹配的 top n 个片段
  3. 将这些片段,与用户问题一起作为 prompt 提交给 LLM 回答,作为 LLM 的背景知识,LLM 根据背景知识完成交互问答

三、LangChain-Chatchat使用步骤

Langchain-Chatchat详细wiki文档

1. 下载代码仓库准备基础环境

# 拉取仓库
git clone https://github.com/chatchat-space/Langchain-Chatchat.git

# 进入目录
cd Langchain-Chatchat

# 安装全部依赖
pip install -r requirements.txt 
pip install -r requirements_api.txt
pip install -r requirements_webui.txt  

# 默认依赖包括基本运行环境(FAISS向量库)。如果要使用 milvus/pg_vector 等向量库,请将 requirements.txt 中相应依赖取消注释再安装。

2. 下载模型文件

git lfs install

# 下载ChatGLM2模型
git-lfs clone https://huggingface.co/THUDM/chatglm2-6b

# 下载文本转向量模型
git-lfs clone https://huggingface.co/shibing624/text2vec-base-chinese

3. 初始化参数配置

  • 复制配置文件
python copy_config_example.py

该脚本将会将所有config目录下的配置文件样例复制一份到config目录下,方便开发者进行配置。 接着,开发者可以根据自己的需求,对配置文件进行修改。

  • 基础配置项 basic_config.py

该配置基负责记录日志的格式和储存路径,通常不需要修改。

  • 模型配置项 model_config.py的核心参数

    • MODEL_ROOT_PATH:本地模型路径配置。建议将所有下载的模型放到一个统一的目录下,然后将MODEL_ROOT_PATH指定为该目录
    • EMBEDDING_MODEL:文本向量化对应的模型名称,与MODEL_PATH里面的embed_model里面的key对应,key对应的value与MODEL_ROOT_PATH地址拼接形成完成的模型地址
    • LLM_MODELS:大语言模型的名称,与MODEL_PATH里面的llm_model里面的key对应,key对应的value与MODEL_ROOT_PATH地址拼接形成完成的模型地址
    • ONLINE_LLM_MODEL:在线模型API配置。在ONLINE_LLM_MODEL已经预先写好了所有支持的在线API服务,通常只需要把申请的API_KEY等填入即可。
    • HISTORY_LEN:历史对话轮数通常不建议设置超过10,因为这可能导致显存占用过高、速度处理慢
    • TEMPERATURE:通常不建议设置过高。 在Agent对话模式和知识库问答中,我们强烈建议将要其设置成0或者接近于0。TEMPERATURE越高,生成内容的随机性越强
    • Agent_MODEL = None 我们支持用户使用“模型接力赛”的用法,即: 选择的大模型仅能调用工具,但是在工具中表现较差,则这个工具作为 “模型调用工具” 如果用户设置了Agent_MODEL,则在 Agent 中,使用Agent_MODEL来执行任务,否则,使用LLM_MODEL
  • 知识库配置项 kb_config.py

配置与知识库相关的参数,包括知识库的名称,使用的向量数据库类型,文本拆分策略,采用哪种分词器等

  • 提示词配置项 prompt_config.py

    • llm_chat: 基础的对话提示词, 通常来说,直接是用户输入的内容,没有系统提示词。
    • knowledge_base_chat: 与知识库对话的提示词,在模板中,我们为开发者设计了一个系统提示词,开发者可以自行更改。
    • agent_chat: 与Agent对话的提示词,同样,我们为开发者设计了一个系统提示词,开发者可以自行更改。

prompt模板使用Jinja2语法,简单点就是用双大括号代替f-string的单大括号 请注意,本配置文件支持热加载,修改prompt模板后无需重启服务。

  • 服务配置项 server_config.py

配置服务绑定的IP和端口,以及相应超时时间等参数

4. 初始化知识库

python init_database.py --recreate-vs

5. 加载LoRA微调后的baichuan模型

微调模型加载实操

基于LLaMA-Factory开源代码使用LoRA方法微调baichuan2-base基座模型。

  • 方案一:将LoRA微调后的参数与原参数合并,形成一个完整的模型参数(建议使用这种方式)
  1. 在使用LLaMA-Factory微调模型之后,会得到LoRA微调之后保存的目录,执行以下命令:
python src/export_model.py --model_name_or_path XXX --template default --finetuning_type lora --checkpoint_dir XXX --export_dir XXX

其中,–model_name_or_path对应基座模型的路径,–checkpoint_dir对应LoRA微调之后保存的参数李静,–export_dir对应合并之后保存的路径

  1. 修改model_config.py配置文件里面的LLM_MODELS和llm_model参数为–export_dir对应的名称和路径,可以在llm_model字典里面追加一个元素来指向合并后的模型
  • 方案二:使用Langchain-Chatchat加载base模型和LoRA参数(此种方式目前存在问题)

Langchain-Chatchat基于 FastChat 加载 LLM 服务,故需以 FastChat 加载 PEFT 路径。针对chatglm,falcon,codet5p以外的模型,以及非p-tuning以外的peft方法,需对peft文件进行修改,步骤如下:

  1. 将config.json文件修改为adapter_config.json(使用LLaMA-Factory微调后已经是这个名字了)
  2. 保证文件夹包含pytorch_model.bin文件(复制Adapter_model.bin为pytorch_model.bin);
  3. 修改文件夹名称,保证文件夹包含’peft’一词,如文件夹交LoRA-peft;
  4. 将peft文件夹移入项目目录下;
  5. 确保adapter_config.json文件夹中base_model_name_or_path指向基础模型;
  6. 将peft路径添加到model_config.py的llm_model中,键为模型名,值为peft路径,注意使用相对路径,如key是"LoRA-peft",value也是"LoRA-peft";
  7. 开启 PEFT_SHARE_BASE_WEIGHTS=true环境变量,再执行python startup.py --all-webui

针对p-tuning和chatglm模型,需要对fastchat进行较大幅度的修改。参考微调模型加载实操

6. 启动服务

python startup.py --all-webui

四、LangChain-Chatchat使用优化

参考下列文章:

【知识库问答】-LangChain实战提升指南(强烈推荐)

大模型行业问答应用实践:数据向量化、RAG、langchain、Agent技术


五、遇到的问题

1. 加载baichuan模型失败

问题: Langchain-Chatchat加载baichuan模型报错 AttributeError: ‘BaichuanTokenizer’ object has no object ‘sp_model’

解决办法:

[BUG] ‘BaichuanTokenizer’ object has no attribute ‘sp_model’ #1665

AttributeError: ‘BaichuanTokenizer’ object has no attribute ‘sp_model’ #204

2. 文本相似度计算不准确

问题: 基于query文本检索不到知识库中对应的上下文内容,导致模型回复的内容不准确

解决办法: 可以参考【知识库问答】-LangChain实战提升指南的解决方案

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/203276.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PyCharm免费安装和新手使用教程

PyCharm是一款由JetBrains公司开发的Python集成开发环境(IDE)。它提供了一系列强大的功能,包括自动代码完成、语法高亮、自动缩进、代码重构、调试器、测试工具、版本控制工具等,使开发者可以更加高效地开发Python应用程序。 新手…

深入探索 Vue 响应式原理:数据驱动视图的奥秘

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

hive创建ES外部表过程中的问题

一、缺少jar包:httpclient 报错: “HiveServer2-Handler-Pool: Thread-696” java.lang.NoClassDefFoundError: org/apache/commons/httpclient/protocol/ProtocolSocketFactory 需要加载commons-httpclient-3.1.jar 二、缺少jar包:eshado…

软件需求分析报告

《软件需求分析报告》 软件开发全套资料获取:点我获取

安卓+charles实现抓包(主要解决证书网站无法打开问题)

安装 官网下载 https://www.charlesproxy.com/latest-release/download.do 使用介绍 Charles介绍 上面链接看一至三即可 初步代理配置 如何获取代理服务器IP和手机端IP 代理服务器IP 点击help,选中ssl 代理,点击在移动设备或远程浏览器上安装Cha…

Linux下配置邮箱客户端MUTT,整合msmtp + procmail + fetchmail

一、背景 在向 Linux kernel 社区提交patch补丁步骤总结(已验证成功)_kernel补丁-CSDN博客文章中提到如何向kernel社区以及其他类似如qemu、libvirt社区提交patch的详细步骤,但还有一点不足的是通过git send-email这种方法基本是只能发送patc…

移动开发新风向?HarmonyOS、车载、音视频、flutter

目前,移动开发已经处于饱和的阶段,Android开发也不如当年盛况,已经不再像前几年前那么火爆。正如一种编程语言如果经历过盛极一时,那么必然有这样的一条曲线,像我们学的正弦曲线先急速上升,然后到达顶点&am…

如何自定义spring-boot-starter

1. 创建自定义starter 1.1 生成Maven工程 mvn archetype:generate -DarchetypeGroupIdorg.apache.maven.archetypes -DarchetypeArtifactIdmaven-archetype-quickstart -DarchetypeVersion1.4交互式输入groupId、artificatId、version,生成Maven工程后用IDEA打开 …

Linux系统centos7防火墙firewall开放IP及端口命令

CentOS7使用的是firewall防火墙,不再是原来的iptables 防火墙基础命令 1:查看firewall防火墙状态 firewall-cmd --state //或 systemctl status firewalld2:打开防火墙 systemctl start firewalld3:关闭防火墙 systemctl sto…

系统清理软件CCleaner pro mac功能亮点

CCleaner pro for mac是一款mac系统清理软件。CCleaner pro 主要用来清除mac系统不再使用的垃圾文件,以腾出更多硬盘空间。CCleaner pro下载的另一大功能是清除使用者的上网记录。CCleaner的体积小,运行速度极快,可以对临时文件夹、历史记录、…

虚幻学习笔记8—蓝图操作其他虚幻模块

一、前言 蓝图不仅可以相互之间操作和通信,其他的资源、模块也有操作和通信的方法。文本主要针对蓝图和材质、Niagara、编辑器的通信进行讲解。 二、实现 2.1、蓝图和材质 1)首先,在材质蓝图中按住“4鼠标左键”创建一个参数为四维向量的参…

Linux--2.6内核调度和环境变量

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、Linxu2.6内核进程调度队列1、一个CPU拥有一个runqueue2、优先级3、优先级活动队列4、过期…

VMware虚拟机Linux系统磁盘扩容

VMware虚拟机Linux系统磁盘扩容 很多小伙伴使用VMware创建虚拟机,时常会选择默认磁盘大小20G, 用着用着才发现20G不够用,服务启动不了。 让我们今天一起来解决一下,VMware虚拟机Linux系统磁盘扩容。 查看磁盘空间 df -h重点关注 …

VBA技术资料MF88:测试Excel文件名是否有效

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…

首次部署Linux系统的经历

我是一名电子信息工程专业的学生,有次在图书馆上自习的时候无意间看到其他同学的电脑屏幕,黑色的屏幕上显示着一行一行的代码,勾起了我无限的好奇,经过询问得知他是用的Linux操作系统,是和Windows完全不同的系统&#…

geoserver根据数据字段动态设置样式

一、数据展示&#xff1a; 二、样式设置 <?xml version"1.0" encoding"UTF-8"?> <StyledLayerDescriptor version"1.0.0" xsi:schemaLocation"http://www.opengis.net/sld StyledLayerDescriptor.xsd" xmlns"http://…

ArkTS-自定义弹窗

自定义弹窗 通过CustomDialogController类显示自定义弹窗。使用弹窗组件时&#xff0c;可优先考虑自定义弹窗&#xff0c;便于自定义弹窗的样式与内容。 CustomDialogController仅在作为CustomDialog和Component struct的成员变量&#xff0c;且在Component struct内部定义时赋…

阿里健康发布最新公告:收入129.6亿 获阿里妈妈医疗健康类目独家经营权

11月28日&#xff0c;阿里健康发布公告宣布&#xff0c;正式与阿里巴巴集团签署股权认购协议&#xff0c;以135.12亿港元对价&#xff0c;获得阿里妈妈医疗健康类目的独家营销审核权及附属权利。交易完成后&#xff0c;阿里巴巴集团对阿里健康的持股比例从56.99%上升到63.83%。…

福州大学《嵌入式系统综合设计》实验十三:RTSP拉流与RTMP推流

一、实验目的 掌握基于算能平台的JPEG压缩编码方法以及开发环境&#xff0c;包括开发主机环境搭建&#xff0c;硬件嵌入式开发板的连接&#xff0c;云平台的配置&#xff0c;编码程序的编译、运行等。 二、实验内容 搭建实验开发环境&#xff0c;并编写静止图像jpeg格式编解…

visionOS空间计算实战开发教程Day 10 照片墙

本例选择了《天空之城》的25张照片&#xff0c;组成5x5的照片墙&#xff09;。首先我们在setupContentEntity方法中构建了一个纹理数组&#xff0c;将这25张照片添加到数组images中。其中封装了setup方法&#xff0c;借助于visionOS对沉浸式空间的支持&#xff0c;我们创建了三…