动态少样本学习:Text2Sql Agent
动态少样本学习:Text2Sql Agent
示例:如果我们正在构建一个 Text2Sql Agent,我们需要提供表架构、列名、数据类型、示例查询以及常见的“陷阱”来帮助它生成最佳的 SQL 查询。我们显然不会将所有这些信息都放入系统提示中,而是将这些信息存储在向量数据库中,并在运行时让 Agent 查询它。利用这些信息,Agent 就可以生成最佳的 SQL 查询。这被称为动态少样本学习。
knowledge
时,它将在运行时搜索这个知识库,以获取完成任务所需的特定信息。
为 Agent 添加知识的伪步骤如下:
- 我们可以设置
search_knowledge=True
来向 Agent 添加一个search_knowledge_base()
工具。如果您向 Agent 添加了knowledge
,search_knowledge
默认情况下为True
。 - 我们可以设置
add_references=True
来自动将知识库中的引用添加到 Agent 的提示中。这是传统的 2023 RAG 方法。
如果您需要完全控制知识库搜索,可以通过以下签名传递您自己的 该函数在调用
retriever
函数:search_knowledge_base()
时被调用,Agent 使用它从知识库检索引用。向量数据库
虽然任何类型的存储都可以充当知识库,但向量数据库提供了快速从密集信息中检索相关结果的最佳解决方案。以下是向量数据库在 Agent 中的使用方式:1
分块信息
将知识分解成更小的块,以确保我们的搜索查询只返回相关结果。
2
加载知识库
将这些块转换为嵌入向量,并将其存储在向量数据库中。
3
搜索知识库
当用户发送消息时,我们将输入消息转换为嵌入,并在向量数据库中“搜索”最近邻。
知识过滤器目前支持以下知识库类型:PDF、PDF_URL、Text、JSON 和 DOCX。
有关更多详细信息,请参阅 Knowledge Filters 文档。
示例:带 PDF 知识库的 RAG Agent
让我们构建一个 RAG Agent,它可以回答 PDF 中的问题。步骤 1:运行 PgVector
我们将使用PgVector
作为我们的向量数据库,因为它也可以为我们的 Agent 提供存储。
安装 docker desktop 并使用以下命令在端口 5532 上运行 PgVector:
步骤 2:传统 RAG
检索增强生成 (RAG) 是指 “将相关信息塞入提示中” 以改善模型的响应。这是一个包含 2 个步骤的过程:- 从知识库中检索相关信息。
- 增强提示以向模型提供上下文。
1
安装库
使用 pip 安装所需的库
2
创建传统 RAG Agent
创建一个名为
traditional_rag.py
的文件,其中包含以下内容traditional_rag.py
3
运行 Agent
运行 Agent(加载知识库需要几秒钟)。
如何使用本地 PDF
如何使用本地 PDF
如果您想使用本地 PDF,请改用
PDFKnowledgeBase
agent.py
步骤 3:Agentic RAG
对于上面的传统 RAG,无论信息是否与问题相关或有帮助,add_references=True
始终会将知识库中的信息添加到提示中。
而通过 Agentic RAG,我们让 Agent 决定是否需要访问知识库以及需要使用何种搜索参数来查询知识库。
设置 search_knowledge=True
和 read_chat_history=True
,为 Agent 提供按需搜索其知识库和聊天记录的工具。
1
创建 Agentic RAG Agent
创建一个名为
agentic_rag.py
的文件,其中包含以下内容agentic_rag.py
2
运行 Agent
运行 Agent
注意它何时搜索知识库和聊天记录
属性
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
knowledge | AgentKnowledge | None | 提供 Agent 使用的知识库。 |
search_knowledge | bool | True | 添加一个允许模型搜索知识库(即 Agentic RAG)的工具。在提供 knowledge 时默认启用。 |
add_references | bool | False | 通过将 AgentKnowledge 中的引用添加到用户提示来启用 RAG。 |
retriever | Callable[..., Optional[list[dict]]] | None | 获取上下文以添加到用户消息的函数。在 add_references 为 True 时调用此函数。 |
context_format | Literal['json', 'yaml'] | json | 指定 RAG 的格式,可以是 “json” 或 “yaml”。 |
add_context_instructions | bool | False | 如果为 True,则将使用上下文的说明添加到系统提示中(如果也提供了知识库)。例如:添加一个优先使用知识库信息而非训练数据的说明。 |
开发者资源
- 查看 Cookbook