当前位置: 首页 > news >正文

改进 RAG:自查询检索

原文地址: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、矢量数据库、文档描述和元数据信息。

相关文章:

改进 RAG:自查询检索

原文地址:Improving RAG: Self Querying Retrieval 2024 年 2 月 11 日 让我们来解决构建 RAG 系统时的一个大问题。 我们不能依赖语义搜索来完成每个检索任务。只有当我们追求单词的含义和意图时,语义搜索才有意义。 But in case,我们正…...

【Git企业实战开发】Git常用开发流操作总结

【Git企业实战开发】Git常用开发流操作总结 大家好 我是寸铁👊 总结了一篇Git常用开发流操作总结的文章✨ 喜欢的小伙伴可以点点关注 💝 现在刚做项目的伙伴,可能你之前学过git,但是一实战发现不熟悉 没关系,看寸铁这篇…...

vue2+element医院安全(不良)事件报告管理系统源代码

目录 安全不良事件类型 源码技术栈 医院安全(不良)事件报告管理系统采用无责的、自愿的填报不良事件方式,有效地减轻医护人员的思想压力,实现以事件为主要对象,可以自动、及时、实际地反应医院的安全、不良、近失事件…...

leetcode初级算法(python)- 字符串

文章目录 1.反转字符串常规算法pythonic 算法2.整数反转数学法字符串法3.字符串中的第一个唯一字符pythonic算法哈希算法4.有效的字母异位词常规算法进阶算法5.最长公共前缀1.反转字符串 输入:[‘h’,‘e’,‘l’,‘l’,‘o’] 输出:[‘o’,‘l’,‘l’,‘e’,‘h’]...

Python 鼠标模拟

鼠标模拟即:通过python 进行模拟鼠标操作 引入类库 示例如下: import win32api import win32con import time 设置鼠标位置 设置鼠标位置为窗口中的回收站。 示例如下: # 设置鼠标的位置 win32api.SetCursorPos([30, 40]) 双击图标 设置…...

Linux进程 ----- 信号处理

前言 从信号产生到信号保存,中间经历了很多,当操作系统准备对信号进行处理时,还需要判断时机是否 “合适”,在绝大多数情况下,只有在 “合适” 的时机才能处理信号,即调用信号的执行动作。 一、信号的处理…...

【数位】【数论】【分类讨论】2999. 统计强大整数的数目

作者推荐 动态规划的时间复杂度优化 本文涉及知识点 数位 数论 LeetCode2999. 统计强大整数的数目 给你三个整数 start ,finish 和 limit 。同时给你一个下标从 0 开始的字符串 s ,表示一个 正 整数。 如果一个 正 整数 x 末尾部分是 s &#xff08…...

MongoDB聚合运算符:$atan2

$atan2用来计算反正切&#xff0c;返回指定表达式的反正切值&#xff0c;与$antan的区别主要是参数不同。 语法 { $atan2: [<expression1>, <expression1>] }<expression>为可被解析为数值的表达式$atan2返回弧度&#xff0c;使用$radiansToDegrees运算符可…...

敏捷开发最佳实践:价值维度实践案例之ABTest中台化

22年敏捷白皮书调研发现&#xff0c;仅有14%的企业部分实现价值管理闭环&#xff0c;8%的企业能够做到企业战略和业务目标与价值管理紧密结合。这一现象说明了大部分中国企业还不能在敏捷实践中实现需求价值的体系化及多维度价值度量&#xff0c;因此推广优秀的敏捷实践至关重要…...

爬虫基本库的使用(requests库的详细解析)

注&#xff1a;本文一共4万多字&#xff0c;希望读者能耐心读完&#xff01;&#xff01;&#xff01; 前面,我们了解了urllib库的基本用法&#xff08;爬虫基本库的使用(urllib库的详细解析)-CSDN博客&#xff09;。其中&#xff0c;确实又不方便的地方。例如处理网页验证…...

QT实现串口通信

一.Qt串口通信 Qt提供了两个关于串口通信的C类&#xff0c;分别是QSerialPort和QSerialPortInfo。 QSerialPort类提供了操作串口的各种接口。 QSerialPortInfo是一个辅助类&#xff0c;可以提供计算机中可用的串口的各种信息。 QSerialPortInfo Class用于提供外部串行端口的…...

微信小程序 --- 通用模块封装(showToast,showModal ,本地存储)

目录 01. 为什么进行模块封装 02. 消息提示模块封装 03. 模态对话框封装 04. 封装本地存储 API 05. 拓展:封装异步存储API优化代码 01. 为什么进行模块封装 在进行项目开发的时候&#xff0c;我们经常的会频繁的使用到一些 API&#xff0c; 例如&#xff1a;wx.showToast…...

基于springboot+vue的音乐网站(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…...

pclpy 最小二乘法拟合平面

pclpy 最小二乘法拟合平面 一、算法原理二、代码三、结果1.左边原点云、右边最小二乘法拟合平面后点云投影 四、相关数据 一、算法原理 平面方程的一般表达式为&#xff1a; A x B y C z D 0 ( C ≠ 0 ) Ax By Cz D 0 \quad (C\neq0) AxByCzD0(C0) 即&#xff1a; …...

蓝桥杯备战刷题(自用)

1.被污染的支票 #include <iostream> #include <vector> #include <map> #include <algorithm> using namespace std; int main() {int n;cin>>n;vector<int>L;map<int,int>mp;bool ok0;int num;for(int i1;i<n;i){cin>>nu…...

Python习题详解

练习&#xff1a; 1&#xff0c;计算100以内奇数的和 #计算100以内所有奇数的和 sum 0 # n 1 # while n < 100: # # sum sum n # sum n # # n n 2 # n 2 # print(sum) n 99 #求偶数时n 100 while n > 0:sum n# n n - 2n - 2 print(sum)2&#xff0c;打印直…...

绩效考核利器:Excel报表模板,解锁企业高效员工评价新境界

一、背景与目标 在现今的企业管理中&#xff0c;绩效考核是一项至关重要的任务。它旨在评估员工的工作表现&#xff0c;激励员工积极进取&#xff0c;同时也是制定薪酬、晋升、培训等决策的重要依据。为了满足这一需求&#xff0c;我们设计了一款绩效考核Excel报表模板&#x…...

如何使用Lychee+cpolar搭建本地私人图床并实现远程访问存储图片

文章目录 1.前言2. Lychee网站搭建2.1. Lychee下载和安装2.2 Lychee网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 图床作为图片集中存放的服务网站&#xff0c;可以看做是云存储的一部分&#xff0c;既可…...

跨境支付介绍

1、跨境电商定义和分类&#xff1b; 2、国际贸易清结算&#xff1b; 3、跨境支付&#xff1b; 1、跨境电商定义和分类 跨境电商业务简单说就是指不同国家地域的主体通过电子商务进行交易的一种业务模式。同传统的电商不同&#xff0c;交易双方属于不同的国家。因此&#xff0…...

如何在Linux搭建MinIO服务并实现无公网ip远程访问内网管理界面

文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器&#xff0c;可以在各种环境中运行&#xff0c;例如本地、Docker容器、Kubernetes集群等。它兼…...

Cortex-M可以跑Linux操作系统吗?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Linux的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; Cortex-M系列微控制器主要设计…...

日志系统项目(2)项目实现(实用工具类、日志等级类、日志消息类、日志格式化输出类)

前面的文章中我们讲述了日志系统项目的前置知识点&#xff0c;再本文中我们将开始日志项目的细节实现。 日志系统框架设计 本项目实现的是一个多日志器日志系统&#xff0c;主要实现的功能是让程序员能够轻松的将程序运行日志信息落地到指定的位置&#xff0c;且支持同步与异…...

剑指offer面试题19 二叉树的镜像

考察点 树的遍历知识点 题目 分析 我们分析算法题目的思路基本上都是归纳法&#xff0c;即通过举一些普通的例子来推理出算法流程&#xff0c;而画图又是举例子的常用手段&#xff0c;比如针对树或者链表画画图&#xff0c;针对数字类的举一些数字的例子寻找规律&#xff0c…...

SpringCloud Alibaba 2022之Nacos学习

SpringCloud Alibaba 2022使用 SpringCloud Alibaba 2022需要Spring Boot 3.0以上的版本&#xff0c;同时JDK需要是17及以上的版本。具体的可以看官网的说明。 Spring Cloud Alibaba版本说明 环境搭建 这里搭建的是一个聚合项目。项目结构如下&#xff1a; 父项目的pom.xm…...

js之数组遍历

for 可以用来遍历数组、字符串、类数组、DOM节点&#xff0c;可以更改原数组&#xff0c;可以使用break、continue 跳出循环 return 只能在函数内部使用 for(声明循环变量&#xff1b;判断循环条件&#xff1b;更新循环变量){循环体 }forEach 参数&#xff08;当前元素&#x…...

极狐GitLab 16.9 重磅发布,快来 pick 你心仪的功能吧~【五】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 沿袭我们的月度发版机制&#xff0c;今天我们正式发布极狐GitL…...

如何在本地部署密码管理软件bitwarden并结合cpolar实现远程同步

文章目录 1. 拉取Bitwarden镜像2. 运行Bitwarden镜像3. 本地访问4. 群晖安装Cpolar5. 配置公网地址6. 公网访问Bitwarden7. 固定公网地址8. 浏览器密码托管设置 Bitwarden是一个密码管理器应用程序&#xff0c;适用于在多个设备和浏览器之间同步密码。自建密码管理软件bitwarde…...

DT DAY3 信号和槽

作业&#xff1a; 1> 思维导图 2> 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 btn3 new QPushButton("按钮3",this);btn3->resize(ui->btn2->width(),ui->b…...

Spring、SpringBoot、SpringCloud三者的区别

Spring、Spring Boot 和 Spring Cloud 是构建企业级 Java 应用程序的不同层次的框架和工具。下面详细介绍它们之间的区别&#xff1a; 1. Spring框架&#xff1a; 概述&#xff1a; Spring 是一个全功能的企业级 Java 框架&#xff0c;提供了依赖注入、面向切面编程、事务管理…...

leetcode:46.全排列

1.什么是排列&#xff1f; 有顺序&#xff01;&#xff01; 2.树形结构&#xff1a; 使用used数组进行标记取过的元素&#xff0c;一个元素一个元素地进行取值&#xff0c;取完之后将used数组进行标记。 3.代码实现&#xff1a;&#xff08;循环从i0开始&#xff0c;而不是…...

xml做网站/刷推广链接人数的软件

2019独角兽企业重金招聘Python工程师标准>>> springboot 提供了可插拔的内嵌容器方案。 内嵌容器优势&#xff1a; 1.减少外部容器依赖&#xff0c;可移植性高 2.易测试易部署 引入内嵌容器&#xff1a; 引入tomcat&#xff08;默认&#xff09;&#xff1a;直接添加…...

郑州网站设计 公司/深圳网站seo

忘记过去&#xff0c;超越自己 ❤️ 博客主页 单片机菜鸟哥&#xff0c;一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-04-06 ❤️❤️ 本篇更新记录 2023-04-06 ❤️&#x1f389; 欢迎关注 &#x1f50e;点赞 &#x1f44d;收藏 ⭐️留言&#x1f4dd;&#x1f64…...

做网站服务器是必须购买的吗/如何进行seo

传送门 $anti-nim$游戏&#xff0c;$SJ$定理裸题 规定所有单一游戏$sg0$结束 先手必胜&#xff1a; $1.\ sg \neq 0,\ 某个单一游戏sg >1$ $2.\ sg 0,\ 没有单一游戏 sg > 1$ 话说那个$J$竟然是$JiaZhihao$ Orz #include <iostream> #include <cstdio> #inc…...

时时彩五星做号网站/简单制作html静态网页

注意&#xff1a; 父pom中一定要写版本号才行&#xff01;&#xff01;&#xff01;&#xff01; 1、< packaging> <packaging>pom</packaging>在父级项目中的pom.xml文件使用的packaging配置一定为pom。父级的pom文件只作项目的子模块的整合&#xff0c;在…...

上海宝山区做网站的/产品推广方式

今天在使用jee的eclipse的时候打开提示 解决办法在网上搜寻了一下&#xff0c;有两种方式 1、关闭360相关的软件 2、将eclipse中的配置文件eclipse.ini改变如下 -startupplugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar--launcher.libraryplugins/org.eclipse.equi…...

安全网站建设情况/百度账号免费注册

去除字段只能去除_source中的&#xff0c;不是_source内的无法去除。 去除不必要的字段&#xff0c;不仅可以节省ES的存储内容&#xff0c;同时因为节省了ES的内容&#xff0c;可以加速搜索的速度 Logstash配置去除不需要的字段 filter {grok {match > {"message"…...