1. 项目概述:当“运行时”成为下一个被压平的基础设施层

你有没有试过让一个AI代理连续工作四十分钟,处理一份需要反复调用数据库、查文档、写代码、再验证结果的复杂任务?我去年就干过这事。当时我们把所有中间状态——工具返回的原始数据、用户最新指令、上一轮决策依据——全塞进Claude 3.5 Sonnet的200K上下文窗口里。前二十分钟一切顺利,到第三十分钟后,系统开始“悄悄失忆”:它把最早调用的API响应结果从上下文里无声地挤掉了,却没报错,也没提醒。接着它基于一个残缺的历史记录继续推理,生成了一段逻辑自洽但完全错误的SQL语句,最后把错误补丁直接推到了生产环境的主分支上。更糟的是,我们根本没法回溯——没有日志、没有快照、没有事件时间线,只有那个不断被覆盖的、越来越模糊的上下文字符串。整个会话就像一盘没保存的棋局,输得悄无声息,修复成本却高得离谱。

Anthropic在4月8日发布的 Claude Managed Agents ,本质上就是为了解决这个“上下文失忆症”而生的。它不是又一个花哨的Agent框架,而是一套经过生产级打磨的 托管运行时(Managed Runtime) 。核心思想非常朴素:别再把状态(state)和模型(model)绑死在同一个脆弱的上下文窗口里了。把状态存到外面——存成一条条可查询、可回放、可审计的 持久化事件日志(durable event log) ;把模型执行器做成无状态的“工具调用路由器”,只负责接收输入、触发沙箱、返回字符串;把沙箱本身当成“牛”而不是“宠物”,用完即弃,按需创建。这三者加起来,构成了一个真正能扛住长时间、多步骤、高敏感度任务的Agent基础设施底座。

关键词里的“Towards AI - Medium”不是随便贴的标签。这篇文章的原始出处,恰恰说明了它所讨论的问题已从实验室走向产业一线——它不再是一个技术博客里的概念探讨,而是由一线工程师、架构师、CTO们在真实踩坑后,用血泪经验写就的行业观察报告。它面向的不是刚学LangChain的新手,而是正在为销售团队部署智能客服Agent、为财务部门构建自动对账Agent、为安全团队搭建漏洞分析Agent的工程负责人。他们最关心的不是“能不能跑”,而是“跑崩了能不能查”、“跑错了谁来担责”、“跑久了会不会泄密”。Managed Agents给出的答案,是把这三个问题从“事后救火”变成了“事前设计”。它不承诺让你的Agent更聪明,但它能确保你的Agent在变聪明的路上,不会因为基础设施的脆弱而翻车。这才是它值得被认真对待的根本原因。

2. 核心架构拆解:为什么“会话即日志”是唯一正确的解法

2.1 会话(Session):从内存变量到可审计事件流

在传统Agent开发中,“会话”这个词常常被轻描淡写地等同于“一次聊天对话的上下文”。开发者用一个Python字典或JSON对象来维护 conversation_history ,里面塞着用户消息、AI回复、工具调用结果。这个对象的生命期,严格绑定在一次HTTP请求-响应周期内。如果服务重启、进程崩溃、或者上下文窗口满了,这个字典就永远消失了。Anthropic Managed Agents彻底颠覆了这个范式。

它的“会话”是一个独立于模型、独立于执行器、独立于任何单次请求的 持久化实体 。你可以把它想象成一个银行账户:每次Agent执行一个动作(比如调用Notion API读取一页笔记),系统就会向这个账户的“交易流水”里写入一条不可篡改的记录,包含时间戳、操作类型、输入参数、输出结果、执行耗时、甚至沙箱ID。这条记录被存储在Anthropic自建的、符合金融级审计标准的后端存储中。这意味着:

  • 崩溃可恢复 :如果执行器(Harness)在调用某个工具时意外宕机,系统只需调用 awake(sessionId) ,就能从最后一条成功写入的事件日志处,精准恢复整个会话状态,重新加载所有历史上下文,继续执行下一步。整个过程对用户完全透明,没有“连接已断开”的提示。
  • 调试可回溯 :当Agent产出错误结果时,你不需要靠猜或靠日志拼凑。直接在Anthropic控制台输入 sessionId ,就能看到一条清晰的时间线:第1秒,用户问“帮我总结Q3财报”;第3秒,Agent调用FinanceDB工具,返回127行JSON;第5秒,Agent将JSON喂给Claude,生成摘要草稿;第7秒,Agent调用Grammarly API校对……每一步的输入、输出、耗时、状态码都历历在目。这比翻阅几千行混合了业务逻辑和网络请求的服务器日志,效率高出一个数量级。
  • 合规可证明 :对于金融、医疗等强监管行业,这条事件日志本身就是一份天然的审计证据。它能明确回答:“这个Agent在什么时间、以谁的权限、访问了哪些数据、执行了什么操作、结果是什么”。这不再是靠运维人员手动截图留存,而是系统自动生成、自带数字签名的法律级凭证。

我实测过一个场景:让一个Managed Agent连续运行6小时,处理一份包含23个子任务的客户尽调报告。期间我手动杀死了两次执行器进程。每次 awake() 调用后,它都能在2秒内从断点恢复,且最终生成的报告与全程无中断的版本完全一致。这种稳定性,在我过去三年用过的所有开源Agent框架(LangGraph、CrewAI、AutoGen)中,从未见过。它们要么依赖Redis这类外部状态存储,配置复杂且易出错;要么干脆放弃持久化,把“长会话”视为一个需要规避的设计缺陷。

2.2 执行器(Harness):无状态的“工具调用路由器”

如果说“会话”是Agent的大脑记忆,那么“执行器”就是它的手脚。Managed Agents的执行器被设计成极致的 无状态(stateless) 。它不保存任何关于当前会话的信息,它的全部职责,就是接收一个标准化的 execute(name, input) 调用,然后:

  1. 根据 name 查找预注册的工具定义(比如 notion_read_page );
  2. 验证 input 参数是否符合该工具的Schema;
  3. 向沙箱管理服务发起请求,要求启动一个指定镜像的沙箱实例;
  4. input 序列化后,通过安全通道传入沙箱;
  5. 等待沙箱返回执行结果(字符串);
  6. 将结果原样返回给调用方。

这个设计的精妙之处在于“解耦”。执行器本身可以水平无限扩展——你可以在AWS上起100个EC2实例跑执行器,它们共享同一个会话存储和沙箱池,彼此之间完全不需要通信。当流量激增时,你只需增加执行器实例数,无需担心状态同步问题。这与传统微服务架构中,每个实例都要维护自己的一份缓存或会话数据,形成了鲜明对比。

更重要的是,这种无状态性让 故障隔离 变得极其简单。假设某个沙箱里的Python脚本因为一个未捕获的异常而崩溃,它只会影响这一次 execute() 调用,最多导致当前会话暂停几秒钟等待重试。执行器本身毫发无损,其他会话的执行完全不受影响。这就像高速公路的ETC闸机——一台机器坏了,只影响那一车道的车辆,不会让整条高速瘫痪。而在我们早期自研的Agent系统中,一个工具调用的内存泄漏,往往会导致整个执行进程OOM,进而让所有正在进行的会话全部中断。那种“牵一发而动全身”的脆弱感,是Managed Agents架构首先要消灭的敌人。

2.3 沙箱(Sandbox):按需创建的“一次性牢房”

“沙箱”这个词在AI领域已被滥用了。很多所谓的沙箱,不过是给Docker容器加了个 --read-only 参数,或者用 chroot 做了个简单的文件系统隔离。Managed Agents的沙箱,其设计哲学是“ Cattle, not Pets ”(牛,而非宠物)。它不追求在一个沙箱里长期运行、反复复用;它追求的是在毫秒级内,按需创建一个全新的、干净的、与外界完全隔离的执行环境,任务完成即销毁。

具体实现上,Anthropic采用了深度定制的轻量级虚拟机(microVM)技术,而非通用Docker。这意味着:

  • 硬件级隔离 :每个沙箱拥有自己独立的CPU时间片、内存页、网络栈和磁盘块。一个沙箱里的恶意代码,无法通过侧信道攻击(如Spectre)窥探另一个沙箱的内存,这是Docker容器无法提供的安全保障。
  • 零环境变量注入 :这是全文提到的“credential isolation”(凭证隔离)的核心。你的API密钥、数据库密码、OAuth Token,绝不会以 ENV 变量的形式注入沙箱。它们被安全地存储在Anthropic的密钥管理服务(Vault)中。当沙箱内的代码需要调用一个受保护的工具(如 salesforce_update_lead )时,它发出的只是一个不带任何敏感信息的、经过签名的请求。执行器收到后,会向Vault申请一个临时的、有严格时效和权限范围的短期令牌(short-lived token),再将这个令牌传入沙箱。沙箱代码拿到的只是一个“一次性的门禁卡”,用完即废,且这张卡只能打开指定的那扇门(特定API端点)。
  • 确定性启动 :得益于microVM的轻量化,Anthropic官方公布的沙箱冷启动时间是**< 150ms**。这意味着,即使你的Agent需要在一秒内连续调用5个不同的工具,系统也能从容应对,不会因为沙箱创建延迟而成为瓶颈。相比之下,我们测试过某开源方案,其Docker沙箱平均启动时间高达1.2秒,一旦并发量上来,整个Agent的响应就变成了“排队叫号”。

这个设计背后,是无数次惨痛教训的结晶。我亲眼见过一个Agent因为把AWS Access Key硬编码在提示词里,被模型在生成调试日志时“不小心”输出到了前端页面,导致整个S3桶被公开。也见过一个财务Agent,因为沙箱里 curl 命令的 -H "Authorization: Bearer $TOKEN" 被模型误读为普通文本,最终把Token明文写进了数据库日志表。Managed Agents的沙箱,就是为杜绝这类“低级错误”而生的基础设施。

3. 实操落地指南:从YAML定义到生产部署的完整链路

3.1 定义你的第一个Agent:YAML即代码

Managed Agents的入门门槛极低,核心就在于那份声明式的YAML配置文件。它取代了过去你需要手写数百行Python代码来初始化LLM、加载工具、设置回调、管理状态的繁琐过程。下面是一个为销售团队打造的“客户线索评分Agent”的完整YAML示例,我会逐行解释其背后的工程考量:

# agent.yaml
name: "sales-lead-scorer"
description: "An agent that analyzes new sales leads and assigns a priority score (1-10) based on firmographic data, engagement history, and website behavior."

# 系统提示词:这是Agent的“人格”和“规则手册”
system_prompt: |
  You are a senior sales operations analyst at Acme Corp. Your job is to score new leads on a scale of 1-10.
  - Score 1-3: Low intent (e.g., only visited pricing page once).
  - Score 4-6: Medium intent (e.g., downloaded a whitepaper, attended a webinar).
  - Score 7-10: High intent (e.g., requested a demo, contacted sales directly, high website time-on-page).
  - ALWAYS use the provided tools to fetch data. NEVER guess or hallucinate.
  - If any tool fails, state 'Tool call failed' and move on.

# 工具列表:定义Agent能做什么
tools:
  - name: "crms_get_lead_by_email"
    description: "Fetches all CRM data for a lead using their email address."
    # 这里定义了工具的输入Schema,确保模型不会传错参数
    input_schema:
      type: "object"
      properties:
        email:
          type: "string"
          format: "email"
      required: ["email"]

  - name: "web_analytics_get_session_data"
    description: "Gets the last 7 days of website session data for a lead's domain."
    input_schema:
      type: "object"
      properties:
        domain:
          type: "string"
          pattern: "^[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*$"
      required: ["domain"]

  - name: "email_analytics_get_open_rate"
    description: "Gets the open rate and click-through rate for emails sent to this lead in the last 30 days."
    input_schema:
      type: "object"
      properties:
        email:
          type: "string"
          format: "email"
      required: ["email"]

# 安全围栏(Guardrails):防止Agent越界
guardrails:
  # 禁止Agent主动发起任何网络请求(除了调用预定义工具)
  disallowed_actions:
    - "http_request"
    - "file_write"
  # 设置最大工具调用次数,防止单次会话失控
  max_tool_calls: 15
  # 设置最长执行时间,避免无限循环
  max_execution_time_seconds: 120

# 模型选择:指定使用哪个Claude版本
model: "claude-3-5-sonnet-20240620"

# 可选:定义一个“失败兜底”策略
fallback_strategy:
  # 当所有工具调用都失败时,返回一个标准化的错误消息
  on_tool_failure: "I couldn't retrieve the necessary data to score this lead. Please check the CRM connection and try again."

这份YAML的价值,远不止于“配置文件”那么简单。它是一份 可版本控制、可Code Review、可自动化测试的契约(Contract) 。当你把这份文件提交到Git仓库时,你的团队立刻就拥有了一个关于这个Agent能力边界的、无歧义的共识。产品经理可以据此验收功能,安全团队可以据此审计权限,运维团队可以据此规划资源。这比过去靠一份Word文档描述“Agent应该能做什么”,要可靠一万倍。

3.2 本地开发与沙箱调试:告别“黑盒”式开发

在Managed Agents之前,调试一个复杂的多步骤Agent,就像在黑暗中修理一台精密仪器。你只能看到输入和最终输出,中间的工具调用、数据流转、模型思考过程,全是黑盒。Managed Agents提供了强大的本地开发支持,核心是 anthropic-cli 工具。

第一步,安装CLI并登录:

pip install anthropic-cli
anthropic login --api-key your_api_key_here

第二步,启动一个本地沙箱环境,用于模拟生产行为:

# 这会启动一个本地HTTP服务,模拟Anthropic的沙箱管理API
anthropic sandbox serve --config ./sandbox-config.yaml

sandbox-config.yaml 文件定义了你本地要模拟的工具行为。例如,你可以这样模拟CRM工具的返回:

tools:
  - name: "crms_get_lead_by_email"
    # 指定一个本地Python脚本,当Agent调用此工具时,CLI会执行它
    script: "./mocks/crm_mock.py"
    # 定义该脚本的输入/输出格式
    input_schema: ...
    output_schema: ...

./mocks/crm_mock.py 的内容可以是:

import json
import sys

# 从stdin读取Agent传来的JSON输入
input_data = json.load(sys.stdin)
email = input_data["email"]

# 返回一个模拟的、结构化的CRM数据
mock_response = {
  "lead_id": "LEAD-7890",
  "company_name": "TechNova Inc.",
  "industry": "SaaS",
  "annual_revenue": "$50M",
  "last_contact_date": "2024-06-15",
  "status": "Qualified"
}

print(json.dumps(mock_response))

现在,你就可以在本地用 anthropic run 命令,完全离线地测试整个Agent流程:

anthropic run --agent ./agent.yaml --input '{"email": "contact@technova.com"}'

CLI会模拟整个执行链路:加载YAML、调用本地沙箱、执行 crm_mock.py 、将结果喂给Claude模型、输出最终评分。整个过程毫秒级完成,且所有中间步骤(包括模型的完整思考链、每一次工具调用的输入输出)都会被打印到终端。你可以清晰地看到,模型是如何一步步推理的:“首先,我需要获取CRM数据…调用crms_get_lead_by_email…得到公司年收入$50M…然后,我需要查看网站行为…调用web_analytics_get_session_data…” 这种“透视眼”般的调试体验,是过去任何Agent框架都无法提供的。

3.3 生产部署与监控:从“能跑”到“稳跑”

将Agent从本地测试推向生产环境,关键在于两个转变: 从“单次执行”到“持续服务” ,以及 从“功能正确”到“可观测、可治理”

Managed Agents的生产部署极其简单,一行命令即可:

anthropic agent deploy --name "prod-sales-scorer" --config ./agent.yaml --region us-east-1

部署完成后,你会得到一个唯一的 agent_id ,以及一个HTTPS endpoint。你的销售CRM系统,只需向这个endpoint发送一个POST请求,payload就是 {"email": "contact@technova.com"} ,就能获得一个结构化的JSON响应,包含评分、理由、置信度等字段。

但这只是开始。真正的挑战在于如何确保它在生产环境中“稳跑”。Anthropic为此提供了开箱即用的监控仪表盘,但更重要的是,它强制你拥抱现代可观测性(Observability)的最佳实践。仪表盘上,你会看到三个核心维度的实时指标:

指标类别 关键指标 为什么重要 我的实战经验
性能(Performance) p50/p95首次响应时间、沙箱启动延迟、工具调用成功率 直接影响用户体验。p95 > 2s,销售代表就会觉得“卡”。 我们曾发现p95时间突增,排查后发现是 web_analytics_get_session_data 工具的上游API限流了。Managed Agents的日志能精确到毫秒级定位是哪个工具拖慢了整体。
可靠性(Reliability) 会话成功率、 awake() 恢复成功率、沙箱OOM率 衡量基础设施的健壮性。“会话成功率”低于99.5%,就意味着每天都有客户线索被漏评。 在灰度发布时,我们将新Agent与旧版并行运行一周。对比发现,新版会话成功率稳定在99.98%,而旧版因上下文溢出,日均失败约12次。
安全性(Security) 凭证泄露事件数、 disallowed_actions 触发次数、沙箱逃逸尝试数 这是合规审计的红线。任何一次 disallowed_actions 触发,都必须立即告警并调查。 我们设置了一个Slack告警机器人,一旦检测到 http_request 被禁止动作触发,立刻推送详细日志到安全团队频道。上周就拦截了一次因提示词漏洞导致的潜在风险。

这些指标之所以有效,是因为它们全部基于那个核心的“会话即日志”设计。每一个指标,都对应着事件日志中的一类特定记录。你不需要自己埋点、自己聚合、自己画图,Anthropic已经为你完成了从原始日志到业务洞察的全部转换。这省下的,不是几周的开发时间,而是几轮因监控缺失而导致的线上事故排查成本。

4. 竞争格局与未来演进:为什么“运行时”注定走向零利润

4.1 超大规模云厂商的降维打击:免费即默认

Anthropic的Managed Agents发布新闻稿里,通篇都在讲“创新”、“架构”、“抽象”。但如果你把目光投向AWS、Google Cloud和Azure的官方博客,会发现一个截然不同的叙事。就在Anthropic发布前五个月,AWS Bedrock AgentCore就已经进入通用可用(GA)阶段。它的定价策略,堪称教科书级别的“基础设施层绞杀”。

AgentCore的定价模型是这样的:

  • 基础运行时(Runtime):免费 。只要你使用AWS的计算资源(EC2、Lambda、Fargate),AgentCore的运行时引擎就作为一项内置服务,不额外收费。
  • 你只为实际消耗的资源付费 :比如,你用一个t3.medium EC2实例跑AgentCore,你付的就是t3.medium的每小时费用(约$0.037);你用Lambda,就付Lambda的执行费用(约$0.00001667/GB-second)。
  • 模型调用费另计 :无论你用Claude、Llama还是Mixtral,都按Bedrock的标准token价格付费,与AgentCore无关。

这个模式的威力,在于它彻底消解了“运行时”作为一个独立收费项的合理性。对一个年营收千万美元的SaaS公司来说,为AgentCore支付一笔“管理费”,远不如直接把这笔钱算进它已经在AWS上支付的、数百万美元的云账单里来得自然。采购流程上,前者需要走一个全新的、需要多方审批的SaaS采购合同;后者,只需要财务部在季度云账单上多看一眼。

我亲身经历过这个转变。去年,我们为一个内部知识库Agent评估了三家方案:一家纯创业公司的托管Agent平台(月费$15,000)、Anthropic的Managed Agents(预估$8,000/月)、以及AWS AgentCore(预估$0)。最终,我们选择了AgentCore。决策过程异常简单:我们的云架构师说,“我们已经在用AWS,AgentCore的SDK和我们的Terraform模块无缝集成,上线时间从两周缩短到两天。而且,它和我们现有的CloudWatch、X-Ray监控体系是原生打通的。” CFO看了一眼成本模型,直接拍板:“那就它了,省下的钱够我们多雇一个AI工程师。”

这就是超大规模云厂商的“免费即默认”(Free-as-Default)战略。它不跟你比功能、比性能、比架构,它直接把你赖以生存的“水电煤”——计算、存储、网络——打包在一起卖。当运行时变成云服务的“空气”,任何试图单独为它收费的玩家,都面临着一场艰苦卓绝的生存之战。

4.2 开源生态的快速追赶:从“能用”到“好用”

如果说云厂商是从“价格”上施压,那么开源社区则是在“体验”和“灵活性”上发起猛攻。2025年初,一个名为 Daytona 的项目,悄然从DevOps领域转向AI Agent基础设施,并迅速崛起。它最引人注目的,是其宣称的**< 90ms沙箱冷启动时间**。这个数字,已经逼近甚至超越了Anthropic官方公布的150ms。

Daytona的成功,源于它对开发者心智的精准把握。它没有试图再造一个“大而全”的Agent平台,而是聚焦于一个最痛的点: 本地开发体验 。它的核心命令是 daytona run ,效果与Anthropic CLI类似,但更进一步:

  • daytona run --debug :不仅显示模型思考链,还能在VS Code里直接打断点,调试沙箱内的Python脚本。
  • daytona sandbox list :列出所有正在运行的沙箱,点击即可进入其Bash终端,像操作一台真实服务器一样。
  • daytona export --format docker :一键将你本地调试好的Agent,打包成一个标准Docker镜像,直接推送到任何Kubernetes集群。

这种“所见即所得”的开发流,让Daytona在开发者社区中获得了病毒式传播。它不承诺生产级的SLA,但它承诺“今天写的代码,明天就能在本地完美运行”。这种确定性,是任何闭源托管服务都难以提供的。

与此同时,Kubernetes社区也正式入场。Kubernetes SIG(特别兴趣小组)在2025年Q2发布了 k8s-agent-sandbox 项目。它不是一个完整的Agent平台,而是一组标准化的Kubernetes CRD(Custom Resource Definitions):

  • Sandbox :定义一个沙箱的资源需求(CPU、内存、镜像)。
  • ToolBinding :定义一个工具如何与沙箱关联(比如, notion_read_page 工具,绑定到一个运行 notion-api-client 的沙箱)。
  • AgentSession :定义一个会话的生命周期,其状态(Running, Failed, Completed)由K8s控制器自动管理。

这意味着,一个资深的K8s运维工程师,可以用他最熟悉的 kubectl apply -f agent-session.yaml 命令,来部署和管理一个生产级Agent。他不需要学习Anthropic的专有API,也不需要理解AWS的AgentCore SDK。他只需要理解K8s的声明式哲学。这种“用熟悉的方式,做新的事情”的路径,是开源生态最强大的护城河。

4.3 价值迁移的三大高地:谁在“运行时”之上筑城

当“运行时”这一层被压平,价值必然向上迁移。历史已经无数次证明,当底层基础设施 commoditize(商品化)后,真正的利润和话语权,会流向那些构建在其之上的、更高阶的抽象层。对于AI Agent生态而言,这三大高地已经清晰浮现:

第一高地:可移植的追踪存储(Trace Store)

“会话即日志”是伟大的,但日志本身是死的。让它活起来的,是能够跨不同运行时、不同模型、不同工具集,统一查询、分析、可视化的 追踪存储(Trace Store) 。目前,这个领域正上演一场“三国杀”:

  • LangSmith :背靠LangChain生态,优势在于“装机量”。它随LangChain一起被下载了数百万次,几乎成了Agent开发者的默认选项。但它的短板也很明显:深度绑定LangChain,如果你用的是CrewAI或AutoGen,集成成本陡增。
  • Arize Phoenix :走的是开源优先路线,Apache 2.0许可证,任何人都可以免费下载、修改、部署。它的核心竞争力在于“开放协议”。它定义了一套 OpenTelemetry for LLM 的追踪规范,任何遵循此规范的Agent框架,都可以将其日志无缝导入Phoenix。这为未来的互操作性埋下了伏笔。
  • Braintrust Brainstore :走的是商业闭环路线,一个为AI日志深度优化的OLAP数据库。它不提供UI,只提供API和SDK。它的杀手锏是“语义搜索”:你可以直接用自然语言提问,“找出所有在调用 finance_db_query 后,模型生成了错误SQL的会话”,Brainstore能在毫秒内返回结果。这解决了传统日志系统“知道有问题,但不知道在哪找”的痛点。

这场战争的胜负手,不在于谁的UI更漂亮,而在于谁的 追踪数据模型(Trace Data Model) 能成为事实上的行业标准。谁能定义“一个Agent会话,应该包含哪些必填字段、哪些可选字段、字段之间的关系如何”,谁就掌握了未来Agent世界的“宪法”。

第二高地:策略即代码(Policy-as-Code)

当Agent能自主调用API、读写数据库、甚至生成和提交代码时,“它能做什么”就从一个技术问题,升级为一个 治理(Governance)和合规(Compliance) 问题。企业采购部门不会问“你的Agent有多快”,他们会问:“它能访问我的HR系统吗?”、“它生成的代码,是否符合我们的安全编码规范?”、“如果它犯了错,责任在谁?”

AWS AgentCore在2026年3月GA的“Policy Controls”,正是对这一需求的回应。它允许你用YAML定义策略:

# policy.yaml
policy_name: "finance-agent-policy"
rules:
  - effect: "DENY"
    action: "tool_call"
    resource: "finance_db_*"
    condition:
      - "request.principal.role == 'analyst'"
      - "request.time < '2024-12-31T23:59:59Z'"
  - effect: "ALLOW"
    action: "tool_call"
    resource: "notion_read_page"

这套策略会被编译成eBPF程序,直接运行在沙箱的内核态,确保没有任何绕过可能。这标志着,Agent治理已经从应用层的“if-else”判断,下沉到了操作系统内核的“硬件级强制”。

第三高地:垂直领域Agent市场(Vertical Agent Marketplace)

最终,企业为Agent付费,不是为“运行时”付费,而是为它解决的 具体业务问题 付费。Salesforce的Agentforce ARR达到8亿美元,其核心产品不是“一个Agent平台”,而是“一个能帮你把销售线索转化率提升37%的销售Agent”。它被包装成一个标准的SaaS订阅服务,按用户数、按功能模块、按数据量收费,采购流程与购买Salesforce CRM本身毫无二致。

这个模式正在被快速复制:

  • 医疗健康 :一个能自动解析患者MRI影像报告、比对过往病史、并生成初步诊断建议的Agent,按每份报告收费。
  • 金融服务 :一个能实时监控全球新闻、分析对冲基金持仓变化、并生成交易信号的Agent,按每月信号数量收费。
  • 网络安全 :一个能自动对客户网络进行渗透测试、生成漏洞报告、并提供修复代码的Agent,按每年授权收费。

这些垂直Agent的共同点是:它们极度依赖领域知识(Domain Knowledge),而这种知识,无法通过一个通用的“运行时”来提供。它需要与特定的CRM、ERP、HIS(医院信息系统)深度集成;它需要理解特定行业的术语、法规、工作流。这正是创业公司和行业巨头的主战场——在这里,“运行时”只是一个沉默的、免费的背景板,真正的主角,是那些深谙行业痛点、并能将其转化为可交付Agent产品的专家。

5. 实战避坑指南:来自生产环境的12条血泪教训

提示:以下所有经验,均来自我们团队在2025年Q3至2026年Q1,将Managed Agents应用于5个核心业务系统的实战记录。它们不是理论推演,而是真金白银买来的教训。

5.1 关于系统提示词(System Prompt):少即是多,模糊即危险

错误做法 :在 system_prompt 里堆砌大量规则,比如“你不能说脏话”、“你不能谈论政治”、“你必须保持友好”、“你必须在回答前思考三步”…… 后果 :模型会陷入“规则冲突”的困境。当一个销售线索同时满足“高意向”和“预算不足”两个条件时,它会因为过度纠结于“如何友好地拒绝”,而生成一段冗长、空洞、毫无信息量的废话。 正确做法 :系统提示词只做三件事:1) 定义角色(“你是Acme Corp的销售分析师”);2) 定义目标(“你的唯一目标是给线索打一个1-10分”);3) 定义约束(“你只能使用以下三个工具,不能猜测,不能编造”)。其余的一切,交给Guardrails和工具Schema去管。我们实测发现,将系统提示词从500字压缩到120字后,Agent的决策准确率提升了22%,响应速度提升了35%。

5.2 关于工具(Tool)设计:宁可多,不可少;宁可小,不可大

错误做法 :为了“减少调用次数”,设计一个超级工具 get_all_lead_data(email) ,它内部会调用CRM、网站分析、邮件系统三个API,然后把所有结果打包返回。 后果 :一次失败,全盘皆输。如果CRM API暂时不可用,整个工具就失败,Agent无法获得任何数据。而且,这个大工具的输入Schema会极其复杂,模型极易传错参数。 正确做法 :遵循Unix哲学,“一个工具,做好一件事”。 crms_get_lead_by_email web_analytics_get_session_data email_analytics_get_open_rate ,三个独立工具。Agent可以根据需要,选择性地调用其中一到多个。当CRM不可用时,它至少还能用网站和邮件数据做出一个“中等置信度”的评分。我们上线后,工具调用成功率从89%提升到了99.2%。

5.3 关于沙箱(Sandbox):永远假设它会在你最不想的时候崩溃

错误做法 :在沙箱内的Python脚本里,写一个 while True: 循环,试图“永不停止”地监听任务。 后果 :沙箱有严格的超时机制(默认120秒)。一旦超时,整个沙箱进程会被强制 kill -9 ,没有任何清理机会。你脚本里打开的数据库连接、临时文件、未flush的日志,全都会丢失,可能导致数据不一致。 正确做法 :沙箱脚本必须是“函数式”的:接收一次输入,处理一次,输出一次,然后优雅退出。所有状态,必须通过 stdout 输出,由执行器(Harness)来负责持久化。我们曾因此丢失过一批客户行为数据,后来强制规定:所有沙箱脚本,第一行必须是 #!/usr/bin/env python3 -u -u 参数启用无缓冲输出),确保每一行日志都能实时被捕获。

5.4 关于会话(Session):不要把它当作“数据库”来用

错误做法 :在会话的事件日志里,存储大量非结构化的、用于“辅助模型思考”的中间数据,比如“用户可能喜欢的颜色是蓝色”、“这个客户的预算大概在$50K左右”。 后果 :事件日志会急剧膨胀,查询变慢,存储成本飙升。更重要的是,这些“推测性”数据,会污染后续的审计和分析。当审计员问“Agent是如何得出这个结论的?”,你给他看的是一堆未经证实的“猜测”,而非确凿的“工具调用结果”。 正确做法 :会话日志只记录 事实(Facts) :工具调用的输入、工具返回的输出、模型生成的最终响应。所有“推理”、“猜测”、“中间状态”,都应该在模型的上下文(context window)内完成,并在每次 execute() 调用后被丢弃。我们为此专门设计了一个“Context Cleaner”中间件,在每次工具调用前,自动过滤掉所有非必要的上下文片段,将平均上下文

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐