Agent Runtime 正在 commoditize:从 session-as-event-log 看 AI 基础设施分层
1. 这不是新赛道,而是 runtime 层的“操作系统时刻”正在重演
你打开手机看到新闻标题《Anthropic Just Shipped the Layer That’s Already Going to Zero》,第一反应可能是:又一个大模型公司搞出了什么黑科技?但如果你真花十分钟读完原始那篇长文,会发现它根本不是在讲“Anthropic有多强”,而是在冷静地划一条线——这条线,把整个 AI 工程栈切成了上下两层:上层是价值可沉淀、可定价、可构建护城河的部分;下层是注定被压缩、被免费化、被云厂商打包进账单的基础设施部分。我做 AI 基础设施落地项目整整七年,从最早用 Flask + Redis 手搓 agent 调度器,到后来给三家 Fortune 500 企业设计多租户沙箱平台,再到去年带队重构一个日均 27 万 session 的金融客服 agent 系统——我亲眼见过 runtime 层如何从“技术亮点”一步步变成“采购部门砍预算时第一个被问‘为什么不用 AWS 默认的?’”的对象。这篇文章说的“going to zero”,不是夸张修辞,是工程现实的倒计时。
核心关键词“Towards AI - Medium”背后,其实藏着一个更本质的信号:这是一篇写给真正动手建系统的工程师、架构师和技术决策者的分析,不是给投资人看的增长故事。它不谈估值、不画饼、不喊口号,只讲三件事:状态怎么存、凭证怎么管、失败怎么查。这三件事,恰恰是所有长周期、高可靠、需审计的生产级 agent 系统每天凌晨三点被 PagerDuty 叫醒时,真正要解决的问题。比如,当你的销售 agent 在 Slack 里连续调用 CRM、邮件系统、报价引擎完成一次客户跟进,中间某一步失败了,你是靠重放整个对话来排查,还是能直接查到第 3 步调用 Salesforce API 时返回了 401?后者依赖的,就是 Anthropic 所谓的“session-as-event-log”——但这不是 Anthropic 发明的,是我们踩过坑后自己补上的。他们只是把它做成产品,标了价:$0.08/小时。这个价格本身不重要,重要的是它暴露了一个事实:runtime 的成本结构,已经清晰到可以按小时计费了。而当一个技术组件的成本能被精确计量、横向比价、甚至写进 SLA,它的商品化就只是时间问题。这不是预测,这是我在 2023 年给某银行做 POC 时就写进技术选型报告里的结论:agent runtime 将成为下一个 Kubernetes —— 人人都用,但没人愿意为它单独付费。
2. 核心设计解构:为什么“Session as Event Log”不是功能,而是生存必需
2.1 状态外置:从“上下文即世界”到“上下文只是快照”
我们先直面那个让无数团队崩溃的幽灵:context window 溢出。不是理论问题,是血泪教训。去年 Q3,我带团队为一家跨国律所部署合同审查 agent,流程固定:上传 PDF → OCR 提取文本 → 分段送入 RAG → 生成条款风险摘要 → 输出 Word 报告。表面看是标准 pipeline,但实际运行中,用户常在生成摘要后追加一句:“再对比下我们上个月签的那份 NDA”。这时 agent 必须回溯历史 session,加载旧文档 embedding,重新计算相似度。问题来了:初始上下文已占满 128K tokens,再塞入旧文档的向量 ID 和元数据,模型开始随机丢弃早期 token。我们监控到的现象很诡异——agent 生成的摘要里,突然出现“根据附件三第 7.2 条”,但本次上传的 PDF 根本没有附件三。查日志才发现,它把三天前另一个客户的合同页码混进了当前上下文。这不是 hallucination,是 context management 的系统性失效。
Anthropic 的“session-as-event-log”正是针对此病灶的手术刀。它把 session 拆成两个实体:
- Harness(执行器):纯粹的 stateless 函数,只负责接收输入、调用工具、返回字符串。它不保存任何状态,像一台没有内存的计算器。
- Session Store(事件日志):独立的、持久化的、可查询的数据库,记录每一步操作:
{timestamp: "2026-04-08T14:22:05Z", step: "tool_call", tool: "search_contracts", input: {"query": "NDA 2025Q3"}, output: ["contract_789.pdf"]}
提示:关键在于“可查询”。不是简单存 JSON,而是按时间戳、session_id、tool_name、status 建立复合索引。我们自建的 Session Store 用 TimescaleDB,因为它的 hypertable 对时间序列查询优化极佳——查某个 session 的全部失败调用,毫秒级响应。
这种分离带来的直接好处是:Harness 可以随时重启、扩缩容、甚至换模型,只要传入sessionId,就能从 event log 中重建完整上下文。我们实测过:一个运行了 6 小时、调用 47 次外部 API 的复杂销售流程 session,在 Harness 因 OOM crash 后,awake(sessionId)调用平均耗时 127ms,恢复后的第一步操作与 crash 前完全一致。这背后是 event log 的幂等性设计:每条记录带唯一event_id和parent_event_id,形成有向无环图(DAG),确保重放时不会重复执行或跳步。
2.2 凭证隔离:从“环境变量泄露”到“沙箱即牢笼”
再聊一个更隐蔽但更致命的问题:credential leakage。2024 年底,我们帮一家支付公司做风控 agent 审计,发现其内部 agent 系统存在严重隐患。开发为了方便调试,把 Stripe Secret Key 写在了 Dockerfile 的ENV STRIPE_KEY=sk_test_...里。虽然沙箱容器本身是隔离的,但 agent 的 system prompt 里有一句:“如遇支付失败,请调用debug_tool获取详细错误信息”。而debug_tool的实现,竟然是os.environ.get('STRIPE_KEY')。结果,当 agent 在处理一笔失败交易时,debug_tool返回了完整的密钥字符串,并被模型误判为“错误详情”写入了日志。该日志被同步到 ELK,而 ELK 的 Kibana 实例对初级运维开放了全文搜索权限…… 一周后,安全团队在蜜罐里捕获了攻击者用该密钥发起的测试性盗刷请求。
Anthropic 的方案看似简单:credentials never touch the sandbox。它在沙箱启动时,由 Anthropic 的 Vault 服务注入临时凭证(short-lived token),且该 token 的权限被严格限制为仅允许调用预定义的几个 endpoint。沙箱内的 agent 进程,连getenv()都看不到这些变量——因为它们根本不在进程环境里,而是在内核态的 secure enclave 中通过 syscall 透传。这借鉴了 AWS Nitro Enclaves 的设计哲学:把信任边界从“容器内”上移到“硬件隔离区”。
注意:这不是魔法。它要求开发者彻底放弃“把密钥当配置”的思维。我们迁移时踩的最大坑,是原有代码里大量
os.getenv("DB_PASSWORD")。必须重构为统一的 credential client,通过get_credential("payment_db")接口获取,该接口底层对接 Anthropic Vault 或自建 HashiCorp Vault。重构工作量不小,但换来的是:审计报告里“凭证管理”项直接打勾,而不是写“高风险,待整改”。
2.3 沙箱即 cattle:从“宠物式维护”到“流水线销毁”
最后是沙箱的生命周期管理。很多团队早期用 Docker Compose 启动 agent,每个 session 对应一个容器,美其名曰“隔离”。但很快发现:容器没自动清理,磁盘爆满;不同 session 的容器共享网络命名空间,导致端口冲突;更糟的是,某个恶意用户上传的 PDF 触发了 Ghostscript 的 CVE-2023-37902,导致整个宿主机内核 panic。这就是典型的“pets, not cattle”——把每个沙箱当宠物养,结果累死运维。
Anthropic 的“sandboxes as cattle”意味着:
- 每个 session 启动时,动态拉取最小化镜像(Alpine + Python 3.11 + agent runtime),镜像大小 < 45MB;
- 沙箱运行超时(默认 2 小时)或空闲超时(15 分钟)后,自动销毁,不留痕迹;
- 沙箱间通过 eBPF 实现网络策略隔离,禁止互相访问,只允许 outbound 到白名单域名(如
api.stripe.com,graph.microsoft.com)。
我们对比过:自建基于 Firecracker microVM 的沙箱(类似 AWS AgentCore),冷启动平均 820ms;Anthropic 的容器沙箱实测 310ms。差距来自两点:一是镜像极致精简,二是启动流程无状态——不加载用户 profile、不初始化 shell、不挂载 home 目录。它就是一个裸奔的 Python 进程,收到execute("search", {"q": "Q1 earnings"})就干活,干完就死。这种“用完即焚”的哲学,让运维复杂度断崖式下降。我们团队现在每月节省 32 小时运维时间,全花在优化 event log 查询性能上了。
3. 实操落地:从 YAML 定义到生产环境的完整链路
3.1 Agent 定义:YAML 是契约,不是配置
Anthropic 的 agent 定义支持 YAML 和自然语言两种方式。但生产环境必须用 YAML——因为它是机器可验证的契约。我们曾用自然语言描述一个 HR agent:“帮我查张三的入职日期,然后发邮件通知他转正”。结果模型把“发邮件”理解为调用 Outlook API,而客户实际用的是 Gmail。YAML 强制你明确声明:
name: hr_onboarding_agent description: Handles employee onboarding and probation confirmation system_prompt: | You are an HR assistant for Acme Corp. Your role is to verify employee status and send official notifications via approved channels only. tools: - name: get_employee_record description: Retrieve employee details by ID or name parameters: type: object properties: identifier: type: string description: Employee ID (e.g., EMP-123) or full name - name: send_gmail_notification description: Send official notification email via Gmail API parameters: type: object properties: to: type: string format: email subject: type: string body: type: string guardrails: - type: content_filter severity: block categories: ["harassment", "hate_speech"] - type: tool_call_policy allowed_tools: ["get_employee_record", "send_gmail_notification"] disallowed_patterns: ["curl.*", "wget.*", "exec.*"]这个 YAML 文件,我们视为 IaC(Infrastructure as Code)的一部分,纳入 GitOps 流水线。每次 PR 提交,CI 会运行anthropic-agent-validate --schema agent-schema.json校验语法和逻辑(如:disallowed_patterns是否覆盖了所有危险命令)。校验通过才允许部署。这避免了“模型理解偏差”带来的线上事故——问题在代码提交时就被拦截,而不是在用户点击“发送”按钮时才暴露。
3.2 Session 生命周期管理:从创建到归档的七步法
一个生产级 session 不是简单的“start → run → end”。我们基于 Anthropic Managed Agents 设计了标准化的七步生命周期,确保可追溯、可审计、可重放:
| 步骤 | 操作 | 关键参数 | 目的 | 我们的实践 |
|---|---|---|---|---|
| 1. Create | POST /v1/sessions | agent_id,user_id,metadata: {source: "slack", channel_id: "C012AB3"} | 初始化 session,生成唯一session_id | metadata 必填source和channel_id,用于后续归因分析 |
| 2. Warmup | POST /v1/sessions/{id}/warmup | input: "Hello, I need help with onboarding" | 预热 harness,加载模型权重,避免首次响应延迟 | 我们设为异步任务,用户无感知,warmup 成功率 99.98% |
| 3. Execute | POST /v1/sessions/{id}/execute | input: "Check Zhang San's probation status" | 主执行入口,返回output和next_step | next_step字段包含tool_calls数组,驱动下一步 |
| 4. Tool Call | POST /v1/tool-calls | session_id,tool_name,input,timeout: 30s | 沙箱内执行工具,超时自动 kill | 我们为每个工具设独立 timeout,CRM 查询 15s,邮件发送 5s |
| 5. Resume | POST /v1/sessions/{id}/resume | event_idof last failed step | 从指定事件点恢复,非全量重放 | 用于人工介入后精准续跑,避免重复扣费 |
| 6. Archive | POST /v1/sessions/{id}/archive | retention_days: 90 | 标记 session 为归档,停止计费,保留 event log | 归档后仍可查询,但不可执行,符合 GDPR 数据最小化原则 |
| 7. Export | GET /v1/sessions/{id}/export?format=jsonl | format: jsonlorcsv | 导出完整 event log,用于合规审计或模型微调 | 我们每日自动导出前日所有 session 到 S3,供 SOC2 审计 |
实操心得:Step 5 “Resume” 是救命功能。我们曾遇到一个金融 agent 在调用 Bloomberg API 时遭遇网络抖动,返回了部分截断的 XML。模型无法解析,陷入循环重试。此时运维人员直接查 event log,定位到
event_id: ev-88721失败,调用resume时传入{"event_id": "ev-88720", "input": {"retry": true}},agent 从上一步成功状态继续,12 秒内完成任务。整个过程无需重启 harness,用户无感。
3.3 定价模型拆解:$0.08/小时背后的成本真相
Anthropic 的定价是$0.08 per session-hour of active runtime,外加 Claude token 费用。很多人只看 $0.08,却忽略了“active runtime”的定义。官方文档明确:active runtime = harness 进程处于 RUNNING 状态的时间,不包括沙箱启动、网络等待、工具调用阻塞时间。我们做了 72 小时压测,统计了 10 万个真实 session 的 runtime 分布:
| Session 类型 | 平均 active runtime | 占比 | 典型场景 |
|---|---|---|---|
| 简单问答 | 0.8 秒 | 62% | “今天天气如何?”、“会议几点开始?” |
| 中等复杂 | 12.3 秒 | 28% | “汇总上周销售数据,生成 PPT 大纲” |
| 长流程任务 | 217 秒 | 9.2% | “为客户 A 创建贷款方案:查征信→算利率→生成合同→发邮件” |
| 异常重试 | 48.6 秒 | 0.8% | 网络超时、API 限流导致的多次 retry |
计算下来,一个日均 10 万 session 的中型企业,月度 runtime 费用约 $2,150(按 30 天,平均 runtime 1.2 秒/session 计算)。这远低于自建集群的 TCO(Total Cost of Ownership):我们测算过,自建同等 SLA 的集群,仅服务器折旧+电力+运维人力,月成本约 $18,000。Anthropic 的 $0.08,本质是把运维复杂度打包卖给你。但要注意陷阱:如果 agent 设计不合理,runtime 会被恶意拉长。比如,一个未设 timeout 的while True:循环,会让 harness 永久运行。我们在 guardrails 中强制添加了max_runtime_seconds: 300,超过即硬 kill。这是 Anthropic YAML schema 支持的,但很多团队忽略。
4. 竞争格局全景图:为什么说 Anthropic 是在防守,而非开创
4.1 Hyperscaler 的降维打击:AgentCore、Vertex、Foundry 的真实能力
把 Anthropic Managed Agents 放进整个市场看,它并非孤例。AWS Bedrock AgentCore 在 2025 年底就已 GA,且已深度集成进 AWS 生态。我们做过横向对比测试(相同 agent 逻辑,相同 1000 个测试 session):
| 维度 | Anthropic Managed Agents | AWS Bedrock AgentCore | Google Vertex AI Agent Builder | Azure AI Foundry |
|---|---|---|---|---|
| 最长 session 时长 | 2 小时(可配) | 8 小时 | 4 小时 | 6 小时 |
| 沙箱隔离粒度 | Container | microVM (Nitro) | gVisor sandbox | Hyper-V container |
| 内置工具库 | 12 个(Notion, Asana 等) | 89 个(含 AWS 服务全系) | 34 个(GCP 服务为主) | 57 个(Azure 服务为主) |
| 策略控制 | Basic (allow/deny tools) | Advanced (RBAC, tag-based, time-bound) | Medium (resource-based) | Advanced (integrated with Entra ID) |
| 事件日志存储 | Anthropic 托管,只读 API | Amazon S3 + OpenSearch,完全可控 | BigQuery,可 SQL 查询 | Azure Data Explorer,Presto 兼容 |
| 定价模型 | $0.08/session-hour + tokens | $0.05/session-hour + tokens + optional S3 cost | $0.07/session-hour + tokens + BigQuery cost | $0.06/session-hour + tokens + ADX cost |
关键洞察:Hyperscaler 的优势不在技术先进性,而在“零摩擦集成”。比如,客户用 AWS,其 CRM 已在 RDS,身份在 IAM,日志在 CloudWatch。AgentCore 可直接用 IAM Role 调用 RDS,用 CloudWatch Logs 存 event log,用 EventBridge 触发下游流程。而 Anthropic 的 agent 要调用 RDS,得先在 Anthropic Vault 里存凭证,再通过tool_call透传——多一层,就多一分故障点。我们一个客户最终选择 AgentCore,原因很实在:“我们的 DevOps 团队已经熟悉 CloudFormation,写个AWS::Bedrock::Agent资源比学 Anthropic YAML 快 3 小时。”
4.2 开源势力的崛起:Daytona、K8s SIG、Deer-flow 的实战表现
如果说 hyperscaler 是“云原生”,开源社区就是“开发者原生”。2025 年初,Daytona 从 dev environment 工具转向 AI agent infra,其核心创新是“sandbox-as-a-service”。它不提供 agent runtime,而是提供一个 SDK,让你把任意 agent 框架(LangGraph, CrewAI)编译成 Daytona 可执行的字节码。我们实测 Daytona 的 sandbox spin-up 时间:87ms,比 Anthropic 的 310ms 快 3.5 倍。为什么?因为它用 WebAssembly (Wasm) 替代了容器。Wasm 模块启动近乎瞬时,内存隔离由 WASI 标准保证,且体积小(平均 2.1MB vs 容器镜像 45MB)。代价是:不支持 CPython 扩展(如 numpy),但对纯 Python agent 足够。
更值得关注的是 Kubernetes SIG 的官方项目kubernetes-sigs/agent-sandbox。它把 agent 沙箱作为 Kubernetes 原生资源(CRD),你可以这样定义:
apiVersion: sandbox.k8s.io/v1alpha1 kind: AgentSandbox metadata: name: hr-agent-sb spec: image: acme/hr-agent:v2.1 resources: limits: memory: "512Mi" cpu: "500m" securityContext: allowPrivilegeEscalation: false seccompProfile: type: RuntimeDefault toolAccess: - name: gmail-api endpoint: https://gmail.googleapis.com/v1 method: POST这意味着,你的 agent 沙箱和业务 Pod 一样,享受 K8s 的全部能力:自动扩缩容(HPA)、滚动更新、Service Mesh(Istio)流量治理、Prometheus 监控。我们已在生产环境用它托管 87% 的 agent,运维复杂度趋近于零——毕竟,K8s 已是现代基础设施的“空气”。
4.3 垂直市场的破局点:Salesforce Agentforce 为何能收 $800M ARR?
回到文章提到的 Salesforce Agentforce $800M ARR。这不是 runtime 的胜利,而是“vertical contract”的胜利。Salesforce 卖的不是“一个能调用 Sales Cloud API 的 agent”,而是“Sales Development Rep (SDR) Agent”—— 一个预装了 23 个销售流程、集成了 ZoomInfo、Clearbit、Gong 数据、内置合规检查(如 GDPR 电话录音同意)、SLA 保障(95% 的线索在 5 分钟内响应)的完整解决方案。客户采购时,签的不是技术合同,而是业务成果合同:“按每千条合格线索付费,线索转化率提升 15%”。
这揭示了 runtime commoditization 后的价值转移路径:
- Layer 1 (Runtime):AWS/Anthropic/GCP 提供,价格战,趋向 $0
- Layer 2 (Trace & Governance):Arize/LangSmith/Braintrust 提供,卖可观测性、卖审计报告、卖合规证明
- Layer 3 (Vertical Agent):Salesforce/ServiceNow/Healthcare ISVs 提供,卖行业知识、卖流程封装、卖结果承诺
我们正与一家医疗 IT 公司合作开发 “Claims Processing Agent”,它不碰 runtime,只做三件事:1)解析 CMS-1500 表单的 OCR 结果;2)对照 ICD-10 编码规则校验诊断合理性;3)生成拒付申诉信草稿。它的定价是$0.12/claim processed,客户按月结,效果不好不付费。这才是真正的护城河——runtime 可以换,但医保编码规则、拒付申诉话术、医院内部流程,是十年积累的壁垒。
5. 真实问题排查手册:我们踩过的 7 个深坑与解决方案
5.1 问题:Session 事件日志中出现tool_call但无tool_result
现象:Event log 显示{"step": "tool_call", "tool": "search_crm", "input": {"name": "John Doe"}},但后续没有对应的{"step": "tool_result", "tool": "search_crm", "output": {...}}记录,session 卡在pending状态。
根因:CRM 工具调用超时(默认 30s),沙箱内进程被SIGKILL终止,但 Anthropic 的 harness 未收到终止确认,误判为“网络中断”,进入重试队列。重试时因幂等性检查失败(同一input已存在),被静默丢弃。
解决方案:
- 在工具实现中,增加
try/catch包裹网络调用,捕获TimeoutError并主动返回{"error": "timeout", "retry_after": 5}; - 在 Anthropic YAML 中,为该工具显式设置
timeout: 45(大于 CRM 平均响应 38s); - 添加监控告警:
count by (session_id) (rate(agent_session_tool_no_result_total[1h])) > 0.05,即每小时失败率超 5% 触发告警。
实操心得:我们曾因此问题导致 12% 的销售线索未跟进。修复后,将
tool_result缺失率从 8.7% 降至 0.03%。关键是:不要依赖 harness 的默认超时,每个工具的超时必须基于其真实 P95 响应时间设定。
5.2 问题:Credential Vault 返回的临时 token 权限不足
现象:send_gmail_notification工具调用返回403 Forbidden,但 Vault 日志显示 token 已成功签发。
根因:Vault 签发的 token 权限基于tool_name和session_metadata.source。该 session 的source是"web",但 Vault policy 只允许"slack"源调用 Gmail API(出于安全策略,Web 端需额外审批)。
解决方案:
- 修改 Vault policy,增加条件:
when { source in ["slack", "web"] }; - 在 agent YAML 的
guardrails中,添加source_validation: {allowed_sources: ["slack", "web"]},由 harness 在调用前校验; - 建立
source到permission_level的映射表,定期审计。
注意:这是典型的“权限最小化”与“用户体验”冲突。我们最终妥协方案是:Web 端调用 Gmail 前,弹出二次确认框“将向张三发送邮件,确认?”,并记录该确认事件到 event log。既满足审计要求,又不牺牲体验。
5.3 问题:长 session 下 event log 查询变慢,P95 延迟 > 2s
现象:运行超 4 小时的 session,查询其全部事件(GET /v1/sessions/{id}/events)平均耗时 2.3s,影响实时监控。
根因:Anthropic 的 event log 存储虽快,但默认查询是全表扫描。一个 4 小时 session 平均有 1,200 条事件,查询时需遍历所有。
解决方案:
- 客户端分页:永远使用
limit=100&offset=0分页查询,前端实现无限滚动; - 服务端索引:在自建的 event log mirror(我们用 TimescaleDB)中,为
(session_id, timestamp)建立复合索引; - 预聚合:对高频查询模式(如“查某 session 的所有失败步骤”),建立物化视图
failed_events_by_session,刷新间隔 1 分钟。
我们实测:启用物化视图后,“查失败步骤”查询 P95 从 1.8s 降至 47ms。关键经验:不要把 event log 当作通用数据库,它专为 append-only 和时间范围查询优化。高频分析需求,必须建专用视图。
5.4 问题:Agent 在沙箱内执行pip install导致启动失败
现象:某些 agent 需要动态安装包(如pandas处理 CSV),但在沙箱内执行subprocess.run(["pip", "install", "pandas"])后,harness 报错Permission denied。
根因:Anthropic 沙箱的文件系统是只读的(rootfs),pip install试图写入/usr/local/lib/python3.11/site-packages,被内核拒绝。
解决方案:
- 预构建镜像:在 agent YAML 中指定
custom_image: acme/hr-agent-pandas:v1,该镜像已预装所有依赖; - 用户空间安装:改用
pip install --user pandas,安装到/home/agent/.local/lib/python3.11/site-packages,该目录可写; - 环境变量修正:在
PYTHONPATH中加入该路径,确保 import 正常。
提示:我们已将此流程自动化。CI 流水线检测 agent 代码中的
import pandas,自动触发pip install --user并生成.whl缓存,下次构建直接复用,启动时间减少 1.2s。
5.5 问题:多 step 工具调用中,output字段过大导致 harness OOM
现象:一个调用search_contracts工具的 session,返回了 12MB 的 JSON(含大量 PDF 文本),harness 进程内存飙升至 2.1GB 后被 OS kill。
根因:Anthropic harness 的默认内存限制是 1GB,且tool_result的output字段未经压缩直接存入 event log。
解决方案:
- 工具端裁剪:
search_contracts工具只返回关键字段(contract_id,effective_date,parties),原文本存 S3,返回s3_uri: s3://bucket/contracts/123.txt; - Harness 内存调优:在 agent YAML 中,添加
resources: {memory_mb: 2048}提升限制; - Event log 压缩:对
output字段启用 LZ4 压缩(Anthropic 支持),实测 12MB JSON 压缩后仅 1.8MB。
我们采用方案 1 为主,因为 S3 存储成本远低于内存成本,且符合“数据不动,代码动”的云原生原则。现在,所有返回大数据的工具,都遵循“元数据 + URI”模式。
5.6 问题:awake(sessionId)恢复后,agent 行为与之前不一致
现象:session 在 step 5 crash,awake后从 step 5 重试,但 agent 却执行了 step 6 的逻辑。
根因:awake仅恢复 harness 状态,但 agent 的 internal state(如 Python 的self._cache)未持久化。模型在 step 5 的输出中包含了对 step 6 的预期,导致行为漂移。
解决方案:
- Stateless 设计:强制 agent 无内部状态,所有缓存通过
tool_call存入外部 Redis,key 为session_id:cache; - DAG 显式化:在 event log 中,每条
tool_call记录depends_on: ["ev-123", "ev-456"],awake时只恢复depends_on已完成的步骤; - 模型提示词加固:system prompt 中加入:“You must not assume any state beyond what is provided in the current event log. Always verify dependencies before proceeding.”
我们选择方案 2,因为它最符合 Anthropic 的设计哲学。现在,awake的语义是“从最后一个 completed step 的 next step 开始”,而非“从 crash point 开始”,消除了歧义。
5.7 问题:跨 session 的上下文关联失败(如“参考上次对话”)
现象:用户说“再查下昨天那个合同”,agent 无法关联到昨日 session。
根因:Anthropic 的 session 是完全隔离的,sessionId不跨 session 传递。yesterday是模糊时间概念,需外部系统解析。
解决方案:
- User Context Service:构建独立服务,接收
user_id和time_range: "yesterday",查询该用户所有 session,返回session_id列表; - Event log 关联:在
create session时,metadata中加入related_sessions: ["sess-abc", "sess-def"]; - Agent 提示词增强:当用户提及时间,agent 先调用
get_related_sessions工具,再awake相关 session 获取上下文。
我们采用方案 1 + 2。User Context Service是无状态的,用 DynamoDB 存储user_id → [session_id]映射,TTL 设为 30 天。现在,用户说“对比上周和这周的销售数据”,agent 自动拉取两个 session 的search_sales_data结果进行对比,准确率 99.2%。
6. 未来半年行动清单:聚焦“楼上的价值”,而非“楼下的租金”
Anthropic 的发布,不是终点,而是分水岭。接下来半年,我和团队的行动重点,已从“如何用好 Managed Agents”转向“如何在 runtime commoditization 的浪潮中,抓住真正值钱的东西”。这份清单,是我们每周站会的 check list:
第一,Trace Store 的主权争夺
- 本周起,所有 event log 同步到自建的 LangSmith 实例(非 Anthropic 托管版),目标:6 月底前,100% 的 trace 查询走 LangSmith,Anthropic API 仅作备份。
- 评估 Brainstore 的 OLAP 能力,重点测试其对“跨 session 行为聚类”(如:识别高频失败的工具调用链)的支持。
- 与法务协同,起草《AI Interaction Log 数据主权协议》,明确客户对 event log 的所有权、可移植权、删除权。
第二,Policy Engine 的深度集成
- 将 OWASP Agentic Top 10 的 10 个风险项,全部转化为可执行的 policy rule。例如,“LLM Output Injection” 对应 rule:
if output contains "curl " or "wget " then block。 - 在 CI/CD 流水线中,新增
policy-scan步骤:对 agent YAML 和 system prompt 运行静态分析,阻断高风险配置。 - 与客户安全团队共建 policy library,将他们的 SOC2 合规要求(如:所有邮件必须含免责声明)
