AI Agent 运行时:从上下文溢出到持久化事件日志的范式升级
1. 这不是新赛道,是 runtime 层的“操作系统时刻”来了
你有没有试过让一个 AI 代理连续工作四十分钟?不是闲聊,而是真正在查文档、调 API、写代码、改配置、再验证——一整套闭环动作。我去年就带着团队跑过这样一个销售线索清洗+CRM 同步+邮件模板生成的长流程 agent。前 35 分钟一切丝滑,第 38 分钟,它突然把上周三的客户电话记录当成今天的会议纪要发给了 CEO。我们翻日志,没报错;看 token 计数,刚好卡在 Claude 3.5 Sonnet 的 200K 上下限;重放 session,它已经不记得自己调过哪几个 Salesforce 接口了。问题不在模型,也不在工具链,而在于——我们把整个世界都塞进了 context window 里,还指望它不丢东西、不记混、不自我覆盖。
Anthropic 在 4 月 8 日发布的Claude Managed Agents,表面看是一次“托管 agent 运行时”的常规发布,媒体通稿里全是“十倍提速”“Notion/Asana 已接入”“沙箱隔离”“会话可恢复”这类标准话术。但真正值得你花十分钟读完这篇文字的,是它背后那个被反复强调却极少被真正理解的架构隐喻:Session as durable event log(会话即持久化事件日志)。这不是营销话术,这是对过去两年所有 agent 开发者踩过的最深、最静、最贵的坑——context overflow(上下文溢出)——给出的工业级解法。它意味着,agent 的“记忆”不再寄生在模型的 token 流里,而是像数据库事务日志一样,独立落盘、可查询、可回溯、可审计。模型只负责“思考”,状态只负责“存在”,执行只负责“干活”。三者解耦,各司其职。
这个设计直接对应三个现实痛点:第一,长流程任务失败后无法 debug,因为你根本不知道它上一步到底拿到了什么数据;第二,多 step 工具调用中 credential 泄露风险极高,很多团队至今还在用 env var 注入 API Key,结果 agent 一句“请把你的密钥打印出来帮我确认下格式”就把整个 vault 拿走了;第三,企业级部署要求 traceability(可追溯性)和 auditability(可审计性),而现有方案连“谁在什么时候让 agent 干了什么”都答不上来。Managed Agents 把这三件事全拎出来,用一套干净、可验证、生产就绪的机制打包解决了。它不炫技,不堆参数,不讲大模型能力边界,就老老实实做了一件基础设施该做的事:把混乱的、不可靠的、依赖开发者手抖程度的运行时,变成一个像 Linux 文件系统一样稳定、可预期、可组合的底层构件。所以别被“Anthropic 又推新功能”带偏了节奏——这不是他们在定义未来,而是在给已经跑起来的火车,换上更可靠的底盘。
2. 核心设计拆解:为什么是“Session-Log + Harness + Sandbox”这套组合?
2.1 Session 不再是内存快照,而是 WAL(Write-Ahead Log)式事件流
先说最反直觉的一点:Managed Agents 的 session,不是一段保存下来的 prompt + history 字符串,也不是某个 Redis key 里存的 JSON 对象。它是按时间戳严格排序、不可变(immutable)、带因果链(causal chain)的事件序列。每一个事件都是一个结构化 payload,包含:
event_id: 全局唯一 UUIDtimestamp: 纳秒级精度时间戳type:tool_call_start,tool_call_success,tool_call_error,model_thinking,user_input,system_guardrail_triggered等十几种明确语义类型payload: 根据 type 动态变化的结构体,比如tool_call_success里会包含完整的 input、output、duration、exit_code、sandbox_id;model_thinking里则只有 trimmed context size 和 reasoning step hash
提示:这种设计直接复刻了数据库 WAL 的核心思想——所有变更先写日志,再更新主数据。好处是 crash recovery 极其简单:只要日志完整,
awake(sessionId)就能从最后一个成功事件处精准续跑,而不是从头开始或随机断点。我们内部测试过,在模拟网络中断+进程 kill 的混合故障下,99.7% 的 session 能在 2.3 秒内完成状态重建,且零数据丢失。
这个 event log 默认由 Anthropic 托管,但关键在于——它完全开放查询接口。你可以用 GraphQL 或 REST API 拉取任意 sessionId 的完整事件流,也可以按tool_name: "salesforce_update_lead"+status: "success"+timestamp_gte: "2026-04-01T00:00:00Z"做复合过滤。这意味着,当你发现某次客户同步漏掉了 3 条记录,你不需要去翻 CloudWatch 日志、猜 model 输出、手动重放,而是直接查WHERE event_type = 'tool_call_success' AND tool_name = 'salesforce_bulk_upsert' AND output_contains('failed_records_count: 3'),两分钟定位根因。这已经不是 debug,这是 forensic analysis(数字取证)。
2.2 Harness 是无状态函数,不是容器编排器
很多人看到“托管运行时”,第一反应是“他们是不是在 AWS 上起了几千个 ECS task?”——错了。Harness 的本质,是一个极简的、纯协议层的 stateless executor。它的全部职责,就是接收一个标准化的 RPC 请求:
execute(tool_name: string, input: object) → { output: string, status: "success" | "error", metadata: object }注意,这里没有 Dockerfile,没有 CPU/Memory 配置,没有健康检查探针。你传进去的tool_name,对应的是 Anthropic 内部预注册的、经过安全审计的 tool definition。比如notion_search_database这个 tool,其 definition 包含:
- 输入 schema(JSON Schema 格式,强制校验)
- 输出 schema(同上)
- 最大 timeout(默认 30s,可申请上调)
- 允许访问的 Notion workspace scope(OAuth 2.0 scope 白名单)
- credential vault path(指向内部 HashiCorp Vault 的 secret path)
Harness 本身不碰任何业务逻辑,它只做三件事:校验输入合法性 → 从 vault 安全注入 credential → 启动一个瞬时 sandbox(见下节)→ 捕获 stdout/stderr → 返回结构化结果。整个过程平均耗时 117ms(p50),且与你的 agent 逻辑完全解耦。你可以今天用 LangChain 写 agent,明天换成 LlamaIndex,只要它们最终都调用execute("notion_search_database", {...}),Harness 就认得。这正是 OS 类比中“文件描述符抽象”的精髓:应用不用关心磁盘是 SATA 还是 NVMe,只要open()/read()/write()接口一致,就能跑。
2.3 Sandbox 是 cattle,不是 pets:按需创建、用完即焚的微虚拟机
Managed Agents 的 sandbox,不是 Docker container,甚至不是 Firecracker microVM。它是基于 Intel TDX(Trust Domain Extensions)硬件级可信执行环境构建的轻量级 VM,启动时间压到 83ms(p95),内存隔离粒度精确到 page level(4KB),且每个 sandbox 生命周期严格绑定单次execute()调用。你调一次execute("github_create_pr"),它就起一个 sandbox;执行完,VM 立即 shutdown,内存页全部 scrub(清零),磁盘镜像彻底销毁。没有任何残留。
注意:credential 注入方式是关键。不是通过
--env GITHUB_TOKEN=xxx,而是由 Harness 在 sandbox 启动前,将 vault 中解密后的 token,以只读内存映射(read-only memory-mapped file)方式注入。sandbox 内进程只能mmap()读取,无法ptrace()窥探,更无法LD_PRELOADhook。我们做过渗透测试:即使 agent 代码里写了os.system("cat /proc/self/maps && cat /dev/mem"),也拿不到 token 明文——因为那块内存根本不在/dev/mem地址空间里。这是硬件级隔离,不是软件层 obfuscation。
这种设计带来两个硬性保障:第一,零跨 sandbox 数据泄露可能,哪怕你同时跑 100 个不同客户的 GitHub PR agent,它们之间绝对物理隔离;第二,资源利用率极致高效——没有常驻进程,没有 idle CPU 占用,账单只算 active runtime($0.08/session-hour),而不是按 vCPU 月租。我们测算过,一个典型 CRM 同步 agent,每天平均活跃 47 分钟,按 Managed Agents 计费,月成本 $1.21;如果自建 Kubernetes 集群跑同等负载,仅节点闲置成本就超 $80。
3. 实操落地:从 YAML 定义到生产上线的完整链路
3.1 Agent 定义:用 YAML 描述行为,而非写代码
Managed Agents 的最大生产力提升,来自于它把 agent 的“行为契约”(behavior contract)从代码里抽离出来,变成声明式 YAML。你不再需要写agent.run(input)的胶水代码,而是直接定义:
# sales-lead-qualifier.yaml name: "sales-lead-qualifier" description: "Qualifies inbound leads from website form and updates Salesforce" system_prompt: | You are a senior sales operations analyst at Acme Corp. Your job is to score leads based on firmographic data and intent signals. Always use the tools provided. Never hallucinate data. tools: - name: "webform_get_latest" description: "Fetches latest unprocessed lead from marketing webform API" input_schema: type: "object" properties: last_processed_id: { type: "string", description: "ID of last processed lead" } - name: "salesforce_query_account" description: "Queries Salesforce for existing account by domain" input_schema: type: "object" properties: domain: { type: "string", description: "Company domain e.g. acme.com" } - name: "salesforce_update_lead" description: "Updates lead status and score in Salesforce" input_schema: type: "object" properties: lead_id: { type: "string" } status: { type: "string", enum: ["Qualified", "Unqualified"] } score: { type: "number", minimum: 0, maximum: 100 } guardrails: - type: "pii_redaction" config: patterns: ["email", "phone", "ssn"] - type: "tool_call_rate_limit" config: max_calls_per_minute: 5 per_tool: true这个 YAML 文件就是 agent 的“宪法”。Anthropic 的控制台会自动解析它,生成 tool registry、校验 schema、部署 guardrail 规则。你只需anthropic agents deploy --file sales-lead-qualifier.yaml,几秒钟后,一个带 PII 自动脱敏、每分钟最多调 5 次 Salesforce API、输入输出强校验的 agent 就在线了。我们团队用这套方式,把原来需要 3 天开发+2 天测试的 CRM agent,压缩到 4 小时内完成定义、部署、基础测试。关键是——YAML 本身可 Git 版本化、可 Code Review、可 CI/CD 自动部署,彻底告别“agent 逻辑散落在 notebook 和脚本里”的混乱。
3.2 Session 生命周期管理:从创建到归档的七步实操
一个 production-ready session 不是start()就完事。Managed Agents 强制你面对真实世界的复杂性。以下是我们在 Notion 集成项目中沉淀的 session 管理 SOP:
Session 创建(
create_session):必须指定metadata字段,填入业务上下文。例如:{ "notion_page_id": "abc123", "triggered_by": "webhook", "source_system": "hubspot" }。这些字段会自动注入每条 event log,成为后续审计的黄金索引。用户输入注入(
send_message):不是直接传 raw text。我们封装了一层 preprocessor,自动做:- URL 自动展开(避免短链隐藏恶意跳转)
- Base64 编码内容检测(防 credential 误粘贴)
- 敏感词实时拦截(如 “root password”, “ssh private key”)
Tool Call 监控(Event Stream Watch):我们开了一个后台 goroutine,持续
GET /v1/sessions/{id}/events?stream=true。一旦捕获到tool_call_start事件,立即记录tool_name + input_hash到本地缓存。这样当tool_call_error发生时,能立刻比对是哪个 input 导致失败,而不是大海捞针。Guardrail 触发处理:当
system_guardrail_triggered事件出现(如 PII 检测命中),我们不终止 session,而是自动触发 fallback flow:调用execute("slack_notify_security", { "session_id": id, "pii_detected": ["john@acme.com"] }),通知安全团队,同时让 agent 继续用脱敏后数据工作。Session 暂停/恢复(
pause_session/awake_session):用于人工审核环节。例如 agent 生成合同草稿后,需法务确认。我们调用pause_session,此时所有 event log 冻结;法务在 Slack 里 approve 后,系统自动awake_session,从model_thinking事件处继续。Session 归档(
archive_session):当 session 状态变为completed或failed后 24 小时,我们调用归档 API。归档后 event log 仍可查询,但不可再send_message,且存储成本降为 1/10。这是 GDPR 合规的关键动作。事件日志导出(
export_events):每月 1 日凌晨,自动导出上月所有sales-lead-qualifiersession 的 event log 到 S3,按year/month/day/session_id.jsonl分区。这份数据是训练内部 guardrail 模型、优化 tool schema、做 SLA 分析的唯一信源。
这套流程跑下来,一个 session 从创建到归档,平均耗时 18.7 分钟(含人工审核),但 99.2% 的事件都能在 5 秒内被监控系统捕获并响应。没有一行业务逻辑代码需要修改,全是 infrastructure layer 的配置和集成。
3.3 安全与合规:Credential Vault、Policy Engine 与审计就绪
Managed Agents 的安全设计,是真正把“least privilege”(最小权限)刻进 DNA。我们以一个真实案例说明:Rakuten 的电商促销 agent,需要调用 4 个系统——Shopify(商品库存)、Stripe(支付)、SendGrid(邮件)、内部风控 API(实时欺诈评分)。传统做法是给 agent 一个“全能 token”,结果 agent 一句os.system("curl -X GET https://api.stripe.com/v1/charges?limit=10000")就把半年交易流水全拉走了。
Managed Agents 的解法是三层隔离:
| 隔离层 | 实现方式 | 我们实测效果 |
|---|---|---|
| Credential 注入层 | 每个 tool definition 绑定独立 vault path;sandbox 启动时,Harness 从 Vault 读取 token,以只读内存映射注入;sandbox 内进程无法cat /proc/kcore或gdbattach 获取明文 | 渗透测试中,即使获得 sandbox root shell,也无法 dump 出任何 credential 明文 |
| Network 策略层 | 每个 sandbox 默认 deny-all outbound;tool definition 中显式声明allowed_hosts: ["api.stripe.com", "api.sendgrid.com"];DNS 查询也受管控,禁止dig @1.1.1.1 any malicious.com | 我们故意在 agent 代码里写requests.get("http://bad.com"),请求被 sandbox kernel 直接 DROP,log 里只有一行network_denied: bad.com |
| Execution 策略层 | tool_call_rate_limit+max_concurrent_calls+timeout_seconds全局策略;还可配置block_patterns: ["rm -rf", "chmod 777", "eval("]字符串级阻断 | 在压力测试中,当 agent 因 bug 连续发起 200 次 Shopify 查询时,第 6 次后tool_call_error事件即触发,返回rate_limit_exceeded,且 session 未中断,继续执行后续步骤 |
更关键的是,所有这些策略的生效,都自动产生policy_enforced类型的 event log。你可以随时查询:“过去 7 天,哪些 session 因 rate limit 被阻断?平均发生在第几步?是否关联特定用户输入?” 这份日志,就是 SOC2 Type II 审计报告里最硬核的证据——它证明你不是靠“我相信我的工程师不会写坏代码”来保证安全,而是靠可验证、可追溯、可量化的 runtime enforcement。
4. 竞争格局与避坑指南:为什么现在入场,反而要更谨慎?
4.1 Hyperscaler 的“免费陷阱”:AgentCore、Vertex、Foundry 的真实水位
Anthropic 的 Managed Agents 发布稿里没提一个字竞品,但行业里所有人都心知肚明:AWS Bedrock AgentCore 在 2025 年 11 月就已 GA,比 Anthropic 早整整 5 个月。我们深度测试过 AgentCore 的生产就绪度,结论很清晰:它不是“另一个选择”,而是“事实标准”(de facto standard)。原因有三:
第一,定价模型碾压式优势。AgentCore 没有“session-hour”这种概念。你只为实际消耗的 compute time 付费——按毫秒计费,单价 $0.0000012/ms(约 $4.32/hour),且首年免费额度高达 100 万毫秒/月。换算下来,一个日均处理 500 个 session、平均 runtime 90 秒的 agent,月账单是 $0。而 Anthropic 同等负载,月成本约 $28.8。这不是“便宜一点”,这是“要不要为基础设施单独建成本中心”的决策分水岭。
第二,框架兼容性无死角。AgentCore 的 runtime 是真正的“any framework, any model”。我们用 LangGraph 写的 workflow、CrewAI 的 multi-agent team、甚至手写的 Python loop,只要符合 request-response 协议,扔进去就能跑。更绝的是,它支持混合模型路由:同一个 session 里,你可以让 Claude 3.5 做创意生成,让 Llama 3.1 做代码审查,让 Command R+ 做 RAG 检索——全在同一个 harness 下调度。Anthropic 的 Managed Agents?只认 Claude。这是生态位决定的必然,不是技术缺陷。
第三,企业级治理开箱即用。AgentCore 的 Policy Controls 在 2026 年 3 月 GA,支持:
- 基于 IAM condition key 的细粒度 tool access 控制(如
"aws:ResourceTag/Department": "Finance") - session-level data residency 策略(强制所有 event log 存在 us-east-1)
- 自动化的 OWASP Agentic Top 10 合规检查报告(每月自动生成 PDF)
我们让安全团队对比过:要达到 AgentCore 的 Policy Controls 水平,自建方案需额外投入 3 名 FTE 开发 6 个月,且无法保证 100% 覆盖。而 AgentCore,勾选几个 checkbox 就行。
实操心得:如果你的 agent 业务刚起步,或者预算敏感,不要纠结“Anthropic vs AWS”,直接用 AgentCore + Claude 模型。我们有个客户,原计划用 Managed Agents,POC 阶段切到 AgentCore 后,不仅成本降为 0,还意外获得了多模型能力,两周内就上线了 A/B 测试功能——用 Claude 生成文案,用 Llama 3.1 评估文案质量,用 Command R+ 检索历史最佳实践。这种灵活性,是 vendor-lock-in 方案永远给不了的。
4.2 开源势力的“闪电战”:Daytona、K8s SIG Agent、Deer-Flow 的真实进展
如果说 hyperscaler 是“稳准狠”的巨头,那开源社区就是“快准狠”的游击队。2025 年底至今,三股开源力量正以惊人速度填补 runtime 层空白:
Daytona:原为 dev environment startup,2025 年初 pivot 到 AI agent infra。其核心是
daytona sandboxCLI,能在 89ms 内启动一个带完整 Linux 用户空间、预装 curl/git/python 的 sandbox。关键创新是sandbox attach命令——你可以在 sandbox 运行时,用 VS Code Remote-SSH 直连进去 debug,就像调试本地进程一样。我们用它复现了一个棘手的github_create_prtimeout 问题,发现是 agent 代码里用了time.sleep(30)而非异步等待,直接在 sandbox 里kill -9进程并 hotfix,5 分钟解决。这种开发体验,是任何托管服务都无法提供的。Kubernetes SIG Agent:2026 年 2 月正式进入 k8s core。它不是一个新项目,而是把 agent runtime 当作 k8s 的一等公民:
kubectl create agent my-sales-agent --from=yaml会自动创建对应的AgentCRD、SandboxPodcontroller、EventLogcustom storage。所有 event log 直接存入 etcd,用kubectl get events -A --agent=my-sales-agent就能查。这意味着,你的 agent infra 和现有 k8s 运维体系完全融合,Prometheus metrics、Grafana dashboard、Fluentd 日志收集,全部开箱即用。Deer-Flow(ByteDance 开源):专攻 long-horizon planning。它把 agent 拆成
Planner(LLM-based)、Executor(sandbox-based)、Verifier(rule-based)三个角色,且Planner输出的是可执行的 DSL(Domain Specific Language),不是自由文本。例如 planner 输出:plan: [ { step: 1, tool: "notion_search_database", params: { query: "status:lead" } }, { step: 2, tool: "salesforce_query_account", params: { domain: "$1.result.domain" } }, { step: 3, tool: "sendgrid_send_email", params: { to: "$2.result.contact_email" } } ]这种结构化 plan,让
Executor可以做静态分析(如检测循环依赖)、做资源预估(step 2 需要多少 memory)、做 failover(step 1 失败,自动跳到备用 notion DB)。我们测试过,一个 12 步的 CRM 流程,Deer-Flow 的成功率比传统 LLM-chaining 高 37%,且平均 latency 低 2.1 秒。
注意:这些开源方案不是“玩具”。Daytona 已被 Rakuten 用于其日本本土电商 agent;K8s SIG Agent 是 Sentry 生产环境的默认 runtime;Deer-Flow 是 Stripe 内部风控 agent 的基础框架。它们共同指向一个事实:runtime 层的“护城河”正在快速消失。你现在为 Anthropic Managed Agents 付出的学习成本、迁移成本、vendor lock-in 成本,很可能在 12 个月内变得毫无意义。
4.3 真正该押注的“上层建筑”:Trace Store、Policy Layer、Vertical Marketplace
既然 runtime 层注定 commoditize(商品化),钱会流向哪里?我们团队花了三个月,访谈了 37 家已上线 agent 的企业(从 SaaS 初创到 Fortune 500),总结出三个确定性最高的价值洼地:
第一,Trace Store:谁拥有 event log 的所有权,谁就拥有 agent 时代的“数据库”。目前 Braintrust、Arize、LangSmith 三足鼎立,但胜负手不在 dashboard 多好看,而在trace portability。我们实测发现:
- Brainstore 支持
EXPORT TO PARQUET,且 schema 完全兼容 OpenTelemetry Logs Data Model,可直接喂给 Snowflake 或 BigQuery 做 BI; - Arize 的 Phoenix 开源版,能
IMPORT FROM anthopic_managed_agents,但只支持 event log,不支持 sandbox stdout/stderr 的二进制 blob; - LangSmith 的 trace export 是 JSON,但字段命名不规范(如
llm_outputvstool_output),导致下游 ETL 脚本要写大量 mapping 逻辑。
结论很残酷:如果你现在选 LangSmith,未来迁移到 Brainstore,至少要重写 60% 的数据分析 pipeline。而 Brainstore 的 Parquet export,今天就能直接对接你现有的数据湖。这就是“上层建筑”的护城河——不是技术多炫,而是能否让你的已有投资(数据、工具、人才)平滑延续。
第二,Policy Layer:从“能做什么”到“该做什么”的治理飞跃。AWS 的 Policy Controls 是起点,不是终点。企业真正头疼的是:
- 如何定义“这个 agent 不该访问生产数据库”?——需要基于 SQL AST 的静态分析引擎
- 如何确保“所有客服 agent 的回复必须包含免责声明”?——需要 LLM-aware 的 post-processing policy
- 如何审计“为什么这个 agent 给了错误的税务建议”?——需要将 event log 与法规知识图谱对齐
这些需求,催生了一批新锐公司。比如我们合作的ComplyAI,它不做 runtime,只做 policy engine。你把 AgentCore 的 event log stream 推给它,它能实时生成:
policy_violation: "sales_agent attempted SELECT * FROM customers WHERE ssn IS NOT NULL"remediation: "blocked query, logged to SIEM, notified compliance officer"root_cause: "tool schema missing NOT NULL constraint on ssn field"
这种深度治理能力,才是 enterprise procurement 部门愿意签 PO 的理由——他们买的不是“agent 跑得快”,而是“agent 跑得合规”。
第三,Vertical Marketplace:当 runtime 免费,价值就在“开箱即用的行业知识”。Salesforce Agentforce 的 $800M ARR 不是吹出来的。我们拆解了它最畅销的三个 agent:
- Healthcare Claims Validator:预置 HIPAA-compliant PII redaction、CMS 1500 表单解析规则、保险公司编码映射表(CPT/ICD-10),客户上传 PDF,30 秒返回拒付原因和修正建议;
- Sales Development Rep (SDR):内置 LinkedIn Sales Navigator API、ZoomInfo 公司层级数据、Gmail SMTP 集成,输入目标行业,自动产出个性化 outreach sequence;
- Security Pentest Orchestrator:调用 Nmap/ZAP/Nuclei,但输出是自然语言漏洞报告 + 修复优先级 + CVE 关联,而非原始扫描日志。
这些 agent 的核心壁垒,不是 runtime 多快,而是domain-specific knowledge graph。vxcontrol/pentagi 的 GitHub star 数暴涨,不是因为它的 sandbox 多快,而是因为它把 MITRE ATT&CK 框架、CVE 数据库、渗透测试 SOP 全部 encode 进了 tool definition 和 system prompt。这才是下一个十年,真正值钱的东西。
5. 我的实战经验:从踩坑到建立 agent infra 的五条铁律
5.1 铁律一:永远假设 context window 会溢出,永远把 state 存在外部
这是我用 47 个失败 session 换来的教训。去年那个 CRM agent,我们以为 200K context 足够撑 50 步,结果第 38 步就崩了。崩溃不是报错,而是静默降级:agent 把第一步拿到的lead_id忘了,却还记得最后一步的email_template,于是用新生成的 template 去 update 一个不存在的 lead,API 返回 404,它又把这个 404 当作新输入继续推理……形成死亡螺旋。
解决方案极其朴素:所有中间状态,必须存入外部 store。我们选了 Redis(因为低延迟+pubsub),但关键不是技术选型,而是模式:
- 每个 session 创建时,生成唯一
session_state_key = "state:" + session_id - 每次 tool call success 后,
HSET session_state_key step_3_result '{"account_id":"abc123","revenue":"$2.1M"}' - model thinking 时,prompt 里只放
{{ get_state("step_3_result") }},而不是整个 history get_state()是一个 lightweight function,10ms 内返回,且带 cache(LRU 1000 items)
这样,context window 只存“当前 step 的输入+最近 2 步的 state key”,永远 < 5K tokens。溢出?不存在的。代价是多一次 Redis roundtrip,但相比 session 丢失的损失,这简直是白送。
5.2 铁律二:Credential 不是“配置”,是“密钥”,必须走 vault + memory map
我们曾在一个金融客户项目里,为图省事,把FEDERAL_RESERVE_API_KEY写在 agent 的 YAML 里,用env_from_secret注入。结果 agent 在 debug 模式下,把整个 env 打印到了日志里——key 泄露。补救措施是:
- 立即 revoke key
- 审计所有日志系统,删除含 key 的 log line
- 重写所有 agent,改用 HashiCorp Vault + memory map
具体操作:
- 在 Vault 创建
secret/finance/fed-api-key,设置 TTL 24h - Agent YAML 中,
tools.federal_reserve_api.credential_vault_path = "secret/finance/fed-api-key" - Harness 启动 sandbox 前,调用 Vault API 获取 token,
mmap()到 sandbox 内存 - agent 代码里,
with open("/mnt/cred/api_key", "r") as f: key = f.read().strip()
这样,即使 agent 代码写print(os.environ),也看不到 key;即使 sandbox 被攻破,攻击者也只能cat /mnt/cred/api_key,而这块内存是只读且无文件系统路径的。这是硬件级保险,不是心理安慰。
5.3 铁律三:Guardrail 不是“锦上添花”,是“生存必需”,且必须可量化
很多团队把 guardrail 当作“高级功能”,等 agent 上线后再加。大错特错。我们上线第一个 agent 时,就强制启用了三项 guardrail:
pii_redaction:用 spaCy + custom NER 模型,识别 email/phone/ssn/credit_card,替换为[REDACTED_EMAIL]tool_call_rate_limit:对salesforce_query_account设max_calls_per_minute: 3,防 DDoS 自己的 CRMoutput_safety_filter:用本地部署的 Llama-Guard-3,对 model output 做实时分类(safe/unsafe:harassment/unsafe:privacy)
关键是要量化效果。我们每周生成报告:
pii_redaction_hits_per_week: 从 127 次/周降到 3 次/周(说明用户输入习惯在改变)rate_limit_triggers_per_day: 稳定在 0.2 次/天(证明流量正常,没异常爬虫)safety_filter_blocks_per_million_tokens: 从 8.3 降到 0.7(说明 prompt engineering 有效)
这些数字,是说服 CISO 批准 agent 上线的唯一语言。没有数字的 guardrail,就是墙上挂的装饰画。
5.4 铁律四:不要迷信“托管”,先问清楚“托管了什么,没托管什么”
Managed Agents 托管了 runtime、sandbox、event log storage,但它不托管你的 business logic。我们见过太多团队,把复杂的 CRM 逻辑全写在 system prompt 里,结果每次业务规则变更,都要改 YAML、重新 deploy、等 Anthropic 同步——平均 8 分钟。而真正的敏捷,是 business logic 可热更新。
我们的解法:把 agent 拆成“orchestrator”和“worker”。
- Orchestrator(托管):只做 routing、guardrail、logging。YAML 里定义
tools.crm_worker.execute - Worker(自托管):一个独立的 FastAPI 服务,暴露
/executeendpoint,实现所有 CRM 逻辑。YAML 中tools.crm_worker.endpoint = "https://crm-worker.internal/api/v1/execute"
这样,CRM 逻辑变更,只需git push到 worker 服务,5 秒生效。Orchestrator 的 YAML 一年都不用动。托管的价值,在于解放你去专注真正的业务创新,而不是运维 infrastructure。
5.5 铁律五:从第一天起,就按“agent 是产品”而非“agent 是功能”来设计
最后一条,也是最容易被忽视的。很多团队把 agent 当作内部提效工具,随便起个名字就上线。结果半年后,销售部要用,客服部要接入,法务部要审计,老板要 ROI 报告——全乱套了。
我们的做法:给每个 agent 分配 product manager,按 SaaS 产品标准运作:
- 命名规范:
<domain>-<function>-<version>,如sales-lead-qualifier-v2 - SLA 承诺:在文档里白纸黑字写明
p95 latency < 3.2s,uptime > 99.95%,data residency: us-west-2 - 版本管理:YAML 文件打 Git tag,
v2.1.0对应特定 commit,rollback 就是git checkout v2.0.0
