欢迎光临
我们一直在努力

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

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

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

核心思想

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

  • 查询的语义内容(用于向量相似度搜索)
  • 查询的元数据过滤器(用于精确过滤)
  • 为什么在 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)

    from langchain.chains import RetrievalQA
    from langchain.retrievers import SelfQueryRetriever
    from langchain.llms import OpenAI
    from langchain.vectorstores import Chroma
    from langchain.embeddings import OpenAIEmbeddings

    # 定义文档的元数据结构
    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)

    自查询的优势

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

    适用场景

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

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

    赞(0)
    未经允许不得转载:171主机测评 » 什么自查询?为什么在 RAG 中需要自查询?
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址