数据库是干什么用的(实战指南:Agents 为啥需要一个数据库)

数据库是干什么用的(实战指南:Agents 为啥需要一个数据库)
实战指南:Agents 为啥需要一个数据库

Agents 是围绕无状态推理核心的有状态控制循环。

推理核心不会记住它收到的消息。它不会记住它调用的工具。它不会记住用户偏好、多步骤计划,或者三轮对话之前发生了什么。

如果推理核心是无状态的,那么状态就必须存在于某个地方。

那个地方就是数据库。

我们想要构建什么

我们想要这样的 agents:

  • 跨会话继续对话
  • 记住用户偏好、历史和上下文
  • 通过每次交互学习变得更好
  • 在失败时可以调试
  • 为我们提供结构化数据以进行评估和改进

没有持久化状态,这些都无法实现。

事实是:即使是 Claude(我的最爱)也不会"记住"任何东西。当它回忆起我的名字或引用过去的对话时,它是在读取注入到其上下文中的存储记忆,或在运行时搜索它们。我们体验到的连续性并不是 LLM 的属性。这是由数据库驱动的精美工程。我们的 agents 应该以同样的方式工作。

我们可以忽略这一点。大多数教程都是这样做的。但这样我们的 agents 会在请求之间忘记所有内容,无法从错误中学习,也没有办法调试失败或提高性能。

或者我们可以将状态视为基础原语,解锁无状态包装器无法触及的能力。

拥有自己的数据库能解锁什么

  • 完全的上下文控制:决定什么进入上下文窗口。读取之前的消息。包含最后 3 轮、或 10 轮对话,或只是一个摘要。上下文是我们的护城河,我们控制它。
  • 更智能的上下文管理:总结长对话。压缩冗长的工具输出。修剪无关的历史记录。用检索到的知识进行丰富。这才是优秀 agent 工程的真正含义:为正确的响应提供正确的上下文。
  • 零供应商依赖:没有出站费用。没有保留成本。没有"我们正在弃用此 API"的邮件。用 SQL 查询我们自己的数据。构建一个快速仪表板,或接入任何可观测性工具。我们的数据。我们的选择。
  • 评估数据集:提取示例,构建少样本提示,运行多轮模拟。标记低质量响应以供审查。所有这些都不需要向供应商请求导出。
  • 自学习循环:跟踪用户编辑了哪些响应。哪些工具调用失败了。哪些会话以失望告终。自动将这些反馈到系统中。

这就是优秀软件的构建方式。Agents 也不例外。

实现方式

from agno.agent import Agentfrom agno.db.sqlite import SqliteDbagent = Agent(    db=SqliteDb(db_file="agent.db"),    add_history_to_context=True,    num_history_runs=3,)

三行代码。agent 现在可以持久化会话,包含对话历史,并让我们完全控制自己的数据。

需要更多控制?这只是 Python:

# 直接访问你的数据history = agent.get_chat_history(session_id="session_123")messages = agent.get_session_messages(session_id="session_123")session = agent.get_session(session_id="session_123")# 对话太长?自动总结它们agent = Agent(    db=SqliteDb(db_file="agent.db"),    enable_session_summaries=True,   # 压缩旧上下文    store_tool_messages=False,       # 跳过冗余内容)

无需 API 调用。无需导出请求。无需等待供应商构建你需要的功能。只需 SQL。

而且这不是 SQLite 特有的。换一个导入:

from agno.db.mongodb import MongoDbfrom agno.db.postgres import PostgresDb# ...支持 13+ 种数据库db = PostgresDb(db_url="postgresql://user:pass@localhost:5432/mydb")agent = Agent(db=db)

SQLite 用于测试。Postgres 用于生产。我们的基础设施。我们的数据。

反对第三方状态的理由

业界已经将我们的数据存储在别人的数据库中视为常态。

Responses API 给我们一个 previous_response_id。托管内存服务保存我们的上下文。这很方便,但有一些值得考虑的权衡。

我们在支付两次费用:一次是 API 调用,再次是存储和出站流量。我们依赖于他们的模式、他们的导出工具、他们的路线图。当我们需要一个功能时,我们提交工单然后等待。当他们出现故障时,我们也会出现故障。

而且事实是:我们仍然需要一个数据库。那个 response_id?我们在某个地方存储它。用户会话?那在我们的系统中。我们只是将状态分散在两个地方,并增加了一次网络跳转。

替代方案很简单:拥有我们自己的数据库。直接查询它。

AI 工程就是……软件工程

我们不断发现 AI 工程就是……软件工程。

数据库是干什么用的(实战指南:Agents 为啥需要一个数据库)

Agents 需要数据库的原因与 Web 应用需要数据库的原因相同:无状态计算需要有状态存储。这些模式并不新鲜。我们只是忘记了如何使用它们。

Agno 是用于 agents 的开源基础设施。数据库支持是内置的。

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有

相关阅读

最新文章

热门文章

本栏目文章