LangChain-Chatchat知识库对话

前言

上次我们完成了Chatchat的本地部署,使用了LLM对话的功能。这次我们尝试一下其他的功能,之前总是有报错没有跑通,这次处理了几个问题之后才跑通了知识库对话和文件对话。

知识库对话

原理:

image-20240324115000845

首先我们看这个图可以明白,知识库对话是有很多步骤的,1-7步是把上传的文件做处理,拆分,转为向量储存起来。然后当我们发起查询请求,也会被转换为向量,接着和向量数据库的向量做相似度比较,找到比较相近的向量对应的文本。最后根据这些文本去构造了prompt请求LLM获取返回数据。

使用步骤:

先说明一下这里我用的是智谱AI的API,也就是在线的LLM,本地如果是使用chatglm的话,因为本身个人电脑配置不高,所以能运行的模型参数都相对较小,有些知识库对应的信息可能查不出来,用知识库对话的话建议是使用在线的llm。一开始用本地的llm,问了很多知识库的问题都回答不上来,找不到知识库匹配结果,我还以为是我哪里运行有问题,后来换成在线的llm就可以了。

1.点击知识库管理

image-20240324171928214

2.选择或者新建一个知识库

image-20240324175415611

这里面有一些向量数据库和Embedding模型可以选择,我就用的默认的,其他的能不能组合跑起来还没有试过。

image-20240324192802019

image-20240324192907295

3.上传知识库文件

image-20240324175504045

这个是github上写的支持的文件格式:

Langchain 应用

本地数据接入接入非结构化文档

  • .txt, .rtf, .epub, .srt
  • .eml, .msg
  • .html, .xml, .toml, .mhtml
  • .json, .jsonl
  • .md, .rst
  • .docx, .doc, .pptx, .ppt, .odt
  • .enex
  • .pdf
  • .jpg, .jpeg, .png, .bmp
  • .py, .ipynb

4.添加文件到知识库中

image-20240324175654791

点击添加文件到知识库,就会把文件保存到知识库,然后裁剪拆分成向量,往向量库放一份当前文本对应的向量。

这里可以根据文档的具体数据类型来调整,每一段文本的长度。相邻文本重合长度是指的两个文本会重叠的部分,举个例子按照文本250字符切分的话,可能会把一句正常的话给截断掉,所以会多选择一些字符串。

比如说上面的设置是chunk_size=250, chunk_overlap=50

处理文本时,每个文本块的实际长度是 chunk_size=250 个字符。

但是,由于chunk_overlap=50,相邻文本块之间会有 50 个字符的重叠。

这意味着:

  1. 第一个文本块长度是 250
  2. 第二个文本块从第一个块的第 201 个字符(250-50=200,+1=201)开始,长度还是 250
  3. 第三个文本块从第二个块的第 201 个字符开始,长度还是 250
  4. 以此类推

5.展示结果

这个知识库我传了一本关于黑天鹅事件的pdf,从图中可以看到上面是没有知识库匹配的时候,llm以为我问的是黑天鹅这个物种。下面选择了知识库问答之后,返回的事对黑天鹅事件的描述,对于问问题的人来说,如果一开始就知道要从哪些文档里面去找答案的话,用知识库匹配会更加贴近你想要问的问题。我的理解是,知识库问答在llm问答之前相当于是做了一层预处理,帮助我们构建了更加合理的prompt,所以得到的答案会更加准确,本质上还是llm的能力。因为如果llm本身没有黑天鹅这个知识,它也没法回答我,所以要想好好利用llm的能力,实际上是要构建最合适的问题,这也就是所谓的prompt工程吧。

image-20240324115519420

文件对话

image-20240323205546051

文件对话就不多说了,相当于只有搜索向量库,而没有llm优化后回答得部分,东西是能搜索出的。如果是对于有大量数据文档的话,这个向量搜索还是有用的,可以帮助检索提升效率。因为很多时候问问题的人并不是那么的专业,可能问题本身就会会跑偏,直接文本匹配的话,不一定是找到有用的信息。向量搜索能更好地匹配语义相关的结果,可以返回表达类似含义但用词不同的文档,这就是它的优势所在。

遇到问题

1.上传文件的时候报错utils.py[line:377] - ERROR: ImportError: 从文件 test/test.txt 加载文档时出错:libGL.so.1: cannot open shared object file: No such file or directory

首先我使用的是pdf,报了这个错,我以为是pdf不能识别的问题。然后就按照chatchat的github的wiki里面对文件进行预处理。修改成了比较简单内容,而且是txt格式方便程序来识别。结果还是报错,就查了下这个报错。发现问题是因为少了系统包下面是gpt对这两个包的说明,反正就是会用的的库吧。

libgl1-mesa-glx 和 libglib2.0-0 是两个非常重要的库文件:

  1. libgl1-mesa-glx 这个包提供了Mesa 3D图形库的OpenGL实现。OpenGL(OpenGL Library)是一个跨语言、跨平台的2D和3D图形API,被广泛应用于图形渲染、游戏开发、CAD、虚拟现实、科学可视化等领域。Mesa是一个开源的OpenGL实现,用于在Linux、Windows、macOS等操作系统上提供硬件3D加速支持。libgl1-mesa-glx是Mesa的GLX实现,用于在X Window系统上运行OpenGL程序。
  2. libglib2.0-0
    这个包含有GLib库的核心文件。GLib是GNOME项目的底层系统库,提供了基本的系统独立型数据结构和操作,如链表、树、哈希表、内存分配等。它被广泛用作GTK+、GStreamer、WebKitGTK+等GNOME软件的基础构件。GLib提供了线程抽象、IPC、事件循环、Unicode处理等通用功能,是编写应用程序的基础,也可以单独使用。

总的来说,libgl1-mesa-glx提供OpenGL 3D图形渲染支持,而libglib2.0-0则是编写GTK+/GNOME应用程序及其它应用的核心基础库。这两个库在图形界面应用、游戏、科学计算等领域都有重要应用。

参考资料

1.pdf文件导入向量库失败

2.Chatchat的wiki

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go面向对象

继承 封装 多态 定义结构体 //定义老师的结构体 type Teacher struct {Name stringAge intSchool string }func main() {var t1 Teacherfmt.Println(t1)t1.Name "tom"t1.Age 20t1.School "school"fmt.Println(t1) } 结构体实例的创建 package ma…

数据结构(五)——树森林

5.4 树和森林 5.4.1 树的存储结构 树的存储1:双亲表示法 用数组顺序存储各结点,每个结点中保存数据元素、指向双亲结点(父结点)的“指针” #define MAX_TREE_SIZE 100// 树的结点 typedef struct{ElemType data;int parent; }PTNode;// 树的类型 type…

基于深度学习的生活垃圾智能分类系统(微信小程序+YOLOv5+训练数据集+开题报告+中期检查+论文)

摘要 本文基于Python技术,搭建了YOLOv5s深度学习模型,并基于该模型研发了微信小程序的垃圾分类应用系统。本项目的主要工作如下: (1)调研了移动端垃圾分类应用软件动态,并分析其优劣势;…

大数据Spark--入门

文章目录 Spark 概述Spark 是什么Spark and HadoopSpark and HadoopSpark 核心模块 Spark 简单上手创建Maven项目增加 Scala 插件增加依赖关系WordCount异常处理 Spark 概述 Spark 所需资料 链接:https://pan.baidu.com/s/12iaW68vriL6i-xI1kmr0_g?pwdm4zc 提取码…

3.24作业

基于UDP的网络聊天室 项目需求: 如果有用户登录,其他用户可以收到这个人的登录信息如果有人发送信息,其他用户可以收到这个人的群聊信息如果有人下线,其他用户可以收到这个人的下线信息服务器可以发送系统信息 服务器端代码 #in…

20.WEB渗透测试--HTTP协议(上)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:19.WEB渗透测试--抓包技术(下)-CSDN博客 HTTP请求包 HTTP简介 &am…

计算机组成原理-5-输入输出系统

5. 输入输出系统 文章目录 5. 输入输出系统5.1 概述5.1.1 I/O系统的发展概况5.1.2 I/O系统的组成5.1.3 I/O设备与主机的连接5.1.4 I/O设备与主机传送信息的控制方式 5.2 I/O设备5.3 I/O接口5.4 控制方式5.4.1 程序查询方式5.4.2 程序中断方式5.4.3 DMA方式5.4.4 程序中断方式与…

大白话扩散模型(无公式版)

背景 传统的图像生成模型有GAN,VAE等,但是存在模式坍缩,即生成图片缺乏多样性,这是因为模型本身结构导致的。而扩散模型拥有训练稳定,保持图像多样性等特点,逐渐成为现在AIGC领域的主流。 扩散模型 正如…

2024/3/24 LED点阵屏

显示原理: 类似矩阵键盘,逐行or逐列扫描 74HC595是串行 寄存器 感觉就是三转八寄存器 并行:同时输出;串行:一位一位输出 先配置74HC595,重新进行位声明 sbit RCKP3^5; //RCLK sbit SCKP3^6; …

管理类联考–复试–管理类知识–计划

决策是管理的核心,决策是计划的前提,计划是管理的首要职能,战略是一种计划。 #mermaid-svg-rGssnUQtzhGwEUp6 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-rGssnUQtzhGwEUp6 .e…

Vue3 上手笔记

1. Vue3简介 2020年9月18日,Vue.js发布版3.0版本,代号:One Piece(n 经历了:4800次提交、40个RFC、600次PR、300贡献者 官方发版地址:Release v3.0.0 One Piece vuejs/core 截止2023年10月,最…

第十三届蓝桥杯JavaB组省赛真题 - 星期计算

解题思路: 方法一: 20的22次方是一个比较大的数,long和int都装不下这么大的数,因此需要使用下面的方法,如果 a, b, p 都是整数,且 p 是正数,那么:(a * b) % p (a % p * b % p) % …