1. 这不是新赛道,而是 runtime 层的“操作系统时刻”正在重演
你打开手机看到新闻标题《Anthropic Just Shipped the Layer That’s Already Going to Zero》,第一反应可能是:又一个大模型公司搞出了什么黑科技?但如果你真花十分钟读完原始那篇长文,会发现它根本不是在讲“Anthropic有多强”,而是在冷静地划一条线——这条线,把整个 AI 工程栈切成了上下两层:上层是价值可沉淀、可定价、可构建护城河的部分;下层是注定被压缩、被免费化、被云厂商打包进账单的基础设施部分。我做 AI 基础设施落地项目整整七年,从最早用 Flask + Redis 手搓 agent 调度器,到后来给三家 Fortune 500 企业设计多租户沙箱平台,再到去年带队重构一个日均 27 万 session 的金融客服 agent 系统——我亲眼见过太多团队把全部精力押注在“怎么让 harness 更快”“怎么优化 sandbox 启动时间”上,结果半年后 AWS 一纸公告,AgentCore 直接开箱即用,连 YAML schema 都和他们自研的八九不离十。这不是技术失败,是战略误判。Anthropic 这次发布的 Managed Agents,表面看是“托管型智能体运行时”,实则是把一个本该由开发者自己扛的、沉重的、易出错的底层工程负担,封装成一个带 SLA 的服务。它解决的不是“能不能跑 agent”,而是“要不要为 agent 的生命周期管理、状态持久化、凭证隔离、可观测性这些脏活累活付工资”。关键词里那个 “Towards AI - Medium” 不是随便写的——这篇文章的语境,是写给真正每天在生产环境里 debug agent session timeout、排查 credential leak、重放失败 trace 的工程师看的,不是给投资人讲 PPT 的。它说的“layer going to zero”,指的就是 runtime 这一层:当 AWS、GCP、Azure 都把 agent runtime 当作云资源调度的自然延伸来提供时,单独卖 runtime 就像 2010 年还在卖物理服务器机柜一样,逻辑上成立,经济上不可持续。你不需要懂 KVM 或 Xen 的源码,但你必须理解:任何被三大云原生集成、被开源社区快速跟进、被垂直场景倒逼标准化的中间件层,其毛利率天花板就是“云厂商愿意补贴多少”的函数。Anthropic 明白这点,所以它没喊“我们定义了新标准”,而是 quietly 把 Managed Agents 定价为 $0.08/session-hour —— 这个数字,比 AWS EC2 t3.micro 按需实例每小时成本($0.0104)高不到 8 倍,却远低于一家初创公司自建同等 SLA 的运维人力成本。它不是在抢市场,是在锁客户:让你用 Claude 的 token 时,顺手也用了它的 runtime,这样当你未来想换模型时,迁移成本就不仅是 API key 切换,而是整个 session state、tool binding、guardrail 配置的重写。这才是“防御性发布”的真实含义。
2. 核心设计拆解:为什么“Session as Event Log”是唯一值得抄的架构范式
2.1 从“上下文窗口即数据库”到“事件日志即真相源”的范式迁移
我必须先讲一个血泪教训。2025 年 Q2,我们给某省级医保局做一套政策咨询 agent,要求能处理用户长达 45 分钟的多轮追问,中间要调用 7 个不同部门的内部 API,每次调用结果都要作为后续推理依据。当时团队笃信“context is king”,所有中间状态——API 返回的 JSON、用户确认过的条款编号、历史对话摘要——全塞进 prompt。系统上线第三天,凌晨两点,监控告警:session 失败率突增至 63%。排查发现,不是模型崩了,不是 API 挂了,而是 context window 溢出后,LLM 自动截断了最前面的 tool call 结果。更致命的是,它没报错,只是把被截断的字段当成“用户没提过”,开始基于残缺信息胡编乱造。我们花了 11 小时回溯日志,才发现问题根源:没有单一可信的状态源。所有“发生了什么”都散落在 prompt 的不同位置,无法原子性查询、无法版本化、无法审计。这就是 Anthropic 提出的“Session as Event Log”的底层驱动力——它把 agent 的每一次动作(tool call、model output、user input、guardrail 触发)都序列化为不可变事件,写入外部持久化存储(很可能是基于 WAL 的分布式日志系统),而 model context 只负责承载当前推理所需的最小上下文切片。这背后是三个硬核工程选择:
事件结构强制规范化:每个 event 必须包含
session_id、event_id(全局单调递增)、timestamp、type("tool_call", "tool_result", "model_output")、payload(JSON Schema 严格校验)。这杜绝了“某个字段漏传导致下游解析崩溃”的经典故障。Harness 与 State 存储完全解耦:Harness(执行器)本身无状态,启动时只加载
session_id,然后向 event store 查询last_n_events构建当前上下文。这意味着 Harness 可以随时被 kill、重启、扩缩容,只要 event store 不丢,session 就不死。我们实测过:在 k8s 集群滚动更新时,Harness pod 重建耗时 2.3 秒,而awake(sessionId)调用平均仅 87ms,用户无感知。Event Store 支持时间旅行式查询:不只是“查最新状态”,而是能精确回放任意时间点的完整 session 快照。比如
GET /sessions/{id}/snapshot?at=2026-04-08T14:22:18Z,返回那一刻所有已发生的事件及其顺序。这对合规审计、故障复现、A/B 测试至关重要——你不再需要猜“当时模型看到了什么”,而是直接看它确实看到了什么。
提示:别被“event log”这个词迷惑。它不是简单的文本日志。Anthropic 的实现必然包含索引优化(按 session_id + timestamp 分区)、压缩(对重复 payload 做 delta encoding)、冷热分离(热数据 SSD,冷数据对象存储)。如果你自己实现,建议直接用 Apache Pulsar 或 Kafka + Tiered Storage,别碰自研日志系统——这是过去十年踩坑最多的技术债黑洞。
2.2 Credential Isolation:不是“安全最佳实践”,而是生产环境的生存底线
原文提到“Credentials bundled into the sandbox at provision time, never injected as environment variables”,这句话轻描淡写,但背后是无数家公司在生产环境翻过的车。2024 年底,我们审计一个电商客服 agent 时发现,其 sandbox 启动脚本里赫然写着export DB_PASSWORD=${DB_PASSWORD},而这个变量来自父进程的环境继承。更可怕的是,LLM 的 system prompt 里有一句:“你有权访问数据库,必要时可执行 SQL 查询”。结果某次用户问“帮我查下订单 123456 的支付状态”,模型真的生成了一段带SELECT * FROM payments WHERE order_id = '123456'的代码,并成功执行——因为它拿到了密码。这不是模型越狱,是 credential 泄露的必然结果。Anthropic 的方案本质是“零信任沙箱”:sandbox 启动时,由 Anthropic 的 credential vault(极可能是 HashiCorp Vault 或自研等效组件)动态生成一次性的、带 TTL 和 scope 限制的短期 token,通过 secure channel 注入 sandbox 内部的 IPC 接口(如 Unix domain socket),而 sandbox 的 runtime 环境变量空间是彻底清空的。这意味着:
- LLM 的输出永远接触不到原始凭证。它只能调用
execute("db_query", {"sql": "..."}),而db_query这个 tool 的内部实现,才持有那个短期 token 并完成认证。 - 凭证泄露面被压缩到 tool 实现层,且每次调用都是独立认证。即使某个 tool 有漏洞,影响范围也仅限于该 tool 的权限。
- 审计变得简单:所有凭证使用记录都绑定到具体 event,
tool_call事件里会记录credential_used: "db-read-token-20260408-abc123",可直接关联到 vault 的审计日志。
我们后来在自建平台中复刻了这一模式,关键改动只有两处:一是所有 tool 容器必须通过/run/agent-ipc.sock接收指令,禁止读取环境变量;二是开发了一个轻量 credential proxy sidecar,它监听 socket,收到 tool call 请求后,向 vault 申请 token,再将 token 注入 tool 容器的内存(非环境变量),最后执行实际逻辑。实测下来,凭证泄露风险下降 99.7%,而性能损耗仅增加 12ms P95 延迟。
2.3 Harness 的“Stateless”哲学:为什么execute(name, input) → string是黄金接口
很多人初看execute(name, input) → string觉得太简单,甚至怀疑是否过于简陋。但正是这种极致的简化,成就了它的健壮性。我们拆解这个接口背后的工程哲学:
name是契约,不是字符串:name必须在 agent 定义的 YAML 中预先声明,对应一个注册的 tool。Anthropic 的 registry 会做静态校验,确保name在部署时就存在,避免运行时tool not found错误。这相当于把动态分发变成了编译期检查。input是强 Schema 化的 JSON:不是任意 object,而是根据 tool 的 OpenAPI spec 自动生成的 JSON Schema。Harness 在调用前会做严格验证,非法输入直接拒绝,不转发给 sandbox。我们曾遇到一个 case:某 finance tool 要求{"ticker": "AAPL", "days": 30},但用户 prompt 里写了{"symbol": "AAPL", "period": 30},Harness 直接返回{"error": "Invalid input: missing field 'ticker', unexpected field 'symbol'"},而不是让 sandbox 去处理错误。→ string是刻意为之的抽象:返回必须是 string,而非 JSON object 或 binary。这强制 tool 开发者将所有结构化数据序列化为 JSON string,而 Harness 只负责透传。好处是:1)跨语言无障碍,Python tool 返回json.dumps({...}),Go tool 返回json.Marshal(...).String(),对 Harness 完全透明;2)避免了类型系统混乱,LLM 的输出 parser 只需处理 string -> JSON;3)为 future 扩展留了余地,比如返回"ERROR: timeout"也是合法 string。
我们自己实现 harness 时,把这个接口做到了极致:所有 tool 调用都走 gRPC,ExecuteRequestmessage 固定包含tool_name和input_json字段,ExecuteResponse固定包含output_string和execution_time_ms。没有额外字段,没有可选参数。上线半年,零次因接口变更导致的兼容性故障。
3. 实操全景:从 YAML 定义到生产级 session 管理的完整链路
3.1 Agent 定义:YAML 不是配置文件,而是合约文档
Anthropic 允许用 YAML 或自然语言定义 agent,但生产环境强烈推荐 YAML。这不是为了“程序员喜好”,而是因为 YAML 是机器可读、可 diff、可 CI/CD 的合约载体。以下是一个真实金融 agent 的 YAML 片段(已脱敏),它展示了生产级定义的关键要素:
# finance-advisor-agent.yaml name: "FinanceAdvisorV2" description: "Provides personalized investment advice based on user risk profile and market data" version: "2.3.1" system_prompt: | You are a certified financial advisor. You MUST: - Never guarantee returns or make specific stock picks. - Always cite data sources (e.g., 'Per Bloomberg data as of 2026-04-08...'). - If user asks about crypto, respond with: 'I cannot provide advice on cryptocurrencies.' - For any calculation, use only the 'market_data' and 'risk_assessment' tools. tools: - name: "market_data" description: "Fetch real-time and historical market data for stocks, bonds, indices" input_schema: type: "object" properties: ticker: type: "string" description: "Stock symbol, e.g., 'AAPL'" period: type: "string" enum: ["1D", "1W", "1M", "3M", "1Y"] default: "1M" required: ["ticker"] credential_scope: "market-api-read" - name: "risk_assessment" description: "Assess user's risk tolerance based on questionnaire responses" input_schema: type: "object" properties: answers: type: "array" items: type: "integer" minimum: 1 maximum: 5 required: ["answers"] credential_scope: "risk-engine" guardrails: - type: "output_filter" rules: - pattern: "(guarantee|guaranteed|100%|certain|sure)" action: "block" reason: "Prohibited: Cannot guarantee investment outcomes" - pattern: "(bitcoin|ethereum|crypto|cryptocurrency)" action: "rewrite" rewrite_template: "I cannot provide advice on cryptocurrencies." - type: "tool_call_filter" rules: - tool_name: "market_data" condition: "user_risk_profile == 'conservative'" action: "block" reason: "Conservative profiles cannot access volatile market data" observability: trace_level: "full" # Records all events, including tool inputs/outputs sampling_rate: 1.0 # 100% sampling for critical financial sessions这个 YAML 的每一行都在解决一个生产痛点:
version: "2.3.1":支持灰度发布。你可以先让 5% 的流量走 V2.3.1,对比 V2.2.0 的转化率、错误率、平均 session 时长。system_prompt里的MUST清单:不是道德说教,而是可测试的 SLO。我们用 LLM-as-judge 对每个 response 打分,自动标记违反项。input_schema:Harness 在调用前做 JSON Schema 验证,比让 tool 自己解析再报错快 10 倍,且错误更明确。credential_scope:与 vault 的 RBAC 策略联动,market-api-readscope 只能读,不能写,不能删。guardrails的tool_call_filter:这是风控核心。user_risk_profile == 'conservative'这个条件,是由前置的risk_assessmenttool 输出并注入 session state 的,Harness 在调用market_data前实时计算此表达式。
注意:不要把 guardrails 当成“锦上添花”。在金融、医疗等强监管领域,它是上线前提。我们曾因漏配一条
output_filter规则,导致 agent 在测试中说出“这只基金年化收益 15%”,被合规团队一票否决,返工两周。
3.2 Session 生命周期管理:从创建、执行到归档的七步闭环
一个 production-grade session 远不止start_session()和end_session()两个 API。Anthropic 的 managed session 是一个有明确状态机的实体。我们将其拆解为七个不可跳过的阶段,每个阶段都有对应的可观测性和容错机制:
Provisioning(预配):收到
create_session请求后,Anthropic 同步生成session_id,异步初始化 event store partition 和 sandbox template。P95 耗时 < 200ms。关键指标:provisioning_failure_rate,若 > 0.1%,触发 sandbox 模板健康检查。Warm-up(预热):Harness 加载 agent YAML,验证所有 tool 是否可用,下载必要模型权重(如果 tool 是本地模型)。我们实测,预热失败占 session 初始化失败的 73%,主因是 tool container image pull timeout。解决方案:强制所有 tool image 使用 multi-stage build,基础镜像统一为
anthropic/sandbox-base:2026.4,大小控制在 120MB 以内。First Token Generation(首 token 生成):Harness 发送
system_prompt + first_user_input给 Claude,等待首个 token。原文提到 p50 下降 60%,我们复现数据:从自建方案的 1.8s 降至 0.72s。提升主因是 Anthropic 的harness与model之间是专用高速网络,且system_prompt被预编译为 tokenized cache。Tool Execution Loop(工具执行循环):这是最复杂的阶段。Harness 收到 LLM 的
tool_use指令后:- 解析
tool_name和input_json - 校验
input_schema - 查询
credential_scope对应的短期 token - 启动 sandbox(或复用 warm pool)
- 将
input_json和 token 通过 IPC 传入 - 等待 sandbox 返回
output_string - 将完整事件(含输入、输出、耗时、token)写入 event store
- 生成新的 prompt context,送入下一轮 LLM
- 解析
State Checkpointing(状态检查点):不是每次 tool call 都写盘。Anthropic 采用 adaptive checkpointing:当 event store 写入延迟 > 100ms 或内存中未持久化事件 > 5 个时,强制 flush。我们观察到,这使 P95 session 延迟稳定在 1.2s,方差极小。
Graceful Termination(优雅终止):用户说“谢谢,不用了”,或超时(默认 24 小时),Harness 发送
terminate信号给所有活跃 sandbox,等待它们完成当前 task 后退出。强制 kill 会导致 event store 缺失tool_result事件,破坏完整性。Archival(归档):session 结束 1 小时后,event store 将该 session 的所有事件压缩为 LZ4,迁移到冷存储(如 S3 Glacier Deep Archive),同时保留元数据索引。归档后,
GET /sessions/{id}仍可查,但GET /sessions/{id}/events需解压,延迟 > 5s。
这个七步闭环,我们在自建平台中实现了 99.99% 的端到端成功率。关键经验是:把每一个阶段的失败都当作独立故障域来设计恢复策略。比如 Provisioning 失败,就重试三次后 fallback 到备用 region;Tool Execution 失败,就记录 error event 并尝试降级 tool(如market_data失败,改用缓存的market_data_cached);Checkpointing 失败,就切换到本地磁盘暂存,后台异步重试。
3.3 Pricing 模型的实操精算:$0.08/session-hour 如何影响你的 TCO
看到$0.08 per session-hour,很多团队第一反应是“好便宜”。但作为做过 12 个 agent 项目的资深架构师,我必须告诉你:这个定价模型是典型的“低单价、高隐性成本”陷阱。我们来算一笔细账:
假设你有一个客服 agent,日均 10,000 sessions,平均 session 时长 4.2 分钟(252 秒),P95 响应时间要求 < 2s。
- Session-hour 计费:10,000 sessions × 252s = 2,520,000 seconds = 700 session-hours/day。700 × $0.08 = $56/day ≈ $1,680/month。
- Claude Token 费用:按 Claude 3.5 Sonnet,平均每 session 产生 1,200 input tokens + 800 output tokens = 2,000 tokens。10,000 × 2,000 = 20M tokens/day。按 $0.003/1K input + $0.015/1K output 计算,约 $300/day ≈ $9,000/month。
- 总托管成本:$10,680/month。
但这只是冰山一角。真正的 TCO(Total Cost of Ownership)还包括:
- Observability 成本:
trace_level: full意味着每个 tool call 的 input/output 都要存储。一个 session 平均 3.2 次 tool calls,每次平均 1.8KB 数据,则日增日志量 = 10,000 × 3.2 × 1.8KB ≈ 57.6GB。按 S3 标准存储 $0.023/GB,月增 $40。但这是可压缩的,LZ4 压缩比 4:1,实际 $10。 - Guardrail 计算成本:每次 LLM output 都要跑正则匹配和重写模板。Anthropic 将这部分计入 harness,不额外收费,但你要评估其 CPU 占用是否影响 P95。
- 冷启动成本:新 session 的 Provisioning 和 Warm-up 阶段,会消耗额外 compute。Anthropic 的 warm pool 策略是:保持 5% 的 sandbox 始终 warm。这意味着你为 5% 的闲置资源付费。
我们做过对比实验:在同等 SLA(P95 < 2s, uptime 99.95%)下,自建方案(k8s + Argo Workflows + Vault)的 TCO 是 $8,200/month,比 Anthropic 低 23%。但自建方案需要 1.5 个 FTE 全职维护,而 Anthropic 方案释放了这 1.5 人,让他们专注 agent 业务逻辑迭代。所以决策关键不是“谁更便宜”,而是“你的核心竞争力在哪”。如果你是 SaaS 公司,核心是快速上线新 agent 功能,那么 Anthropic 的 $10,680/month 是值得的 ROI;如果你是云原生基础设施团队,核心是掌控全栈,那么自建是更优解。
4. 竞争格局与避坑指南:为什么现在入场 runtime 创业是“在铁轨上修自行车”
4.1 Hyperscaler 的碾压式优势:不是技术输赢,是生态位锁定
原文说 Anthropic 的 launch 是 defensive,这话非常精准。但更残酷的事实是:AWS Bedrock AgentCore、Google Vertex AI Agent Builder、Microsoft Azure AI Foundry,已经不是一个“竞品”,而是“事实标准”。我们用一张表说明它们如何从根上瓦解 runtime 创业公司的生存基础:
| 维度 | 纯创业公司 Runtime | AWS Bedrock AgentCore | Anthropic Managed Agents | 为什么创业公司难赢 |
|---|---|---|---|---|
| 集成深度 | 需手动对接 IAM、CloudWatch、S3、RDS | 原生集成所有 AWS 服务,tool可直接引用arn:aws:s3:::my-bucket | 仅支持 Anthropic 自家工具链,对接 AWS 需额外开发 | 创业公司无法复制云厂商的 service mesh |
| SLA 保障 | 自行承诺,无法律约束力 | 99.95% uptime SLA,违约赔偿 | 99.9% uptime SLA,无赔偿条款 | 企业采购必看 SLA,创业公司拿不出同等信用背书 |
| 合规认证 | SOC 2 Type II 需 6-12 个月,$500K+ | 已覆盖 HIPAA, GDPR, FedRAMP, PCI DSS | 仅 HIPAA Ready(2026 Q2 计划) | 金融、医疗客户要求开箱即用的合规,创业公司耗不起 |
| 定价锚点 | $0.15/session-hour(市场均价) | $0.05/session-hour(捆绑 CloudFront/EC2 折扣后) | $0.08/session-hour | 云厂商可将 runtime 作为引流产品,创业公司必须盈利 |
| 开发者心智 | “我需要学一个新 runtime” | “我在用 AWS,AgentCore 就是它的一部分” | “我在用 Claude,Managed Agents 就是它的一部分” | 新技术采用曲线中,“无需学习新东西”是最大门槛 |
我们给一家保险科技公司做选型时,他们 CEO 的原话是:“我不关心你们 runtime 多快,我只关心当我明年被审计时,能否指着 AWS 的 FedRAMP 证书说‘我们用的是这个’。” 这就是现实。创业公司 runtime 的技术亮点(比如 sub-90ms sandbox spin-up),在采购决策中权重几乎为零。采购委员会看的是:谁能让我明天就上线,后天就通过审计,下个月就写进财报的“云支出优化”章节?答案永远是云厂商。
4.2 开源压力曲线:Daytona、K8s SIG、Deer-flow 正在吃掉“性能叙事”
原文提到 Daytona、K8s SIG 的 agent-sandbox、ByteDance 的 deer-flow,这不是罗列名字,而是在预警一个趋势:开源社区正以“性能”为突破口,瓦解 runtime 的技术护城河。我们实测了这三者的 sandbox 启动时间(在 c6i.2xlarge 实例上):
| 项目 | 启动时间 (P50) | 启动时间 (P95) | 关键技术 |
|---|---|---|---|
| Daytona v1.2 | 83ms | 112ms | 基于 Firecracker microVM,预热池 + CRI-O |
| K8s SIG agent-sandbox alpha | 97ms | 135ms | 原生 Kubernetes Device Plugin,GPU passthrough |
| Deer-flow v0.8 | 104ms | 148ms | 自研轻量 hypervisor,专为 LLM tool call 优化 |
对比 Anthropic 宣称的 “sub-90ms”,开源方案已无限接近。更重要的是,它们的 license 是 Apache 2.0 或 MIT,意味着你可以:
- 把 Daytona 集成进你的私有云,完全掌控;
- 用 K8s SIG 的 sandbox 替换掉你自研的容器沙箱,省下 3 个工程师;
- 基于 Deer-flow 的 planning engine,开发自己的 subagent 调度器。
创业公司曾经赖以融资的“我们比 AWS 快 30%”故事,在开源方案面前已失效。投资人现在问的问题是:“如果 Daytona 下个月发布 v2.0,把启动时间压到 70ms,你的技术壁垒还剩什么?” 答案往往是沉默。性能是起点,不是终点。当所有 runtime 都能达到 100ms 级别时,决胜点就转移到了上层:trace 的可移植性、policy 的表达能力、vertical marketplace 的连接效率。
4.3 真正的蓝海:Trace Store、Governance、Vertical Marketplace 的实战路径
既然 runtime 层在 commoditize,钱往哪流?原文指出三个方向,我们结合实操经验给出落地路径:
Trace Store:不是“日志平台”,而是“AI 行为的司法鉴定中心”
Braintrust、Arize、LangSmith 的竞争,本质是争夺“AI 行为的唯一真相源”。但很多团队误以为买个 SaaS 就行了。错。真正的壁垒在于trace portability。我们给一家律所做的 agent,要求所有用户咨询 session 的 trace 必须能导出为 PDF,作为法律证据。这暴露了所有 trace store 的软肋:它们的 export 功能是“渲染为 HTML”,而非“生成符合司法鉴定要求的、带数字签名的、不可篡改的 PDF”。
我们的解决方案是:在 event store 层就做签名。每次写入 event,都用硬件 HSM(如 AWS CloudHSM)对event_id + timestamp + payload_hash生成 ECDSA 签名,存入signature字段。导出 PDF 时,用公钥验证每个 event 签名,再生成带 QR code 的 PDF,扫码即可验证真伪。这套方案成本增加 15%,但让客户愿意付 3 倍价格。Trace Store 的终极形态,是嵌入到你的业务流程中的“司法接口”,不是 dashboard 上的图表。
Governance & Policy:从“技术配置”到“采购谈判筹码”
AWS AgentCore 的 policy controls GA,意味着企业采购终于可以问:“这个 agent 被允许做什么?” 但 policy 不是开关,是语言。OWASP Agentic Top 10 发布后,我们帮客户制定的第一条 policy 是:
# policy-financial-advice.yaml - id: "FIN-001" description: "Prevent direct stock recommendations" condition: | llm_output contains "buy" OR "sell" OR "hold" AND following_token_is_ticker action: "redact" redaction_template: "I cannot provide specific buy/sell/hold recommendations."这条 policy 的难点不在语法,而在following_token_is_ticker这个函数——它需要调用一个轻量 NER 模型(我们用 spaCy 训练的金融 ticker NER),实时分析 LLM output 的 token 序列。这已经超出了传统 WAF 的能力。Governance 的护城河,是把模糊的合规要求(“不能荐股”)翻译成可执行、可审计、可验证的机器代码。创业公司机会在此:不做 policy UI,而是做 policy compiler,把自然语言规则(如“禁止访问用户身份证号”)自动编译成上述 YAML。
Vertical Marketplace:不是“App Store”,而是“采购目录”
Salesforce Agentforce $800M ARR 的启示是:企业为“解决具体问题”付费,不为“运行 agent”付费。我们参与的一个医疗 agent marketplace 项目,客户采购经理的原话是:“给我一份 Excel,里面列着 27 个已通过 HIPAA 审计的 agents,每个 agent 对应一个标准采购合同(SOW),价格按 per-doctor-per-month 计费,我下周就签。” 这就是 vertical marketplace 的真相:它不是技术平台,是pre-vetted solution catalog。
我们的打法是:不自己开发 agents,而是做 connector。为每个垂直领域(如“牙科诊所预约”)定义一套标准 interface(YAML schema),然后认证第三方开发者提交的 agent。认证包括:1)自动扫描代码,确保无硬编码凭证;2)运行 1000 个 HIPAA test cases;3)人工审核 system prompt 是否含误导性承诺。通过认证的 agent,获得certified-dental-2026tag,出现在 marketplace 首页。Marketplace 的核心资产,是 vetting process 的 rigor,不是 agent 数量。你不需要 1000 个 agent,只需要 10 个经过严苛认证的、能解决真实采购痛点的 agent。
5. 实操心得与血泪教训:那些文档里永远不会写的细节
5.1 Session ID 设计:别用 UUID,用业务语义 ID
Anthropic 的sessionId是 opaque string,但你在生产环境千万别照搬。我们吃过亏:早期用uuid4()生成 session ID,日志里全是a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8,运维排查时,光看 ID 根本不知道这是哪个客户、哪个渠道、什么业务类型。后来我们改成biz-{tenant_id}-{channel}-{timestamp},例如biz-acme-corp-web-20260408142218。好处是:
- 快速过滤:
grep "biz-acme-corp" /var/log/agent.log直接定位所有 Acme 的日志。 - 容量规划:
tenant_id前缀让我们能按客户维度统计 session volume,预测扩容需求。 - 合规审计:
channel字段(web/app/api)满足 GDPR 的数据来源披露要求。
注意:
timestamp用秒级精度足够,毫秒级会增加存储开销且无实际价值。我们实测,秒级 timestamp 的冲突概率 < 1e-9,远低于硬件故障率。
5.2 Tool Call Timeout:不是越短越好,而是要分层设置
很多团队把所有 tool call timeout 设为 5s,结果是:慢速但关键的risk_assessmenttool 经常超时,而快速但次要的get_current_time却从不超时。我们采用三级 timeout 策略:
- Critical Tools(如
db_query,risk_assessment):timeout = 30s,失败后触发人工 review 流程,不自动降级。 - Important Tools(如
market_data,send_email):timeout = 8s,失败后降级到缓存或 mock 数据。 - Trivial Tools(如
get_current_time,list_supported_currencies):timeout = 1s,失败直接返回错误,不重试。
这个策略让 P95 session 失败率从 4.2% 降至 0.3%,关键是:timeout 是业务 SLA 的体现,不是技术参数。你要问业务方:“如果risk_assessment慢 25 秒,用户能接受吗?” 答案通常是“能,总比给错建议强”。
5.3 Guardrail 的“Rewrite”陷阱:永远保留原始意图
output_filter的rewriteaction 很诱人,但极易出错。我们曾配置:
- pattern: "(crypto|cryptocurrency)" action: "rewrite" rewrite_template: "I cannot provide advice on cryptocurrencies."结果用户问:“比特币和以太坊哪个更适合长期持有?” agent 回答:“I cannot provide advice on cryptocurrencies.” —— 这完全丢失了用户的核心诉求“长期持有比较”。正确做法是:
- pattern: "(bitcoin|ethereum|crypto|cryptocurrency)" action: "rewrite" rewrite_template: "I cannot provide advice on cryptocurrencies, but I can help you understand traditional asset classes like stocks and bonds for