Agent Runtime 解耦:从 Context Window 到事件日志的工程演进
1. 这不是新赛道,是 runtime 层的“临终告别式”
上周二(4月8日),Anthropic 宣布 Claude Managed Agents 进入公开测试阶段。新闻稿里写着“十倍提速”“Notion 和 Asana 已接入”“沙箱执行+会话快照+凭证托管由 Anthropic 全权负责”,技术博客则用了一整段 OS 类比:把 session 比作持久化事件日志、harness 比作无状态执行器、sandbox 比作可批量调度的 cattle——听起来像在重写 AI 基础设施的底层契约。
但如果你真去翻了 Anthropic 的 YAML 配置文档、试跑了他们的/v1/agents/run接口、甚至扒过他们 sandbox 启动时的 containerd 日志,就会发现一件事:这根本不是什么“新范式”,而是一套打磨得非常扎实、但定位极其清晰的托管型 agent 运行时(managed agent runtime)。它不碰模型训练,不改推理引擎,不介入 prompt 编排逻辑,也不替代 LangGraph 或 CrewAI 这类框架——它只做三件事:稳稳托住 agent 的每一次调用,安全隔离每一次工具执行,完整记录每一步决策痕迹。
关键词里那个 “Towards AI - Medium” 不是随便写的。这篇文章最初就发在 Towards AI 的 Medium 专栏上,作者 Gaurav Yadav 是个常年泡在 infra 一线的工程师,不是 PR 写手。他写这篇的真正意图,不是帮 Anthropic 做 launch 宣传,而是给所有正在自建 agent 系统的团队敲一次警钟:你花三个月搭起来的 session 管理模块,很可能下周就被 AWS 的 AgentCore 微VM 直接碾过去;你引以为傲的 credential 注入方案,可能刚上线就被一个 prompt injection 拿走 API Key;你精心设计的 context 回填策略,大概率撑不过一次连续 35 分钟的多跳检索任务。
我去年带团队做过一个金融尽调 agent,核心逻辑是:从 PDF 抽关键条款 → 调用 Bloomberg API 查公司股权结构 → 对比工商变更记录 → 生成风险摘要。我们当时把 session state 全塞进 context window,靠 sliding window + summary compression 维持。结果第 27 分钟,agent 在调用完第 4 个外部工具后,开始把“2023 年 6 月股东变更”错记成“2022 年 6 月”,接着在生成摘要时把“实控人未变更”写成了“实控人已变更”。更糟的是,我们根本没法回溯——没有 event log,没有 timestamped tool input/output,只有最后一条 hallucinated response。重跑?不行,Bloomberg 接口有 rate limit,PDF 解析耗时 90 秒,整个链路不可重放。最后只能人工核对,花了 6 小时补全。
Anthropic 的 session-as-event-log 不是炫技,是把我们踩过的坑,用工程语言标准化、产品化、计费化了。它背后的真实信号只有一个:runtime 层正在快速失去定价权。不是因为 Anthropic 做得不好,恰恰是因为它做得太好——好到让这个层本身变得不再稀缺。
提示:别被“Managed Agents”这个名字带偏。它不是 agent 本身,而是 agent 的“操作系统内核”。就像你不会说“Windows 是一个 Word 文档”,你也不会说“Managed Agents 是一个客服 agent”。它是一个基础设施组件,不是应用产品。
2. 架构解剖:为什么 session 必须脱离 context window?
2.1 传统 agent 的“内存天花板”困局
几乎所有早期 agent 框架(包括我们自己写的第一个版本)都默认把 session state 存在 LLM 的 context window 里。理由很朴素:简单、可控、无需额外存储。你只要把上一轮的 system prompt + user message + assistant response + tool call result 全部拼成字符串喂给模型,它就能“记住”上下文。但这个设计在真实业务场景中,会在三个维度上迅速崩塌:
时间维度:一个典型销售线索跟进 agent,平均要经历 7–12 轮交互(确认需求→查 CRM→调报价系统→比竞品→生成方案→预约 demo→同步销售主管)。按 Claude 3.5 Sonnet 的 200K token 上限算,每轮平均消耗 1200 tokens(含 tool output JSON),12 轮就是 14.4K tokens。看起来绰绰有余?错。实际中,tool output 往往是带格式的 HTML 表格、嵌套 JSON、甚至 base64 图片编码,单次调用轻松突破 8K tokens。我们实测过,当连续调用 5 次 Salesforce API 返回的 Account 对象(含 nested Contacts + Opportunities)后,context 已占满 63%。再跑两轮,就开始丢数据。
空间维度:context 不是线性增长,而是指数级膨胀。因为每次新输入,模型不仅要读取原始 prompt,还要重读全部历史交互 + 所有 tool 结果。LLM 的 attention 机制对长 context 的处理效率会断崖式下降。我们用
torch.cuda.memory_allocated()监控过推理过程:当 context 从 50K 升到 150K,GPU 显存占用增加 2.3 倍,但 p95 首 token 延迟从 820ms 涨到 2.1s。这不是模型变慢,是 KV cache 太大导致 memory bandwidth 成瓶颈。可靠性维度:最致命的是——它没有故障边界。context overflow 不会抛出
ContextOverflowError,它只会静默截断最早的部分。模型看到的是一段“被剪辑过的历史”,但它不知道自己被剪辑了。于是它基于残缺信息做推理,输出看似合理实则错误的结果。这种 failure mode 极难 debug:日志里没有报错,metrics 看不出异常,只有业务侧反馈“为什么上个月的合同金额算错了?”——而你翻遍所有 log,只看到最后一句:“根据历史数据,最终报价为 $1,280,000”。
Anthropic 的 session-as-event-log 正是针对这三点设计的。它的核心不是“存更多”,而是“存得对”。
2.2 Anthropic 的三层解耦:session / harness / sandbox
Anthropic 把整个 runtime 拆成三个独立生命周期的组件,每个组件解决一个明确问题:
Session(会话层):这是唯一有状态的组件。它不运行代码,不调用工具,只做一件事——持久化记录。每次 agent 启动时,
awake(sessionId)会从 S3 兼容对象存储(内部用的是自家定制的分布式 blob store)拉取完整的 event log,按时间戳排序后,只把最近 N 条(默认 50)作为 context 输入给模型。其余历史全部存档,可随时 query。event log 格式是严格定义的 protobuf:message SessionEvent { string session_id = 1; int64 timestamp_ms = 2; EventType event_type = 3; // TOOL_CALL, TOOL_RESULT, MODEL_OUTPUT, GUARDRAIL_VIOLATION string tool_name = 4; string tool_input = 5; string tool_output = 6; string model_response = 7; map<string, string> metadata = 8; // e.g., "step_id": "sales-lead-001" }关键点在于:session 层完全不参与计算。它只是数据库。这意味着你可以用任何语言写查询服务(我们用 Python FastAPI + ClickHouse 做了实时分析看板),不影响 agent 运行时稳定性。
Harness(执行层):这是无状态的“大脑”。它只做三件事:解析模型输出中的
<tool_call>tag → 序列化参数 → 调用execute(tool_name, input_json)→ 等待返回 → 把结果写入 session log。execute()是个纯 HTTP 接口,Anthropic 内部用 gRPC over QUIC 实现,但对外暴露的是 RESTful endpoint。重点是:harness 从不持有 credential,不解析 tool output,不决定下一步该调什么。它就是一个协议转换器。所以即使 harness 进程 crash,只要 session log 完整,重启后awake(sessionId)就能无缝续跑。我们压测过:kill harness pod 后 3.2 秒内恢复,p95 延迟仅增加 117ms(来自重新建立 QUIC 连接)。Sandbox(沙箱层):这是最硬核的安全层。Anthropic 没用 Docker,而是基于 Firecracker microVM 自研了轻量级 sandbox runtime。每个 tool call 都启动一个独立 microVM,CPU/memory/fs 全隔离,启动时间 < 180ms(官方数据,我们实测 162–194ms)。credential 注入方式是:在 microVM 启动前,由 control plane 将加密后的 credential bundle(AES-256-GCM)注入 VM 的 virtio-rng 设备,sandbox 内的 tool 进程通过
/dev/hwrng读取并解密。credential 永远不会以环境变量、文件、或命令行参数形式出现在 sandbox 内。我们做过渗透测试:用ps aux、env、cat /proc/*/environ全部查不到任何 token 字符串。这是真正的“零信任注入”。
这三层解耦带来的直接好处是:你可以单独升级任意一层。比如 Anthropic 下周发布新版本 harness,支持 streaming tool output,你只需改一行 config(harness_version: "2.3.0"),不用动 session schema,也不用重写 sandbox image。这正是 OS 类比的精髓——抽象出稳定接口,让上层自由演进。
2.3 为什么 credential 隔离必须做到“物理级”?
很多人觉得“把 API Key 放 environment variable 里加个readonly就够安全了”。这是最大的认知误区。LLM 不是程序,它是概率引擎。它不“读取”环境变量,它“采样”文本。只要 prompt 里出现过类似curl -H "Authorization: Bearer ${API_KEY}"的模式,模型就可能在输出中复现这个 pattern,哪怕你没让它调 curl。
我们真遇到过这事。一个客户 agent 被要求“用 GitHub API 获取仓库 star 数”,我们把GITHUB_TOKEN注入 sandbox 环境变量,并在 system prompt 里写:“你只能用提供的 GitHub Token 调用 API”。结果 agent 在第 3 轮输出里,直接写了:
curl -H "Authorization: Bearer ghp_abc123def456..." https://api.github.com/repos/anthropics/claude/stargazersToken 被完整泄露。原因很简单:训练数据里有海量 GitHub API 教程,模型学到了这个 pattern,而你的 prompt 没法 100% 约束它的采样空间。
Anthropic 的 microVM + virtio-rng 方案,本质是把 credential 从“软件可见域”移到了“硬件可信域”。sandbox 进程拿到的是解密后的明文 credential,但它运行在隔离的 microVM 里,无法与 host 通信,也无法被其他进程窥探。这和手机 Secure Enclave、Intel SGX 是同一哲学:把最敏感的东西,交给最不可信的环境里最可信的硬件来保护。
注意:不要试图用 Hashicorp Vault 的 sidecar 模式模仿这个效果。sidecar 仍是容器内进程,仍可通过
/proc文件系统被读取。microVM 是真正的硬件级隔离,这是云厂商才能玩得起的 game。
3. 实操落地:从零部署一个生产级 Claude Agent(含避坑清单)
3.1 准备工作:账号、配额、网络策略
在 Anthropic 控制台开通 Managed Agents 服务前,必须确认三件事:
Billing Account 绑定:Managed Agents 计费独立于 Claude API。$0.08/session-hour 是 runtime 费用,token 费用另计。我们建议开一个专用 billing account,设置 $500/月硬限额,避免测试期意外超支。控制台里找不到“Managed Agents Quota”入口?它藏在Billing → Usage Reports → Filter by Service → "Claude Managed Agents"。首次开通后,系统默认给 10 个并发 session 配额,需手动提工单申请提升(我们提了 3 次才批到 100,理由要写清楚:“支撑 5 个 SaaS 客户的 onboarding agent,峰值并发约 85”)。
VPC Endpoint 配置(关键!):如果你的 tool endpoints(如内部 CRM、ERP)在私有 VPC 内,不能依赖 public internet 调用。Anthropic 的 sandbox 默认无公网出口,且不支持 VPC Peering。正确做法是:在你的 VPC 内创建一个PrivateLink Endpoint Service,将 tool API 的 NLB 挂载上去,然后在 Anthropic 控制台的Agent Settings → Network Configuration中填写该 endpoint 的 DNS 名(格式:
com.amazonaws.vpce.[region].[id].vpce-svc-[hash])。我们踩过坑:用 ALB 替代 NLB,结果 sandbox 调用超时——ALB 不支持 PrivateLink 的 connection stickiness,导致 session 中断。Tool Schema 定义规范:Anthropic 要求所有 tool 必须用 OpenAPI 3.0.3 YAML 定义,且有两条硬限制:
requestBody.content["application/json"].schema必须是object类型,不能是string或array;responses."200".content["application/json"].schema必须包含type: object且至少有一个 required field。
错误示例(会被拒绝):
responses: "200": content: application/json: schema: type: string # ❌ Anthropic 拒绝正确写法:
responses: "200": content: application/json: schema: type: object properties: status: type: string data: type: object required: [status, data] # ✅ 必须有 required
3.2 YAML 配置详解:不只是“写个 prompt”
Anthropic 的 agent 定义不是简单的 system prompt,而是一个结构化配置。以下是我们生产环境用的 finance-agent.yaml(已脱敏),逐行解释关键字段:
# finance-agent.yaml name: "finance-research-agent" description: "Researches company financials and generates investment memos" version: "1.2.0" # === SYSTEM PROMPT SECTION === system_prompt: | You are a senior equity research analyst at a Tier-1 investment bank. Your task is to generate comprehensive investment memos for public companies. Always cite sources. Never hallucinate numbers. If data is missing, say so. # === TOOLS SECTION === tools: - name: "bloomberg-fundamentals" description: "Fetches latest financial statements (income statement, balance sheet, cash flow) from Bloomberg Terminal API" openapi_spec_url: "https://api.yourcompany.com/openapi/bloomberg.yaml" # credential binding: this links to the vault entry created in step 2 credential_binding: vault_path: "secret/finance/bloomberg" key_mapping: api_key: "BLOOMBERG_API_KEY" client_id: "BLOOMBERG_CLIENT_ID" - name: "sec-edgar-search" description: "Searches SEC EDGAR database for 10-K, 10-Q filings" openapi_spec_url: "https://api.yourcompany.com/openapi/sec.yaml" credential_binding: vault_path: "secret/finance/sec" key_mapping: api_token: "SEC_API_TOKEN" # === GUARDRAILS SECTION === guardrails: # blocks any output containing credit card patterns (even if hallucinated) pii_detection: enabled: true patterns: - "credit_card_number" - "ssn" # prevents tool calls to non-finance domains domain_restriction: enabled: true allowed_domains: - "bloomberg.com" - "sec.gov" - "yourcompany.com" # === SESSION CONFIGURATION === session_config: # max 8 hours, but we cap at 2h for cost control max_duration_minutes: 120 # auto-purge logs after 90 days (compliance requirement) retention_days: 90 # critical: enable event log export to our internal ClickHouse event_log_export: enabled: true destination: type: "clickhouse" host: "ch-internal.yourcompany.com" port: 8123 database: "ai_logs" table: "agent_events" # === DEPLOYMENT CONFIG === deployment: # production traffic only goes to this version production_version: "1.2.0" # canary rollout: 5% of sessions get v1.3.0-beta canary_config: enabled: true percentage: 5 version: "1.3.0-beta"实操心得:credential_binding.vault_path不是随便写的路径。它必须和你在 Anthropic Vault 中创建的 secret path 完全一致。Vault 的 secret 创建方式是:
# 使用 Anthropic CLI(非 AWS CLI!) anthropic vault create \ --path "secret/finance/bloomberg" \ --data '{"BLOOMBERG_API_KEY":"xk9a...","BLOOMBERG_CLIENT_ID":"cli_123..."}' \ --ttl "720h" # 30天自动轮换如果路径写错,agent 启动时会报CredentialNotFound,但 error message 里不会告诉你具体哪个 path 错了——它只会说Failed to resolve credentials for tool bloomberg-fundamentals。我们花了 3 小时 debug,最后发现是secret/finance/bloomberg写成了secrets/finance/bloomberg(多了 s)。
3.3 本地开发调试:绕过 sandbox 的“影子模式”
线上 debug agent 是地狱级体验:每次改一行 prompt,都要anthropic agents deploy→ 等 2 分钟 build → 触发 test session → 查 CloudWatch Logs → 发现 typo → 重来。Anthropic 提供了--local-mode开关,但文档里没说怎么用。真相是:
安装 Anthropic CLI 时,必须加
--with-local-runtimeflag:pip install anthropic-cli[local]本地运行时,它会启动一个轻量级 harness(基于 Rust tokio),但不启动 sandbox。所有 tool call 会转成 HTTP 请求发到你本地 mock server。我们用 Python httpx 写了个
tool-mock-server.py:from fastapi import FastAPI, Request import json app = FastAPI() @app.post("/bloomberg/fundamentals") async def mock_bloomberg(request: Request): body = await request.json() # return fake but structurally valid response return { "symbol": body.get("ticker", "AAPL"), "income_statement": { "revenue": 383285000000, "net_income": 99803000000 } } # 启动:uvicorn tool-mock-server:app --host 0.0.0.0 --port 8000在 agent YAML 里,把 tool 的
openapi_spec_url改成http://localhost:8000/openapi.yaml,然后:anthropic agents run \ --config finance-agent.yaml \ --local-mode \ --mock-tool-endpoint http://localhost:8000
这样,你可以在 VS Code 里打断点、print 变量、实时看模型输入输出,debug 效率提升 5 倍。注意:--local-mode下 guardrails 不生效,session log 不写入云端,纯本地模拟。
3.4 生产监控:不止看成功率,要看“决策链健康度”
Anthropic 控制台只提供基础 metrics:session_success_rate、p95_latency_ms、token_usage_per_session。这些远远不够。我们自建了四层监控看板:
| 监控层级 | 指标 | 阈值 | 告警方式 | 说明 |
|---|---|---|---|---|
| L1:Runtime 健康 | sandbox_startup_failure_rate | > 0.5% | PagerDuty | microVM 启动失败,通常因 quota 耗尽或 VPC endpoint 故障 |
| L2:Tool 可用性 | tool_call_timeout_rate(按 tool name 分组) | > 3% | Slack channel | 某个 tool API 响应慢,如sec-edgar-search超时,说明 SEC API 限流 |
| L3:决策质量 | hallucination_score(NLI 模型打分) | > 0.7 | Email + Jira ticket | 用 DeBERTa-v3 对 model_output vs tool_output 做蕴含判断,分数越高越可能是幻觉 |
| L4:业务影响 | memo_completion_rate(CRM 中标记为“已生成 memo”的线索占比) | < 92% | Daily report to PM | 最终业务指标,反映 agent 是否真的帮销售团队省了时间 |
其中 L3 的hallucination_score是我们自己训练的轻量模型(32MB),部署在 SageMaker Real-Time Inference 上,P95 延迟 < 80ms。它不追求 100% 准确,只做 early warning:当 score > 0.7,自动触发 re-run with stricter guardrails,并通知 prompt engineer 检查 system prompt。
提示:不要依赖 Anthropic 的
guardrails.pii_detection做合规审计。它只扫描输出文本,不检查 tool input。我们曾发现 agent 把用户身份证号(来自 CRM)原样传给 Bloomberg API——因为 PII 检测只在 model_output 阶段运行。解决方案:在 tool call 前加一道 proxy middleware,用 regex 扫描tool_inputJSON。
4. 竞争格局与生存指南:当 runtime 成为水电煤
4.1 Hyperscaler 的“免费捆绑”攻势:AWS AgentCore 的真实能力
Anthropic 的 launch press稿说“decoupled the agent stack like OS virtualized hardware”,但 AWS Bedrock AgentCore 在 2025 年 11 月 GA 时,已经把这套逻辑跑通了。区别在于:AWS 不卖 runtime,它把它变成云账单里的“隐性成本”。
AgentCore 的核心是Firecracker microVM + Nitro Enclaves。每个 session 独占一个 microVM,CPU/memory/fs 隔离,最长运行 8 小时。但关键差异在 pricing:AgentCore 本身不收费。你只为 microVM 的 EC2 实例(t3.micro 起)、EBS 存储、以及调用的模型(Claude/Sonnet/Mixtral)付费。我们测算过一个典型场景:
| 成本项 | Anthropic Managed Agents | AWS AgentCore |
|---|---|---|
| Runtime (100 sessions × 2h/day) | $0.08 × 100 × 2 × 30 =$480/month | t3.micro ($0.0104/hr) × 100 × 2 × 30 =$62.40/month |
| Claude 3.5 Sonnet tokens (5M/month) | $15.00 (standard rate) | $15.00 (same rate via Bedrock) |
| Total | $495.00 | $77.40 |
差价 6.4 倍。AWS 的策略很清晰:用 runtime 的低价,把你锁在 Bedrock 生态里。当你在 AgentCore 里调用 Claude,它自动走 Bedrock 的 model endpoint,享受统一账单、统一 IAM 权限、统一 CloudTrail 日志。而 Anthropic 的 managed runtime,本质上是个“黑盒”,你无法用 AWS WAF 做 DDoS 防护,无法用 AWS Config 审计配置变更,无法用 AWS Backup 备份 session log。
更狠的是,AgentCore 支持framework-agnostic hosting。LangGraph 的StateGraph、CrewAI 的Crew、甚至你手写的 while-loop agent,只要符合 request-response 协议(HTTP POST with JSON, return JSON),就能部署。我们把一个用 LangChain + LlamaIndex 写的 RAG agent,改了 3 行代码(把llm.invoke()换成requests.post("https://agentcore...")),就跑在 AgentCore 上了。迁移成本几乎为零。
4.2 开源压力曲线:Daytona 与 Kubernetes SIG 的真实进展
如果说 hyperscaler 是“价格战”,开源社区就是“性能战”。2025 年初从 dev-env 领域转型的 Daytona,现在已是 runtime 层最快的选手。它不搞 microVM,而是用gVisor + seccomp-bpf构建轻量 sandbox,spin-up time 官方数据 87ms,我们实测 82–91ms。关键是:它完全开源(Apache 2.0),可以部署在任何 Kubernetes 集群上。
Daytona 的架构图(简化版):
User Request → Daytona API Server → Admission Controller (validate YAML) ↓ Kubernetes Scheduler → Assign to Node ↓ gVisor Sandbox (user-space kernel) → Run Tool Binary ↓ seccomp-bpf filter → Block syscalls like openat(), socket()我们对比了 Daytona 和 Anthropic 的 sandbox 启动延迟(100 次采样):
| 工具 | P50 (ms) | P95 (ms) | P99 (ms) | 内存占用 (MB) |
|---|---|---|---|---|
| Anthropic microVM | 162 | 194 | 218 | 185 |
| Daytona gVisor | 82 | 91 | 103 | 42 |
| Docker (baseline) | 320 | 410 | 520 | 210 |
Daytona 的内存优势巨大——意味着你能在一台 64GB RAM 的机器上跑 1500+ 并发 sandbox,而 Anthropic microVM 只能跑 300+。这对中小团队是决定性优势:不用买 Anthropic 的高价配额,自己搭 K8s 集群,成本直降 80%。
更值得关注的是 Kubernetes SIG 的agent-sandbox项目(2026 年 2 月正式进入 kubernetes-sigs org)。它不是独立 runtime,而是把 sandbox 当成 K8s 的一等公民:
# agent-sandbox CRD example apiVersion: sandbox.k8s.io/v1alpha1 kind: AgentSandbox metadata: name: bloomberg-tool spec: image: yourcompany/bloomberg-client:v1.2 securityContext: seccompProfile: type: RuntimeDefault resources: limits: memory: "128Mi" cpu: "200m"这意味着,未来你写一个 agent,可以直接用kubectl apply -f agent.yaml部署,和部署一个 Deployment 一样简单。runtime 层彻底消失,变成 K8s 的内置能力。
4.3 价值迁移的三大高地:Trace、Governance、Vertical
当 runtime 层 commoditize,钱会流向哪里?我们跟踪了 2026 年 Q1 的融资数据,答案很清晰:
4.3.1 Trace Store:谁拥有 event log,谁拥有 agent 的“司法主权”
Braintrust 的 Brainstore 数据库,专为 AI interaction logs 设计。它不是普通 OLAP,而是把session_id、tool_name、timestamp_ms、model_response做了联合索引,支持亚秒级查询“所有在 2026-04-01 调用过sec-edgar-search且model_response包含‘risk’一词的 session”。我们用它做了两件事:
- 合规审计:导出所有含 PII 的 session event,生成 GDPR 报告;
- Prompt 优化:找出
hallucination_score > 0.8的 top 10 system prompts,针对性重写。
Arize 的 Phoenix 开源版(Apache 2.0)更激进:它直接把 trace store 做成 agent 的“操作系统内核”。你部署 Phoenix,它自动 hook 所有 agent 的tool_call和model_output,无需修改一行业务代码。我们把它集成进 Daytona,现在每个 sandbox 启动时,自动上报 event 到 Phoenix,连 Anthropic 的 managed runtime 都能兼容(通过其 event_log_export webhook)。
实操心得:不要自己造 trace store。我们试过用 Elasticsearch,结果发现:1)schemaless 导致查询慢(需要
wildcard查询);2)time-series 数据写入吞吐低(> 5K events/sec 就抖动);3)无法做跨 session 关联分析(如“同一个用户在不同 session 中的决策一致性”)。Brainstore 和 Phoenix 是唯一经过千级并发验证的方案。
4.3.2 Governance & Policy:从“能做什么”到“该做什么”
AWS AgentCore 在 2026 年 3 月 GA 的 policy controls,是 enterprise adoption 的临门一脚。它支持:
- RBAC for Tools:
SalesTeam角色只能调salesforce-crm,不能调bloomberg-fundamentals; - Data Loss Prevention (DLP):自动 redact PII in tool output before sending to model;
- Approval Workflow:当 agent 尝试调用
send-emailtool,触发 Slack approval flow,销售 VP 必须点击 approve 才执行。
但这只是开始。OWASP Agentic Top 10 刚发布,第一条就是A01: Prompt Injection。我们的应对方案是:在 agent 入口加一层policy gateway(基于 Envoy + WASM),它不看 prompt 内容,只看“prompt 的 entropy”——用 Shannon entropy 公式计算输入文本的随机性。正常 human query entropy < 4.2 bits/char,而 prompt injection payload(如{{7*7}})entropy > 5.8。我们设阈值 5.0,超过即 block 并告警。上线后,prompt injection 攻击拦截率 99.2%,FP 率 0.3%。
4.3.3 Vertical Agent Marketplaces:当 agent 成为采购目录里的 SKU
Salesforce Agentforce 的 $800M ARR,证明企业愿意为“垂直场景 agent”付费,而不是为“runtime”付费。我们拆解了它的 top 3 agent:
| Agent Name | 定价模式 | 核心能力 | 客户痛点 |
|---|---|---|---|
| Claims Processor | $120/user/month | 自动解析医疗理赔单(PDF/OCR),匹配 CPT codes,计算赔付额 | 人工审核单均耗时 18 分钟,错误率 7.3% |
| Sales Dev Rep | $299/seat/month | 从 LinkedIn 抓取目标客户,生成个性化 outreach email,追踪 opens/clicks | BD team 每周花 20 小时找客户,回复率 < 2% |
| Security Pentest | $4,500/engagement | 自动扫描 web app,生成 exploit PoC,提交 Jira ticket | 渗透测试排期 6 周起,漏洞平均修复时间 42 天 |
关键洞察:这些 agent 的runtime 是 invisible 的。客户不关心它跑在 Anthropic、AWS 还是 Daytona 上,他们只关心“能不能在 3 分钟内生成一份符合 HIPAA 的理赔报告”。这就是价值迁移的终点——agent 本身成为产品,runtime 只是后台水电。
我们正和一家医疗科技公司合作,把上面的 Claims Processor agent 封装成 FHIR-compliant API,直接集成进他们的 EHR 系统。合同是按“处理单数”计费($0.85/claim),runtime 成本被摊薄到 $0.03/claim 以下。这才是 runtime commoditization 的终极形态:它不再是产品,而是成本中心里的一行数字。
5. 我的实战体会:别押注 runtime,押注“agent 的操作系统”
我在 2023 年亲手搭过第一代 agent infra:用 Redis 存 session,用 Docker-in-Docker 做 sandbox,用 Hashicorp Vault 管 credential。当时觉得“我们掌控一切”。结果 2024 年,一个 prompt injection 拿走了 Vault 的 root token,整个 infra 被迫停机 36 小时。2025 年,我们迁移到 AWS AgentCore,成本降了 70%,安全性升了 3 倍,运维工作量归零。
Anthropic 的 Managed Agents,是我见过最优雅的 runtime 实现。它的 session-as-event-log 设计,解决了我最痛的 context overflow 问题;它的 microVM sandbox,让我第一次敢把 production-grade credential 交给 LLM 调用。但它依然改变不了一个事实:runtime 层的价值密度,正在以每年 60% 的速度衰减。
我现在的策略很明确:
- 短期(0–6 个月):用 Anthropic Managed Agents 快速上线 MVP,验证业务假设。它的 developer experience 确实无敌——YAML 配置、CLI 部署、CloudWatch 日志,一天就能跑通。
- 中期(6–12 个月):把核心 agent 迁移到 AWS AgentCore + Daytona。用 Terraform 管理 infra,用 Phoenix 做 trace,用 custom policy gateway 做 governance。runtime 成本砍到最低,同时获得最大控制权。
- **长期
