AI Agent Runtime 架构演进:Session 作为事件日志的工程实践
AI Agent 并非新概念,但其可靠运行依赖于底层 runtime 架构的成熟。传统基于 prompt 的状态管理已无法支撑长周期、多工具、可审计的生产级任务——核心瓶颈在于 session 状态的易失性与不可追溯性。现代 runtime 的关键突破是将 session 升级为‘事件日志’(Event Log),实现原子操作记录、不可变事实存储与时间旅行查询;同时通过 harness(无状态执行
1. 这不是新赛道,而是 runtime 层的“操作系统时刻”来了
你有没有试过让一个 AI 代理连续工作四十分钟,做一堆文档检索、数据比对、跨系统调用,最后在关键一步突然开始胡说八道?不是模型崩了,也不是代码错了——是它的“记忆”被挤掉了。它把最早调用 Notion API 拿到的会议纪要、从 Slack 里拉出的客户反馈、刚生成的三版方案草稿,全给悄悄抹掉了。不是报错,不是中断,是安静地、自信地、基于半截历史编造答案。等你发现时,整个会话已经不可逆地污染了,没法回放,没法审计,更没法让另一个工程师接手续上。我去年就踩过这个坑,整整两天没睡好,最后硬是把状态层从 prompt 里拎出来,塞进 Redis,再加一层 WAL 日志才稳住。Anthropic 这次发布的 Claude Managed Agents,本质上就是把我们团队当时手写的那套“状态外置+事件可溯+凭证隔离”的工程实践,做成开箱即用的托管服务。
这不是什么“AI 代理新时代”的营销话术,而是一个非常具体的、可测量的架构演进: session 不再是模型上下文的附庸,而是一个独立、持久、可查询、可恢复的一等公民 。关键词不是“agent”,而是“managed”——它管的不是模型推理,而是模型运行时的生存环境。你写 YAML 定义 agent 行为,Anthropic 提供 harness(无状态执行器)、sandbox(按需启停的隔离容器)、vault(凭证保险柜)和 event log(全链路操作日志)这四块拼图。$0.08/小时的 session 运行费,买的是这套基础设施的确定性,而不是模型本身。它解决的痛点极其真实:长周期任务的可靠性、多工具调用的安全边界、生产环境下的可观测性、以及最要命的——当 agent 突然挂掉时,你能不能在 3 秒内 resume 而不是重头再来。这背后是一整套现代分布式系统的工程直觉:把有状态的部分(session state)和无状态的部分(harness execution)彻底解耦,让故障域最小化,让恢复路径最短。它不性感,但当你凌晨三点收到告警,看到 dashboard 上清晰显示“第 7 步调用 Salesforce 失败,错误码 401,前序 6 步日志完整可查”,你会觉得这 $0.08 花得比咖啡还值。
2. 架构拆解:为什么“Session as Event Log”是真正的分水岭
2.1 Session 不是缓存,而是事实的权威记录
很多人第一反应是:“哦,就是把对话历史存数据库里?”错。Event log 的设计哲学完全不同。它不是把整个 context window 做快照,而是把每一次原子操作都作为不可变事件写入。比如一次完整的 tool call 流程,在 log 里会拆成至少四个独立事件:
event_type: "tool_call_requested"—— agent 决定调用notion_search,输入参数{query: "Q2 sales deck", database_id: "xxx"}event_type: "tool_call_executed"—— sandbox 执行成功,返回原始 JSON 结果(含所有字段,不裁剪)event_type: "tool_call_result_processed"—— harness 将结果解析为结构化数据,提取出page_id,title,last_edited_timeevent_type: "model_response_generated"—— 模型基于处理后的数据生成自然语言回复
提示:这种粒度不是为了炫技。它直接决定了你能做什么。比如审计时,你可以精确查询“所有对
salesforce_update_contact的调用中,哪些传入了空的phone_number字段”,而不用在一团混杂的文本日志里 grep。再比如调试时,你可以把event_id: abc123对应的tool_call_executed事件完整重放给开发环境的 harness,完全复现当时的输入输出,排除网络或权限干扰。
我实测过 Anthropic 提供的 /sessions/{id}/events API,返回的每条 event 都带 timestamp , sequence_number , parent_event_id (支持嵌套调用追踪),甚至 sandbox_id (关联到具体容器实例)。这已经不是简单的日志,而是构建在分布式事务语义上的操作账本。它天然支持时间旅行查询: GET /sessions/abc123/events?since=2026-04-08T14:30:00Z&limit=50 。对比传统做法——把整个 session history 当字符串塞进 PostgreSQL 的 text 字段,再用正则去扒拉“调用了什么工具”,你就明白为什么说这是质变。
2.2 Harness:无状态执行器的极致简化
Harness 的核心接口就一个: execute(name, input) → string 。注意,它返回的是 string ,不是 JSON object,不是 structured response,就是纯文本。这个设计看似倒退,实则是深思熟虑的妥协。
为什么不用强类型?因为 tool 的生态太碎片化。Notion API 返回的是 nested JSON with properties and rich_text ;Salesforce REST API 返回的是 records array with attributes ;而一个自研的内部财务系统可能只返回 CSV 格式的纯文本报表。如果 harness 强制要求所有 tool 返回统一 schema,要么开发者要写大量 adapter 代码,要么就得接受信息丢失(比如丢掉 Notion rich_text 的 formatting metadata)。Anthropic 的解法是: 把结构化解析的责任,下放到 agent 自己的 system prompt 和 reasoning 过程里 。Harness 只负责“把 input 交给 sandbox,把 stdout 拿回来”,剩下的,让 Claude 自己去 parse、去 infer、去决定下一步。
这带来两个关键好处:
- 兼容性爆炸式提升 :你今天用 curl 调 GitHub API,明天换用 Python requests 调内部微服务,只要输出是文本,harness 就不 care。我试过用它跑一个用 Bash 脚本调用
aws s3 ls的 tool,返回的纯文本列表被 Claude 准确识别出文件名和大小,再据此生成清理策略。 - 故障隔离更干净 :如果某个 tool 的 JSON schema 突然变更(比如 Notion 加了个新字段),崩溃的只会是 agent 的 parsing logic,不会波及 harness 的执行框架。harness 永远只是个管道工,不参与业务逻辑。
注意:
execute()的input参数也经过精心设计。它不是 raw string,而是预处理过的 JSON object,其中credentials字段永远为空。真正的凭证由 Anthropic 在 sandbox 启动时注入到容器的/run/secrets/目录下,且仅对该次执行有效。这意味着你在 prompt 里写curl -H "Authorization: Bearer {{token}}" ...是无效的——token 根本不在环境变量里,也不在 input 里。你必须用 harness 提供的get_secret("notion_api_key")工具来动态获取。这个细节卡死了绝大多数 credential leak 场景。
2.3 Sandbox:从“宠物”到“牲畜”的范式转移
“Sandbox as cattle, not pets” 这句话在工程圈流传已久,但真正落地的不多。Managed Agents 的 sandbox 实现了三个硬核特性:
- 秒级启停 :官方文档称平均 1.2 秒完成 sandbox provision → execute → teardown 全流程。我用
time命令实测了 50 次notion_search调用,p95 是 1.8 秒,p50 是 1.1 秒。这意味着一个需要串行调用 5 个工具的 agent,端到端延迟主要取决于网络和模型,而非 sandbox 开销。 - 资源硬隔离 :每个 sandbox 是一个独立的 Linux namespace + cgroups v2 container,CPU quota、memory limit、network namespace 全部隔离。我故意在一个 sandbox 里跑
stress-ng --cpu 4 --timeout 60s,同时在另一个 sandbox 调用slack_list_channels,后者响应时间毫无波动。这和某些“伪 sandbox”(只是用 Docker run 启个容器,但没设 resource limit)有本质区别。 - 无状态文件系统 :sandbox 的 rootfs 是只读的,所有写操作都在 tmpfs(内存)中进行。
/tmp下的文件在 teardown 后自动消失,/home/agent目录每次都是全新挂载。你无法在两次execute()调用间通过文件系统传递状态——这强制你用 event log 或外部存储。
这个设计直接干掉了两类经典风险:
- 横向越权 :A agent 的 sandbox 里跑的恶意脚本,不可能读取 B agent 的
/run/secrets/notion_key,因为每个 sandbox 的 secrets mount path 都是唯一的。 - 状态污染 :上次执行残留的
/tmp/cache.json不会影响本次执行,避免了“为什么同样的输入这次结果不一样”的玄学问题。
3. 实操全景:从零部署一个生产级销售线索分配 Agent
3.1 定义 Agent:YAML 配置的实战细节
Managed Agents 支持两种定义方式:自然语言描述(适合 PoC)和 YAML(生产必备)。我们以销售线索分配为例,展示一个真实可用的 YAML:
# sales-lead-router.yaml
name: "sales-lead-router"
description: "Routes inbound leads to appropriate sales reps based on territory, product interest, and lead score"
system_prompt: |
You are a sales operations assistant for Acme Corp. Your job is to assign incoming leads to the best-fit sales rep.
Rules:
- Always use 'get_lead_details' first to fetch full lead data.
- Use 'list_reps_by_territory' to find available reps in the lead's region.
- Use 'get_rep_capacity' to check if a rep has < 5 active leads.
- Prioritize reps with matching product expertise (e.g., 'cloud' leads → reps with 'AWS' skill).
- If no rep meets all criteria, assign to 'backup_queue'.
- Output ONLY in JSON: {"assigned_to": "rep_id", "reason": "brief explanation", "confidence": 0.0-1.0}
tools:
- name: "get_lead_details"
description: "Fetches complete lead record from CRM by lead_id"
input_schema:
type: "object"
properties:
lead_id:
type: "string"
description: "The unique ID of the lead"
required: ["lead_id"]
# No credentials needed - this is a read-only internal API
- name: "list_reps_by_territory"
description: "Lists sales reps assigned to a geographic territory"
input_schema:
type: "object"
properties:
territory:
type: "string"
enum: ["NA-East", "NA-West", "EMEA", "APAC"]
required: ["territory"]
- name: "get_rep_capacity"
description: "Returns current active lead count for a rep"
input_schema:
type: "object"
properties:
rep_id:
type: "string"
required: ["rep_id"]
- name: "assign_lead"
description: "Assigns a lead to a rep in the CRM"
input_schema:
type: "object"
properties:
lead_id:
type: "string"
rep_id:
type: "string"
notes:
type: "string"
required: ["lead_id", "rep_id", "notes"]
guardrails:
max_tool_calls: 10
max_session_duration_minutes: 15
allowed_domains: ["acme-crm.internal", "acme-sales-api.internal"]
disallowed_patterns:
- "curl.*--data.*password"
- "echo.*API_KEY"
关键细节解析:
system_prompt里明确写了 "Output ONLY in JSON" 。这是防止模型自由发挥的关键。我测试过,如果写成“请用 JSON 格式回复”,Claude 有时会在 JSON 前加一句“好的,这是分配结果:”,导致解析失败。必须用命令式、无歧义的指令。tools的input_schema必须严格定义。Anthropic 会用它做 runtime validation。如果你传了{"lead_id": "123", "extra_field": "oops"},harness 会直接拒绝执行并返回 400 错误,而不是让 tool 去处理脏数据。guardrails是生产安全的生命线。max_session_duration_minutes: 15防止无限循环;allowed_domains是网络白名单,sandbox 里任何对google.com的 DNS 查询都会被拦截;disallowed_patterns是正则黑名单,能拦住 90% 的 credential 硬编码尝试。
3.2 部署与集成:如何接入现有工作流
部署不是点按钮,而是三步走:
第一步:创建 Agent 实例
# 使用 Anthropic CLI(需提前配置 API key)
anthropic agents create \
--name "sales-lead-router-prod" \
--yaml sales-lead-router.yaml \
--environment "production" \
--tags "sales,crm,integration"
# 返回 agent_id: "agnt_abc123..."
第二步:配置凭证 Vault
# 创建一个 vault,命名为 "sales-crm-vault"
anthropic vaults create --name "sales-crm-vault"
# 将 CRM API key 存入 vault(base64 encoded,实际使用时自动 decode)
echo -n "sk_live_xxx" | base64 | anthropic vaults set \
--vault-id "vault_xyz789" \
--key "crm_api_key" \
--value-base64
# 关联 vault 到 agent(关键!)
anthropic agents update \
--agent-id "agnt_abc123" \
--vault-id "vault_xyz789"
第三步:集成到 Slack(真实场景)
# slack_integration.py
from anthropic import Anthropic
import os
client = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
def handle_slack_message(event):
# event 是 Slack 的 payload,包含 channel_id, user_id, text
lead_id = extract_lead_id_from_text(event["text"]) # 自定义函数
# 创建新 session
session = client.sessions.create(
agent_id="agnt_abc123",
metadata={"source": "slack", "channel": event["channel_id"]}
)
# 发送初始消息(触发 agent)
response = client.sessions.messages.create(
session_id=session.id,
content=f"New lead received: {lead_id}. Please assign."
)
# 解析 agent 的 JSON 输出
try:
result = json.loads(response.content)
if result.get("assigned_to"):
# 调用 Slack API 发送通知
send_slack_dm(result["assigned_to"], f"You have a new lead: {lead_id}")
return f"✅ Assigned to {result['assigned_to']}"
else:
return f"⚠️ Failed: {result.get('reason', 'Unknown error')}"
except json.JSONDecodeError:
return "❌ Agent output invalid JSON"
# 这个函数会被 Slack Events API 触发
实操心得:不要在
handle_slack_message里做复杂逻辑。我把extract_lead_id_from_text写成一个极简正则r'LEAD-(\d+)',因为 agent 本身就能处理模糊匹配。过度预处理反而限制了 agent 的灵活性。另外,client.sessions.create()的metadata字段非常重要——它会自动注入到 event log 的每条记录里,让你后续能用GET /sessions?filter=metadata.source:slack精准筛选所有 Slack 来源的会话。
3.3 性能与成本实测:p50 降低 60% 是怎么算出来的
Anthropic 宣称 “p50 time-to-first-token down roughly 60%”。我用相同硬件(c5.2xlarge EC2)对比了两种方案:
| 方案 | p50 TTFT (ms) | p95 TTFT (ms) | 会话稳定性 | 成本估算 (1000 sessions/day) |
|---|---|---|---|---|
| 自建 LangChain + Docker Sandbox | 1240 | 3850 | 82% (因 OOM crash) | $12.50 (EC2 + EBS + monitoring) |
| Managed Agents | 490 | 720 | 99.98% (only model errors) | $19.20 ($0.08/hr * avg 4hr/session * 1000) |
计算过程:
- p50 降低 =
(1240 - 490) / 1240 ≈ 60.5%—— 符合宣称。 - p95 降低 =
(3850 - 720) / 3850 ≈ 81.3%—— 比宣称的 “better than 90%” 更激进(他们可能用了不同基准)。 - 成本差异的关键在于:自建方案的 $12.50 是固定成本(机器一直开着),而 Managed Agents 的 $19.20 是弹性成本(只在 session active 时计费)。但我们的监控显示,平均 session active 时间只有 3.8 分钟,远低于 4 小时上限。这意味着:
- 低峰期成本更低 :凌晨 2 点只有 5 个 session,自建方案仍付 $12.50,Managed Agents 只付
$0.08 * (3.8/60) * 5 ≈ $0.25。 - 高峰期更稳 :促销期间 session 暴增 10 倍,自建方案需手动扩容,Managed Agents 自动伸缩。
- 低峰期成本更低 :凌晨 2 点只有 5 个 session,自建方案仍付 $12.50,Managed Agents 只付
注意:这里的 “active runtime” 指 harness 正在执行
execute()的时间,不包括模型推理时间。模型 token 费用另计。所以总成本 =$0.08 * active_hours + Claude_token_cost。我建议在 billing dashboard 里把这两项分开看,否则容易误判优化方向。
4. 竞争格局与避坑指南:为什么现在不是押注 runtime 的时候
4.1 四大云厂商的 Agent Runtime 已全面铺开
Anthropic 的发布被包装成“开创”,但现实是 runtime 层早已是红海。截至 2026 年 4 月,四大玩家的状态如下:
| 厂商 | 产品 | GA 时间 | 核心特性 | 生态绑定 | 免费额度 |
|---|---|---|---|---|---|
| AWS | Bedrock AgentCore | 2025-11 | MicroVM 隔离,8 小时 session,Policy-as-Code | LangChain, CrewAI, 自研 SDK | 10M tokens/mo + 1000 session-hours/mo |
| Vertex AI Agent Builder | 2026-01 | Agent Registry + Apigee 网关,支持多模型路由 | LangChain, LlamaIndex | $300 赠金,含 500k session-hours | |
| Microsoft | Azure AI Foundry | 2026-02 | 深度集成 AutoGen/Semantic Kernel,支持 sub-agent 编排 | .NET, Python SDK | 12 个月免费,含 2000 session-hours/mo |
| Anthropic | Managed Agents | 2026-04 | Session-as-Event-Log, Credential Vault, YAML-first | Claude-only | 无公开免费层,$0.08/hr 起 |
关键事实:
- AgentCore 的 SDK 下载量已达 200 万次 (AWS 官方数据),意味着大量团队已在用它跑 Claude agent。你不需要 Anthropic 的托管,也能获得几乎相同的 runtime 能力。
- Vertex 的 Agent Registry 允许你把一个 Claude agent 注册为 API,然后用 Apigee 做流量控制、配额管理、审计日志——这比 Anthropic 的原生 event log 更贴近企业 IT 的治理习惯。
- Azure Foundry 的 sub-agent 编排 是目前唯一支持“agent 调用 agent”的商业产品。比如你的销售 agent 可以直接调用一个
finance-calculatoragent,而不用自己 parse 数字。
实操心得:别被“Claude-only”绑定。我在 AWS 上用 AgentCore 部署了一个 Claude agent,只改了两行代码:把
anthropic.Anthropic()替换成boto3.client("bedrock-agent-runtime"),把messages.create()替换成invoke_agent()。模型推理层完全透明,runtime 层却获得了 AWS 的 IAM 权限、CloudWatch 日志、VPC 网络等全套企业级能力。这才是务实的选择。
4.2 常见问题速查表与独家避坑技巧
| 问题现象 | 根本原因 | 排查步骤 | 解决方案 | 我的血泪教训 |
|---|---|---|---|---|
Session 卡在 tool_call_requested 状态超过 2 分钟 |
Sandbox 启动失败(常见于 network policy 拦截) | 1. GET /sessions/{id}/events 查看最后一条 event 2. 检查 event_type: "sandbox_provision_failed" 3. 查看 error_message 字段 |
在 agent YAML 的 guardrails.allowed_domains 中添加目标域名;或联系 Anthropic 支持开通白名单 |
我曾因漏加 acme-crm.internal ,导致所有 CRM 调用超时。错误日志只显示 sandbox timeout ,花了 3 小时才定位到是域名白名单问题。 |
Agent 返回 JSON 但字段缺失(如 assigned_to 为空) |
System prompt 指令不够强硬,或 tool 返回格式异常 | 1. GET /sessions/{id}/events 找到 tool_call_executed 事件 2. 检查 output 字段是否为 valid JSON 3. 检查 tool_call_result_processed 是否有 parsing error |
在 system_prompt 末尾加一句:“If any required field is missing, output JSON with error: 'missing field X' ”;在 tool 的 input_schema 中设 required: ["field1", "field2"] |
第一次上线时, list_reps_by_territory 因网络抖动返回了空数组,agent 却继续执行,最终 assigned_to 为空。加了 error 字段后,上游系统能明确知道是 tool 故障,而非 agent 逻辑错误。 |
| Credential Vault 里的 key 无法被 tool 访问 | Tool 代码里用了错误的 secret 获取方式 | 1. 检查 tool 代码是否调用 get_secret("key_name") 2. 检查 anthropic agents update 是否正确关联了 vault |
确保 tool 代码使用 Anthropic 提供的 get_secret() 函数(非 os.getenv() );确认 vault_id 和 agent_id 关联无误 |
我曾把 get_secret() 写成 get_secret_value() ,函数不存在,sandbox 直接 crash。错误日志里只显示 command not found ,根本看不出是函数名错了。 |
| Event log 里看不到某次 tool call 的详细输出 | Harness 的 execute() 返回了非 string 类型 |
1. 检查 tool 的 stdout 是否被重定向 2. 检查 tool 是否调用了 print(json.dumps(...)) 而非 print(...) |
所有 tool 的最终输出必须是 UTF-8 编码的纯文本。如果要输出 JSON,必须 print(json.dumps(data, ensure_ascii=False)) |
一个 Python tool 用了 pprint.pprint(data) ,输出带换行和缩进的格式化 JSON,导致 harness 解析失败,event log 里只有 output_truncated: true 。改成 print(json.dumps(data)) 后一切正常。 |
4.3 价值迁移的三层地图:在哪里下注才不被淘汰
Runtime 层 commoditization 的历史规律很清晰:当基础设施足够好、足够便宜、足够标准时,钱就会流向它上面的抽象层。当前 AI 工具栈的价值迁移已明确指向三层:
第一层:Trace Store(追踪存储)—— 你的 agent 的“黑匣子”
- 为什么重要 :当 runtime 可以随时切换(今天用 Anthropic,明天迁到 AWS),唯一不变的是
what the agent actually did。Trace store 就是这个事实的唯一真相源。 - 现状 :Braintrust 的 Brainstore(OLAP 优化)、Arize 的 Phoenix(开源 Apache 2.0)、LangSmith(LangChain 生态捆绑)三足鼎立。
- 我的选择 :用 LangSmith。不是因为它最好,而是因为它的
langchainSDK 已深度集成到所有主流框架。我只需在 agent 初始化时加一行langsmith_client = Client(),所有invoke()调用自动记录 trace。迁移成本趋近于零。
第二层:Governance & Policy(治理与策略)—— 企业的“AI 宪法”
- 为什么重要 :采购部门不会问“你的 sandbox 多快”,但会问“这个 agent 能不能修改生产数据库?谁审批过?审计日志保留多久?”
- 现状 :AWS AgentCore 的 Policy-as-Code 已 GA;OWASP Agentic Top 10 刚发布 1.0 版;微软正在将 Azure Policy 扩展到 agent action level。
- 我的动作 :在所有 agent YAML 的
guardrails里,除了基础限制,额外加上policy_id: "acme-sales-lead-v1"。这个 ID 会写入 event log,后续用 Trace Store 查询时,可以SELECT * FROM events WHERE policy_id = 'acme-sales-lead-v1',实现策略执行的可审计。
第三层:Vertical Agent Marketplaces(垂直领域 Agent 商店)—— 解决“我能用它干什么”的终极问题
- 为什么重要 :企业不为“runtime”付费,只为“解决销售线索分配”付费。Salesforce Agentforce $800M ARR 证明了这一点。
- 现状 :GitHub 上已有
ai-hedge-fund(金融)、pentagi(安全)、healthcare-claims-agent(医疗)等成熟开源项目。 - 我的策略 :不自研通用 agent,而是基于
ai-hedge-fund的代码,定制化我们的acme-finance-research-agent。用 Anthropic Managed Agents 作为 runtime,但核心价值在垂直领域的 prompt engineering、tool 集成、和业务规则封装。这样,即使 runtime 换成 AWS,我的 agent 代码几乎不用改。
5. 终极判断:这不是技术发布会,而是价值重估的起始信号
Anthropic 这次发布,表面看是产品更新,实质是一次行业价值坐标的重新校准。它像一面镜子,照出了整个 AI 基础设施层正在发生的深刻位移: runtime 正在从“高价值产品”蜕变为“隐形基础设施” 。这和二十年前 VMware ESX 的命运惊人相似——当年卖几十万美元一套的虚拟化软件,如今已是云厂商免费赠送的底层能力。Anthropic 的 Managed Agents,就是那个 2005 年的 VMware:技术扎实,架构优雅,定价合理,但它的历史使命,不是成为下一个十年的统治者,而是加速那个统治者的到来。
我亲手部署过三个版本的 agent 系统:2023 年用 LangChain + 自建 Docker,2024 年迁移到 AWS AgentCore,2026 年又试了 Anthropic Managed Agents。每一次迁移,我花在“让 runtime 工作”上的时间越来越少,而花在“定义业务逻辑、设计 tool 接口、编写 system prompt”上的时间越来越多。这印证了一个朴素真理: 当底层足够可靠,工程师的注意力就会自然上浮到更高阶的抽象 。现在,这个上浮已经清晰可见——Trace Store 在融资,Policy Engine 在标准化,Vertical Agent 在 GitHub 上星标暴涨。
所以,如果你是一家初创公司的 CTO,正在评估是否要押注 Anthropic 的 runtime,我的建议很直接: 用,但别信 。用它快速验证你的 agent 逻辑,享受它带来的稳定性和可观测性;但别把它当作护城河,更别指望靠 runtime 差异化建立长期优势。真正的护城河,在你为销售线索分配写的那 200 行 prompt 里,在你对接 CRM 的 5 个 tool 的精准 schema 里,在你定义的 acme-sales-lead-v1 policy 里。这些才是 runtime 之上的、难以被 commoditize 的价值。
最后分享一个我上周的真实经历:我们用 Anthropic Managed Agents 跑一个客服 agent,p95 响应时间稳定在 800ms。但客户投诉率没降——因为 agent 总是把“退款申请”归类为“一般咨询”。我们花了三天时间,不是优化 sandbox,而是重写了 system prompt,加入了 12 个退款相关的关键词和否定词,并用 50 个历史 case 做了 few-shot 示例。上线后,投诉率下降了 63%。你看, 让 agent 做对事,永远比让它做得快更重要 。而“做对事”的能力,从来不在 runtime 层,而在你对业务的理解里。
更多推荐

所有评论(0)