
最近在折腾 AI Agent(人工智能代理)的评估体系,踩了不少坑,趁着记忆清晰把 Amazon Bedrock 的 AgentCore Evaluations 好好研究了一番。这玩意儿解决了一个很实际的问题:团队里有人用 LangGraph,有人用 LlamaIndex,还有人在试 OpenAI 的 Agents SDK,每个框架自带一套评估逻辑,互相之间根本没法对比。AWS 的解法很有意思——直接拿 OpenTelemetry(可观测性遥测技术)当契约,甭管你用啥框架,只要发出正确的 span(追踪跨度)和属性,AgentCore 就能打分。
目前支持 LangGraph、LlamaIndex、OpenAI Agents SDK、Google ADK、Claude Agent SDK 和 Strands Agents,自定义框架只要正确埋点也行。这是业界第一个用遥测数据解耦框架选择和评估能力的云服务方案,下面详细说说技术实现。
AgentCore Evaluations 要求 Agent 以 OpenTelemetry 格式发出结构化遥测数据,服务端会识别特定类型的 span 和属性:
每个 span 必须包含映射到评估维度的语义属性,例如:
# 手动埋点的伪代码
from opentelemetry import trace tracer = trace.get_tracer(__name__) with tracer.start_as_current_span("agent.run") as agent_span: agent_span.set_attribute("agent.id", "customer-support-v2") agent_span.set_attribute("agent.framework", "langgraph") with tracer.start_as_current_span("tool.call") as tool_span: tool_span.set_attribute("tool.name", "get_order_status") tool_span.set_attribute("tool.input", json.dumps({"order_id": "12345"})) result = get_order_status("12345") tool_span.set_attribute("tool.output", json.dumps(result)) tool_span.set_attribute"tool.success", True) 关键在于 AgentCore 不关心你的框架内部状态机或图结构,只关心可观测的事件:调用了哪些工具、大模型说了什么、各环节耗时多少、是否成功。
主流框架或多或少都支持 OpenTelemetry,但覆盖度参差不齐:
| 框架 | 原生 OTel 支持 | 埋点缺口 | 解决方案 |
|---|---|---|---|
| LangGraph | 部分支持(LangSmith 集成) | 缺少 tool 成功/失败属性 | 手动补充 span |
| LlamaIndex | 良好(内置 OTel 导出器) | span 命名不一致 | 用 span processor 规范化 |
| OpenAI Agents SDK | 极少 | 默认不生成 tool span | 用自定义 tracer 包装工具调用 |
| Claude Agent SDK | 无 | 全缺 | 完整手动埋点 |
| 自定义框架 | 无 | 全缺 | 从头构建 |
如果你的框架没发出所需的遥测数据,有三种选择:
AWS 不提供框架特定的适配器。怎么确保 Agent 发出正确的遥测格式,得你自己负责。文档里有各框架的埋点示例,但得根据自己的 Agent 架构做适配。
AgentCore 收到遥测数据后,会计算多个维度的指标:
评估结果存在时序数据库里(应该是 Amazon Timestream,但 AWS 没明说)。可以通过 AgentCore API 或 AWS 控制台查询。默认保留 90 天,之后想长期存储得导出到 S3。
典型数据流是这样的:
ADOT Collector 以 sidecar 容器或守护进程方式运行,负责批量处理、重试和凭证管理。配置通过 YAML 文件完成:
receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 exporters: awsxray: region: us-east-1 agentcore: endpoint: agentcore.us-east-1.amazonaws.com region: us-east-1 service: pipelines: traces: receivers: [otlp] exporters: [awsxray, agentcore] agentcore 导出器是 ADOT 自带的插件,通过 IAM 角色认证,将 span 转发到 AgentCore 服务。
发送遥测数据到 AgentCore 会带来额外延迟和成本:
如果跑的是高吞吐量 Agent(每秒几千次运行),成本会快速攀升。可以这样优化:
本地开发或低风险测试场景,可以用 AgentCore SDK 本地运行评估,不往 AWS 发遥测。这样更快更便宜,但没有集中仪表盘和历史对比功能。
AgentCore Evaluations 运行在 AWS 账号,不是你的。遥测数据跨账号传输,这引发两个问题:
AWS 对传输中(TLS)和存储中(KMS)的 span 加密。如需完全掌控加密,可使用客户托管的 KMS 密钥。
最可能踩的坑:
适合用 AgentCore Evaluations 的场景:
不适合的场景:
对于跑异构 Agent 技术栈的团队,框架无关的契约确实是实打实的优势。但用灵活性换来了运维复杂度——得自己管 ADOT Collector、监控 span 摄入、填补埋点缺口。