JOTO
Contact us
← AI 智库
大语言模型

拆解 Anthropic 的 7*24 在线 Agent 架构设计

2026 年 11 月 15 日

本文拆解 Anthropic 发布的《Building always-on agents》指南,详解其面向持续任务的常驻 Agent 架构:通过 inbox 事件队列、timer 定时触发、跨轮 session 记忆、deferred tool call 权限控制与 outbox 消息管理五大核心组件,实现「一次执行可结束,一件事仍持续跟进」的 7×24 在线体验。

一件事,多轮运行

假设我们让 Agent 跟进一次代码修复:调查问题、修改代码、提交测试;测试失败了,继续排查;准备推送到约定的分支时,再找人确认。中间可能等几分钟,也可能隔一夜。

测试还没结束,人还没回复,Agent 就可以结束本轮执行。指南明确说,它大部分时间都在休眠。这里的“在线”,说的是事情能够持续跟进。

run 是一轮执行;session 保存消息和工具调用记录,可以跨越多轮 run。 下一条事件到来,系统再恢复已有 session,或开启新的 session。

图 1:常驻 Agent 的工作循环(据 Anthropic 指南重绘。先沿主线看一圈:事件触发执行,执行留下进度,新结果或用户回复再触发下一轮。)
图 1:常驻 Agent 的工作循环(据 Anthropic 指南重绘。先沿主线看一圈:事件触发执行,执行留下进度,新结果或用户回复再触发下一轮。)

图里,每轮执行内部仍是熟悉的模型与工具循环:判断下一步、调用工具、查看结果,继续工作。Anthropic 重点设计的是循环之外的五类职责:inbox 收事件,timer 安排后续运行,memory 保存跨轮信息,permissions 管理行动权限,outbox 处理消息输出。

这些围绕模型准备上下文、提供工具、管理执行与权限的程序,属于我们常说的 Harness。顺着那次代码修复,就能看清它们为什么需要配合。

先入队,再执行

测试结果来了,用户又补充一句要求。如果两个入口都直接调用 Agent,就可能同时启动两轮执行,互相覆盖进度;进程中途退出,刚收到的消息也可能丢掉。

Anthropic 给出的起点很朴素:一张持久化的 inbox 表、一个接收事件的 HTTP 接口、一个后台 worker。

接口先把事件写入表中,尽快确认收到,再通知 worker。worker 以表内记录为准,读取待处理事件:延续已有工作的事件,如用户对先前问题的回复,恢复对应 session;其他事件则开启新 session。本轮处理结束后,再把对应事件标记为完成。

这样,即使 worker 中途退出,后续 worker 仍能找到未完成的记录。来源重复投递的事件,可以按唯一 ID 去重;用户连续发来的几句补充,也可以合并成一轮处理。

原文建议从“一个用户一个 inbox,同一 inbox 同时只有一个活跃 worker”开始,让状态更新有明确顺序。运行中又来了新消息,是留到下一轮、并入当前轮,还是中断重来,则取决于具体交互。

回到测试。如果 CI 支持异步提交,Agent 可以保存测试任务 ID,结束本轮;测试完成后,结果再作为事件进入 inbox。触发本轮的事件处理完了,整项修复任务仍在继续。 worker 也不必一直等测试,可以处理其他事件。

这种做法还有个容易漏掉的细节:用户可能在等待期间换了修复目标。旧测试结果回来时,需要核对任务和代码版本;结束一轮 Agent 执行,并不会自动取消已经提交的测试。

到时间,再触发

测试结果可以回调,但“两小时后再看看有没有回复”怎么办?模型写下这个打算,还需要有人负责到时启动下一轮。

指南把 timer 单独持久化,由调度器定期检查。到了时间,调度器更新 timer,并向 inbox 写入事件。一次性 timer 标记为已触发,周期 timer 更新到下一次执行时间。后续仍由 worker 取出事件,按统一流程处理。

图 2:外部事件与定时事件汇入同一个执行入口
图 2:外部事件与定时事件汇入同一个执行入口

未来的安排留在 timer 中,inbox 只存已经可以处理的事件。到期只是入队,实际执行还要等 worker。

模型决定是否跟进、何时再看;调度器负责到时产生事件。 不必让 worker 挂在那里等两小时,也不必为定时任务另写一套执行流程。能收到完成回调的任务,通常也用不着频繁调用模型去查。

实现时还需要补上可靠性处理:如果 timer 已标记完成,事件却没写进 inbox,这次跟进就可能消失。两张表在同一数据库时,可以用事务完成这两个动作;分属不同存储时,则需要可重试的投递和去重。

下一轮记住什么

事件到了,新的 run 开始。接下来的问题是:这次跟进哪件事,上次做到哪里?

沿用原 session,能带回之前的消息和工具调用,但上下文总有上限。压缩旧消息或新建 session 都会丢失细节,所以重要信息需要在工作过程中及时保存。

我们之前在《Coding Agent 为什么正在从 Session 走向 Project?》里,讨论过把目标、约定和进度保存在单次会话之外。常驻 Agent 又向前走了一步:无论下一轮由测试回调还是定时器触发,都得找到与这件事有关的记录。

William 将记忆分为四类,区别主要在于下一轮如何使用:

保存什么 下一轮如何读取
行为要求,如“推送前找我确认” 每轮加载,延续原有约定
用户偏好与背景 少时直接读,多时按索引查
任务进度与后续安排 按任务读取具体记录
已经告诉过用户的内容 发送前查看,避免重复通知

测试日志、工单状态这些外部系统已有的信息,尽量只保存引用,需要时再查询最新状态。对代码修复来说,一句“测试通过”不够,还得知道哪个提交、哪次测试通过了。

这也关系到进度是否可信。Anthropic 在 2025 年的长期运行 Agent 实验中,就遇到过模型改完代码、跑过单元测试便认定功能完成,实际用户流程仍有问题的情况。那套 Harness 用功能清单、进度文件、Git 记录和端到端验证支持后续开发。记忆中的“已完成”,需要有产物和验证结果作为依据。

这些信息存在哪里,同样重要。Claude Code 自动记忆和 Messages API 的 Memory tool 采用文件目录形式;指南建议,常驻 Agent 将目录映射到数据库或对象存储等持久存储。记忆和工作产物的寿命,都要长于本轮 worker。 否则,进度写着“修复已准备好”,代码却随临时环境消失,下次仍然无法继续。

这里的 Memory tool 是客户端工具:Claude 发出文件操作请求,由应用执行,并提供 /memories 背后的实际存储。跨会话能否读到同一份记忆,取决于应用如何保存它。

持久保存之后,还要控制每轮读入的量。行为要求每轮加载,具体任务记录按需读取;系统提示、工具定义和初始记忆尽量精简,并使用提示缓存降低成本。原文还提出可选的 dreaming:回看历史会话,更新过时记忆、发现跨轮规律。它负责后续整理,日常进度仍要在工作时及时记录。

等人时,保存进度

测试通过,Agent 准备推送代码,用户却不在线。前面保存的“推送前找我确认”,这时就要真正约束工具调用。

Anthropic 采用 deferred tool call,也就是暂缓执行工具调用:保存 session 和尚未完成的调用,展示问题,结束本轮,等回复再恢复。

图 3:等待确认的任务跨两轮恢复(据指南重绘,CI 修复为讲解场景。高亮依次展示运行、等待和恢复;等待期间本轮已经结束,worker 可处理其他事件。)
图 3:等待确认的任务跨两轮恢复(据指南重绘,CI 修复为讲解场景。高亮依次展示运行、等待和恢复;等待期间本轮已经结束,worker 可处理其他事件。)

第二天用户回复,答案作为事件进入 inbox,触发新的 run,恢复对应 session。保存下来的信息必须能说明:这个问题属于哪个任务、对应哪个工具调用。这样,一句“同意”才能找到要继续的动作。

基于 Claude Code 实现时,官方 hooks 文档提供了 defer 机制:PreToolUse 可在非交互模式 claude -p 下暂缓调用,由外层应用收集回复后恢复 session。目前要求该回合只有一个工具调用;交互模式或多工具并行调用不适用。

等待用户只是权限设计的一部分。无人值守时,Agent 还要能在授权范围内自行工作。指南引用 Claude Code 的 auto mode,用分类器审查高风险动作,拦截识别出的危险行为,让 Claude 尝试更安全的做法;最重要的决定仍需用户审查。

凭证则放在 Agent 环境之外:Agent 发出不带凭证的请求,由代理注入真实令牌后转发。这样可以使用服务,又不必把真实令牌交给执行环境。分类器有判断局限,工具本身仍需限定权限。

从架构上看,确认因此成为任务中可以保存、可以恢复的一步。但恢复不代表原样重做昨天的动作:分支可能已更新,用户要求可能已改变,需要先核对最新状态。

故障重试还会遇到另一个问题:外部操作已经成功,本地却没来得及记下结果。事件去重,不能保证外部操作只发生一次。 推送等外部动作还需要幂等处理,或先查询执行结果。这是实际落地时需要补充的恢复条件。

有结果,再通知

修复推送成功,最后还差一步:让用户知道。

Anthropic 将一轮运行的结束分成三种:发送消息、静默结束、暂缓调用并询问用户。 修复完成,就发结果;查了一次没有新进展,可以保持安静;不确定目标分支,就提出问题。每次运行都发“我又检查了一遍”,持续跟进很容易变成持续打扰。

发送机制可以先简单些。原文认为,多数场景用一个 send 工具直接发送就够了。需要控制发送节奏、从发送错误中恢复时,再引入正式的 outbox:Agent 将待发消息写入独立表,由消息发送程序 dispatcher 读取并投递。

修复已经完成、通知却没发出去时,就可以只重试通知,而不必重新做一遍修复。确认请求也可以经过 outbox,或直接显示在界面中;用户回复仍回到 inbox。

除了能否送达,还要看这条消息值不值得发。指南建议评测通知频率,初期安静一些。记住已经通知过什么,也是为了避免每次定时检查都重复汇报同一份结果。

Harness 留下什么

沿着一次代码修复看下来,这套设计的重点逐渐清楚了:任务可能在等测试、等时间、等人,但每次等待都有记录,也有下一次运行的入口。五类职责可以由一个应用和现有数据库承担,并不要求拆成五套微服务。

这也让我们今年一直讨论的“Harness 做减法”更具体了:哪些流程可以随模型进步而简化,哪些仍然需要系统负责?

Claude Code 团队的 Thariq Shihipar 在 9 月访谈中提到,为旧模型积累的纠错指令,可能反过来限制新模型;与此同时,模型能做的工作更多,沙盒、权限和数据访问等设施也会更复杂。

Anthropic 今年 3 月的应用开发实验就调整过前一类流程:换用 Opus 4.6 后,研究者撤掉分阶段开发的安排,把评估移到构建结束后。这说明一些步骤值得随模型变化重新评估,不能由此推成所有任务都不再需要验证。

而在常驻 Agent 中,两小时后由谁触发运行,换了 worker 到哪里读进度,用户隔天回复后继续哪个调用,仍然需要明确的程序和存储来完成。

回到开头的问题:今天没做完,明天能不能自己继续?这套架构给出的办法,是让每一轮都留下足够的信息,也为后续工作安排好触发条件。一次执行可以结束,一件事仍然有人持续跟进。

拆解 Anthropic 的 7*24 在线 Agent 架构设计 配图 4

JOTO 企业落地观察

  • 企业部署常驻 Agent 时,需优先保障 inbox 与 timer 的跨节点一致性,否则将导致事件丢失或重复触发,直接影响任务连续性。
  • 这类系统的取舍在于:是否将 memory 存储与业务数据库解耦。耦合便于事务控制但增加运维负担;解耦利于扩展却需额外实现最终一致性保障。
  • RAG 知识工程在此类系统中需转向“按需加载+显式缓存”模式——行为要求类记忆必须全量加载,而用户背景类记忆应支持语义检索与增量更新。
  • AI 安全治理的关键落点从单次调用审查,延伸至跨轮行为链审计:例如“用户确认→代码推送→分支更新”需形成不可篡改的操作证据链。

立即咨询 JOTO

JOTO 提供覆盖企业智能体规划与搭建、AI 平台私有化部署、RAG 知识工程、AI 安全治理、FDE 驻场共创及持续运营优化的全周期 AI 落地服务,帮助企业把验证中的 AI 能力转化为安全、可控、可持续迭代的生产力。 联系 JOTO 获取 AI 落地咨询

想把这些做法用到你的业务里?

留下你的场景和痛点,我们帮你判断从哪一步开始。

联系我们
Contact Us

Start your enterprise AI rollout

Tell us your industry, team, and current pain points. We'll get back to you within one business day to help you decide what to tackle first, what data to prepare, and which platform fits.

WeChat
Scan to add us for a 1:1 chat
JOTO WeChat consultation QR code

Tell us what you need

Once we receive your details, we'll be in touch within one business day.