news 2026/6/20 16:39:28

什么自查询?为什么在 RAG 中需要自查询?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
什么自查询?为什么在 RAG 中需要自查询?

什么是自查询(Self-Query)?

自查询(Self-Query)是一种检索增强生成(RAG)技术,它允许系统在执行向量检索之前,先对用户的查询进行自我分析和结构化处理。简单来说,就是让系统"理解"查询的语义,并将其转换为更精确的检索条件。

核心思想

自查询将用户的自然语言查询分解为两个部分:

  1. 查询的语义内容(用于向量相似度搜索)
  2. 查询的元数据过滤器(用于精确过滤)

为什么在 RAG 中需要自查询?

1.提高检索精度

问题场景

用户查询:"查找2023年发布的关于人工智能的论文"

传统 RAG

  • 直接将整个查询转换为向量
  • 可能检索到2022年或2024年的论文
  • 检索结果不够精确

自查询 RAG

  • 语义内容:“关于人工智能的论文” → 向量搜索
  • 元数据过滤:year = 2023→ 精确过滤
  • 结果:只返回2023年的AI论文

2.处理结构化数据

很多文档包含结构化元数据:

  • 发布日期
  • 作者
  • 文档类型
  • 类别
  • 语言
  • 价格
  • 评分等

自查询可以利用这些元数据进行精确过滤。

3.减少无关结果

示例

用户查询:"价格低于100元的Python编程书籍"

自查询会提取:

  • 语义内容:“Python编程书籍”
  • 过滤条件:price < 100

这样可以避免检索到高价书籍,提高结果相关性。

4.支持复杂查询

自查询可以处理包含多个条件的复杂查询:

"查找2023年发布、评分高于4.5、关于机器学习的英文论文"

分解为:

  • 语义:“机器学习论文”
  • 过滤器:
    • year = 2023
    • rating > 4.5
    • language = "English"

自查询的工作流程

用户查询 ↓ 【查询解析器】 ↓ ├─→ 语义内容 → 向量嵌入 → 向量检索 │ └─→ 元数据过滤器 → 结构化过滤 ↓ 【结果合并】 ↓ 最终检索结果

实际代码示例(使用 LangChain)

fromlangchain.chainsimportRetrievalQAfromlangchain.retrieversimportSelfQueryRetrieverfromlangchain.llmsimportOpenAIfromlangchain.vectorstoresimportChromafromlangchain.embeddingsimportOpenAIEmbeddings# 定义文档的元数据结构metadata_field_info=[{"name":"year","type":"integer","description":"文档发布的年份"},{"name":"author","type":"string","description":"文档的作者"},{"name":"category","type":"string","description":"文档的类别"},{"name":"rating","type":"float","description":"文档的评分(0-5)"}]# 创建自查询检索器llm=OpenAI(temperature=0)vectorstore=Chroma(embedding_function=OpenAIEmbeddings())retriever=SelfQueryRetriever.from_llm(llm,vectorstore,document_contents="技术文档和论文",metadata_field_info=metadata_field_info,verbose=True)# 使用自查询检索query="查找2023年发布的关于机器学习的论文,评分要高于4.0"results=retriever.get_relevant_documents(query)

自查询的优势

优势说明
更精确结合语义搜索和结构化过滤
更灵活支持复杂的查询条件
更智能自动理解用户意图
更高效减少无关结果的干扰
更自然用户可以用自然语言表达复杂需求

适用场景

  1. 电商搜索:按价格、品牌、评分等筛选商品
  2. 文档管理:按日期、作者、类型等筛选文档
  3. 学术论文:按年份、领域、期刊等筛选论文
  4. 新闻检索:按时间、来源、地区等筛选新闻
  5. 代码搜索:按语言、框架、版本等筛选代码

总结

自查询是 RAG 系统中的重要技术,它通过将自然语言查询分解为语义内容和元数据过滤器,显著提高了检索的准确性和相关性。特别是在处理包含结构化元数据的文档集合时,自查询能够提供比纯向量搜索更精确、更符合用户预期的结果。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 0:15:27

大模型训练三阶段完全指南:从预训练到对齐,一文掌握GPT/LLaMA等模型训练流程(建议收藏)

大模型训练分为预训练、微调和对齐三阶段。预训练阶段使用TB级数据学习通用语言能力&#xff1b;微调阶段通过GB级高质量数据增强特定任务能力&#xff1b;对齐阶段确保输出符合人类价值观&#xff0c;采用3H原则。这三个阶段从知识基础、任务适配到价值对齐&#xff0c;共同构…

作者头像 李华
网站建设 2026/6/18 23:30:52

从传统AI到 Agentic AI:教育技术中,提示工程架构师的转型之路!

从传统AI到Agentic AI&#xff1a;教育技术中&#xff0c;提示工程架构师的转型之路 一、引言&#xff1a;当“机械导师”遇到“主动学习者” 你是否见过这样的场景&#xff1f; 一个学生用某款英语背单词APP&#xff0c;连续3天收到“abandon”的复习提醒——哪怕他早就把这…

作者头像 李华
网站建设 2026/6/19 1:13:27

论文开题不再愁!书匠策AI:你的学术“开题神器”

在学术研究的漫漫征途中&#xff0c;论文开题报告就像是一座灯塔&#xff0c;为我们指引着研究方向。它不仅是对研究项目的初步规划&#xff0c;更是向评审专家展示研究价值与可行性的重要窗口。然而&#xff0c;对于许多研究者&#xff0c;尤其是初涉学术领域的新手来说&#…

作者头像 李华
网站建设 2026/6/18 17:42:06

python + vue 健康饮食食材烹饪管理系统vue3

目录健康饮食食材烹饪管理系统&#xff08;Python Vue3&#xff09;摘要系统概述技术栈核心功能扩展性应用场景项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作健康饮食食材烹饪管理系统&#xff08;Pytho…

作者头像 李华
网站建设 2026/6/19 17:46:41

【一竞技】LCK第一赛段:落后一万四惊天逆转 T1 2比0横扫KT!

北京时间1月24日&#xff0c;LCK赛区第一赛段的比赛继续进行&#xff0c;昨天LCK杯T1和KT的BO3&#xff0c;本场比赛可以说KT是将心态给打崩了&#xff0c;在领先一万四的经济情况下&#xff0c;被T1完成了惊天逆转&#xff0c;让这一场传统的通讯社大战再一次成为T1的舞台&…

作者头像 李华
网站建设 2026/6/18 1:13:38

10. 构造方法和析构方法

1.构造方法 2.析构方法1.构造方法 a.核心定义构造函数是类的特殊成员函数, 当对象被创建时自动调用, 唯一作用是初始化对象的成员变量、分配资源(如动态内存、文件句柄、网络连接等)b.语法核心特点c.常见类型- 无参构造函数(默认构造)#include <iostream> #include <s…

作者头像 李华