博客
架构

发布于 更新于

Arag 和 Anshu

AI Agent 架构:记忆、工具、状态与持久执行

以 Markdown 阅读

AI agent 架构不能只有模型和工具循环。生产设计需要分离身份、工具、任务状态、长期记忆、持久执行、后端服务和遥测,因为每一层负责处理不同类型的故障。

最清晰的测试场景是在两次外部写入之间发生崩溃。系统应该知道谁执行了操作、哪些操作已经完成、哪些操作可能已经完成,以及从哪里恢复,而不是让模型根据对话文本重建事实。

从执行路径开始

flowchart TB
    Trigger[User or event] --> Loop[Model and agent loop]
    Loop --> Policy[Identity and policy]
    Policy --> Tools[Tool registry]
    Tools --> Durable[Durable execution]
    Durable --> Backend[Backend services]
    Loop <--> State[(Task state)]
    Loop <--> Memory[(Long-term memory)]
    Loop --> Telemetry[Traces, logs, metrics, evals]
    Tools --> Telemetry
    Durable --> Telemetry
    Backend --> Telemetry

模型提出下一步操作。策略判断该身份是否可以执行。工具层将决策转换为范围明确的契约。持久执行围绕外部影响记录进度。后端服务保存权威业务数据。遥测让用户能够还原整次运行。

这条路径属于更广泛的生产环境 agent 技术栈,但针对一条真实工作流绘图,比画出公司里的每项服务更有用。

每一层只保存一种事实

模型循环负责选择,但不负责授权

循环包含提示词、近期消息、工具结果和停止规则。它可以选择工具,但下游系统必须强制执行权限。提示词中的“只读取发票”只是指导,不是访问控制边界。

工具公开范围明确的操作

工具契约会命名操作、限制参数,并返回下一步决策所需的字段。不能因为模型能够描述需求,就向它公开范围广泛的管理 API。MCP 工具设计指南介绍了工具选择、schema、稳定错误和安全写入。

身份与策略决定允许发生什么

将租户、用户、agent 和委托权限范围传递给实际执行操作的系统。高影响调用前应进行策略检查,并在审计记录中保留决策。服务端可以从凭据推导租户 ID 时,绝不能要求模型提供。

任务状态记录当前运行进度

任务状态包括当前步骤、已完成操作、待处理审批、重试次数和下一次计划执行时间。创建它的进程终止后,状态仍应保留。对话记录可以作为运行输入,但不能可靠记录事务状态,因此无法替代显式状态。

记忆在多次运行之间传递选定事实

记忆可以包含用户偏好、以往摘要或检索到的文档。它属于可能出错的上下文,因此需要保留来源、保留期限和删除规则。不要只用一句“发票已发送”的记忆来记录不可逆的外部影响,这项事实应写入权威后端状态。

持久执行能够抵御中断

持久执行负责协调重试、检查点、等待和恢复。Temporal 将其定义为通过重放已记录的事件历史,使执行在崩溃或服务中断后继续进行。即使你选择实现较小的操作账本而不是采用 Temporal,这个模型仍然适用。参见 Temporal 的持久执行说明和详细的 agent 持久性指南。

后端服务保存业务事实

订单、付款、文件、权限和客户记录存放在能够强制保证自身不变量的系统中。Agent 应通过范围受限的 API 或工具访问这些系统。模型响应可以解释一笔订单,但不能成为订单的权威记录。

遥测重新连接完整路径

使用一条追踪记录串联模型调用、工具选择、策略检查、工具执行和下游请求,其中应包含操作 ID 和脱敏后的参数。日志记录事件,指标体现整体运行状况,评估验证预期行为,三者不能相互替代。

选择产品前先区分故障类型

Agent 在超时后重复发送邮件,应检查持久执行和幂等性。它在下周记错用户偏好,应检查记忆和来源。它读取了其他租户的记录,应检查身份和授权。它选择 delete_project 而不是 archive_project,则应检查模型可见的工具集和工具选择测试。

购买一个“agent 平台”不会消除这些边界,只会改变负责它们的组件。请明确记录职责归属,包括产品名称背后的普通数据库或队列。

先画出最棘手的工作流

不要从只读聊天开始。选择一条会执行两次写入、等待审批、调用不可靠 API 或可能产生费用的工作流,在每项外部影响前后标记权威记录。下方的提示词会将这条路径转换为架构图,并指出哪些层目前只存在于模型上下文窗口中。