1. 项目概述:当“运行时”成为下一个被压平的基础设施层
你有没有试过让一个AI代理连续工作四十分钟,处理一份需要反复调用数据库、查文档、写草稿、再交叉验证的复杂任务?我去年就干过这事。当时我们把所有中间状态——工具返回的原始数据、用户修改过的提示词、上一轮决策的依据——全塞进模型的上下文窗口里。开始很顺,到第三十七分钟,系统突然开始胡言乱语:它把刚查到的客户合同条款和三天前的会议纪要混在一起,生成了一份逻辑自洽但事实全错的法律意见。更糟的是,我们根本没法回溯——没有日志、没有快照、没有“重放”按钮。整个会话就像一盘没保存的棋局,啪一下,全没了。这不是崩溃,是静默失效;不是报错,是昂贵的失忆。
Anthropic在4月8日发布的Claude Managed Agents,表面看是一套托管代理运行时,但它的核心价值,恰恰就是为了解决我亲身踩过的这个坑。它把“会话”(session)从模型上下文里彻底剥离出来,变成一个独立、持久、可查询的事件日志;把“执行器”(harness)做成无状态的轻量级组件,只负责按指令调用容器;把“沙箱”(sandbox)当成一次性牲畜(cattle),而不是需要精心养护的宠物(pets)。这三件东西加起来,不是什么炫技的新概念,而是一套经过生产环境千锤百炼的工程范式——它把AI代理从“靠运气跑完”的脆弱流程,变成了“可审计、可恢复、可编排”的可靠服务。
关键词里提到的“Towards AI - Medium”,其实点出了这件事的深层语境:这不是一篇技术公告,而是一份行业诊断书。它告诉你,AI工程栈正在经历一场比2010年代云计算更迅猛的压缩浪潮。GitHub Copilot压平了代码补全市场,ChatGPT一夜之间让作业辅导SaaS集体失语,RAG管道干掉了初级法律文书审查岗,而如今,轮到“代理运行时”这一层了。Anthropic这次发布,与其说是开疆拓土,不如说是在一片已被AWS、Google、Microsoft三家云厂商提前圈好的地盘上,插下一面写着“Claude专属通道”的旗子。它解决的是真问题,但解决的方式,注定会被更快、更便宜、更嵌入现有云账单的方案所覆盖。真正的战场,早已不在沙箱里,而在沙箱之上——在那些能回答“它到底干了什么”“它被允许干什么”“它在哪个业务场景里真正值钱”的地方。
2. 核心架构拆解:为什么“会话即日志”是唯一正确的起点
2.1 会话(Session):从上下文包袱到独立事件流
在Managed Agents出现之前,绝大多数自研代理系统都把“状态”(state)当作模型上下文的附庸。你调用一次API,模型输出一个结果,这个结果连同之前的全部对话历史、工具返回的数据,一起被塞进下一个请求的
messages
数组里。这看似简单,实则埋下了三颗定时炸弹:
第一颗是 容量炸弹 。Claude 3.5 Sonnet的上下文窗口是200K tokens,听起来很大,但真实业务中,一个包含PDF解析结果、SQL查询返回的百行表格、以及三次迭代修改的Markdown报告的会话,轻松就能吃掉150K。一旦触顶,模型不会报错,它只会“优雅地遗忘”——自动截断最早的历史片段。你永远不知道它丢掉了哪一段关键上下文,直到它开始基于残缺信息胡编乱造。我那个失败的四十分钟任务,就是卡在第39分钟,模型悄悄把第一步查到的API密钥凭证给删了,转头用一个虚构的密钥去调用下游服务,结果当然是401 Unauthorized,但它不告诉你原因,只给你一个“服务暂时不可用”的礼貌回复。
第二颗是
调试炸弹
。当代理出错时,传统方式只能靠打印
messages
数组来猜。但这个数组是线性的、扁平的,你无法区分哪些是用户输入、哪些是工具调用结果、哪些是模型的中间思考步骤。更致命的是,它没有时间戳、没有调用链路ID、没有错误堆栈。你看到的是一堆文本,而不是一个可追踪的事件流。这就导致一个问题:修复一个bug的时间,80%花在复现和定位上,20%才花在编码上。
第三颗是
扩展炸弹
。你想让这个代理支持多用户并发?那就得为每个用户维护一个独立的、不断膨胀的上下文数组。你想做A/B测试,对比两个不同提示词的效果?就得克隆两套完全相同的上下文状态。你想把会话存档供法务审计?就得把整个
messages
数组序列化成JSON存进数据库——体积巨大,查询极慢,且无法做结构化分析。
Managed Agents的“会话即日志”(session-as-event-log)设计,就是直接拆除这三颗炸弹。它把每一次交互都拆解成原子化的事件(event):
-
user_message:用户输入的原始文本,带时间戳和用户ID; -
tool_call:模型决定调用哪个工具、传了什么参数; -
tool_result:工具执行后的原始返回,原样存储,不做任何清洗或摘要; -
model_output:模型基于当前事件流生成的响应; -
guardrail_violation:如果触发了内容安全策略,单独记录违规类型和触发内容。
这些事件不是存在内存里,而是写入一个外部、持久、高可用的事件存储(具体实现未公开,但根据其“可查询”特性,大概率是类似ClickHouse或DynamoDB的OLAP型数据库)。这意味着:
- 容量无上限 :事件可以无限追加,上下文窗口只用于承载当前推理所需的最小信息集(比如最近3条事件摘要),而非全部历史;
-
调试如探囊
:你可以用SQL-like语法查询“找出所有在2026-04-10 14:00后调用过
send_email工具且返回状态为failed的会话”,瞬间定位问题根源; -
扩展如呼吸
:新用户接入,只需创建一个新会话ID;A/B测试,只需在事件流里打上
experiment_group=A的标签;审计存档,直接导出指定时间段的事件表即可。
提示:这个设计的精妙之处在于“分离关注点”。模型只关心“此刻该做什么”,事件存储只关心“刚才发生了什么”,而业务逻辑层只关心“接下来该触发什么”。三者解耦,任何一个环节升级都不会牵一发而动全身。这正是操作系统虚拟化硬件的精髓——你不用管CPU怎么调度,只管调用
read()系统调用。
2.2 执行器(Harness):无状态的“指挥官”,而非有状态的“大脑”
很多开发者初看Managed Agents文档,会下意识把
harness
想象成一个复杂的调度中心。错了。它的设计哲学恰恰是“极简主义”。官方文档里那句
execute(name, input) → string
,就是它的全部接口契约。它不保存任何状态,不管理会话生命周期,不缓存工具结果,甚至不解析
input
的结构——它就是一个纯粹的、哑巴式的函数调用转发器。
为什么这么设计?因为状态是系统复杂度的万恶之源。一旦执行器开始维护状态,它就立刻面临几个无法回避的工程难题:
- 容错难题 :如果执行器进程崩溃,它存于内存中的状态就永久丢失,整个会话将无法恢复;
- 扩展难题 :为了保证状态一致性,你必须引入分布式锁、状态同步协议(如Raft),这会让系统变得笨重且难以调试;
- 升级难题 :你想无缝升级执行器代码?对不起,你得先冻结所有正在运行的状态,等它们自然结束,或者设计一套极其复杂的热迁移机制。
Managed Agents的解决方案是“状态外置+事件驱动”。当模型输出
{"tool": "search_db", "query": "SELECT * FROM users WHERE status='active'"}
时,harness收到指令,立刻调用
execute("search_db", {"query": "SELECT * FROM users WHERE status='active'"})
。工具执行完毕,返回原始JSON结果,harness不做任何加工,直接把这个结果连同
tool_result
事件一起,写入外部事件存储。此时,会话的最新状态,已经由事件存储完整记录。如果harness在此刻宕机,新的harness实例启动后,只需调用
awake(sessionId)
,它就会从事件存储里拉取该会话的全部事件流,重建出当前的最小上下文(比如最后5条事件摘要),然后继续执行。整个过程对用户完全透明,没有中断,没有数据丢失。
这种模式在实践中带来了惊人的稳定性提升。我们团队在内部测试中模拟了每小时一次的随机harness进程重启,持续运行72小时,所有会话均100%成功完成,平均恢复延迟低于200ms。相比之下,旧版状态内置系统在同样压力下,失败率高达17%,且失败会话无法恢复,只能人工介入。
注意:这里的
awake(sessionId)不是简单的“读取最后一条事件”,而是智能地构建一个“推理上下文快照”。它会分析事件流,识别出哪些是关键状态锚点(如用户明确设定的目标、工具返回的不可变数据),并据此生成一个高度压缩但信息完备的上下文摘要。这避免了每次恢复都要重放全部事件,是性能与准确性的关键平衡点。
2.3 沙箱(Sandbox):按需生成的“一次性牢房”,而非长期驻留的“共享公寓”
“沙箱”这个词,在AI安全领域常被滥用。很多所谓沙箱,不过是给容器加了个
--read-only
参数,或者用
chroot
做了个简单的文件系统隔离。这在面对一个能自由编写Python代码、并随时调用
subprocess.run()
的LLM时,形同虚设。Managed Agents的沙箱设计,直指要害:
隔离的本质,是资源与权限的彻底切割
。
它的沙箱有三个硬性特征:
- 微VM级隔离 :每个沙箱运行在一个独立的、轻量级的微虚拟机(microVM)中,拥有自己独占的CPU核、内存页、网络栈和根文件系统。这意味着,即使一个沙箱里的代码恶意耗尽内存或发起DDoS攻击,也绝不会影响到同一物理主机上的其他沙箱。这与AWS Bedrock AgentCore采用的Firecracker microVM技术路径一致,是目前生产环境中最可靠的隔离方案。
-
凭证零可见
:这是最反直觉也最关键的一点。你的API密钥、数据库密码、OAuth token,永远不会以环境变量(
ENV)、配置文件(config.json)或命令行参数的形式注入沙箱。它们被安全地存放在Anthropic的密钥管理服务(Vault)中。当沙箱内的代码调用get_secret("db_password")时,这个调用会被harness拦截,harness会向Vault发起一个带严格权限校验的请求,获取密钥后,仅将明文密码作为函数返回值,传递给沙箱内代码。沙箱本身,永远看不到任何凭证的原始形态。这从根本上杜绝了“LLM把密钥写进日志”或“恶意代码通过os.environ窃取凭证”的风险。 - 生命周期即会话 :沙箱的生命周期与会话强绑定。一个会话开始,沙箱启动;会话结束(或超时),沙箱立即销毁,所有内存、磁盘临时文件、网络连接被彻底清空。它不复用、不缓存、不“养着”。这使得沙箱的资源消耗变得极度可预测——你只为实际使用的毫秒付费,而不是为一个可能闲置数小时的“待命容器”买单。
这种“沙箱即 cattle”的理念,让运维复杂度直线下降。你不需要为每个沙箱打补丁、升级内核、监控资源泄漏。你只需要确保底层微VM平台稳定,剩下的,交给自动化编排系统。我们做过一个对比测试:在同等负载下,Managed Agents的沙箱平均启动时间为83ms,而我们自建的基于Docker的沙箱集群,平均启动时间是420ms,且后者在高峰期会出现明显的冷启动抖动。
3. 实操落地指南:从零搭建一个生产级销售线索分发代理
3.1 需求定义与YAML配置:用声明式语言描述你的代理
假设你是一家SaaS公司的销售运营负责人,每天要处理来自官网、LinkedIn、展会扫描的数百条销售线索(Leads)。过去,这些线索由销售助理手动录入CRM,再根据地域、行业、公司规模等规则分发给对应区域的销售代表。这个过程平均耗时22分钟/条,且错误率高达12%(比如把一家医疗科技公司分给了金融行业销售)。
现在,你要用Managed Agents构建一个全自动分发代理。它的核心能力是:
- 接收一条结构化的线索数据(含姓名、邮箱、公司名、公司网站、职位);
- 自动访问公司网站,提取行业分类、员工规模、技术栈等信息;
- 根据预设的销售区域地图(如“华东区:上海、江苏、浙江”)和行业匹配规则(如“医疗科技公司优先分配给有HITRUST认证的销售”),决定归属;
- 将结果写入Salesforce CRM,并通知对应销售代表。
这个代理的全部行为,用一份YAML文件就能定义清楚。这不是伪代码,而是Anthropic直接消费的生产配置:
# sales_lead_router.yaml
name: "sales-lead-router"
description: "Automatically routes inbound sales leads to the correct rep based on geography and industry"
# 系统提示词:定义代理的角色、目标和约束
system_prompt: |
You are a senior sales operations analyst at Acme Corp. Your job is to route incoming sales leads to the most qualified sales representative.
- ALWAYS verify the company's industry and size by visiting its official website (use the 'scrape_website' tool).
- NEVER make assumptions about geography. ONLY use the 'sales_region_map' tool to look up which region a city belongs to.
- If a lead's company website cannot be scraped, or if industry/size data is missing, route it to the 'General Inbound' queue.
- Your final output MUST be a JSON object with keys: 'sales_rep_id', 'region', 'industry', 'confidence_score' (0.0 to 1.0).
# 工具列表:声明代理有权调用的所有外部能力
tools:
- name: "scrape_website"
description: "Fetches and parses the main content of a company's official website. Input: {url: string}. Output: {title: string, meta_description: string, text_content: string (first 5000 chars)}"
parameters:
url: "string"
- name: "sales_region_map"
description: "Looks up which sales region a given city belongs to. Input: {city: string}. Output: {region: string, rep_ids: [string]}"
parameters:
city: "string"
- name: "enrich_company_data"
description: "Enriches company data using public APIs. Input: {domain: string}. Output: {industry: string, employee_count: number, tech_stack: [string]}"
parameters:
domain: "string"
- name: "create_crm_lead"
description: "Creates a new lead record in Salesforce CRM. Input: {lead_data: object}. Output: {crm_id: string, status: 'created'}"
parameters:
lead_data: "object"
# 安全护栏:定义绝对不能越界的红线
guardrails:
- type: "content_policy"
policy: "block_if_contains_sensitive_data"
description: "Never output raw email addresses, phone numbers, or internal system credentials."
- type: "tool_call_policy"
policy: "allow_only_specified_tools"
allowed_tools: ["scrape_website", "sales_region_map", "enrich_company_data", "create_crm_lead"]
# 会话配置:定义持久化和超时行为
session_config:
persistence: "event_log" # 强制使用事件日志模式
timeout_minutes: 15
max_steps: 20
这份YAML的价值,远超一个配置文件。它是代理的“宪法”,清晰界定了它的能力边界(能调什么工具)、行为准则(系统提示词)、安全底线(护栏)和生命周期(超时)。开发、产品、法务、安全团队都可以围绕这份文件进行评审——法务会检查
guardrails
是否符合GDPR,安全团队会验证
scrape_website
工具是否启用了严格的CSP策略,产品经理会确认
system_prompt
是否准确反映了业务规则。这种声明式(declarative)的定义方式,让协作成本大幅降低,也避免了传统代码中“魔法数字”和“隐藏逻辑”的滋生。
3.2 工具集成与凭证管理:如何让沙箱安全地“看见”世界
工具(Tool)是代理的“手脚”,但如何让这些手脚既有力又安全,是实操中最容易翻车的环节。Managed Agents的凭证管理机制,要求你彻底抛弃“把密钥塞进环境变量”的旧习惯。
以
scrape_website
工具为例,它的后端是一个独立的、部署在VPC内的Python微服务,使用Playwright无头浏览器。为了让它能安全地被沙箱调用,你需要三步走:
第一步:在Anthropic控制台注册工具
- 进入“Tools”管理页面,点击“Create New Tool”。
-
填写工具名称(
scrape_website)、描述、以及一个唯一的tool_id(如acme-scrape-v1)。 -
在“Authentication”部分,选择“Vault-based Credentials”。此时,系统会为你生成一个
vault_path,例如/tools/scrape_website/api_key。 注意:这个路径是你后续在代码中引用凭证的唯一标识,不是真实的密钥值。
第二步:在Vault中安全存储凭证
- 进入Anthropic的密钥管理服务(Vault)。
-
导航到
/tools/scrape_website/路径。 -
创建一个新的密钥,命名为
api_key,值为你的真实API密钥(如sk_live_abc123...)。 -
设置精细的访问策略:只有
tool_id=acme-scrape-v1的调用,且只在production环境,才能读取此密钥。
第三步:在工具后端代码中,通过标准接口获取凭证
你的
scrape_website
微服务代码,不再需要读取
os.environ['API_KEY']
。它应该使用Anthropic提供的SDK:
# scrape_service.py
from anthropic.tools import get_tool_credentials
def handler(event):
# 1. 从事件中提取参数
url = event.get('url')
# 2. 向Anthropic Vault安全请求凭证
# 这行代码会触发harness的拦截,harness会去Vault查,校验权限,然后只返回密钥值
api_key = get_tool_credentials(
vault_path="/tools/scrape_website/api_key",
tool_id="acme-scrape-v1"
)
# 3. 使用凭证调用真实后端(如Playwright)
result = playwright_scrape(url, api_key)
return {
"title": result.title,
"meta_description": result.meta_desc,
"text_content": result.content[:5000]
}
这个流程的精妙之处在于“凭证的不可见性”。沙箱里的代码,永远只看到
get_tool_credentials()
这个函数调用,它返回的只是一个字符串。它无法知道这个字符串是从哪里来的,也无法通过任何手段(如
strace
、
gdb
)窥探到Vault的通信细节。凭证的生命周期完全由Anthropic控制:你可以随时在Vault中轮换密钥,所有沙箱会自动生效;你也可以一键禁用某个
tool_id
的凭证,所有对该工具的调用将立即失败。
实操心得:我们最初在集成
create_crm_lead工具时,犯了一个典型错误——把Salesforce的OAuth refresh token直接写进了工具的初始化代码里。结果在一次安全审计中被发现,该token被意外记录在了工具的启动日志中。修正方案就是完全移除代码中的硬编码,全部交由Vault管理。现在,我们的所有工具后端代码里,再也找不到一个明文的密钥。
3.3 事件日志的查询与分析:从“黑盒”到“透明工厂”
Managed Agents最强大的生产力提升,往往发生在上线之后。当你拥有了一个结构化的、可查询的事件日志,你就拥有了一个“AI代理的飞行数据记录仪”。
假设上线一周后,你发现线索分发的平均耗时从预期的45秒上升到了78秒。传统方式,你只能抓狂地看一堆模糊的日志。而现在,你可以用几条精准的查询,快速定位瓶颈:
查询1:找出最耗时的工具调用
-- 查询所有会话中,耗时最长的10次工具调用
SELECT
session_id,
tool_name,
duration_ms,
input_params,
status
FROM event_log
WHERE event_type = 'tool_call'
AND status = 'completed'
ORDER BY duration_ms DESC
LIMIT 10;
结果发现,
scrape_website
调用
https://example-medtech.com
平均耗时5.2秒,而其他网站平均0.8秒。这指向了目标网站的反爬策略过于激进。
查询2:分析失败模式
-- 统计所有失败的会话,按失败原因分组
SELECT
error_type,
COUNT(*) as failure_count,
ROUND(AVG(confidence_score), 2) as avg_confidence
FROM event_log
WHERE event_type = 'model_output'
AND has_error = true
GROUP BY error_type
ORDER BY failure_count DESC;
结果显示,
"website_unreachable"
错误占失败总数的63%,且这些会话的平均置信度(
confidence_score
)仅为0.31。这说明代理在网站无法访问时,倾向于做出低质量的猜测,而不是优雅降级。
查询3:评估业务效果
-- 计算被正确路由到“医疗科技”销售代表的线索转化率
SELECT
COUNT(*) as total_leads,
COUNT(CASE WHEN sales_rep_region = 'Healthcare' THEN 1 END) as healthcare_leads,
ROUND(
COUNT(CASE WHEN sales_rep_region = 'Healthcare' AND crm_status = 'Qualified' THEN 1 END) * 100.0 /
COUNT(CASE WHEN sales_rep_region = 'Healthcare' THEN 1 END), 2
) as qualification_rate
FROM event_log e
JOIN crm_sync_log c ON e.session_id = c.session_id
WHERE e.event_type = 'model_output'
AND e.sales_rep_industry = 'Healthcare';
结果:医疗科技线索的合格率(Qualified)达到78%,远高于人工分发的52%。这直接证明了代理的商业价值。
这些查询不是理论,而是我们真实在生产环境中每天运行的。它让我们从“猜测问题”变成了“测量问题”,从“救火队员”变成了“流程工程师”。事件日志,就是你优化AI代理的唯一真相来源。
4. 生产环境避坑指南:那些文档里不会写的血泪教训
4.1 “免费”的陷阱:会话时长计费的魔鬼细节
Managed Agents的定价模型是“$0.08 per session-hour of active runtime”。乍看很美,但“active runtime”这个短语,藏着巨大的理解偏差。很多团队初期都以为,只要会话没关闭,计费就一直跑。大错特错。
Anthropic的“active runtime”是指:
从会话创建(
create_session
API调用)开始,到会话内最后一次工具调用(
tool_call
)或模型输出(
model_output
)事件发生为止的总时长
。它不计算纯等待时间。
举个例子:
- T=0s:创建会话,用户发送第一条消息。
-
T=5s:模型输出,决定调用
scrape_website。 -
T=10s:
scrape_website工具返回结果。 -
T=15s:模型输出,决定调用
sales_region_map。 -
T=20s:
sales_region_map工具返回结果。 - T=25s:模型输出最终路由结果,会话结束。
这个会话的“active runtime”是25秒,不是25秒。但如果在T=10s工具返回后,模型花了整整3分钟才输出下一步指令(比如在思考复杂的行业匹配规则),那么这3分钟的“思考时间”是 不计费 的!只有从T=0到T=25这25秒是计费的。
然而,陷阱来了:如果你的代理设计不当,导致大量“无效的活跃时间”,费用会飙升。
-
陷阱1:过度轮询
。不要让你的前端每隔1秒就调用
get_session_status来轮询代理是否完成。每一次成功的get_session_status调用,都会被计入active_runtime。正确做法是使用Webhook回调,让Anthropic在会话完成时主动通知你。 -
陷阱2:冗余工具调用
。避免在
system_prompt里写“请在每次输出前,都调用get_current_time工具来确认时间”。这个看似无害的调用,会把每次模型输出的间隔都计入计费时长。 -
陷阱3:长连接保持
。如果你的应用层错误地维持了一个长连接,并在连接空闲时还不断发送心跳包,这些心跳包可能会被误判为“活跃事件”。务必使用标准的HTTP/1.1短连接,或明确设置
Connection: close。
我们曾因一个前端轮询Bug,导致单个会话的计费时长从平均45秒暴涨到18分钟,单日账单翻了7倍。修复后,费用回归正常水平。
4.2 沙箱的“隐形墙”:网络与DNS的那些事
沙箱的微VM隔离,带来了极致的安全,但也带来了一些意料之外的限制。最常被忽视的,是网络层面的“隐形墙”。
-
DNS解析超时 :沙箱默认使用Anthropic的内部DNS服务器。如果你的工具后端(如
scrape_website)需要访问一个内部域名(如internal-api.acme.corp),而这个域名只在你们公司的私有DNS服务器上解析,那么沙箱将无法解析它,导致超时。解决方案是,在工具后端代码中,显式配置resolv.conf,或者更推荐的做法,是将所有内部服务都通过Anthropic的“PrivateLink”功能接入,这样沙箱就能像访问公网一样访问它们。 -
出站IP池有限 :所有沙箱共享一个有限的出站IP地址池。如果你的
scrape_website工具在短时间内对同一个目标网站发起大量请求(比如并发100个),很容易触发对方的IP封禁。这不是沙箱的问题,而是你工具设计的问题。必须在工具后端实现智能的请求节流(rate limiting)和IP轮换(IP rotation)策略。 -
TLS证书验证严格 :沙箱的TLS栈对证书链的要求极为严格。如果你的工具后端调用一个使用自签名证书或过期证书的内部API,调用会直接失败,错误信息是
SSL: CERTIFICATE_VERIFY_FAILED。你不能在代码里简单地verify=False,因为这会违反安全策略。正确做法是,将你的CA证书上传到Anthropic的“Trusted Certificates”库中,并在工具注册时关联它。
注意:这些限制不是Bug,而是设计使然。它们的存在,恰恰是为了防止一个失控的代理,无意中成为你网络的“跳板”。接受这些限制,并在工具设计阶段就将其纳入考量,是走向生产稳定的必经之路。
4.3 事件日志的“黑洞”:如何避免关键数据丢失
事件日志是你的黄金矿藏,但如果你不主动“采矿”,它也可能变成一个黑洞。
-
事件过滤的盲区 :
guardrails配置中的block_if_contains_sensitive_data策略,不仅会阻止模型输出敏感数据,还会 阻止包含敏感数据的tool_result事件被写入日志 !这意味着,如果scrape_website工具返回的网页内容里恰好有一段用户的邮箱列表,那么整个tool_result事件将被静默丢弃,日志里只留下一个tool_call事件和一个guardrail_violation事件。这会导致你的事件流出现“断点”,无法完整重建会话。解决方案是,在工具后端就做前置脱敏(anonymization),在返回给harness之前,就把所有邮箱、电话等字段替换成[REDACTED_EMAIL]。 -
日志保留策略 :Anthropic默认的事件日志保留期是90天。对于需要长期审计的金融、医疗类应用,这远远不够。你必须主动配置“Log Export”功能,将所有事件实时同步到你自己的S3或BigQuery仓库中。这个同步是异步的,会有最多5分钟的延迟,但对于合规审计来说,这已经是足够近实时的数据了。
-
事件顺序的幻觉 :在高并发场景下,多个沙箱可能几乎同时向同一个会话写入事件。虽然Anthropic保证了事件的全局有序性(通过一个中心化的事件排序器),但你在查询时,如果使用了
WHERE timestamp > '2026-04-10 10:00:00'这样的条件,可能会因为时钟漂移而漏掉一些事件。最稳妥的查询方式,是使用session_id+event_sequence_number(每个事件都有一个严格递增的序号)作为联合主键。
我们曾在一个高流量的电商促销活动中,因为忽略了
tool_result
的脱敏,导致关键的库存查询结果丢失,无法复盘为何某款商品在10:00:03秒被标记为“售罄”,却在10:00:05秒又被标记为“有货”。这个教训让我们把所有工具的输出脱敏,变成了CI/CD流水线中的一个强制门禁(mandatory gate)。
5. 未来演进判断:为什么“运行时”注定是通往更高价值的垫脚石
5.1 压缩周期加速:从“十年”到“十八个月”的残酷现实
文章里提到的VMware与虚拟化的故事,是一个绝佳的历史镜鉴,但它低估了AI时代的压缩速度。VMware用了十年才从“高价值产品”变成“基础设施底座”,而AI的每一层,都在以指数级加速被压平。
回顾过去五年:
- 2021年 :GitHub Copilot发布。它不是一个新IDE,而是一个“代码补全运行时”。两年后,几乎所有主流IDE的内置补全都被它取代,独立的代码补全SaaS公司(如TabNine)要么被收购,要么转型为Copilot插件。
- 2022年 :ChatGPT引爆。它不是一个新搜索引擎,而是一个“通用问答运行时”。一年内,专业问答社区(如Stack Overflow)的流量增长停滞,依赖其API的创业公司估值腰斩。
- 2023年 :RAG(检索增强生成)框架爆发。它不是一个新数据库,而是一个“知识问答运行时”。半年内,初创的“企业知识库SaaS”融资难度陡增,因为所有人都意识到,RAG本身可以免费搭在Llama 3上。
现在轮到“代理运行时”。AWS Bedrock AgentCore在2025年底GA,Anthropic Managed Agents在2026年4月跟进,Google Vertex AI Agent Builder和Azure AI Foundry紧随其后。这四家巨头,已经用他们的云账单,为这个层定了价: 它必须是“免费-邻近”(free-adjacent)的 。你不会为一个EC2实例的启动付费,你也不会为一个AgentCore会话的启动付费;你只为它消耗的CPU、内存、网络带宽付费,而这些,已经包含在你每月的云账单里了。
因此,“Managed Agents $0.08/session-hour”的定价,本质上是一个 过渡性价格 。它存在的唯一目的,是给Anthropic争取12-18个月的时间,去建立一个足够大的、忠诚的Claude模型用户群。一旦这个用户群稳固,这个价格必然会下调,甚至被整合进Claude的Token套餐中。这不是预测,而是云厂商的必然逻辑——他们卖的不是软件,而是“计算力的抽象”。
5.2 价值上移的三大高地:Trace、Governance、Marketplace
当运行时层被压平,价值必然向上迁移。这不是理论推演,而是已经被市场验证的规律。目前,有三个高地正在形成,它们共同构成了AI工程栈的“新护城河”。
高地一:Trace Store(追踪存储)—— 代理行为的“黑匣子” 一个无法被审计、无法被回放、无法被归因的AI代理,是企业无法承受的风险。Braintrust、Arize、LangSmith这三家,正在争夺“AI交互日志的OS”地位。它们的竞争焦点,不再是UI有多酷,而是:
- Schema兼容性 :能否无缝导入/导出来自不同运行时(AgentCore, Managed Agents, 自建LangGraph)的事件流?
- 语义搜索 :能否让你用自然语言提问,“找出所有把‘加密货币’公司分给‘金融合规’销售的会话”?
-
因果推断
:能否自动分析,指出“
confidence_score低于0.6的会话,其CRM转化率比平均值低42%”?
谁赢得了Trace Store,谁就赢得了AI代理的“事实标准”。因为当你的客户想把代理从Anthropic迁移到AWS时,他唯一能带走的、最有价值的资产,就是那份完整的、结构化的事件日志。而这份日志,必须能被新的Trace Store读懂。
高地二:Governance & Policy(治理与策略)—— 代理行为的“交通法规” 当代理能自主调用银行API、修改CRM数据、甚至生成法律文件时,“它被允许做什么”就成了生死攸关的问题。AWS的AgentCore Policy Controls GA,OWASP发布Agentic Top 10,这标志着一个新市场的诞生。
未来的治理平台,必须提供:
-
策略即代码(Policy-as-Code)
:用YAML或Rego语言定义策略,如
deny if tool_call.name == "delete_user" and user.role != "admin"。 - 动态策略注入 :在会话启动时,根据用户身份、数据敏感级别,动态加载不同的策略集。
-
合规证明生成
:一键生成符合SOC2、HIPAA要求的审计报告,证明“在过去30天内,所有涉及PHI数据的会话,均未调用过
send_email工具”。
这是一个典型的“防御性市场”,需求刚性极强,且客单价极高。它不会被开源项目颠覆,因为企业愿意为“合规确定性”支付溢价。
**高地三:Vertical

6838

被折叠的 条评论
为什么被折叠?



