研究AWS Machine Learning·原文 2026年9月23日

AWS为Strands Evals与Bedrock AgentCore新增技能评测器,衡量Agent选对技能与执行完整度

AWS机器学习博客介绍,Strands Evals SDK与Amazon Bedrock AgentCore Evaluations新增两个技能评测器:Skill Selection Accuracy判断每次调用的技能是否匹配任务,Skill Instruction Following按五级量表衡量技能步骤执行程度;Strands Evals另提供确定性的Skill Invoked检查。

AI解读:这条新闻解决的是一个很实际的排查问题:Agent最后的回答看起来很流畅,不代表它走了你为它准备的那套流程。它可能挑错了技能,也可能挑对技能却跳过中间步骤。AWS把这两类失败拆成两个独立指标,用法是分别打分而不是合成一个通过率。

技能在这里不是抽象的“能力”,而是一份可复用的SKILL.md指令包,里面绑定了工具、知识、流程步骤和格式限制,运行时只加载需要的那一个。写入开放式Agent Skills标准意味着同一份技能可以搬到不同运行环境里。对把合规检查、合同脱敏、发票对账写进Agent的团队来说,这比把所有流程塞进一段系统提示更容易维护和更新。

新评测器的影响面很具体:如果选择分数高但执行分数低,要修的是技能步骤描述或换更强的模型;反过来则说明技能本身没问题,是路由或技能描述重叠导致没被选中。Skill Invoked不调用模型,可以当作便宜的回归断言,在部署前卡住明确要求走某条路径的用例。

限制同样明确:判定型评测器只在确实调用了技能时才给分,没调用技能就没有分数;五级评分从完全遵循到未遵循,通过线设在“大部分遵循”及以上。AWS还提醒,Strands Evals与AgentCore Evaluations的阈值不能直接互搬,各自都要拿自己的用例校准。

AWS机器学习博客发布文章,介绍用Strands Evals SDK和Amazon Bedrock AgentCore Evaluations评测带技能的Agent。文章由Sangmin Woo撰写,指出这类评测的必要性在于:Agent可能调用了不适合任务的技能,也可能调用了正确的技能却跳过或只执行了部分指令,而这两种失败都会给出流畅、看似合理的回答。

技能被定义为可复用的指令集合,通常存放在SKILL.md文件中,教Agent完成领域任务,例如脱敏合同、核对发票或遵循团队的拉取请求规范。技能遵循开放的Agent Skills标准,因此可在兼容的运行框架之间迁移;Agent在运行时只加载所需的那一个技能,而不是把所有流程都放进核心指令。

一个技能把一个或多个工具与正确使用它们所需的上下文打包在一起,包括:注入Agent上下文的领域指导与约束(Instructions)、技能依赖的API、Model Context Protocol(MCP)服务器或本地命令(Tool bindings)、参考资料与示例(Knowledge)、多步流程或决策逻辑(Workflow),以及格式要求、范围限制和校验规则(Guardrails)。

为让上述失败可测量,两个产品新增聚焦技能的评测器。Skill Selection Accuracy判断每次被调用的技能对该任务是否合适,对每个被调用的技能返回二元结果;Skill Instruction Following判断Agent对某个技能指令的遵循完整度,对每个规定步骤返回基于证据的五级评分。Strands Evals另有一个确定性的Skill Invoked,检查某个具名技能是否成功加载。

在Strands Evals中,技能评测器读取一次运行的轨迹,可以是Strands Evals Session或原始消息列表。文章给出的代码示例定义了一个名为q3-revenue-tables的用例,输入为“Summarize the revenue tables in q3-report.pdf”,并注册SkillSelectionAccuracyEvaluator、SkillInstructionFollowingEvaluator以及SkillInvoked(skill_name="pdf-table-extraction"),再用TracedHandler收集Agent的span作为轨迹。

在示例报告里,Agent加载了pdf-table-extraction并运行pdftotext -layout,但没有打开提取出的文件、也没有定位表格边界。结果是SkillSelectionAccuracyEvaluator得分 1.00、通过;SkillInstructionFollowingEvaluator得分 0.50、不通过,其中“保留版式提取文本”已完成,“定位表格边界”被跳过,“汇总每张表的头条数字”为部分完成;SkillInvoked得分 1.00、通过。

五级评分与部署门禁

Skill Instruction Following使用五档评分:Fully Followed(1.0)、Mostly Followed(0.75)、Partially Followed(0.5)、Minimally Followed(0.25)、Not Followed(0.0),达到Mostly Followed及以上才算通过。

文章建议为每个回归用例必须调用的关键技能加上SkillInvoked,因为它不调用模型,是快速的路径断言;可用report.test_passes卡住构建,在并非全部通过时抛出SystemExit(1)。聚合分数用于跟踪整体趋势,但在强制执行阈值前要用自己的用例校准。

在OpenTelemetry轨迹上评测

AgentCore Evaluations直接处理已有的OpenTelemetry轨迹,支持按需评测、对存储会话批量处理以及对实时流量持续采样。遥测数据按session、trace、span组织;由于技能评测器工作在工具调用层级,每条结果都带有spanContext,包含识别出的技能调用的sessionId、traceId和spanId。

技能调用通过以下两种方式之一被识别:读取SKILL.md文件系统,这一方式跨框架可用;或使用Strands Agents、LangGraph Deep Agents、Google ADK、Claude Agent SDK中的原生技能加载工具。

自定义评测器的占位符与运行时机

AgentCore Evaluations自带两个判定型技能评测器;若要评估内置项未覆盖的内容,可在TOOL_CALL层级创建自定义评测器。工具层模板可引用占位符:{invoked_skill} 是本次工具调用加载的技能名,{skill_content} 是加载的SKILL.md正文,{available_skills} 是运行时提供的技能目录(若该运行框架未记录则为“(not recorded by this harness)”),{user_message} 是触发调用的请求,{context} 是对话记录。

占位符也决定评测器何时运行:包含 {invoked_skill} 的模板只在技能调用span上运行,同时包含 {skill_content} 的模板还要求已加载技能正文。文中给出一个模板示例,检查Agent是否按给定顺序完成技能说明里的每一个编号步骤,答案只能为Yes或No。

三种运行方式与命令行

按需评测用于排查某个会话、验证近期改动或评测预发布流量:agentcore run eval --runtime --evaluator Builtin.SkillSelectionAccuracy Builtin.SkillInstructionFollowing --session-id。批量评测用于一次给多个已存储会话打分,例如在技能目录变更前建立基线:agentcore run batch-evaluation --runtime --evaluator Builtin.SkillSelectionAccuracy Builtin.SkillInstructionFollowing。

在线评测对实时流量采样:agentcore add online-eval --name HRSkillsProductionEval --runtime --evaluator Builtin.SkillSelectionAccuracy Builtin.SkillInstructionFollowing --sampling-rate 100 --enable-on-create,然后agentcore deploy部署以开通在线评测配置。文章称持续评测特别适合发现三类问题:目录漂移(新技能与既有描述重叠)、意外措辞(真实请求与策划的测试提示不同)、长会话失败(上下文增长导致指令遵循退化)。文中注明Strands.SkillInvoked仅在客户端使用,没有对应的CLI命令。

文章列出的前提条件包括:Python 3.10或更高版本;具有Amazon Bedrock访问权限的AWS账户,以及判定模型InvokeModel权限的凭证;安装pip install strands-agents-evals strands-agents;需要一次已记录的Agent运行。AgentCore Evaluations部分还要求Agent托管在Amazon Bedrock AgentCore runtime或其他位置、开启可观测性以向Amazon CloudWatch发送遥测、在CloudWatch中启用Transaction Search。

文章称发布时技能提取已能识别来自Strands AgentSkills插件、Claude Code、Claude Agent SDK、OpenAI Agents SDK、Codex、Gemini CLI、OpenHands、Google ADK以及通用SKILL.md文件读取的信号。示例使用CLI命令npm install -g @aws/agentcore安装。

文章给出的实践建议

文章强调路由与执行是两种不同的失败模式,评测策略要把它们分开。若选择分数高而指令遵循分数低,说明路由器选对了技能但执行不完整;反之则说明技能本可正常工作,只是没被调用。把两项评测一起跑,而不是合并成一个通过/失败数字,才能区分这两种情况。

在自建之前先用内置评测器建立基线,以便后续自定义逻辑只补基线真正漏掉的部分;对已知正确路由行为的要求,不要依赖判定模型,为每个必须触发的技能加确定性的SkillInvoked断言。不要只看聚合分数,按步骤的证据才用于诊断。

技能描述要有真正的区分度;技能范围也要收敛,一个为六个互不相关功能构建的技能没有单一的正确行为定义,几乎无法一致评测。文中还提醒,只应评测某次运行实际走过的路径,否则未走到的分支会被误计为跳过步骤,悄悄污染通过率;在信任分数前要验证提取管线对实时轨迹确实有效。随着跨工具扩展,阈值可能不能直接迁移,每个评测面都需要按自己的口径校准。文章最后称技能质量回归应像失败的单元测试一样阻止发布。

信息来源