知识是 Agent 在运行时可以搜索的领域特定信息,用于做出更好的决策(动态少样本学习)和提供准确的响应(Agentic RAG)。
知识存储在向量数据库中,这种按需搜索模式被称为 Agentic RAG。
动态少样本学习:Text2Sql Agent
示例:如果我们正在构建一个 Text2Sql Agent,我们需要提供表模式、列名、数据类型、示例查询以及常见的“陷阱”来帮助它生成最佳 SQL 查询。
我们显然不会将所有这些都放在系统提示中,而是将这些信息存储在向量数据库中,并在运行时让 Agent 查询它。
利用这些信息,Agent 可以生成最佳 SQL 查询。这就是所谓的动态少样本学习。
Agno Agents 默认使用 Agentic RAG,这意味着如果您将 knowledge
添加到 Agent 中,它将在运行时搜索该知识库,以获取完成任务所需的特定信息。
将知识添加到 Agent 的伪步骤如下:
我们可以通过以下方式让我们的 Agent 访问知识库:
search_knowledge=True
来向 Agent 添加一个 search_knowledge_base()
工具。如果将 knowledge
添加到 Agent 中,search_knowledge
默认为 True
。add_references=True
来自动将知识库中的引用添加到 Agent 的提示中。这是传统的 2023 RAG 方法。如果您需要完全控制知识库搜索,可以传递一个具有以下签名的自定义 retriever
函数:
该函数在 search_knowledge_base()
调用期间被调用,并用于 Agent 从知识库检索引用。
有关更多详细信息,请参阅 Custom Retriever 页面。
虽然任何类型的存储都可以作为知识库,但向量数据库为从密集信息中快速检索相关结果提供了最佳解决方案。以下是向量数据库如何与 Agents 一起使用:
分块信息
将知识分解成更小的块,以确保我们的搜索查询 仅返回相关结果。
加载知识库
将块转换为嵌入向量,并将其存储在向量数据库中。
搜索知识库
当用户发送消息时,我们将输入消息转换为嵌入,并在向量数据库中“搜索”最近邻居。
在使用知识库之前,需要用将用于检索的嵌入来加载它。
许多向量数据库支持异步操作,这可以在加载大型知识库时显著提高性能。您可以使用 aload()
方法来利用此功能:
使用 aload()
可以确保您充分利用非阻塞操作、并发处理以及异步向量数据库操作提供的较低延迟。这在吞吐量要求高的生产环境中尤其有价值。
有关向量数据库异步功能的更多详细信息,请参阅 Vector Database Introduction。
使用以下知识库之一来简化分块、加载、搜索和优化过程: