Skip to main content
知识库是 Agent 在运行时可以搜索的领域特定信息,用于做出更好的决策(动态少样本学习)和提供准确的响应(Agentic RAG)。知识存储在向量数据库中,这种按需搜索模式称为 Agentic RAG。
示例:如果我们正在构建一个 Text2Sql Agent,我们需要提供表架构、列名、数据类型、示例查询以及常见的“陷阱”来帮助它生成最佳的 SQL 查询。我们显然不会将所有这些信息都放入系统提示中,而是将这些信息存储在向量数据库中,并在运行时让 Agent 查询它。利用这些信息,Agent 就可以生成最佳的 SQL 查询。这被称为动态少样本学习。
Agno Agents 默认使用 Agentic RAG,这意味着当我们向 Agent 提供 knowledge 时,它将在运行时搜索这个知识库,以获取完成任务所需的特定信息。 为 Agent 添加知识的伪步骤如下:
我们可以通过以下方式让 Agent 访问知识库:
  • 我们可以设置 search_knowledge=True 来向 Agent 添加一个 search_knowledge_base() 工具。如果您向 Agent 添加了 knowledgesearch_knowledge 默认情况下True
  • 我们可以设置 add_references=True 来自动将知识库中的引用添加到 Agent 的提示中。这是传统的 2023 RAG 方法。
如果您需要完全控制知识库搜索,可以通过以下签名传递您自己的 retriever 函数:
该函数在调用 search_knowledge_base() 时被调用,Agent 使用它从知识库检索引用。

向量数据库

虽然任何类型的存储都可以充当知识库,但向量数据库提供了快速从密集信息中检索相关结果的最佳解决方案。以下是向量数据库在 Agent 中的使用方式:
1

分块信息

将知识分解成更小的块,以确保我们的搜索查询只返回相关结果。
2

加载知识库

将这些块转换为嵌入向量,并将其存储在向量数据库中。
3

搜索知识库

当用户发送消息时,我们将输入消息转换为嵌入,并在向量数据库中“搜索”最近邻。
知识过滤器目前支持以下知识库类型:PDFPDF_URLTextJSONDOCX。 有关更多详细信息,请参阅 Knowledge Filters 文档

示例:带 PDF 知识库的 RAG Agent

让我们构建一个 RAG Agent,它可以回答 PDF 中的问题。

步骤 1:运行 PgVector

我们将使用 PgVector 作为我们的向量数据库,因为它也可以为我们的 Agent 提供存储。 安装 docker desktop 并使用以下命令在端口 5532 上运行 PgVector

步骤 2:传统 RAG

检索增强生成 (RAG) 是指 “将相关信息塞入提示中” 以改善模型的响应。这是一个包含 2 个步骤的过程:
  1. 从知识库中检索相关信息。
  2. 增强提示以向模型提供上下文。
让我们构建一个传统 RAG Agent,它能回答食谱 PDF 中的问题。
1

安装库

使用 pip 安装所需的库
2

创建传统 RAG Agent

创建一个名为 traditional_rag.py 的文件,其中包含以下内容
traditional_rag.py
3

运行 Agent

运行 Agent(加载知识库需要几秒钟)。

如果您想使用本地 PDF,请改用 PDFKnowledgeBase
agent.py

步骤 3:Agentic RAG

对于上面的传统 RAG,无论信息是否与问题相关或有帮助,add_references=True 始终会将知识库中的信息添加到提示中。 而通过 Agentic RAG,我们让 Agent 决定是否需要访问知识库以及需要使用何种搜索参数来查询知识库。 设置 search_knowledge=Trueread_chat_history=True,为 Agent 提供按需搜索其知识库和聊天记录的工具。
1

创建 Agentic RAG Agent

创建一个名为 agentic_rag.py 的文件,其中包含以下内容
agentic_rag.py
2

运行 Agent

运行 Agent
注意它何时搜索知识库和聊天记录

属性

开发者资源