LangChain-Chatchat知识库对话

news2024/12/24 13:59:16

前言

上次我们完成了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.coloradmin.cn/o/1541324.html

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

相关文章

Redis学习二--常见问题及处理

基本概念 Redis基本概念数据结构 机制 持久化机制: RDB(内存快照):某一时刻的内存快照以二进制的方式写入磁盘,可以手动触发和自动触发。 优点:生成文件小,恢复速度快,适用于灾难恢复。 缺点&#xff1a…

03-SparkSQL入门

0 Shark Spark 的一个组件,用于大规模数据分析的 SQL 查询引擎。Shark 提供了一种基于 SQL 的交互式查询方式,可以让用户轻松地对大规模数据集进行查询和分析。Shark 基于 Hive 项目,使用 Hive 的元数据存储和查询语法,并基于Hiv…

MySQL5.6.11安装步骤(Windows7 64位)

MySQL5.6.11安装步骤(Windows7 64位) 1. 下载MySQL Community Server 5.6.21,注意选择系统类型(32位/64位) 2. 解压MySQL压缩包 将以下载的MySQL压缩包解压到自定义目录下。 3. 添加环境变量 变量名:MYS…

【项目设计】基于MVC的负载均衡式的在线OJ

项目代码(可直接下载运行) 一、项目的相关背景 学习编程的小伙伴,大家对力扣、牛客或其他在线编程的网站一定都不陌生,这些编程网站除了提供了在线编程,还有其他的一些功能。我们这个项目只是做出能够在线编程的功能。…

“低代码+平台”:驱动企业数字化转型与创新的新引擎

“低代码平台”作为一种新兴的软件开发范式,正逐渐成为企业快速响应市场变化、优化业务流程、提升数字化水平的重要手段。它的价值在于,将传统软件开发的复杂性大大降低,赋予了非技术人员或轻量级开发者快速构建应用的能力,并能灵…

可视化驯龙高手:Portainer——轻松驾驭Docker的图形化管理利器

在Docker容器技术的海洋中,Portainer如同一艘满载智能导航系统的旗舰,为我们提供了直观且易用的图形化管理界面,让繁杂的容器管理和运维工作变得轻松愉悦。本文将带你了解Portainer的基本功能,掌握其安装方法,并体验其…

摘录笔记——2024年3月22日

目录 一、背景 1.1 新人的选择困局 1.2 高人才密度环境下普通员工的成长效率困局 1.3 业务发展和个人成长的二元对立困局 1.4 中年打工人低费效比引发的职场生涯终结困局 二、人的本质 2.1 人的本质的定义 2.2 由“人的本质”引出的几个关键过程 2.2.1 认知指引实践&a…

【前端寻宝之路】学习和总结HTML表格的实现和合并

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-IWDj0gWiFt6IMq3x {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

啥是反射???

在Java编程中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查类、接口、字段和方法的信息,并且可以动态地创建和操作对象。 一、反射的基本概念 反射是Java语言的一个特性,它允许程序在运行时对…

QML ShapePath绘制虚线

一.qml PathLine介绍 在 QML(Qt Modeling Language)中,PathLine 是 Path 元素的一个子类型,用于创建两点之间的直线段。Path 类型用于描述一个二维路径,可以用来绘制形状、曲线和直线。PathLine 是所有路径曲线中最简单…

从0写一个问卷调查APP的第13天-1

1.今日任务 我也只是一个大学生,有什么思路不对的地方给我指出来哟! 分析:上次我们实现了任务调查的插入。但是我们插入的问卷调查只有它的标题,也就是这个问卷调查是什么我们告诉数据库了,但是现在我们还没有给它添加任何问题&…

域控操作十三:域用户登陆前显示标题以及文本

域控用户在登录前会先显示这个,才能输入密码登录

【数字图像处理matlab系列】使用数组索引进行简单的图像裁剪、二次取样操作

【数字图像处理matlab系列】使用数组索引进行简单的图像裁剪、二次取样操作 【先赞后看养成习惯】求点赞+关注+收藏! pout.tif是一张matlab自带的图片,图像尺寸是291*240,使用imread读取该图像>> a = imread(pout.tif); >> imshow(a);对图像a进行上下翻转操作,…

深入理解 Docker 镜像

1. Docker 镜像的底层原理 1.1 分层的镜像 以我们的pull 命令为例,在下载的过程中我们可以看到docker的镜像好像是一层一层的在下载。 1.2 UnionFS(联合文件系统) 联合文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次…

vector类详解及重要函数实现

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 今日主菜:vector类 主厨:邪王真眼 所属专栏:c专栏 主厨的主页:Chef‘s blog 坚持下去,成功不是目的&a…

C#学习笔记1:C#基本文件结构与语法

现在开始我的C#学习之路吧,这也许不适合0编程基础的人看,因为我会C语言了,笔记做的可能有思维上的跳跃,如果0基础可能会觉得有些地方转折得莫名奇妙,但我的学习笔记实操还是比较多的,基本都是真实运行程序结…

QTabWidget的tabbar不同方向显示 文字方向设置 图标跟随变化 实现方式 qt控件绘制原理

先来看结果图:(参考博客:QTabWidget中tab页文本水平或垂直设置_pyqt tab_widget.settabposition(qtabwidget.west) 字体-CSDN博客) 从图中可知,"普通"是qt自己的样式,但是很明显,在垂…

Ubuntu18.04桌面版设置静态IP地址

引用: Ubuntu配置静态IP_ubuntu配置静态ip地址-CSDN博客 正文 默认Unbuntu 18.04 Desktop桌面版使用 netplan 管理网卡网络地址。使用Unbuntu 18.04 桌面版配置,可以通过桌面上的设置图标配置网卡的静态IP地址。 点击桌面右上角下拉框,点击“设置”按…

蓝桥杯(2):python基础算法【上】

时间复杂度、枚举、模拟、递归、进制转换、前缀和、差分、离散化 1 时间复杂度 重要是看循环,一共运行了几次 1.1 简单代码看循环 #时间复杂度1 n int(input()) for i in range(1,n1):for j in range(0,i):pass ###时间复杂度:123....nn(1n)/2 所以…

面试题 之 react

1.说说对react的理解 1️⃣是什么 React是用于构建用户界面的 JavaScript 库,遵循组件设计模式、声明式编程范式和函数式编程概念,更高效使用虚拟 DOM 来有效地操作 DOM ,遵循从高阶组件到低阶组件的单向数据流。 react 类组件使用一个名为 render() 的方…