改进 RAG:自查询检索

news2024/10/2 22:19:40

原文地址:Improving RAG: Self Querying Retrieval

2024 年 2 月 11 日

让我们来解决构建 RAG 系统时的一个大问题。

我们不能依赖语义搜索来完成每个检索任务。只有当我们追求单词的含义和意图时,语义搜索才有意义。

But in case,我们正在对数据库中的内容进行搜索,就像我们可能只想执行查找任务一样,使用语义搜索是不合逻辑的。它甚至可能给出不准确的结果,并使用不必要的计算能力。

在处理 Excel 文件或财务数据时,通常会出现此问题。对于这些情况,LangChain 提供了一个名为“自查询检索”的实用程序。

我们所做的很简单。我们在检索和输入之间插入一个“步骤”。

  • 用户输入查询。
  • 我们使用语言模型对查询进行重新格式化,以获取查询的语义要素。
  • 我们还将转换查询,以便对元数据进行搜索。

重申一下,这个想法非常简单。如果我们要查找一部电影,并想查看年份,我们就会进入矢量存储。我们只需查找年份,然后将结果筛选回该年份。

基础知识已经清楚了,现在让我们来了解一下 LangChain 如何帮助我们实现自查询。

我们使用 "自查询"(Self Query)检索器。自查询"检索器允许我们查询矢量数据库。让我们来看看这种自查询检索器是如何实现的。

自查询基类的唯一类方法是 from_llm。创建自查询类需要四个必需参数:llmvectorstoredocument_contents 和 metadata_field_info

  • llm 用于传递语言模型。
  • vectorstore 用于传递一个向量存储空间
  • document_contents 参数指文档内容的简短描述。
  • metadata_field_info 是 AttributeInfo 对象的序列,是包含矢量数据库中数据信息的字典。我们定义了一个 AttributeInfo 对象列表,其中包含每个属性及其数据类型的信息,以便语言模型知道它正在处理什么。

我不打算讨论可选参数。

现在,让我们看看如何处理参数。根据传入的参数,我们使用一系列 if 语句来决定要做什么。

首先,我们会检查是否有已定义的结构化查询翻译器。如果没有,我们就使用已定义向量存储的内置翻译器。

接下来,我们检查链关键字参数。我们可以将它们设置为传入的值,也可以保持为空字典。在接下来的两个 if 语句中,我们将继续检查这些参数。我们查找的两个键是 allowed comparators 和 operators。这些键决定了我们如何编写过滤表达式。

定义好一切后,我们就可以创建查询构造函数了。我们需要传递 LLM、文档内容描述、元数据字段、是否要启用限制以及要传递给链的关键字参数。定义完所有这些元素后,函数将返回一个 Runnable 对象,允许我们执行指定的脚本。

query_constructor = load_query_constructor_runnable(
               llm,
               document_contents,
               metadata_field_info,
               enable_limit=enable_limit,
               **chain_kwargs,
           )

在这个类方法的最后,我们需要返回 自查询检索器。该方法返回 self query 类的一个实例。我们传入刚刚定义的查询构造函数,以及传入的向量存储、是否使用原始查询、翻译器和关键字参数列表。

return cls(
               query_constructor=query_constructor,
               vectorstore=vectorstore,
               use_original_query=use_original_query,
               structured_query_translator=structured_query_translator,
               **kwargs,
           )

通过这种方法,我们只需传递四个必填字段即可创建 RAG 应用程序。LLM、矢量数据库、文档描述和元数据信息。

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

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

相关文章

python自动化管理和zabbix监控网络设备(有线网络和路由配置部分)

目录 目录 一、拓扑图 二、core-sw1 三、core-sw2 四、sum-sw1 五、sum-sw2 六、FW1 七、DMZ-SW1 结语 一、拓扑图 二、core-sw1 sys sysname core-sw1 vlan batch 10 20 30 40 50 60 100 vlan batch 200 210 220 230 240 250 stp region-configuration region-name…

选择稳定代理IP需要考虑哪些因素?

很多人不知道怎么选择稳定的代理IP,也不知道当前代理IP套餐是否稳定,今天我们一起来分析下,选择稳定的代理IP可以从哪几方面去考虑。 1、代理IP的可用性 代理IP要稳定,先要可以用。一个代理IP池是否稳定,要看代理IP的…

区分服务 DiffServ

目录 区分服务 DiffServ 区分服务的基本概念 区分服务 DiffServ 的要点 每跳行为 PHB DiffServ 定义的两种 PHB 区分服务 DiffServ 区分服务的基本概念 由于综合服务 IntServ 和资源预留协议 RSVP 都较复杂,很难在大规模的网络中实现,因此 IET…

Docker复习笔记

Centos7安装Docker Docker官网:www.docker.com Docker官网仓库:hub.docker.com Docker文档是比较详细的 安装相关依赖 yum -y install gcc gcc-c yum install -y yum-utils 设置docker镜像仓库 yum-config-manager --add-repo https://download.docker.com/linux/centos/do…

Mysql运维篇(五) 部署MHA--主机环境配置

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。如有侵权,请留言,我及时删除! 大佬博文 https://www.cnblogs.com/gomysql/p/3675429.html MySQL 高可用(MHA&#x…

js:通过input标签或Drag拖拽文件实现浏览器文件上传获取File文件对象

文档 https://developer.mozilla.org/zh-CN/docs/Web/API/Filehttps://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/drag_event 通过读取文件可以获取File对象的信息 lastModified: 1707210706000 lastModifiedDate: Tue Feb 06 2024 17:11:46 GMT0800 (中国标准…

使用 Verilog 做一个可编程数字延迟定时器 LS7211-7212

今天的项目是在 Verilog HDL 中实现可编程数字延迟定时器。完整呈现了延迟定时器的 Verilog 代码。 所实现的数字延迟定时器是 CMOS IC LS7212,用于生成可编程延迟。延迟定时器的规格可以在这里轻松找到。基本上,延迟定时器有 4 种操作模式:…

备考北京高考数学:历年选择题真题练一练和解析(2014-2023)

还有三个多月的时间就要高考了,我们今天继续看北京市高考数学真题和解析。今天看5道选择题。独家制作的在线练习集,可以便捷地反复刷这些真题,吃透真题(背后的知识点和解题技巧),让高考数学再上一个台阶。 …

【LeetCode:2476. 二叉搜索树最近节点查询 + 中序遍历 + 有序表】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

【算法小讲堂】#1 贪心算法

引入——关于贪心算法 我们先来做一个小游戏——现在假设自己是一个小偷,桌上有一些物品,包括一台iPhone15、一个充电宝、一个眼罩和一个溜溜梅。此时,你听说警察即将到来,那么你会先带走哪个东西呢? 一般来讲&#xf…

[云原生] 二进制安装K8S(上)搭建单机matser、etcd集群和node节点

一、单机matser预部署设计 目前Kubernetes最新版本是v1.25,但大部分公司一般不会使用最新版本。 目前公司使用比较多的:老版本是v1.15,因为v1.16改变了很多API接口版本,国内目前使用比较多的是v1.18、v1.20。 组件部署&#xff…

beego代理前端web的bug

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、beego代理前端web的bug总结 一、beego代理前端web的bug *报错,为web压缩包index.html里面的注释被错误解析,删掉就行 2024/02/22 10:2…

[HarekazeCTF2019]encode_and_encode 不会编程的崽

这题知道这个知识点就挺好做的 <?php error_reporting(0);if (isset($_GET[source])) {show_source(__FILE__);exit(); }function is_valid($str) {$banword [// no path traversal\.\.,// no stream wrapper(php|file|glob|data|tp|zip|zlib|phar):,// no data exfiltra…

如何实现固定公网地址远程访问内网Wagtail管理界面

文章目录 前言1. 安装并运行Wagtail1.1 创建并激活虚拟环境 2. 安装cpolar内网穿透工具3. 实现Wagtail公网访问4. 固定的Wagtail公网地址 前言 Wagtail是一个用Python编写的开源CMS&#xff0c;建立在Django Web框架上。Wagtail 是一个基于 Django 的开源内容管理系统&#xf…

【精品】OnlyOffice 8.0 版本深度测评

引言 官网链接&#xff1a; ONLYOFFICE 官方网址 OnlyOffice 是一套全面的开源办公协作软件&#xff0c;旨在为用户提供强大、便捷和安全的文档处理和协作环境。最新发布的 OnlyOffice 8.0 版本带来了一系列引人瞩目的新特性和功能改进&#xff0c;进一步提升了其在功能丰富性…

Pyglet综合应用|推箱子游戏之关卡图片载入内存

目录 读取图片 分割图片 综合应用 本篇为之前写的博客《怎样使用Pyglet库给推箱子游戏画关卡地图》的续篇&#xff0c;内容上有相关性&#xff0c;需要阅读的请见链接&#xff1a; https://hannyang.blog.csdn.net/article/details/136209138 「推箱子」是一款风靡全球的益…

element table数据量太大,造成浏览器崩溃。解决方案

这是渲染出来的数据 其实解决思路大致就是&#xff1a;把后台返回的上万条数据&#xff0c;进行分割&#xff08;前端分页&#xff09;&#xff0c;这样先加载几十条&#xff0c;然后再用懒加载的方式去concat&#xff0c;完美解决 上代码 <template><div class&quo…

四川宏博蓬达法律:正义之路的坚实守护者

在当今社会&#xff0c;法律的重要性不言而喻。它既是社会秩序的维护者&#xff0c;也是公民权益的保障者。四川宏博蓬达法律&#xff0c;作为一家专业的法律服务机构&#xff0c;始终秉持着正义、公平、诚信的原则&#xff0c;为广大民众提供优质的法律服务。 一、专业团队&am…

上门服务系统|上门服务小程序|上门服务软件开发

随着移动互联网技术的普及&#xff0c;上门服务小程序系统成为现代企业数字化转型的关键一环。这一系统为消费者提供了更加便捷、高效以及个性化的服务体验&#xff0c;同时也为企业带来了更广阔的商业机会。让我们来看看上门服务小程序系统的优势和功能。 首先&#xff0c;上门…

HTTP---------状态码

当服务端返回 HTTP 响应时&#xff0c;会带有一个状态码&#xff0c;用于表示特定的请求结果。比如 HTTP/1.1 200 OK&#xff0c;里面的 HTTP/1.1 表示协议版本&#xff0c;200 则是状态码&#xff0c;OK 则是对状态码的描述。 由协议版本、状态码、描述信息组成的行被称为起始…