实现开源可商用的 ChatPDF RAG:密集向量检索(R)+上下文学习(AG)

实现 ChatPDF & RAG:密集向量检索(R)+上下文学习(AG)

    • RAG 是啥?
    • 实现 ChatPDF
    • 怎么优化 RAG?

 


RAG 是啥?

RAG 是检索增强生成的缩写,是一种结合了信息检索技术与语言生成模型的人工智能技术。

这种技术主要用于增强 LLM 的能力,使其能够生成更准确且符合上下文的答案,同时减少模型幻觉。

RAG通过将检索模型和生成模型结合起来,利用专有数据源的信息(比如多文档)来辅助文本生成。


从本地文档加载到生成语言模型回答的整个流程。

  1. 文本分块

    • 加载文件:这一步骤涉及从本地存储读取文件。
    • 读取文件:将读取的文件内容转换为文本格式。
    • 文本分割:按照一定的规则(例如按段落、句子或词语)将文本分割成小块,便于处理。
  2. 向量化存储

    • 文本向量化:使用NLP技术(如TF-IDF、word2vec、BERT)将文本转换为数值向量。
    • 存储到向量数据库:将文本的向量存储在向量数据库中,如使用FAISS进行高效存储和检索。
  3. 问句向量化

    • 这一步将用户的查询或问题转换为向量,使用的方法应与文本向量化相同,确保在相同的向量空间中比较。
  4. 在文本向量中匹配相似向量

    • 通过计算余弦相似度或欧式距离等,找出与查询向量最相似的顶部k个文本向量。
  5. 构建问题的上下文

    • 将匹配出的文本作为问题的上下文,与问题一起构成prompt,输入给语言模型。
  6. 生成回答

    • 将问题和其上下文提交给语言模型(如GPT系列),由模型生成相应的回答。

通用 RAG 就是如此,最终目的是提供精确和相关的信息回答。

实现 ChatPDF

实现 RAG 步骤有很多步,涉及的知识点也很多,直接上已实现的开源项目,不用深入理解里面每个知识点,能用就行。

开源项目:https://github.com/chatchat-space/Langchain-Chatchat

这个项目是 Apache-2.0 license,开源可商用。

conda create -n chatpdf python==3.11.7   # 创建虚拟环境# 拉取仓库
$ 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 中相应依赖取消注释再安装。# 模型下载
$ git lfs install
$ git clone https://huggingface.co/THUDM/chatglm4-9b   
$ git clone https://huggingface.co/BAAI/bge-large-zh# 初始化知识库和配置文件
$ python copy_config_example.py
$ python init_database.py --recreate-vs# 启动项目
$ python startup.py -a

这个自己实现的 ChatPDF 功能:

  • 解读文档,任何领域任何书籍任何专业,都能让人看懂
  • 使用RAG,回答是检索不是生成,极大减少幻觉
  • 能多文档,不会被长上下文限制(200k)
  • 本地部署的模型,不是调用api,不会泄露数据

怎么优化 RAG?

方案1:不同领域下,通用 RAG 方案效果也不好,一般需要按场景定制优化的。

  • 比如医学领域,用户搜索感冒,但医学数据库里面是风热流感,关键词不匹配就造成检索错位,只能得到通用信息
  • 分解子问题查询 + 多步查询

方案2:通用 RAG 在文本分块的时候,通常只是粗暴的把 pdf 划分为 1500 块,很多关联的上下文被迫分隔。

  • 最好是按照规则分块,而不是固定一个块,比如按标题(一级标题、二级标题、三级标题…),这样整个子块的内容都完整
  • 再链接每个子块和父文档,复现上下文的相关性
  • 如果那个作者标题写法不好,可以使用语义分割(阿里语义分割模型SeqModel)

方案3:PDF 解析时错漏很多信息,比如老年糖尿病标准变成了糖尿病标准,这个很影响效果

  • 不能使用 pdf 加载器自动拆分,而是要手动精细拆分,再加上多个选项排序,得到最精准的那个

方案4:词嵌入模型没有经过微调,比如我的数据都是医学的,使用的 embedding 模型 没有经过医学微调,很多名词、概念把握不清,只能捕捉到一些通用的医学术语和语法结构

  • 尝试更多embedding模型,获得更精确的检索结果。如:piccolo-large-zh 或 bge-large-zh-v1.5、text2vec、M3E、bge、text-embedding-3 等,或者自己微调词嵌入模型

方案5:如果涉及大量文档,使用 pgVector - 高性能向量数据库引擎,如果存在较多相似的内容,可以考虑分类存放数据,减少冲突的内容

方案6:改进传统 RAG 算法

  • 比如动态检索和重排序
  • 比如multihop多跳检索

方案7:基于文档中的表格问题,通用 RAG 这块效果不好。

  • 优先转为HTML、xml 格式,也可以 OCR

方案8:引入动态 RAG

  • 静态 RAG,使用提示词和已向量的数据,检索交互
  • 动态 RAG,一边交互,一边把交互内容,生成搜索词,会呼吸的RAG,实现自主更新

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

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

相关文章

型号FM152A,FM148R和利时

型号FM152A,FM148R和利时。控制系统的仿真,综合考虑多方面的因素,本文将用MCGS组态软件设计一个仿真实验监控平台来对其进行实时控制.,完成仿真实验监控平台的设计,型号FM152A,FM148R和利时。最终达到对水箱液位实时监控,实验数据采集,报表的输出和数据的同步显示MC…

Live800:深度解析,客户服务如何塑造品牌形象

在当今竞争激烈的市场环境中,品牌形象对于企业的成功至关重要。而客户服务作为品牌与消费者之间最直接的互动方式,不仅影响着消费者的购买决策,更在塑造品牌形象方面发挥着不可替代的作用。本文将深度解析客户服务如何塑造品牌形象&#xff0…

【Unity3D小功能】Unity3D中UGUI-Text实现打字机效果

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群:398291828 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 需求要实现Text的打字机效果,一看居然…

机器学习作业6——svm支持向量机

目录 一、理论 概念: 线性可分: 支持向量: 间隔: 目标: 软间隔: 梯度下降法: 别的方法: 拉格朗日函数: SMO算法: 核函数: 二、代码 …

python代码中参数的默认值

python中的函数,可以给形参指定默认值。 带有默认值的参数,可以在调用的时候不传参。 如上图所示,在给函数设定形参的时候可以给函数形参设定默认值,当然默认参数的形参应该在非默认形参的后面。 如果在调用函数的时候&#xff…

Linux云计算架构师涨薪班就业服务有哪些?

学员一站式就业服务:一次学习,薪资翻倍 简历制作与指导 学员在培训期间,人才顾问会提供简历制作和指导服务,帮助学员制作出一份专业、有吸引力的简历。简历是求职者给招聘单位的第一印象,因此非常重要 模拟面试与技巧指导 为了让…

WebGPU 引领前端未来,互动渲染如何驱动小红书业务增长?

在大前端时代,浏览器能力得到显著的增强,为前端开发带来了更多的可能性和挑战。作为一套全新的 Web API 标准,WebGPU 旨在提供高性能的 3D 图形和数据并行计算能力,其在游戏、虚拟现实、机器学习等多个行业和应用场景中展现出潜力…

嵌入式Linux系统编程 — 3.2 stat、fstat 和 lstat 函数查看文件属性

目录 1 文件有哪些属性 2 stat函数 2.1 stat函数简介 2.2 struct stat 结构体 2.3 struct timespec 结构体 2.4 示例程序 3 fstat 和 lstat 函数 3.1 fstat 函数 3.2 lstat 函数 1 文件有哪些属性 Linux文件属性是对文件和目录的元数据描述,包括文件类型…

30-unittest生成测试报告(HTMLTestRunner插件)

批量执行完测试用例后,为了更好的展示测试报告,最好是生成HTML格式的。本文使用第三方HTMLTestRunner插件生成测试报告。 一、导入HTMLTestRunner模块 这个模块下载不能通过pip安装,只能下载后手动导入,下载地址是:ht…

应用广义线性模型一|线性模型

文章目录 一、统计学及思维模式二、未知现象的数学描述三、线性模型(一)线性模型的定义(二)线性模型的参数估计(三)线性模型的应用(四)离散解释变量的设计向量构建方法 四、线性模型…

SpringAOP 常见应用场景

文章目录 SpringAOP1 概念2 常见应用场景3 AOP的几种通知类型分别有什么常见的应用场景4 AOP实现 性能监控4.1 首先,定义一个切面类,用于实现性能监控逻辑:4.2 定义自定义注解4.3 注解修饰监控的方法 5 AOP实现 API调用统计5.1 定义切面类&am…

深度图的方法实现加雾,Synscapes数据集以及D455相机拍摄为例

前言 在次之前,我们已经做了图像加雾的一些研究,这里我们将从深度图的方法实现加雾展开细讲 图像加雾算法的研究与应用_图像加雾 算法-CSDN博客 接下来将要介绍如何使用深度图像生成雾效图像的方法。利用Synscapes数据集,通过读取EXR格式的…

【实盘】第二十期:2024-06月~第一周

一、每周净值 01 CTA投资组合 CTA多品种全覆盖全天候策略2024年2月至2024年5月底实盘总收益12.753%,当前浮动净值为1.1407,当前平仓净值为1.12753。 月度最大本金回撤0.3%(资金曲线为平仓盈亏,总体回撤应加入浮动持仓的盈亏总体计算,实际当前净值见棕色…

各种空气能热泵安装图

空气能热泵安装图 循环式空气能热泵安装图 直热循环式空气能热泵安装图 泳池空气能热泵安装图 循环式水源热泵热安装系统原理图 直热循环式水源热泵安装系统图 空气水源热泵安装图

flutter as连接网易模拟器

网易模拟器下载 Mac 使用MuMu模拟器调试 Flutter开发 Android Studio 安装第三方模拟器—网易MuMu Mac 安卓Studio使用外部模拟器 Mac电脑:Android Studio 连接 MUMU 网易模拟器 Mac 上 Android Studio 链接网易 MuMu 模拟器调试 在 .zshrc 中设置 adb 二进制文…

重构某测试站点

一、计算校验值 校验值结果: 文件名称:培训用centos.rar,文件大小:1,335,759,953,MD5:534EC38CDA7DA2196C84AC8F6092514B,SHA1:FD35D86A27A007AE10872980C48653A110DF6067&#xf…

EverWeb 强大的零基础Mac网页设计制作软件

搜索Mac软件之家下载EverWeb 强大的零基础Mac网页设计制作软件 EverWeb 4.2是非专业网页设计师的绝佳网页制作工具,无需编码即可创建美观、响应迅速的网站。只需拖放自己的图像、文本和其他任何html元素到网页布局的任何位置。 EverWeb的功能特性: 下…

C++模板编程—学习C++类库的编程基础

课程总目录 文章目录 一、详解函数模板二、类模板三、类模板实践&#xff1a;实现向量容器vector四、理解容器空间配置器allocator的重要性 一、详解函数模板 模板的意义&#xff1a;对类型也可以进行参数化了 // 也可以用template<class T>&#xff0c;但class容易和类…

适用于 Windows 的 8 大数据恢复软件

数据恢复软件可帮助您恢复因意外删除或由于某些技术故障&#xff08;如硬盘损坏等&#xff09;而丢失的数据。这些工具可帮助您从硬盘驱动器 (HDD) 中高效地恢复丢失的数据&#xff0c;因为这些工具不支持从 SSD 恢复数据。重要的是要了解&#xff0c;您删除的数据不会被系统永…

NodeJs实现脚本:将xlxs文件输出到json文件中

文章目录 前期工作和依赖笔记功能代码输出 最近有一个功能&#xff0c;将json文件里的内容抽取到一个xlxs中&#xff0c;然后维护xlxs文件。当要更新json文件时&#xff0c;就更新xlxs的内容并把它传回json中。这个脚本主要使用NodeJS写。 以下是完成此功能时做的一些笔记。 …