返回

链式框架中的自查询与父文档检索器联合指南

python

链式框架中父文档检索器和自查询检索器的强强联合

背景

欢迎来到链式框架的精彩世界!如果您正在使用 RAG 模型,那么自查询检索器肯定是您的好帮手。它可以根据元数据信息检索特定文档块,为您提供研究的敏锐视角。然而,如果您渴望获得更宏观的视图,检索包含小块在内的父级大块,那么父文档检索器就是您的不二之选。

问题:两个检索器的完美结合

但等等,您不想牺牲自查询的准确性,仅仅为了更大的块。有没有办法巧妙地将这两个强大的检索器结合起来,获得最好的两全其美呢?

解决方案:一个创新组合

准备欢呼吧!答案就在这里。通过一个简洁而有效的 combine_retrievers() 函数,您可以将自查询检索器与父文档检索器无缝融合。这将创建一个新的超级检索器,它将自查询用于精确的小块识别,然后使用父文档检索器挖掘父级大块。

步骤详解:打造超级检索器

  1. 定义自查询检索器: 指定数据集和查询字段,让检索器了解您的搜索意图。
  2. 定义父文档检索器: 同样指定数据集,并添加父文档字段,以指示父级大块的所在位置。
  3. 组合两个检索器: 使用 combine_retrievers() 函数,将自查询检索器和父文档检索器连接起来。
  4. 使用组合检索器: 释放超级检索器的力量,输入查询并获取包含小块和大块的完整文档。

代码示例:亲自动手

import langchain

# 自查询检索器
self_query_retriever = langchain.SelfQueryRetriever(
    dataset_name="my_dataset",
    query_fields=["title", "body"]
)

# 父文档检索器
parent_document_retriever = langchain.ParentDocumentRetriever(
    dataset_name="my_dataset",
    parent_document_field="parent_id"
)

# 组合检索器
combined_retriever = langchain.combine_retrievers(
    self_query_retriever,
    parent_document_retriever
)

# 检索文档
documents = combined_retriever.retrieve(query="my query")

提示:优化您的体验

  • 确保检索器使用相同的数据集和元数据字段。
  • 如果遇到困难,请查阅 LangChain 文档或联系他们的支持团队。

常见问题解答

1. 自查询检索器和父文档检索器的主要区别是什么?
自查询检索器针对小块进行精准搜索,而父文档检索器可检索包含小块在内的父级大块。

2. 为什么需要将两个检索器结合起来?
这可以同时获得小块的准确性和大块的全面性。

3. combine_retrievers() 函数的作用是什么?
它将自查询检索器和父文档检索器的功能无缝融合到一个新的超级检索器中。

4. 组合检索器的优点是什么?
它提供了更全面、更准确的文档检索,提高了研究和分析的质量。

5. 如何使用组合检索器?
只需向其提供查询,它就会返回包含小块和大块的完整文档。