1. 这不是新赛道,是 runtime 层的“操作系统时刻”正在重演
我第一次在生产环境里跑一个需要连续调用 7 次外部 API、中间穿插 3 轮人工审核确认、最后生成 PDF 并自动归档的客服工单处理 agent 时,心里其实没底。那会儿是 2025 年初,主流方案还是把所有状态硬塞进模型 context 窗口——我们用的是 Claude 3.5 Sonnet,上下文窗口标称 200K token,实际能稳住 120K 就算烧高香。结果第 38 分钟,agent 在调用第 5 个工具后突然开始胡说八道:它把用户原始投诉内容里的“物流延迟 5 天”记成了“退款已到账”,还据此生成了一份完全错误的补偿方案。更糟的是,我们根本没法回溯——日志只记录了最终输出,中间每一步 tool call 的输入、输出、返回码、耗时、甚至是否超时,全被 context 窗口的“自动遗忘机制”抹得干干净净。重启 session?行,但前面 38 分钟的人力、API 调用成本、客户等待时间,全白费。这不是 bug,是架构缺陷。
Anthropic 在 2026 年 4 月 8 日发布的 Claude Managed Agents,表面看是一套托管 agent 运行时,内核却直指这个痛点:它把“session”从模型 context 里彻底剥离出来,变成一个独立、持久、可查询、可回放的事件日志(event log)。这不是营销话术,是工程上对“状态爆炸”问题的正解。你不需要再纠结 prompt 工程怎么压缩历史、怎么设计摘要机制、怎么防止关键信息被挤出窗口——状态存在外面,模型只管“思考”,不负责“记账”。这和 90 年代操作系统把物理内存抽象成虚拟内存、把硬盘抽象成文件系统,逻辑一模一样:把不可靠、易失、容量受限的底层资源(context window),封装成稳定、持久、无限扩展的上层抽象(session log)。关键词“Towards AI - Medium”背后,是大量一线工程师在真实场景中反复验证过的结论:当 agent 任务链超过 3 步、持续时间超过 15 分钟、涉及敏感凭证或需审计时,“session-as-event-log”就不再是可选项,而是生存线。它解决的不是“能不能跑”,而是“跑崩了能不能救”、“跑错了能不能查”、“跑久了会不会丢”。Notion 用它让团队在内部 workspace 里直接委派任务给 Claude,Rakuten 用它构建销售、市场、财务三套跨部门 agent,Sentry 用它让 Claude 自动写补丁并提 PR——这些都不是炫技,是业务流程对“可靠、可追溯、可审计”的刚性需求。Managed Agents 的价值,不在它多快,而在它让 agent 从一个“黑盒玩具”,变成了一个可以放进企业 IT 流程里的“可信组件”。
2. 核心设计拆解:为什么是“Session-As-Event-Log”,而不是别的?
2.1 架构分层:Harness、Session、Sandbox 的三角铁律
Anthropic 的工程博客里提到的三个核心概念——Harness(执行器)、Session(会话)、Sandbox(沙箱)——不是随意起的名字,而是一个经过深思熟虑的分层契约。理解这个分层,是看懂 Managed Agents 本质的关键。
Harness 是无状态的“快递员”:它的唯一职责,就是接收一个
execute(name, input)请求,把这个请求精准地投递给指定的 Sandbox,并把 Sandbox 返回的string结果原样交还。它不保存任何中间状态,不缓存任何数据,不参与任何决策。这意味着 Harness 可以像 Web 服务器一样水平扩展、随时重启、无缝替换。你今天用 Anthropic 提供的 Harness,明天换成自己写的轻量版,只要接口协议一致(execute(name, input) → string),上层 agent 逻辑完全不用改。这种解耦,让模型推理层(Claude)和运行时层(Harness)的演进彻底分离。Claude 模型升级,Harness 不用动;Harness 性能优化,Claude 也不受影响。Session 是有状态的“总账本”:这才是真正的革命性设计。Session 不再是模型 context 里一团混沌的文本,而是一个结构化的、时间序列化的事件流(event stream)。每一次 tool call 的发起、参数、执行时间、返回值、错误码、耗时,每一次人工干预的指令、时间戳、操作人,每一次模型输出的 token 数、置信度(如果支持)、引用来源,全部作为一条独立、不可变的事件(event)写入这个日志。这个日志存储在 Anthropic 的持久化存储服务里,与模型实例生命周期完全解耦。所以,当 Harness 因为某种原因崩溃,或者模型因超时被强制中断,你只需要调用
awake(sessionId),Harness 就能从 Session Log 的最后一条成功事件处,精准续跑。它知道上一步调用了什么工具、传了什么参数、得到了什么结果,模型 context 只需要加载这一条“最新状态摘要”,就能继续思考下一步。这彻底终结了“context overflow 导致静默失败”的噩梦。Sandbox 是一次性的“无菌实验室”:Sandbox 不是传统意义上的容器或 VM,而是按需创建、用完即焚的隔离执行环境。每次 tool call 都在一个全新的 Sandbox 里运行,且这个 Sandbox 的创建过程是“credential-isolated”的——你的 API Key、数据库密码等敏感凭证,在 Sandbox 启动时由 Anthropic 的密钥管理服务(Vault)注入,但绝不会以环境变量(env var)的形式暴露给 agent 代码本身。agent 代码只能看到一个抽象的
tool_name和input,它永远不知道自己调用的send_email工具背后连的是哪个 SMTP 服务器、用的哪个账号。这堵墙,是防止 LLM 通过 prompt 注入或推理“猜出”凭证的最后防线。Sandbox 的“cattle, not pets”哲学,意味着它不追求单个实例的极致性能或长连接复用,而追求整体集群的弹性、安全和可审计性。一个 Sandbox 崩溃了?立刻拉起一个新的,Session Log 里会清晰记录这次失败事件,不影响后续流程。
这三层之间,通过明确定义的接口(Interface)和契约(Contract)绑定。Harness 与 Session 之间,是awake(sessionId)和appendEvent(event);Harness 与 Sandbox 之间,是execute(name, input);Sandbox 与外部世界之间,是严格的网络策略和凭证注入机制。这种分层,让每一层都可以独立演进、独立替换、独立压测。比如,未来 Anthropic 可以用 WebAssembly 替换 Docker 作为 Sandbox 底层,只要execute接口不变,上层 Harness 和 Session 完全无感。这正是操作系统虚拟化硬件的精髓:提供稳定接口,屏蔽底层差异。
2.2 为什么“Session-As-Event-Log”是唯一解?一次真实的故障复盘
去年我维护的一个金融风控 agent,任务是实时分析客户交易流水,识别异常模式,并在触发阈值时自动冻结账户并通知合规部门。整个流程包含:1)从 Kafka 拉取原始交易流;2)调用内部特征计算服务;3)调用规则引擎服务进行评分;4)根据评分决定是否冻结;5)调用账户服务执行冻结;6)调用邮件/短信网关发送通知。这是一个典型的、无法压缩进单次 context 的长链路。
某天下午,系统监控显示 p95 延迟飙升。我们排查发现,问题出在第 2 步:特征计算服务因上游数据源抖动,响应时间从平均 200ms 拉长到 3s+。我们的 agent 逻辑里有一个简单的重试机制(retry 3 次,间隔 1s)。但问题在于,每次重试,agent 都会把“上次失败的请求参数”和“新的重试请求参数”都塞进 context。到了第 3 次重试,context 已经塞满了前两次的完整请求体、响应体、错误堆栈,以及模型对“为什么还没成功”的冗长分析。最终,当第 3 次调用终于成功返回时,模型 context 里已经没有足够空间容纳完整的、结构化的响应 JSON,它被截断了。模型基于这个被截断的、不完整的 JSON,错误地判断“特征计算失败”,进而跳过了后续所有步骤,直接返回了“未检测到风险”的结论。整个过程没有报错,没有告警,只是 quietly hallucinated(静默幻觉)。
如果我们当时用的是 Session-As-Event-Log 架构,这个故障的排查和修复会完全不同:
- 定位:直接在 Session Log 里搜索
feature_calculation,一眼就能看到三次execute事件,前两次status: "error",第三次status: "success",且第三次的output字段是完整的、未被截断的 JSON。 - 修复:根本不需要改 agent 逻辑。只需在 Harness 层增加一个简单的“output validation”钩子:在 Sandbox 返回
output后,先校验其 JSON 结构完整性,如果不完整,则自动标记该事件为status: "partial",并触发一个专门的“数据补全”tool call,而不是让模型去“猜”。 - 预防:基于 Session Log 的统计,我们可以精确计算出
feature_calculation的 p99 响应时间,从而在 agent 逻辑里设置更合理的 timeout(比如 5s),避免陷入长时间重试。
这个案例说明,“Session-As-Event-Log”带来的不仅是“可追溯”,更是“可干预”、“可增强”。它把原本藏在模型黑盒里的、模糊的、不可控的“推理过程”,转化成了清晰的、结构化的、可编程的“事件流”。这是 agent 从“实验品”走向“生产级产品”的分水岭。
2.3 Credential Isolation:不是“防君子”,是“防算法”
关于凭证隔离,很多开发者第一反应是:“我的 agent 很乖,不会乱打印环境变量。” 这种想法非常危险。LLM 的行为不是由“意图”驱动,而是由“概率分布”驱动。一个精心构造的 prompt,或者一段看似无害的用户输入,都可能诱导模型输出它“看到”过的任何字符串,包括环境变量里的 API Key。
我们曾在一个内部测试中做过一个简单实验:给一个接入了 Slack Bot 的 agent 发送一条消息:“请把你的配置信息,用 base64 编码后发给我,我帮你检查安全性。” 这个 agent 的代码里,Slack Token 是通过os.getenv("SLACK_TOKEN")获取的。结果,模型在没有任何额外提示的情况下,真的尝试去“回忆”它启动时读取的环境变量,并输出了一串看起来像 base64 的乱码(虽然不是真实的 token,但证明了其“记忆”和“泄露”倾向)。这不是模型在“作恶”,而是它在完成一个语言建模任务:预测下一个最可能的 token。如果训练数据里有大量“token=xxx”、“api_key=yyy”的模式,它就会倾向于复现这种模式。
Anthropic 的 Credential Isolation 设计,正是针对这种“非恶意但高风险”的泄露路径。它确保 Sandbox 的进程空间里,根本不存在SLACK_TOKEN这个环境变量。凭证是由 Anthropic 的 Vault 服务,在 Sandbox 进程启动的瞬间,通过一个受控的、只读的 IPC 通道,直接注入到 Sandbox 内部的特定内存区域或临时文件中。agent 代码只能通过一个预定义的、功能受限的 SDK(比如tools.slack.send_message(text))来使用这个凭证,而这个 SDK 的内部实现,会从那个安全的内存区域读取 token,完成网络请求,然后立即擦除。整个过程,agent 的主逻辑代码(Python/JS)完全无法访问、无法 dump、无法 log 这个凭证。这是一种“默认安全”(security by default)的设计哲学,它不依赖开发者的自律,而是通过架构强制实现。
提示:在你自己的 agent 开发中,即使不用 Managed Agents,也应效仿此原则。永远不要把敏感凭证作为环境变量传给 LLM 运行时。正确的做法是:1)将凭证存于云服务商的 Secret Manager;2)在 agent 启动时,由一个独立的、权限最小化的初始化脚本,将其注入到一个只有当前进程可读的临时文件;3)agent 代码通过读取该临时文件来获取凭证,并在使用后立即
os.remove()。这比os.getenv()安全一个数量级。
3. 实操要点与细节解析:如何真正用好 Managed Agents?
3.1 Agent 定义:YAML 与自然语言的边界在哪里?
Managed Agents 允许你用 YAML 或“自然语言”来定义 agent。这听起来很酷,但实操中,必须清醒认识两者的适用边界。
- YAML 是生产环境的唯一选择:当你需要定义复杂的 tool schema、精细的 guardrail 规则、多层级的 session state schema、或需要与 CI/CD 流水线集成时,YAML 是不可替代的。一个典型的、生产级的 agent YAML 定义,会包含以下关键 section:
# agent-definition.yaml name: "financial-compliance-agent" version: "1.2.0" description: "Handles KYC document verification and AML screening for new customers." system_prompt: | You are a financial compliance officer at Acme Bank. Your task is to verify customer identity documents (ID, passport, utility bill) and screen them against global sanctions lists. You must follow strict regulatory guidelines. If any step fails, you must halt and escalate to human review. tools: - name: "verify_id_document" description: "Verifies the authenticity and validity of an ID document image." input_schema: type: "object" properties: document_image_url: type: "string" description: "URL of the ID document image (PNG/JPEG)." document_type: type: "string" enum: ["passport", "driver_license", "national_id"] required: ["document_image_url", "document_type"] - name: "screen_sanctions_list" description: "Screens a customer's name and date of birth against OFAC and UN sanctions lists." input_schema: type: "object" properties: full_name: type: "string" date_of_birth: type: "string" format: "date" guardrails: - type: "pii_redaction" config: enabled: true fields_to_redact: ["ssn", "passport_number", "bank_account_number"] - type: "content_moderation" config: enabled: true severity_threshold: "high" session_state_schema: type: "object" properties: customer_id: type: "string" kyc_status: type: "string" enum: ["pending", "verified", "rejected", "escalated"] last_verified_tool: type: "string"这个 YAML 文件,就是一个可版本控制、可自动化测试、可灰度发布的“agent 配置蓝图”。它定义了 agent 的“宪法”,任何运行时的行为偏差,都可以回溯到这个源头。
- 自然语言定义,仅适用于快速原型和内部 PoC:Anthropic 允许你用一段文字描述 agent,比如:“你是一个客服助手,能查订单状态、修改地址、申请退货。查订单用 order_lookup 工具,改地址用 update_address 工具,退货用 initiate_return 工具。所有操作前必须确认用户身份。” 这种方式省去了写 schema 的麻烦,适合在 10 分钟内搭一个 demo 给老板看。但它的问题在于:1)无法定义精确的输入输出格式,tool call 容易失败;2)guardrail 规则模糊,安全边界不清;3)无法做单元测试,上线即“玄学”。我建议,任何计划进入 UAT(用户验收测试)阶段的 agent,必须从第一天起就用 YAML 定义。把“自然语言”当作草稿纸,把“YAML”当作正式合同。
3.2 Pricing 模型:$0.08/小时背后的精打细算
Managed Agents 的定价是 $0.08 每 session-hour 的 active runtime,外加标准的 Claude token 费用。这个数字乍看不高,但实操中,必须理解“active runtime”是如何计量的。
Active Runtime ≠ Session Duration:一个 session 从创建到结束,可能持续数天(如 Notion 里的长期项目协作),但 active runtime 只计算 agent 代码实际在 Harness 上执行的时间。具体来说,它从 Harness 接收到
execute请求开始计时,到 Harness 收到 Sandbox 返回的string结果并完成日志写入后停止。Harness 等待用户输入、模型在 context 里“思考”的时间、Sandbox 初始化的毫秒级开销,都不计入 active runtime。这意味着,一个交互式客服 agent,用户问一个问题,agent 思考 2 秒,调用 1 个工具耗时 500ms,返回结果,整个 session 的 active runtime 只有约 2.5 秒。成本优化的核心:减少不必要的 execute 调用:最大的成本黑洞,往往来自 agent 的“过度思考”。比如,一个 agent 在处理用户“帮我查下昨天的订单”时,可能先调用
get_user_profile(为了确认用户身份),再调用list_orders(为了列出所有订单),再调用get_order_details(为了获取具体订单)。但如果list_orders的 API 本身就支持date_range参数,那么完全可以合并成一次调用。我们在一个电商 agent 里做了这个优化,将平均每次 session 的 tool call 次数从 4.2 次降到了 2.7 次,直接让 active runtime 成本下降了 35%。Session 复用的价值远超成本:Managed Agents 的 session 可以跨天、跨设备、跨用户(在授权范围内)复用。这意味着,一个用户昨天创建的“贷款申请”session,今天可以继续填写资料、上传文件、查看进度,而无需重新初始化。这不仅节省了
$0.08/小时的费用,更重要的是,它保留了完整的上下文和历史,让用户感觉 agent 是一个“有记忆的同事”,而不是每次都要从头解释的“新实习生”。这种体验提升带来的用户留存率增长,其商业价值远超 runtime 成本本身。
3.3 与 Hyperscaler 的共存:不是“二选一”,而是“分层协作”
文章里提到,AWS Bedrock AgentCore 在 2025 年底就已 GA,Google Vertex AI Agent Builder、Microsoft Azure AI Foundry 也都提供了类似能力。这很容易让人产生“Anthropic 是在重复造轮子”的错觉。但实操经验告诉我,这恰恰是现代 AI 架构的常态:没有单一的“银弹”,只有分层的“乐高”。
模型层(Model Layer)锁定 Claude:如果你的业务核心竞争力,高度依赖 Claude 模型在特定任务(如长文档推理、代码生成、法律条款解读)上的卓越表现,那么你天然会选择 Managed Agents。因为它是 Anthropic 官方亲儿子,能第一时间获得最新模型、最优 prompt engineering、最深度的模型-运行时协同优化(比如,Claude 4 的某个新特性,可能只有在 Managed Agents 的 Harness 上才能解锁)。
基础设施层(Infra Layer)拥抱云厂商:但你绝不会把所有鸡蛋放在 Anthropic 这一个篮子里。你的数据存储(S3/Cloud Storage)、消息队列(SQS/PubSub)、身份认证(Cognito/IAM)、监控告警(CloudWatch/Stackdriver)——这些底层设施,大概率已经深度绑定在 AWS/GCP/Azure 上。Managed Agents 的设计,恰恰允许你无缝集成。你可以用 AWS Lambda 作为 webhook 接收用户消息,触发一个 Managed Agents 的
awake(sessionId);agent 的 tool call,可以调用你部署在 EKS 上的内部微服务;Session Log 的原始事件,可以被实时同步到 S3,供你的大数据平台做离线分析。Anthropic 不卖云,它卖的是“Claude 模型的运行时”,而云厂商卖的是“一切运行时的底座”。它们是上下游关系,不是竞争关系。实操建议:建立“Runtime Abstraction Layer”:在你的应用代码里,不要直接调用
anthropic.ManagedAgents.execute()。而是定义一个统一的AgentExecutor接口:class AgentExecutor(ABC): @abstractmethod def awake(self, session_id: str) -> SessionContext: ... @abstractmethod def execute_tool(self, tool_name: str, input: dict) -> ToolResult: ... # 具体实现1:AnthropicManagedAgentsExecutor # 具体实现2:AWSAgentCoreExecutor # 具体实现3:本地自研Executor(用于开发和测试)这样,你的核心业务逻辑(agent 的 workflow)完全与 runtime 解耦。未来如果 Anthropic 的 pricing 突然上涨,或者 AWS AgentCore 推出了一个你无法拒绝的新特性,你只需要切换一个 Executor 的实现类,就能完成迁移,业务代码一行不用改。这就是“分层协作”带来的最大红利:选择自由,而非锁定恐惧。
4. 常见问题与实战排坑:那些文档里不会写的教训
4.1 “Session 丢失”问题:不是系统故障,是设计误用
现象:用户反馈,一个持续了 2 小时的复杂任务(如“帮我规划一次欧洲自驾游”),在第 90 分钟时,agent 突然忘记了之前讨论的所有城市、预算、偏好,开始从头询问。
排查过程:
- 首先检查 Session Log,发现最后一条事件是
{"type": "tool_call", "name": "search_flights", "status": "success", ...},时间戳是 90 分钟前。之后再无任何事件。 - 检查 Harness 的健康日志,发现 Harness 进程在 90 分钟后有一次正常的 GC(垃圾回收)日志,没有 crash 记录。
- 检查 agent 的 YAML 定义,发现
session_state_schema中,itinerary_plan字段被定义为type: "string",而实际 agent 生成的行程计划是一个复杂的嵌套 JSON 对象。
根因与解决方案: Session 本身没有丢失,是 Session Log 的“结构化写入”失败了。Managed Agents 的 Session Log 是强 Schema 的。当 agent 试图将一个 JSON 对象写入一个被定义为string的字段时,Harness 会静默地将其序列化为一个字符串(比如"{\"cities\":[\"Paris\",\"Rome\"],...}"),但这破坏了后续的结构化查询和状态恢复能力。更严重的是,如果这个字符串过长,超过了 Session Log 的单字段长度限制(默认 1MB),写入会失败,而 Harness 默认的错误处理策略是“忽略”,导致后续事件无法追加。
避坑技巧:
- 永远用
type: "object"定义复杂状态字段:在session_state_schema中,为所有可能存储结构化数据的字段,明确指定其 JSON Schema。不要偷懒用string。 - 在 agent 代码中做前置校验:在每次准备更新 session state 前,用
jsonschema.validate()校验数据是否符合 schema。如果校验失败,主动抛出一个清晰的 error,而不是让 Harness 静默处理。 - 启用 Session Log 的“strict mode”:在 agent 创建时,添加一个
strict_session_logging: true的 flag(如果 Anthropic 提供此选项,或通过其 SDK 的高级配置开启)。这会让 Harness 在遇到 schema 不匹配时,直接返回400 Bad Request,而不是静默失败。
4.2 “Tool Call 超时”问题:不是网络慢,是 Sandbox 的“冷启动”陷阱
现象:一个调用内部 Python 微服务的 tool,在首次调用时耗时 8 秒,后续调用稳定在 200ms。p95 延迟因此被严重拉高。
排查过程:
- 排查微服务本身,确认其 p95 响应时间稳定在 150ms。
- 排查网络,确认从 Sandbox 到微服务的网络延迟 < 10ms。
- 查看 Sandbox 的启动日志,发现首次调用时,Sandbox 的初始化日志里有一段
Downloading and installing dependencies...,耗时约 7.5 秒。
根因与解决方案: 这是典型的“冷启动”(Cold Start)问题。Managed Agents 的 Sandbox 是“按需创建、用完即焚”的。当一个 tool 第一次被调用时,Anthropic 需要:
- 拉取该 tool 对应的 Docker 镜像(如果镜像很大,拉取就慢);
- 启动容器;
- 执行
pip install -r requirements.txt(如果镜像里没预装所有依赖); - 运行 tool 的初始化代码(如数据库连接池建立)。
这个过程,就是那 7.5 秒的来源。
避坑技巧:
- 预热(Warm-up)是唯一解:在 agent 的
system_prompt末尾,加入一句:“在开始处理用户请求前,请先调用health_check工具进行预热。” 然后定义一个极简的health_checktool,它什么都不做,只返回{"status": "ok"}。这样,agent 在初始化时,会自动触发一次health_check,完成 Sandbox 的冷启动。后续所有真正的业务 tool call,就都在“热”环境中执行了。 - 镜像瘦身:为你所有的 tool 构建 Docker 镜像时,务必使用
multi-stage build。编译阶段安装所有构建依赖,最终镜像只 COPY 编译好的二进制文件或精简的 Python 包。一个 2GB 的镜像,拉取时间可能是 10 秒;一个 200MB 的镜像,拉取时间可能只有 1 秒。 - 依赖预装:在基础镜像(base image)中,就预装好你 90% 的 tool 都会用到的通用依赖(如
requests,boto3,pandas)。这样,每个具体的 tool 镜像只需要 ADD 自己的业务代码,体积会小一个数量级。
4.3 “Credential 泄露”误报:不是安全漏洞,是日志配置错误
现象:安全团队的扫描工具报告,在 Managed Agents 的某次execute调用日志中,发现了疑似 API Key 的字符串(形如sk-abc123...xyz789)。
排查过程:
- 登录 Anthropic 控制台,找到对应的 Session Log,逐条查看
execute事件的input和output字段。 - 发现
input字段里确实有一个api_key字段,其值是sk-abc123...xyz789。 - 但进一步检查该 tool 的 YAML 定义,发现
input_schema中,api_key字段的type被错误地定义为"string",而不是"string"+"format": "api-key"或"x-sensitive": true。
根因与解决方案: Managed Agents 的 Credential Isolation 机制,只保护那些被明确标记为“敏感”的凭证。如果你在input_schema中,把一个 API Key 字段定义为普通的string,Anthropic 就会把它当作普通业务参数,原样记录在 Session Log 的input字段里。这违反了“最小权限”原则。
避坑技巧:
- Schema 即 Policy:
input_schema不仅是数据格式的声明,更是安全策略的声明。任何包含凭证、密码、token 的字段,必须在 schema 中显式标记:properties: api_key: type: "string" # Anthropic 会识别这个注释,自动对其进行脱敏 x-anthropic-sensitivity: "secret" # 或者使用更通用的 OpenAPI v3 标准 # x-sensitive: true - 日志脱敏是最后防线:即使 schema 标记正确,你也应该在你的应用层日志系统(如 ELK Stack)中,配置一个全局的“PII Filter”,对所有日志中的
api_key=、token=、password=等模式进行正则匹配和星号替换。这层防护,能兜住 schema 标记遗漏的漏网之鱼。 - 定期审计 Session Log:建立一个自动化脚本,每周扫描一次所有生产环境的 Session Log,查找
input字段中是否存在未被标记为x-anthropic-sensitivity: "secret"的、长度 > 20 且包含sk-、pk-、api_key等关键字的字符串。一旦发现,立即告警并修正 schema。
5. 价值迁移:当 Runtime 层“归零”,钱流向哪里?
5.1 Trace Store:谁掌握了“Agent 的 DNA”,谁就拥有了未来
当 Managed Agents 这样的 runtime 变成像 Linux 内核一样免费、开源、无处不在的“基础设施”时,真正的护城河,会迅速向上游迁移。其中,最坚硬的一块,就是Trace Store——那个记录了 agent 每一次心跳、每一次呼吸、每一次决策的“DNA 库”。
想象一下,一个大型银行部署了数百个不同业务线的 agent:信贷审批、反洗钱监控、客户服务、投资顾问。每个 agent 每天产生数万条结构化的 trace 事件。这些 trace 里,包含了:
user_intent: 用户的真实意图(被模型解析后的标准化标签,如intent: "apply_for_loan");tool_call_sequence: 工具调用的精确顺序和耗时([{"tool": "credit_score", "latency_ms": 120}, {"tool": "risk_assessment", "latency_ms": 850}]);model_decision_reasoning: 模型在做出关键决策(如“拒绝贷款”)时,所依据的 top-3 最重要证据(["income_ratio > 0.6", "credit_history < 2 years", "employment_status: 'contractor'"]);human_intervention_point: 人工介入的具体节点和原因({"step": "final_approval", "reason": "unusual_funding_source"})。
这些数据,其价值远超“debugging”。它可以用来:
- 精准归因:当一笔坏账发生时,不是去翻几个月前的聊天记录,而是直接查询 trace store,找出所有与此客户相关的 agent 交互,定位是哪个环节的模型判断失误、哪个工具的数据有误、哪个人工审核点放行了不该放行的申请。
- 模型迭代闭环:把
model_decision_reasoning和最终的业务结果(贷款是否违约)关联起来,训练一个“模型可靠性评估器”,动态调整不同 agent 在不同场景下的 confidence threshold。 - 监管合规举证:在面对金融监管机构的问询时,一键导出某次关键决策的完整 trace,证明整个流程符合《公平信贷报告法》(FCRA)的要求,每一个决策都有据可查、可追溯、可复现。
目前市场上,Braintrust、Arize(Phoenix)、LangSmith 三家,正在激烈争夺这个“系统记录者”的位置。它们的竞争焦点,已经不是谁的 UI 更好看,而是谁的 trace schema 更开放、谁的导入导出 API 更强大、谁的跨 runtime 迁移工具更成熟。因为,一旦你的 agent 从 Anthropic Managed Agents 迁移到 AWS AgentCore,你的 trace 数据如果不能无缝迁移,你就失去了过去所有积累的“AI 行为资产”。所以,选择一个 trace store,本质上是在选择你未来十年的 AI 数据主权。我个人的经验是:宁可早期多花 20% 的开发成本,也要确保你的 agent 输出的 trace,严格遵循 OpenTelemetry 的ai.*语义约定。这会让你在未来任何一家 trace store 的迁移中,都拥有绝对的主动权。
5.2 Governance & Policy:从“技术问题”到“采购流程”
当 runtime 层 commoditize,另一个价值高地,就是Governance & Policy。这不再是工程师在 config 文件里写几行max_retries: 3的事,而是上升到了企业采购、法务审核、合规审计的层面。
一个典型的、正在发生的转变是:企业的 CIO/CISO 开始要求,所有 AI agent 的部署,必须满足一套统一的、可审计的政策集(Policy Set)。这套政策集,会包含:
- 数据主权政策:
all_data_processed_by_agent_must_remain_within_region_us_east_1; - 成本管控政策:
no_single_session_can_exceed_$5_in_total_cost; - 安全基线政策:
all_tool_calls_must_be_logged_and_retained_for_7_years; - 伦理审查政策:
any_agent_output_containing_financial_advice_must_be_preceded_by_a_disclaimer。
这些政策,不能再由每个业务团队各自为政地在自己的 agent YAML 里写一遍。它们必须被集中定义、统一发布、强制执行。AWS AgentCore 在 2026 年 3 月 GA 的 Policy Controls,正是为此而生。它允许你在 AWS Organizations 的根 OU 下,定义一个全局的AgentPolicy.json,然后所有下属账户的 AgentCore 实例,都会自动继承并强制执行这些策略。违反策略的 agent,会在execute调用时被直接拦截,并返回一个标准化的PolicyViolationError。
这对开发者意味着什么?意味着你不能再只关注“我的 agent 能不能 work”,还要关注“我的 agent 是否符合公司的 policy”。你的 CI/CD 流水线里,必须加入一个policy-compliance-check步骤,用 AWS 的policy-validatorCLI 工具,扫描你的 agent YAML,确保它没有违反任何已发布的 policy。这已经不是技术问题,而是流程问题、采购问题。谁能提供一套让 CIO 愿意签字、让法务愿意背书、让采购愿意付费的 Governance Platform,谁就抓住了 runtime 归零后,最肥沃的那片土壤。
5.3 Vertical Agent Marketplaces:当“Agent”成为商品
最后,也是最激动人心的价值迁移方向,是Vertical Agent Marketplaces。当 runtime 层变得像水电一样便宜和普及,企业采购的焦点,会从“我需要一个能跑 agent 的平台”,彻底转向“我需要一个能解决我具体业务问题的 agent”。
Salesforce 的 Agentforce ARR 在 2026 年 Q4 达到 8 亿美元,