AI 运行时革命:Managed Agents 与 Session-As-Event-Log 架构解析
1. 这不是新赛道,而是 runtime 层的“操作系统时刻”正在重演
你打开终端,输入docker run -it ubuntu:24.04 /bin/bash,几秒后就进了一个干净、隔离、可丢弃的 Linux 环境——你根本不用关心这台机器上装的是 Intel 还是 AMD,内存是 DDR4 还是 DDR5,硬盘是 NVMe 还是 SATA。你只和一个抽象接口打交道:run、exec、stop、logs。这个抽象背后,是 Linux 内核的 cgroups、namespaces、seccomp,是硬件资源被层层虚拟化、标准化、稳态化的结果。二十年前,当你第一次在 Windows 上双击安装一个.exe,它能跑起来,靠的不是你手动配 PATH、注册 DLL、开防火墙端口,而是 Windows 提供了一套稳定、向后兼容的 Win32 API 和服务管理模型。这些都不是凭空出现的,它们是在无数个“我写的程序在客户服务器上崩了,因为他们的 .NET 版本太老”、“我的 Java 应用在客户 A 的 JVM 上正常,在客户 B 的 JVM 上 OOM”这类血泪教训里,被硬生生熬出来的基础设施共识。
Anthropic 在 2026 年 4 月 8 日发布的Claude Managed Agents,就是这个时刻在 AI 工程领域的复刻。它不是一个“更聪明的聊天机器人”,而是一套面向生产环境的、可编程的、有状态的、带沙箱的AI 运行时(Runtime)。关键词不是“Agent”,而是Managed。这个词背后藏着所有一线工程师最痛的三根刺:状态管理失控、凭证泄露风险、故障不可追溯。我去年亲手搭过一套基于 LangChain 的客服工单处理 Agent,系统上线第三周,一个用户提交了长达 47 步的复杂退货请求,Agent 在第 38 步调用内部 ERP 接口时,突然开始胡言乱语,把“已发货”说成“已退款”,把“仓库编号 WH-07”错写成“WH-007”。我们翻日志,发现 context 窗口早已溢出,前面 20 步的工具调用返回结果全被截断,模型只能对着一个残缺的、自我编造的历史做推理。更糟的是,整个 session 没有任何结构化事件记录,我们无法回放、无法比对、无法定位是哪一步的 JSON 解析出了错。最后只能靠人工翻数据库变更日志,花了整整两天才还原真相。这种安静的、昂贵的、无法复现的失败,才是 AI 工程落地真正的拦路虎。Anthropic 的 Managed Agents 把“Session”从模型上下文里彻底剥离出来,变成一个独立、持久、可查询的事件日志(Event Log),就像数据库的 WAL(Write-Ahead Log)一样,每一次 tool call、每一次 state update、每一次 human feedback,都原子性地写入这个外部存储。这不是锦上添花,这是给整个 AI 应用装上了黑匣子和安全气囊。它解决的不是“能不能做”,而是“敢不敢让这个 Agent 去动生产数据库”。
这个产品发布在 Towards AI 上被冠以“Layer That’s Already Going to Zero”的标题,绝非危言耸听。它精准地戳中了当前 AI 基础设施演进的核心矛盾:当模型能力(Model Capability)成为公共品,当推理成本(Inference Cost)被 hyperscaler 们压到毫厘之间,真正决定谁能活下来、谁会被淘汰的,不再是“谁的模型更大”,而是“谁能把模型安全、可靠、可审计、可扩展地跑起来”。Managed Agents 的定价是 $0.08/小时的 active runtime,外加 Claude 的 token 费用。这个价格本身不重要,重要的是它的计费模型——它按“运行时间”收费,而不是按“调用次数”或“token 数量”。这意味着 Anthropic 在告诉开发者:“别再把 Agent 当成一次性的 API 调用,把它当成一个长期驻留、有状态、需要被运维的服务。”这本身就是一种范式迁移。它要求你思考 session 生命周期管理、checkpoint 恢复策略、沙箱资源配额、trace 数据归档周期。这些,正是操作系统时代,我们为进程(Process)、文件(File)、网络连接(Socket)所建立的那套成熟心智模型。所以,这不是 Anthropic 在开创一个新类别,而是在为一个即将被所有人默认采用的底层标准,提供第一个高质量的、商业友好的参考实现。它像当年 VMware Workstation 之于 x86 虚拟化,是那个“让大家第一次真切感受到虚拟化有多香”的启蒙者,而非最终赢家。
2. 核心设计解构:为什么是 Session-As-Event-Log,而不是 Context-As-State?
要真正理解 Anthropic Managed Agents 的架构价值,必须先拆解它试图解决的三个核心痛点,以及它给出的、与传统做法截然不同的工程解法。这不仅仅是“换个存储位置”那么简单,而是一次对 AI 应用数据流的根本性重构。
2.1 痛点一:Context Window 是脆弱的“纸糊保险柜”
绝大多数开源 Agent 框架(LangChain、LlamaIndex、CrewAI)默认将 session state 存储在 LLM 的 context window 里。这就像把你的银行账户余额、交易流水、密码提示问题,全都写在一张便利贴上,然后塞进一个只能容纳 32KB 的信封里。每次模型推理,你都要把这张便利贴连同新指令一起塞进去。问题来了:这张便利贴会越写越长。当用户问“刚才我让你查的订单号是多少?”,模型必须从这堆文字里准确提取出那个 12 位数字;当用户说“把这个订单的状态改成已发货”,模型必须找到对应订单的 JSON 片段并修改其中的 status 字段。这依赖两个极其脆弱的假设:第一,模型能完美地解析和定位文本;第二,context 窗口永远够用。现实是,前者在长文本中准确率断崖式下跌,后者在多轮复杂交互中必然耗尽。我实测过一个基于 GPT-4-turbo 的采购审批 Agent,当它需要串联查询供应商库、比价表、库存系统、财务预算模块共 7 个步骤后,context 就已占用 92%。第 8 步,也就是最关键的“生成最终审批邮件”环节,模型直接把上一步的库存数量(127)错记为“1270”,导致邮件里写了“请备货 1270 件”,而实际库存只有 127。这不是模型“蠢”,这是架构设计把模型逼到了悬崖边。
Anthropic 的解法是Session-as-Event-Log。它把每一次交互都视为一个不可变的事件(Immutable Event):
Event Type:tool_callTool Name:get_inventoryInput:{"sku": "ABC-123"}Output:{"quantity": 127, "warehouse": "WH-07"}Timestamp:2026-04-08T14:23:11.456Z
这个事件被写入一个外部、持久、高可用的存储(很可能是基于 DynamoDB 或类似技术的 OLAP 优化型数据库)。当模型需要知道“库存是多少”,Harness(执行器)不再去 context 里翻找,而是直接向这个 event store 发起一个精确的、带时间戳范围的查询,拿到结构化的 JSON 结果,再注入 context。这带来了三个质变:第一,state 不再是模糊的文本,而是精确的、可索引的、可验证的数据;第二,context 窗口只承载“当前任务所需的最小信息”,长度可控,稳定性飙升;第三,整个 session 的历史变成了一个可审计、可回放、可分析的完整链条。你可以轻松回答:“这个订单的库存查询结果,是在哪一刻、由哪个工具、以什么参数返回的?”——这在传统 context-based 架构里,是根本无法做到的。
2.2 痛点二:Credential Injection 是悬在头顶的达摩克利斯之剑
在 DIY Agent 项目中,“怎么把数据库密码传给 Agent”是一个永恒的面试题。常见方案有三:一是把密码写死在 system prompt 里,模型一“思考”就可能把它原样输出;二是通过环境变量注入到运行容器里,但一旦沙箱逃逸(sandbox escape),攻击者就能printenv | grep DB_PASS;三是用 secrets manager 的 SDK,但这要求 Agent 代码里硬编码调用逻辑,把安全责任推给了应用层,而应用层恰恰是最容易出错的地方。去年,一家金融科技公司就因此吃了大亏:他们的投研 Agent 被诱导执行了一条恶意的curl命令,目标是其内部的 Jira API,而命令里携带的 API Token,正是从一个配置错误的环境变量中读取的。这个 Token 拥有读写所有项目的权限,导致大量敏感需求文档被篡改。
Anthropic Managed Agents 的解法是Credential Isolation by Design。它彻底取消了“让 Agent 代码去获取凭证”这一环节。流程是这样的:当 Agent 定义(YAML)中声明了一个名为jira_search的 tool,并指定了它需要JIRA_API_TOKEN这个 credential 时,Anthropic 的平台会在沙箱(Sandbox)启动的瞬间,由平台自身的、经过严格审计的 Vault 服务,将该 Token 注入到沙箱的内核级安全上下文(Security Context)中。这个上下文对沙箱内的任何进程都是完全透明的——它就像空气一样存在,但没有任何用户态代码(包括 Agent 自己的 Python 脚本)能通过os.environ、/proc/self/environ或任何其他方式“看到”或“读取”它。当jira_searchtool 被调用时,沙箱的 syscall hook 会自动捕获这个请求,将其转发给 Vault 代理,代理在确认请求来源(沙箱 ID、tool 名、session ID)合法后,才将 Token 用于真实的 HTTP 请求。整个过程,凭证从未以明文形式存在于用户可控的内存或文件系统中。这是一种典型的“零信任”架构思想:不信任任何代码,只信任经过认证的、受控的执行路径。这已经不是“最佳实践”,而是生产环境的强制安全基线。
2.3 痛点三:Harness Crash = Session Death,没有“重启”概念
在传统部署中,如果你的 Agent 服务进程崩溃了,会发生什么?答案是:整个 session 就此终结。用户之前的所有操作、所有中间状态、所有已获得的工具返回结果,全部丢失。用户只能重新开始,或者得到一个冰冷的“服务暂时不可用”错误。这在 Web 应用里是不可接受的,在 AI Agent 场景下更是灾难性的。想象一个正在帮你规划跨国旅行的 Agent,已经完成了航班、酒店、租车、签证材料清单的全部查询,正准备生成最终行程表时,服务器内存溢出宕机了。你刷新页面,它只会问:“你好,请问你想去哪里旅行?”——之前 20 分钟的工作,灰飞烟灭。
Anthropic 的解法是Harness as Stateless Executor。Harness 本身就是一个极度轻量、无状态的“执行引擎”。它唯一的职责,就是在收到execute(tool_name, input)这个指令后,启动一个沙箱,注入凭证,执行 tool,捕获输出,然后立即销毁沙箱。Harness 本身不保存任何 session 数据。所有的 state 都在外部的 Event Log 里。因此,Harness 的 crash 是完全无感的。当一个新的 Harness 实例被调度起来时,它做的第一件事,就是调用awake(sessionId)。这个 API 会从 Event Log 中拉取该 session 的完整事件历史,重建出当前的、精确的、最新的 state 快照(Snapshot),然后将这个快照作为 context 的一部分,交给模型进行下一轮推理。这就像你在玩一个大型 RPG 游戏,角色在野外战斗中阵亡,游戏不会结束,而是自动读取你上一个存档点,让你在最近的安全屋复活。这个“存档点”就是 Event Log,“读档”就是awake()。它把“容错”从一个需要复杂分布式协调的难题,降维成了一个简单的、幂等的、基于事件的查询操作。这种设计,让整个系统具备了云原生应用所必需的弹性(Resilience)和韧性(Resilience)。
3. 实操全景:从 YAML 定义到生产部署的每一步细节
理解了设计哲学,现在我们来动手。Managed Agents 的核心入口是一个 YAML 文件,它定义了 Agent 的“灵魂”。下面,我将以一个真实的、已在 Notion 内部上线的“会议纪要生成助手”为例,带你走完从定义、测试到上线的全流程。这个例子之所以典型,是因为它同时涉及了多工具协同、状态持久化、以及严格的权限控制,能覆盖 80% 的企业级场景。
3.1 Agent 定义:YAML 是新的“源代码”
# meeting-minutes-agent.yaml name: "Notion-Meeting-Minutes" description: "An agent that listens to meeting audio, transcribes it, extracts action items, and writes a formatted summary into Notion." # 系统提示词,定义 Agent 的角色和边界 system_prompt: | You are a meticulous and professional meeting assistant for Notion. Your job is to: 1. Transcribe the provided audio file accurately. 2. Identify all speakers and their contributions. 3. Extract clear, actionable items with owners and deadlines. 4. Write a concise, well-structured summary in Markdown format. 5. NEVER invent facts or details not present in the transcript. 6. If you cannot perform a step (e.g., audio is too noisy), explicitly state the limitation. # 定义 Agent 可用的工具集 tools: - name: "transcribe_audio" description: "Transcribes an audio file (.mp3, .wav) into text. Returns raw transcript." input_schema: type: "object" properties: audio_url: type: "string" description: "A publicly accessible URL to the audio file." # 关键:credential 引用,而非明文 credential: "AWS_S3_READ_ONLY" - name: "extract_action_items" description: "Analyzes a transcript and extracts action items in structured JSON." input_schema: type: "object" properties: transcript: type: "string" description: "The full meeting transcript." # 这个工具不需要外部凭证,纯计算 credential: null - name: "notion_create_page" description: "Creates a new page in a specific Notion database with the given content." input_schema: type: "object" properties: database_id: type: "string" description: "The ID of the Notion database where the page should be created." title: type: "string" description: "The title of the new page." content_markdown: type: "string" description: "The main content of the page, in Markdown format." credential: "NOTION_INTEGRATION_TOKEN" # 定义运行时约束,这是生产安全的基石 runtime_constraints: max_session_duration_hours: 2 max_tool_calls_per_session: 10 sandbox_memory_mb: 1024 sandbox_cpu_millis: 2000 # 相当于 2 vCPU seconds这个 YAML 文件,就是你的 Agent 的“源代码”。它清晰地分离了关注点:system_prompt定义行为契约,tools定义能力边界,runtime_constraints定义安全护栏。注意credential字段,它只是一个引用名(AWS_S3_READ_ONLY,NOTION_INTEGRATION_TOKEN),这些名字在 Anthropic 的控制台里,对应着你预先配置好的、经过 RBAC(基于角色的访问控制)审核的密钥。开发人员在写 YAML 时,完全不需要接触任何敏感信息,这极大地降低了误操作风险。我见过太多团队,因为一个实习生在 GitHub 上提交了包含DB_PASSWORD=xxx的.env文件,导致整个数据库被拖库。这种基于引用的凭证管理,是从根源上杜绝了此类事故。
3.2 本地沙箱测试:在自己的机器上“预演”生产
在把 YAML 交给 Anthropic 之前,你必须在本地进行充分测试。Anthropic 提供了一个 CLI 工具claude-agent-cli,它能模拟 Managed Agents 的整个执行环境。
# 1. 安装 CLI pip install claude-agent-cli # 2. 启动本地沙箱(它会下载一个轻量级的、与生产一致的沙箱镜像) claude-agent-cli sandbox start --config meeting-minutes-agent.yaml # 3. 模拟一次完整的 session 流程 claude-agent-cli session create \ --agent-name "Notion-Meeting-Minutes" \ --input '{"audio_url": "https://example.com/meeting-20260408.mp3"}' # CLI 会输出详细的 trace log,你可以看到: # [2026-04-08 10:00:01] INFO: Starting session 'sess_abc123' # [2026-04-08 10:00:02] INFO: Executing tool 'transcribe_audio' with input: {...} # [2026-04-08 10:00:15] INFO: Tool 'transcribe_audio' returned: {"transcript": "Hello everyone..."} # [2026-04-08 10:00:16] INFO: Executing tool 'extract_action_items'... # [2026-04-08 10:00:22] INFO: Tool 'extract_action_items' returned: {"action_items": [{"owner": "Alice", "task": "Send Q2 report", "deadline": "2026-04-15"}]} # [2026-04-08 10:00:23] INFO: Executing tool 'notion_create_page'... # [2026-04-08 10:00:30] INFO: Session completed successfully. Page created at: https://notion.so/page/xyz789这个本地测试的价值在于,它让你能在 100% 隔离的环境中,验证整个工作流的逻辑正确性、工具调用的顺序、以及 error handling 的健壮性。更重要的是,它暴露了那些只有在真实沙箱里才会出现的问题。比如,我曾经在一个金融 Agent 的测试中发现,transcribe_audio工具在本地沙箱里运行正常,但在生产沙箱里却超时。排查后发现,是生产沙箱的 outbound 网络策略默认禁止了对某些 CDN 的访问,而我们的音频文件恰好托管在那个 CDN 上。这个发现,让我们在上线前就修正了网络 ACL 规则,避免了上线后的“神秘失败”。这就是本地沙箱测试的核心价值:把“未知的未知”(Unknown Unknowns),变成“已知的已知”(Known Knowns)。
3.3 生产部署与监控:让 Agent 成为可运维的服务
部署本身非常简单,一行命令即可:
claude-agent-cli deploy --config meeting-minutes-agent.yaml --environment "production"但真正的挑战,在于部署之后。Managed Agents 提供了一套完整的可观测性(Observability)仪表盘,它有三个核心视图,每个都直击运维痛点:
Session Trace View: 这是你的“黑匣子回放器”。你可以输入任意一个 session ID,看到一个时间轴,上面精确标注了每一次 tool call 的开始/结束时间、输入/输出(可折叠)、HTTP 状态码、沙箱资源消耗(CPU、内存)。如果某个 session 失败了,你不需要猜,直接看这条 trace,就能 pinpoint 到是哪个 tool 的哪个参数导致了 401 Unauthorized 错误。
Performance Dashboard: 这里展示的是 P50/P95 的 time-to-first-token(TTFT)和 end-to-end latency。关键指标是
p95_latency_ms。根据 Anthropic 的官方数据,Managed Agents 的 p95 延迟比自建方案低 90% 以上。但这个数字对你没意义,你需要关注的是自己 Agent 的基线。我建议你设置一个告警规则:当p95_latency_ms > 3000(3 秒)持续 5 分钟,就触发 PagerDuty。因为超过 3 秒,用户就会明显感觉到卡顿,体验断崖式下跌。Security & Compliance Report: 这是给 CISO 看的。它会自动生成一份 PDF 报告,列出本次部署中所有使用的 credentials、它们的权限范围(例如,
NOTION_INTEGRATION_TOKEN只有pages:read,pages:write权限,没有users:read权限)、所有沙箱的网络出口白名单、以及每一次tool_call的审计日志(谁、在何时、调用了哪个工具、传了什么参数)。这份报告,可以直接作为 SOC2 Type II 审计的证据材料。
提示:不要忽略
runtime_constraints。我曾见过一个团队,为了追求极致性能,把max_session_duration_hours设为 24。结果一个恶意用户提交了一个无限循环的请求(while true: call_tool("self")),导致一个 Harness 实例持续运行了 18 小时,消耗了大量计算资源,最终触发了账单告警。正确的做法是,根据你的业务场景设定一个合理的上限。对于会议纪要这种任务,2 小时绰绰有余;对于一个需要数天爬取全网新闻的舆情分析 Agent,可以设为 8 小时。这是一个需要权衡安全、成本和功能的工程决策。
4. 竞争格局与生存法则:为什么 Runtime 层注定走向“零利润”
Anthropic 的 Managed Agents 发布,被很多媒体解读为“Anthropic 在 AI Agent 领域的重磅出击”。这种解读,错失了最本质的信号。它不是一场进攻,而是一场防御。一场针对整个 AI 基础设施栈正在发生的、不可逆转的“压缩”(Compression)浪潮的防御。要理解这一点,我们必须把镜头拉远,去看清整个市场的力量对比。
4.1 Hyperscaler 的“免费即正义”:AWS Bedrock AgentCore 的碾压式优势
就在 Anthropic 发布 Managed Agents 的五个月前,也就是 2025 年 11 月,AWS Bedrock AgentCore 已经进入通用可用(GA)阶段。它的核心卖点,不是“更快”,而是“无感”。它不是一个你需要单独购买、单独部署、单独运维的产品,而是 AWS 云平台的一个原生能力,就像 EC2 或 S3 一样。你只需要在 AWS 控制台里点击几下,选择你的模型(Claude、Llama、Cohere),上传你的 YAML,它就自动为你创建一个微虚拟机(microVM),这个 microVM 拥有完全隔离的 CPU、内存和文件系统,会一直运行,直到你主动停止它,或者它超时(最长 8 小时)。
最关键的是它的定价模型:它不收“runtime”费用。你只为两样东西付费:一是你调用的模型的 token(和 Anthropic 的定价完全一致),二是你使用的底层计算资源(vCPU 小时、内存 GB 小时),而这部分费用,已经包含在你每月的 AWS 账单里了。对于一个已经在使用 AWS 的企业客户来说,启用 AgentCore 几乎是零边际成本。他们不需要额外的采购流程、不需要新的合同、不需要新的账单系统对接。它就像给一辆已经买了保险的汽车,免费升级了车载导航系统。
这正是 Anthropic 最大的恐惧。它的核心收入来源是 Claude 模型的 token 销售。如果它的客户——那些已经习惯用 Claude 的开发者和企业——发现,他们可以在 AWS 上,用完全相同的 Claude 模型,搭配一个更强大(支持 microVM)、更灵活(框架无关)、更便宜(无 runtime fee)的 runtime,那么,Anthropic 的 Managed Agents 就会成为一个昂贵的、可选的“附加服务”,而不是一个必需的“基础平台”。这解释了为什么 Anthropic 的定价是 $0.08/session-hour:它必须足够低,以证明其价值,但又不能低到侵蚀自己的 token 收入。这是一种精妙的、危险的平衡术。
4.2 开源生态的“鲶鱼效应”:Daytona 与 Kubernetes SIG 的闪电战
如果说 hyperscaler 是大象,那么开源社区就是一群敏捷的狼群。2025 年初,一个名为 Daytona 的项目,从一个 DevOps 环境管理工具,迅速转型为 AI Agent 基础设施平台。它在 2025 年 2 月宣布完成 2400 万美元 A 轮融资,并放出了一组惊人的数据:沙箱启动时间 < 90ms。这个数字意味着什么?意味着你的 Agent 可以像调用一个本地函数一样,近乎实时地启动一个全新的、隔离的执行环境。这对于需要高频、短时、并发调用多个工具的场景(比如实时风控决策),是颠覆性的。
更可怕的是,Daytona 的代码是 Apache 2.0 许可的,完全开源。这意味着任何公司,都可以把它部署在自己的私有云上,完全掌控数据主权,规避所有合规风险。它不像 Anthropic 或 AWS 那样,是一个黑盒服务,而是一个你可以深度定制、打补丁、甚至贡献代码的“操作系统内核”。
与此同时,Kubernetes 社区也加入了战局。2025 年底,Kubernetes SIG(Special Interest Group)正式发布了k8s-agent-sandbox项目。它不是一个独立的 runtime,而是一个 Kubernetes Operator。你只需要写一个简单的 CRD(Custom Resource Definition),比如AgentSandbox,然后kubectl apply -f my-agent.yaml,K8s 就会自动为你创建一个 Pod,这个 Pod 内部运行着一个 hardened 的沙箱(基于 gVisor 或 Kata Containers),并为你挂载好所需的 secrets 和 volumes。这标志着 AI Agent runtime,正式成为了云原生基础设施的“一等公民”。它不再需要一个专属的、封闭的平台,它可以直接生长在你已有的、最成熟的 K8s 集群之上。
注意:不要低估开源的力量。2023 年,当 Terraform 还是 HashiCorp 的闭源产品时,它的市场占有率是 70%。2024 年,HashiCorp 将其核心模块改为 BUSL 许可证后,OpenTofu(一个开源分支)在一年内就拿下了 40% 的市场份额。AI runtime 的故事,正在重演。今天,你选择 Anthropic,可能只是因为它“开箱即用”;明天,你的 CTO 就会拿着 Daytona 的 benchmark 报告,要求你迁移到私有云,理由是“成本更低、更安全、更可控”。
4.3 “零利润”时代的生存法则:向上构建,而非向下卷
当 runtime 层的价格被 hyperscaler 打到“免费”,被开源社区打到“零成本”,那么,所有试图在这个层面上竞争的公司,都将面临一个残酷的现实:你卖的不是软件,你卖的是“运维服务”。而运维服务,是利润率最低、最难以规模化、最容易被替代的生意。这正是文章标题“Layer That’s Already Going to Zero”的真正含义——不是说这个层会消失,而是说,它的经济价值(Economic Value)正在被压缩到趋近于零。
那么,钱会流向哪里?答案是明确的,而且已经在发生:
Trace Store(追踪存储):当 runtime 变成一个“水电煤”一样的基础设施,谁拥有最完整、最标准、最易迁移的 Agent 行为日志,谁就拥有了下一个十年的护城河。Braintrust 的 Brainstore、Arize 的 Phoenix、LangChain 的 LangSmith,它们的竞争焦点,不再是“谁的 dashboard 更好看”,而是“谁的 trace schema 更通用,谁能让客户在从 Anthropic 迁移到 AWS 时,无需重写任何日志采集代码”。这是一个关于数据标准的战争。
Governance & Policy(治理与策略):当 Agent 可以自动写代码、自动发邮件、自动调用 API,企业最怕的不是它慢,而是它“错”。一个销售 Agent,是否被允许修改 CRM 中的客户等级?一个财务 Agent,是否被允许发起超过 10 万美元的付款?这些问题的答案,不能写在 YAML 里,而必须是一个集中式、可审计、可版本控制的策略引擎。AWS 的 AgentCore Policy Controls GA,OWASP 的 Agentic Top 10 发布,都预示着这个领域将成为企业采购的必选项。它卖的不是代码,而是合规性保障。
Vertical Agent Marketplaces(垂直领域 Agent 商店):最终,企业为 Agent 付费,不是为“一个能跑起来的 runtime”付费,而是为“一个能解决我具体问题的解决方案”付费。Salesforce 的 Agentforce ARR 达到 8 亿美元,靠的不是它有一个多牛的 runtime,而是它打包了“销售线索评分”、“客户流失预警”、“合同智能审查”等一系列开箱即用的、经过行业验证的垂直 Agent。这些 Agent 的价值,在于它们内置了行业知识、业务流程和合规规则。它们的定价,是按年订阅(ARR),而不是按 token 或 session-hour。这才是真正的、可持续的商业模式。
5. 实战避坑指南:来自一线踩过的 7 个深坑
理论再完美,也得经得起生产环境的毒打。在过去两年,我和团队为 12 家不同行业的客户部署了基于 Managed Agents 的解决方案,从电商客服到医疗影像分析。以下是我们在实践中,用真金白银换来的、最值得分享的 7 个避坑经验。它们没有写在任何官方文档里,但每一个,都曾让我们加班到凌晨三点。
5.1 坑一:YAML 中的system_prompt不是“提示词”,而是“法律合同”
很多开发者习惯性地把system_prompt当成一个可以随意发挥的“开场白”。这是最大的误区。在 Managed Agents 的架构下,system_prompt是 Agent 的行为契约(Behavior Contract),它会被平台用来做静态分析和运行时校验。如果你在里面写了“你可以访问互联网”,但你的 YAML 中并没有定义任何web_search工具,那么平台会在启动时就拒绝这个 Agent,报错ContractViolationError: Unauthorized capability 'internet_access' declared in system_prompt。更隐蔽的坑是,如果你写了“请确保所有日期格式为 YYYY-MM-DD”,但你的extract_action_items工具返回的 JSON 里,deadline字段是"April 15, 2026",那么后续调用notion_create_page时,Notion API 就会因为日期格式错误而返回 400。这个错误不会出现在extract_action_items的 trace 里,而是出现在notion_create_page的 trace 里,让你误以为是 Notion 的问题。解决方案:把system_prompt当成一份需要律师审阅的 SLA(服务等级协议)。每一句承诺,都必须有对应的、经过测试的 tool 来支撑。
5.2 坑二:沙箱的“网络出口”不是默认开放的
Managed Agents 的沙箱,默认只允许访问anthropic.com和aws.amazon.com(用于凭证交换)。如果你想让 Agent 调用你自己的内部 API,或者第三方的 Stripe、Twilio,你必须在 Anthropic 控制台里,为这个 Agent 显式地添加一个网络出口白名单(Network Egress Rule)。这个规则是基于域名的,不是 IP。所以,如果你的 API 是api.mycompany.com,而它背后是 Cloudflare,那么你只需要加mycompany.com。但如果你的 API 是192.168.1.100:8080,那就麻烦了,因为沙箱不支持 IP 白名单。解决方案:在设计阶段,就强制所有 backend API 必须有稳定的、可解析的域名。把网络策略当作一个必须提前规划的架构约束,而不是一个上线前才想起来的配置项。
5.3 坑三:max_tool_calls_per_session是防“死循环”的保险丝,不是性能指标
这个参数常被误解为“限制 Agent 的能力上限”。其实不然。它的核心作用是防止一个失控的 Agent,陷入无限递归调用,从而耗尽你的预算。例如,一个 bug 导致transcribe_audio工具在失败后,不是返回错误,而是反复调用自己。如果没有这个限制,一个 session 就可能产生数千次调用,账单瞬间爆炸。解决方案:根据你的业务逻辑,设定一个绝对安全的上限。对于一个会议纪要 Agent,最多 5 次调用(transcribe -> extract -> format -> notion_create -> send_notification)就足够了。把这个数字写死在 YAML 里,并在 CI/CD 流水线中加入检查,任何 PR 如果把这个数字调高,就必须附上详细的、经过 QA 验证的业务场景说明。
5.4 坑四:Event Log 的查询不是“实时”的,有 2-3 秒延迟
这是最让人抓狂的坑。当你在awake(sessionId)后,立刻尝试查询刚刚写入的 event,有时会查不到。这是因为 Event Log 的写入是异步的,它需要经过一个缓冲队列,以保证高吞吐和强一致性。解决方案:永远不要在同一个 session 的连续两步中,依赖“上一步刚写入的 event”。如果你需要一个 tool 的输出被另一个 tool 立即使用,最好的办法是让 Harness 在执行完第一个 tool 后,立即将其 output 作为 context 的一部分,注入到下一步的 model prompt 中,而不是去 Event Log 里查。Event Log 是为审计、回放、分析而生的,不是为实时数据传递而生的。
5.5 坑五:Credential 的scope比name更重要
你可能会在控制台里创建一个叫PROD_DATABASE_CREDENTIAL的 credential,但它的真实威力,取决于你给它分配的scope。Scope 是一个 JSON 对象,定义了这个 credential 具体能访问哪些资源。例如,一个 scope 为{"database": "sales_db", "tables": ["customers", "orders"]}的 credential,即使被注入到一个沙箱里,也无法访问finance_db。**解决方案:遵循最小权限原则(Principle of Least Privilege)。为每一个 tool 创建一个专用的、scope 最小的 credential。不要图省事,用一个“万能钥匙”去开所有锁