利用langchain-ChatGLM实现基于本地知识库的问答应用

news2024/12/23 5:32:37

目录

1 原理

2 开发部署

2.1 安装环境

2.2 加载本地模型


刷B站的时候,无意中看到吴恩达的一个langchain的教程,然后去github上搜了下,发现别人利用langchain和chatGLM做的基于本地知识库的问答应用挺好的,学习下。

1 原理

 基于本地知识库的问答应用原理如上图,首先把本地知识库的文档分割成片段,然后利用embedding模型将文字用向量表示,然后保存到向量库中,然后我们提问的问题也用向量表示,然后将我们的问题和向量库的向量进行匹配,得到相似的结果,然后组装成prompt,送到语言模型中,得到我们想要的答案,

  然后我看刘虔的培训教程中有个这样的代码示例

我的理解其实就是从文档中搜索出问题和答案,然后一起送到大模型,让大模型生成回答。 

2 开发部署

2.1 安装环境

langchain-ChatGLM/docs/INSTALL.md at master · imClumsyPanda/langchain-ChatGLM · GitHub

conda create  -n langchain-chatglm-chw python=3.8
conda activate langchain-chatglm-chw

# 拉取仓库
$ git clone https://github.com/imClumsyPanda/langchain-ChatGLM.git

# 进入目录
$ cd langchain-ChatGLM

# 项目中 pdf 加载由先前的 detectron2 替换为使用 paddleocr,如果之前有安装过 detectron2 需要先完成卸载避免引发 tools 冲突
$ pip uninstall detectron2

# 检查paddleocr依赖,linux环境下paddleocr依赖libX11,libXext
$ yum install libX11   #sudo apt-get install libx11-dev
$ yum install libXext  #sudo apt-get install libxext-dev

# 安装依赖
$ pip install -r requirements.txt

# 验证paddleocr是否成功,首次运行会下载约18M模型到~/.paddleocr
$ python loader/image_loader.py

然后执行 python loader/image_loader.py会报错

Traceback (most recent call last):
  File "loader/image_loader.py", line 8, in <module>
    from configs.model_config import NLTK_DATA_PATH
ModuleNotFoundError: No module named 'configs'

在github的issue里面搜索configs这个关键字发现

 按照这个修改了之后发现,出现了这个报错

Traceback (most recent call last):
  File "loader/image_loader.py", line 36, in <module>
    from configs.model_config import NLTK_DATA_PATH
ModuleNotFoundError: No module named 'configs.model_config'

然后继续在issues中搜索configs.model_config'

好吧,原因是python库中有个configs包,我们的工程中也有个configs文件夹,我们应该是要去工程文件夹configs中找而不是python的configs库中找,所以用下面命令卸载configs库就好了

pip uninstall configs

注:使用 langchain.document_loaders.UnstructuredFileLoader 进行非结构化文件接入时,可能需要依据文档进行其他依赖包的安装,请参考 langchain 文档。

那我去看一下加载非结构化文档需要安装什么:Unstructured File | 🦜️🔗 Langchain

# # Install package
pip install "unstructured[local-inference]"
pip install layoutparser[layoutmodels,tesseract]

把模型拷贝过去,并且重命名一下,

2.2 加载本地模型

在我体验chatGLM模型的时候,已经下载过模型里,所以这里我直接用本地模型,我把模型拷贝过来,然后修改python文件,将None修改为我的模型路径,

 然后使用如下脚本

python cli_demo.py  --model chatglm-6b --no-remote-model

得到

 我先用工程自带的README.md试试

 然后试一下web版本的,

好吧,报错了,那我把embedding模型下载到本地,我去github上搜GanymedeNil/text2vec-large-chinese没搜到结果,那直接google搜索

然后找到GanymedeNil/text2vec-large-chinese · Hugging Face

 好,开始下载,由于模型文件特别大,因此还是要用lfs

git lfs install
git clone https://huggingface.co/GanymedeNil/text2vec-large-chinese

然后修改python脚本

 然后再试一下

python webui.py  --model chatglm-6b --no-remote-model

这次可以了

 然后就可以浏览器登录了

然后我提问问题,他不知道

这时候我在文档中增加如下内容

然后上传,再次提问问题

 

参考文献:

【官方教程】ChatGLM + LangChain 实践培训_哔哩哔哩_bilibili

https://github.com/imClumsyPanda/langchain-ChatGLM/blob/master/docs/StartOption.md

GitHub - imClumsyPanda/langchain-ChatGLM: langchain-ChatGLM, local knowledge based ChatGLM with langchain | 基于本地知识库的 ChatGLM 问答

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

yolov8-mnn C++部署

权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a;https://blog.csdn.net/zaibeijixing/article/details/131581809 ———————————————— 目录 准备工作 1、MNN编…

【Android】CheckBox的自定义样式和使用

需求 在登录页面。我们需要有一个复选框&#xff0c;让用户进行勾选&#xff0c;同意我们的流氓政策和协议&#xff0c;不然就不让用。 实现效果 未选择 已选择 我们知道&#xff0c;这个CheckBox的默认样式是一个正方形&#xff0c;现在改成一个圆形的话&#xff0c;首先需…

我的创作纪念日——我与CSDN的1024天

今天是在CSDN创作的第1024天&#xff0c;是一个非常有意义的天数&#xff0c;故写下此篇文章以表纪念之意。 机缘 我为什么会在CSDN写文章呢&#xff0c;那滴从很久很久以前说起。记得是大一的时候&#xff0c;我们的组原课程的授课老师在一次课堂上问起我们&#xff0c;问我…

AIGC - Easy Diffusion (Stable Diffusion) 图像生成工具的环境配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/131524075 版本v2.5.41 Stable Diffusion 图像生成工具是一种基于深度学习的技术&#xff0c;可以从随机噪声中生成高质量的图像&#x…

HFSS仿真T型波导学习笔记

HFSS仿真T型波导 文章目录 HFSS仿真T型波导1、求解器设置2、建模3、激励方式设置4、边界条件设置5、扫频设置6、设计检查&#xff0c;仿真分析7、数据后处理 设计要求&#xff1a; 仿真工作频率为10GHz的T型波导 1、求解器设置 模式驱动求解 2、建模 整个T型波导结构分为2…

【NAS群晖drive异地访问】远程连接drive挂载电脑硬盘

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 转载自cpolar极点云文章&#xff1a;【群…

java飞起基础----黑马程序员

阿里代码命名规约 【强制】方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格&#xff0c;必须遵从驼峰形式。正例&#xff1a; localValue / getHttpMessage() / inputUserId【强制】类名使用 UpperCamelCase 风格&#xff0c;必须遵从驼峰形式&#xff0c;…

在外远程访问NAS威联通(QNAP)-免费内网穿透

文章目录 前言1. 威联通安装cpolar内网穿透2. 内网穿透2.1 创建隧道2.2 测试公网远程访问 3. 配置固定二级子域名3.1 保留二级子域名3.2 配置二级子域名 4. 使用固定二级子域名远程访问 转载自cpolar极点云文章&#xff1a;无需公网IP&#xff0c;在外远程访问NAS威联通QNAP【内…

企业产品指导手册怎么弄成在线版本的啊?

企业产品指导手册作为企业宣传推广和产品销售的重要工具&#xff0c;传统上通常是以纸质形式发放给客户。但随着互联网技术的快速发展&#xff0c;越来越多的企业开始将产品指导手册转化为在线版本&#xff0c;以便更好地满足客户的需求。本文将介绍如何将企业产品指导手册弄成…

优维DevOps全新产品——双态部署重磅上线

优维又一全新产品上线啦&#xff01; 最近&#xff0c;优维召开了一场发布会&#xff0c;宣布「DevOps全新产品——双态部署」重磅上线。发布会现场&#xff0c;重新审视了DevOps市场现状&#xff0c;深度剖析了行业面临的挑战与机遇&#xff0c;同时也深入浅出的揭晓了“双态…

图像增广:强化深度学习的视觉表现力

目录 摘要&#xff1a; 1. 图像增广简介 2. 图像增广的原理 3. 常见的图像增广技术 4. 如何在实际项目中应用图像增广 5.实际应用 摘要&#xff1a; 当今&#xff0c;深度学习已经在计算机视觉领域取得了令人瞩目的成就。图像增广作为一种数据处理技术&#xff0c;让我们…

【Cache】Redis的高可用与持久化

文章目录 一、Redis 高可用1. 概念2. 高可用技术以及作用2.1 持久化2.2 主从复制2.3 哨兵2.4 集群 二、Redis 持久化1. 持久化的功能2. Redis 持久化方式 三、RDB 持久化1. 概述2. 触发条件2.1 手动触发2.2 自动触发2.3 其他自动发机制 3. 执行流程4. 启动时加载 四、AOF 持久化…

【UEFI实战】UEFI图形显示(字符输出)

HII Font 接下来介绍EFI_HII_FONT_PROTOCOL&#xff0c;它在UEFI代码中完成了字符到像素的转换&#xff0c;本节主要介绍这个转换关系&#xff0c;它的实现代码在edk2\MdeModulePkg\Universal\HiiDatabaseDxe\HiiDatabaseDxe.inf中&#xff0c;除了EFI_HII_FONT_PROTOCOL&…

【Axure教程】多选树穿梭选择器

多选树在有分层的领域是经常用到的&#xff0c;例如不同城市下的门店、不同部门的员工等等&#xff0c;用多选树就可以让我们在不同层级快速挑选到对应的对象。 今天作者就教大家在Axure中如何制作多选树穿梭选择器的原型模板&#xff0c;我们会以不同部门之间挑选员工位案例。…

leetcode极速复习版-第二章链表

目录 链表 203.移除链表元素 707.设计链表 206.反转链表 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 链表部分总结 链表 203.移除链表元素 题意&#xff1a;删除链表中等于给定值 val 的所有节点。 示例 1&#xff1a; 输入&a…

基于Java在线电影评价系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

【Linux】十分钟理解软硬链接

目录 1.磁盘的物理结构2.磁盘的物理存储结构3.文件系统4.硬链接4.14.2 5.软链接6.三种时间 1.磁盘的物理结构 盘片&#xff1a;一片两面&#xff0c;有一摞盘片。磁头&#xff1a;一面一个磁头&#xff0c;一个磁头负责一面的读取&#xff08;磁头是一起动的&#xff09;。马达…

二叉树 — 返回二叉树最大距离

题目&#xff1a; 给定二叉树头结点head&#xff0c;任何两个节点之间都有距离&#xff0c;求整棵二叉树最大距离。 二叉树如下图所示&#xff0c;假设从x到b&#xff0c;中间节点只能走一次&#xff0c;我们人为规定距离就是整条路径的节点数量&#xff0c;所以距离是3&#x…

Spring Boot 中的 Spring Cloud Gateway

Spring Boot 中的 Spring Cloud Gateway Spring Cloud Gateway 是一个基于 Spring Boot 的网关框架&#xff0c;它提供了一种统一的入口&#xff0c;将所有的请求路由到不同的后端服务中。Spring Cloud Gateway 采用了 Reactive 编程模型&#xff0c;可以处理大量并发请求&…

idea闪退,端口占用处理

1、idea --> Terminal 2、 输入命令 jps 查看进程 3、找到对应的进程&#xff0c;使用 taskkill /pid 端口号 /f 4、 重启项目 &#xff0c;即可