BotOf TechAI / IoT / Full-Stack / 植物养护知识分享
返回首页Managed Agents 进入长任务阶段:Background、Remote MCP 和凭证续期背后的可靠性协议

Managed Agents 进入长任务阶段:Background、Remote MCP 和凭证续期背后的可靠性协议

把 Agent 放进一个隔离 Linux 沙箱,只解决了“在哪里运行”。当任务持续几十分钟、HTTP 连接中断、凭证过期、工具服务暂时不可用时,系统还要回答:任务是否仍在执行,客户端怎样重连,副作用会不会重复,失败能否从检查点恢复。

Google 近期为 Gemini API Managed Agents 增加 background execution、remote MCP、custom functions 和跨 interaction 刷新凭证。表面是 API 功能补齐,背后是 Agent 平台从同步模型调用走向 durable runtime。

Background 不是把请求丢到队列就结束

同步 HTTP 适合秒级调用,不适合长任务。连接保持几十分钟会经过浏览器、负载均衡、网关、移动网络和客户端进程,任意一层断开都可能让用户误以为任务失败。

background 模式返回 interaction id,客户端稍后查询状态、流式读取进度或重新连接。但一个生产状态机不能只有 running 和 done,至少需要:

状态含义客户端动作
queued尚未获得执行资源等待或取消
runningAgent 正在推理或调用工具读取进度
waiting等凭证、审批、限流或外部依赖提供输入或等待
succeeded目标完成且证据已持久化读取产物
failed已进入不可自动恢复错误查看原因、决定重试
canceled用户或策略终止确认副作用与清理
expired状态或沙箱超过保留期从外部检查点重建

进度事件还要有单调递增序号。客户端重连时从 last_event_id 继续,避免漏事件或重复展示。最终产物必须独立于流式连接持久化,不能只存在于 SSE 缓冲区。

Exactly-once 很难,幂等才是现实答案

考虑一个 Agent 创建 PR 的过程:GitHub 已经创建成功,但响应返回前沙箱断线。系统如果整轮重试,可能创建第二个 PR;如果直接标记失败,又会丢失已经发生的副作用。

分布式系统很难对所有外部工具保证 exactly-once,更现实的目标是 at-least-once 执行配合幂等:

  • 每个副作用生成 operation id;
  • 工具服务按 id 去重并返回旧结果;
  • 执行后立刻保存外部 resource id;
  • 恢复前查询真实状态,而不是重放语言计划;
  • 无法幂等的动作使用 prepare / commit 两阶段。

Agent runtime 要把“模型说已完成”和“外部系统确认已生效”分开记录。

Remote MCP 把工具接入变简单,也扩大了信任边界

远程 MCP 让 Agent 通过标准协议访问观测、代码、工单、数据库或内部服务。它减少每个工具的专用 SDK,却把安全边界从一个 API 扩展为:模型、托管沙箱、MCP 客户端、远程 MCP 服务、下游数据源和凭证系统。

上线前至少要回答:

  1. MCP server 身份怎样验证,是否固定域名和证书。
  2. 每个 tool 的输入、输出和副作用是否有 schema。
  3. 沙箱可访问哪些域名,是否默认拒绝外网。
  4. 凭证作用域是否按任务、工具和资源收窄。
  5. tool description 是否可能被远端内容注入修改。
  6. 敏感输出是否会进入模型上下文、日志和长期状态。

远程 MCP 不是“Agent 能连上就可以用”。最小权限、allowlist、审计和数据分级仍然要由调用方定义。

凭证续期不是便利功能,而是长任务存活条件

短期访问 token 常常只有几十分钟寿命,长任务不应通过发放超长期密钥解决。更安全的方式是:任务持有环境 identity,真正的 access token 按需下发、短期有效,到期后由受信任控制面刷新。

续期流程需要限制:

  • 新 token 的权限不得比初始授权更大;
  • 刷新必须绑定同一 environment id 和 task id;
  • refresh token 不暴露给模型文本和工具输出;
  • 任务被取消、风险升级或人员离职时立即撤销;
  • 凭证刷新事件进入不可篡改审计日志。

如果任务需要新增权限,应该暂停到 waiting-for-approval,而不是让模型自行请求更广 scope。

长任务需要双层状态

托管沙箱内有工作状态:临时文件、依赖、终端输出和当前计划。平台外还要有 durable state:目标、检查点、已发生副作用、证据位置和审批记录。

只依赖沙箱会产生平台锁定和恢复风险。沙箱被回收、供应商故障或任务跨区迁移时,关键状态必须能重建。建议每完成一个可验证阶段就写外部检查点:

  • 运行和模型版本;
  • 输入数据版本与哈希;
  • 文件或 commit 产物;
  • 工具调用及外部 resource id;
  • 验证结果、剩余任务和预算;
  • 能否安全重放的标记。

这也让团队能够在不同 Agent 平台之间迁移,而不是把项目记忆锁在某个 interaction 中。

取消必须有语义,不能只是关闭 UI

用户点击 Cancel 后,系统要处理正在运行的模型、子进程、工具调用和外部动作。正确的取消协议包括:

  1. 控制面写入 cancellation requested。
  2. Agent 停止启动新的工具调用。
  3. 可中断任务收到信号并退出。
  4. 不可中断外部调用等待结果并记录真实状态。
  5. 清理临时凭证和沙箱资源。
  6. 生成取消报告,列出已完成、未完成和可能仍生效的副作用。

如果取消后无法回答“刚才是否已经发出邮件或提交变更”,这个 runtime 就不具备高风险任务能力。

观测指标要从模型调用上升到任务运行

除了 token、延迟和错误码,还要看:

指标作用
checkpoint age任务崩溃后最多丢多少进度
recovery success中断后能否继续而非从头重跑
duplicate side effects幂等设计是否失效
waiting ratio时间消耗在模型还是外部依赖
human intervention自动化是否真的减少审查负担
verified task cost一个被验收结果的总成本
stale credential events续期和撤销是否及时

长任务系统最可怕的不是一次报错,而是“看似还在跑,却没有产生新的可验证进展”。因此应设置 progress watchdog:状态、证据和外部动作长时间无变化时,暂停并诊断,而不是继续烧预算。

托管 Agent 和自建 Runtime 怎样选择

托管平台适合快速获得隔离执行、模型集成和统一 API;自建适合网络、合规、数据驻留和控制面要求很高的任务。实际可以混合:托管 Agent 做公开研究、代码分析和低风险草案,自有环境执行内部测试、数据访问与生产发布。

选择时不要只比较模型能力,还要验证:

  • 状态和产物能否导出;
  • 是否支持私网、域名 allowlist 和客户密钥;
  • 失败、取消和过期的语义是否清楚;
  • 审计日志是否覆盖远程工具和凭证;
  • 能否设置时间、成本、并发和副作用预算。

Agent API 正在变成分布式系统 API

Background、Remote MCP 和凭证续期说明:长时 Agent 的竞争不再只是谁的模型更聪明,而是谁能把不可靠网络、短期凭证、外部副作用和中断恢复包成可解释的运行契约。

一个成熟 Agent runtime 应允许用户离开页面,也不会让任务失去身份;允许连接中断,也不会重复写入;允许凭证过期,也不会扩大权限;允许失败,也能从最近证据继续。这些能力听起来不像 AI 魔法,却决定 Agent 能不能真的接管长任务。

参考资料