知识过滤器

知识过滤器允许您使用用户 ID、文档类型、年份等元数据来限制和优化知识库中的搜索。当您拥有大量文档集合并希望检索与特定用户或上下文相关的信息时,此功能尤其有用。

为什么使用知识过滤器?

  • 个性化: 为特定用户或组检索信息。
  • 安全性: 限制对敏感文档的访问。
  • 效率: 通过缩小搜索结果范围来减少干扰。

知识过滤器如何工作?

当您将文档加载到知识库中时,您可以附加元数据(如用户 ID、文档类型、年份等)。之后,在查询时,您可以指定过滤器,仅搜索符合特定条件的文档。

示例元数据:

{
    "user_id": "jordan_mitchell",
    "document_type": "cv",
    "year": 2025,
}

应用过滤器的几种方式

您可以通过两种主要方式应用知识过滤器:

  1. 手动过滤器: 在查询时显式传递过滤器。
  2. 智能代理过滤器: 让智能代理从您的查询中自动提取过滤器。

提示: 您可以组合使用多个过滤器以获得更精确的结果!

传统 RAG 与智能代理 RAG 中的过滤器

在配置您的智能代理时,选择适合您用例的方法非常重要。使用 Agno 智能代理进行 RAG 有两种广泛的方法:传统 RAG 和智能代理 RAG。对于传统 RAG 方法,您设置 add_references=True 以确保引用包含在发送到 LLM 的系统消息中。对于智能代理 RAG,您设置 search_knowledge=True 来利用智能代理直接搜索知识库的能力。

示例:

agent = Agent(
    name="KnowledgeFilterAgent",
    search_knowledge=False,  # 不使用智能代理搜索
    add_references=True,     # 将知识库引用添加到系统提示
    knowledge_filters={"user_id": "jordan_mitchell"}, # 像这样传递过滤器
)

请记住一次只使用这两种配置中的一种,将另一种设置为 false。默认情况下,search_knowledge=True 是首选,因为它提供了更动态和交互式的体验。 请在此处查看有关如何在传统 RAG 系统中设置知识过滤器的示例 here

最佳实践

  • 使您的提示具有描述性(例如,包含用户名、文档类型、年份)。
  • 将智能代理过滤器用于交互式应用程序或聊天机器人。

手动过滤器 vs. 智能代理过滤器

手动过滤器智能代理过滤器
代码中的显式过滤器从查询文本推断的过滤器
完全控制更自然,代码更少
适用于自动化适用于面向用户的应用程序

🚦 目前,知识过滤支持以下向量数据库:

  • Qdrant
  • LanceDB
  • PgVector
  • MongoDB
  • Pinecone
  • Weaviate
  • ChromaDB
  • Milvus