改进 RAG:自查询检索
原文地址:Improving RAG: Self Querying Retrieval
2024 年 2 月 11 日
让我们来解决构建 RAG 系统时的一个大问题。
我们不能依赖语义搜索来完成每个检索任务。只有当我们追求单词的含义和意图时,语义搜索才有意义。
But in case,我们正在对数据库中的内容进行搜索,就像我们可能只想执行查找任务一样,使用语义搜索是不合逻辑的。它甚至可能给出不准确的结果,并使用不必要的计算能力。
在处理 Excel 文件或财务数据时,通常会出现此问题。对于这些情况,LangChain 提供了一个名为“自查询检索”的实用程序。

我们所做的很简单。我们在检索和输入之间插入一个“步骤”。
- 用户输入查询。
- 我们使用语言模型对查询进行重新格式化,以获取查询的语义要素。
- 我们还将转换查询,以便对元数据进行搜索。
重申一下,这个想法非常简单。如果我们要查找一部电影,并想查看年份,我们就会进入矢量存储。我们只需查找年份,然后将结果筛选回该年份。
基础知识已经清楚了,现在让我们来了解一下 LangChain 如何帮助我们实现自查询。
我们使用 "自查询"(Self Query)检索器。自查询"检索器允许我们查询矢量数据库。让我们来看看这种自查询检索器是如何实现的。

自查询基类的唯一类方法是 from_llm。创建自查询类需要四个必需参数:llm、vectorstore、document_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 (…...
MongoDB聚合运算符:$atan2
$atan2用来计算反正切,返回指定表达式的反正切值,与$antan的区别主要是参数不同。 语法 { $atan2: [<expression1>, <expression1>] }<expression>为可被解析为数值的表达式$atan2返回弧度,使用$radiansToDegrees运算符可…...
敏捷开发最佳实践:价值维度实践案例之ABTest中台化
22年敏捷白皮书调研发现,仅有14%的企业部分实现价值管理闭环,8%的企业能够做到企业战略和业务目标与价值管理紧密结合。这一现象说明了大部分中国企业还不能在敏捷实践中实现需求价值的体系化及多维度价值度量,因此推广优秀的敏捷实践至关重要…...
爬虫基本库的使用(requests库的详细解析)
注:本文一共4万多字,希望读者能耐心读完!!! 前面,我们了解了urllib库的基本用法(爬虫基本库的使用(urllib库的详细解析)-CSDN博客)。其中,确实又不方便的地方。例如处理网页验证…...
QT实现串口通信
一.Qt串口通信 Qt提供了两个关于串口通信的C类,分别是QSerialPort和QSerialPortInfo。 QSerialPort类提供了操作串口的各种接口。 QSerialPortInfo是一个辅助类,可以提供计算机中可用的串口的各种信息。 QSerialPortInfo Class用于提供外部串行端口的…...
微信小程序 --- 通用模块封装(showToast,showModal ,本地存储)
目录 01. 为什么进行模块封装 02. 消息提示模块封装 03. 模态对话框封装 04. 封装本地存储 API 05. 拓展:封装异步存储API优化代码 01. 为什么进行模块封装 在进行项目开发的时候,我们经常的会频繁的使用到一些 API, 例如:wx.showToast…...
基于springboot+vue的音乐网站(前后端分离)
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 主要内容:毕业设计(Javaweb项目|小程序|Pyt…...
pclpy 最小二乘法拟合平面
pclpy 最小二乘法拟合平面 一、算法原理二、代码三、结果1.左边原点云、右边最小二乘法拟合平面后点云投影 四、相关数据 一、算法原理 平面方程的一般表达式为: A x B y C z D 0 ( C ≠ 0 ) Ax By Cz D 0 \quad (C\neq0) AxByCzD0(C0) 即: …...
蓝桥杯备战刷题(自用)
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习题详解
练习: 1,计算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,打印直…...
绩效考核利器:Excel报表模板,解锁企业高效员工评价新境界
一、背景与目标 在现今的企业管理中,绩效考核是一项至关重要的任务。它旨在评估员工的工作表现,激励员工积极进取,同时也是制定薪酬、晋升、培训等决策的重要依据。为了满足这一需求,我们设计了一款绩效考核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.前言 图床作为图片集中存放的服务网站,可以看做是云存储的一部分,既可…...
跨境支付介绍
1、跨境电商定义和分类; 2、国际贸易清结算; 3、跨境支付; 1、跨境电商定义和分类 跨境电商业务简单说就是指不同国家地域的主体通过电子商务进行交易的一种业务模式。同传统的电商不同,交易双方属于不同的国家。因此࿰…...
如何在Linux搭建MinIO服务并实现无公网ip远程访问内网管理界面
文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器,可以在各种环境中运行,例如本地、Docker容器、Kubernetes集群等。它兼…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
