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

news2024/10/6 16:25:48

目录

1 原理

2 langchain-ChatGLM的开发部署

2.1 安装环境

2.2 加载本地模型

3 langchain-TigerBot的开发部署


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

1 原理

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

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

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

2 langchain-ChatGLM的开发部署

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

这次可以了

 然后就可以浏览器登录了

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

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

然后上传,再次提问问题

3 langchain-TigerBot的开发部署

做完上面的ChatGLM的部署,发现github上还有个:GitHub - wordweb/langchain-ChatGLM-and-TigerBot: 从langchain-ChatGLM基础上修改的一个可以加载TigerBot模型的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。

于是再部署下TigerBot,首先搭建环境,这里直接把上面的conda环境复制一份。

cp -drf langchain-chatglm-chw langchain-chatglm-and-TigerBot-chw

然后把之前下载的模型都拷贝过来

然后修改model_config .py的这几个地方

 还有models/init.py修改成这样

否则会报下面的错误,  

 然后用下面的命令启动,

CUDA_VISIBLE_DEVICES=0 python webui.py  --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/727633.html

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

相关文章

【C++11】lambda表达式 包装器

文章目录 1 lambda表达式1.1 引例1.2 lambda表达式的基本语法1.3 lambda表达式的底层原理 2 包装器3 bind 1 lambda表达式 1.1 引例 在C98中&#xff0c;如果想要对一个数据集合中的元素进行排序&#xff0c;可以使用std::sort方法&#xff1a; #include <algorithm> …

docker运行 mycli

1. 制作镜像 1.1 Dockerfile: FROM python:3.8 ENV MYSQL_HOST192.168.1.108 ENV MYSQL_PWDroot RUN apt-get update && apt-get install -y less RUN pip3 install mycli ENTRYPOINT ["mycli"] 注意 python:3.8 pip3 mycli 具有版本限制的,如果改了版…

【计算机网络】1.5——计算机网络的体系结构(网络分层模型)

计算机网络的体系结构 概述 计算机网络的体系结构是计算机网络及其构建所应完成功能的精确定义 考题 不属于网络体系结构所描述的内容的是 A、网络的层次 B、每层使用的协议 C、协议的内部实现细节 D、每层必须完成的功能 这些功能的「实现细节」&#xff0c;是遵守这种体系…

Web 前端 Day 1

课程大纲&#xff1a; html 结构 css 表现 Js 行为 jquery库 &#xff08;地位下降趋势 仍旧在用&#xff09; bootstrap 前端高端只是&#xff1a;angular angularjs html 超文本标记语言 相关解释 描述网页的语言 不仅有文字&#xff0c;还有图片、音频、视频等等 超…

某网站JS加密、OB混淆与CSS反爬实战分析

1. 写在前面 最近一段时间接触了一些小说网站的业务。发现很多的小说网站&#xff0c;甚至一些小站它们的安全防护措施做的都很到位&#xff01;例如上次说到的的五秒盾也是存在于一个小说小站。今天要讲的这个网站它集JS加密、ob混淆、CSS反爬于一体 目标站点&#xff1a; aH…

用真人模型制作3D虚拟人物,岂不是更真实?

3D虚拟人物是指利用计算机技术和图形学技术创建的一种能够模拟真实人体形态、行为和语言的虚拟实体。与传统的平面图像或视频不同&#xff0c;3D虚拟人物具有立体感和真实感&#xff0c;能够在虚拟环境中实现人机交互和情感交流&#xff0c;给用户带来全新的沉浸式体验。 随着…

文件批量改名新技巧:轻松将日期插入到文件名中,整理更有序!

在数字化时代&#xff0c;我们每天都面临着大量的文件&#xff0c;而合理整理和命名这些文件对于我们的工作和生活至关重要。特别是在需要存档或分享文件时&#xff0c;具有清晰的命名规则可以极大地提升工作效率和组织性。 首先&#xff0c;进入文件批量改名高手的文件批量重…

表征材料表面性质​的第一性原理计算方法:功函数

功函数计算是指通过计算材料表面或界面上的电子结构能量差来确定材料的界面特性的方法。在材料科学和表面科学领域&#xff0c;界面的性质对于材料的功能和性能具有重要影响。通过理解和控制界面&#xff0c;可以优化材料的电子传输、光学性能、催化活性等关键特性。 功函数表示…

网络协议【图解TCP/IP(笔记二)】

文章目录 网络协议随处可见的协议协议的必要性生活中的协议计算机中的协议分组交换协议协议的标准化 网络协议 随处可见的协议 在计算机网络与信息通信领域里&#xff0c;人们经常提及“协议”一词。互联网中常用的具有代表性的协议有IP、TCP、HTTP等。而LAN&#xff08;局域…

企业元宇宙虚拟场景开发公司广州华锐互动

元宇宙是一个虚拟的世界&#xff0c;可以模拟现实世界中的场景和交互方式。利用元宇宙搭建线上元宇宙互动展厅可以让企业在虚拟环境中展示产品、服务和品牌形象&#xff0c;与客户进行互动交流&#xff0c;提高企业的知名度和影响力。 通过搭建线上元宇宙互动展厅&#xff0c;利…

【python学习】matplotlib绘制仅有y轴的数值条码图/台阶图(隐藏特定坐标轴)

matplotlib绘制仅有y轴的数值条码图/台阶图 图形来源图形绘制思路绘图代码 图形来源 今天看文章&#xff0c;文章中有一幅图&#xff0c;图的表达形式很适合我目前的数据展示&#xff0c;于是想要用python画出来。 文章来源&#xff1a;Yun-Hua Cheng_2017_Scientific Report…

web学习笔记1

计算机&#xff1a; 课程大纲&#xff1a;html&#xff08;五条猫结构&#xff09; 结构 css 表现 JavaScript 行为 html&#xff1a;超文本标记语言 超&#xff1a;超链接&#xff0c;能从一个网页跳转到另一个网页 标记&#xff1a;文本要变成超文本&#xff0c;就需要各…

pwn05(应对简单栈溢出的常规套路)

目录 一、常规检查&#xff08;nc、file、checksec&#xff09; 二、IDA反编译&#xff0c;只找两个东西即可 1、寻找造成栈溢出的函数的地址到ebp的距离 2、 寻找我们所要利用的函数的地址&#xff08;即我们希望程序最后返回到哪里&#xff09; 三、编写并运行exp脚本 一…

eNSP-NAT网络地址转换服务

NAT网络地址转换服务 文章目录 NAT网络地址转换服务一、题目要求二、题目分析三、拓扑结构四、基础配置五、测试验证 一、题目要求 1.私网地址使用192.168.1.0/24进行子网划分 2.Telnet Server设备启动Telnet服务 3.isp设备仅配置IP地址 4.PC6,PC7,PC8均可以访问PC9 5.内网…

python 第十章 函数

系列文章目录 第一章 初识python 第二章 变量 第三章 基础语句 第四章 字符串str 第五章 列表list [] 第六章 元组tuple ( ) 第七章 字典dict {} 第八章 集合set {} 第九章 常用操作 文章目录 系列文章目录10.1函数的作用10.2函数的使用步骤定义函数调用函数函数的注意事项 10…

Linux 内存泄漏检测的实现原理与实现

在使用没有垃圾回收的语言时&#xff08;如 C/C&#xff09;&#xff0c;可能由于忘记释放内存而导致内存被耗尽&#xff0c;这叫 内存泄漏。由于内核也需要自己管理内存&#xff0c;所以也可能出现内存泄漏的情况。为了能够找出导致内存泄漏的地方&#xff0c;Linux 内核开发者…

抖音seo矩阵系统源码开发部署--开发文档分享

目录 一、抖音seo矩阵系统源码自研概况分析 二、 技术开发语言及功能框架 技术要求&#xff1a; 功能框架&#xff1a; 三、 抖音seo矩阵系统开发原则 四、 抖音seo矩阵系统源码开发示例 一、抖音seo矩阵系统源码自研概况分析 关于抖音seo矩阵系统源码自研&#xff0c;在开…

零零信安-DD数据泄露报警日报【第202期】

2023.07.07共发现匿名网络资讯信息79,948条&#xff1b;最近7天同比增长-20.6%&#xff1b;最近30天共发现匿名网络资讯信息2,587,590条。 北京零零信安科技有限公司成立于2020年&#xff0c;是国内首家专注于外部攻击面管理&#xff08;EASM&#xff09;的网络安全公司。基于…

Python3,10行代码竟然让URL变短了,没想到还可以这么玩。

让URL变短的方法 1、引言2、代码实战2.1 安装2.2 示例 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c;有没有什么方法&#xff0c;能让url变短一点 小鱼&#xff1a;我去~ url怎么惹你了&#xff0c; 你让它变短。&#xff1f; 小屌丝&#xff1a;没有了&#xff0c; 我…

python scrapy爬取网站数据(一)

框架介绍 scrapy中文文档 scrapy是用python实现的一个框架&#xff0c;用于爬取网站数据&#xff0c;使用了twisted异步网络框架&#xff0c;可以加快下载的速度。 scrapy的架构图&#xff0c;可以看到主要包括scheduler、Downloader、Spiders、pipline、Scrapy Engine和中间…