Технологии

«Красноречивый ответ не доказывает, что агент выбрал нужный навык»: AWS добавила оценки навыков в Strands Evals и AgentCore

Три новые оценки разделяют два разных сбоя: неверный выбор навыка и неполное следование инструкциям SKILL.md. Skill Selection Accuracy даёт бинарный результат на каждый вызванный навык, Skill Instruction Following — пятиуровневую оценку с доказательствами по каждому шагу, а Skill Invoked проверяет загрузку навыка детерминированно, без обращения к модели.

«Красноречивый ответ не доказывает, что агент выбрал нужный навык»: AWS добавила оценки навыков в Strands Evals и AgentCore

Зачем агентам навыки

Универсальные агенты справляются с широким кругом задач, но от них всё равно нужно, чтобы они следовали процедурам, на которых держится бизнес: проверкам соответствия, обработке документов, политикам эскалации, инженерным соглашениям. Держать всё это в одном системном промпте или в логике приложения тяжело поддерживать и обновлять.

Навык (skill) — модульная альтернатива: переиспользуемый набор инструкций, обычно в файле SKILL.md, который учит агента конкретной прикладной задаче — замаскировать договор, сверить счёт, соблюсти правила команды по пул-реквестам. Поскольку навыки следуют открытому стандарту Agent Skills, они переносимы между совместимыми харнессами, а агент загружает во время работы только нужный навык, а не носит все процедуры в основных инструкциях.

Навык упаковывает инструменты вместе с контекстом, нужным агенту: инструкции с доменными ограничениями, привязки к инструментам (API, серверы Model Context Protocol, локальные команды), справочные материалы и рабочие примеры, многошаговый процесс или логику решений и ограничения с правилами проверки. Такой подход помогает быстрее специализировать агентов, переиспользовать проверенные процедуры, держать поведение согласованным и обновлять доменные инструкции без дообучения модели и переписывания основной логики.

Два сбоя, которых не видно по финальному ответу

Композиция навыков приносит два сбоя, которые общие метрики качества ответа пропускают: агент вызывает навык, не подходящий задаче, либо вызывает нужный навык, но пропускает его шаги или выполняет их частично. Оба сбоя дают беглый и правдоподобный ответ, при этом заданное доменное знание так и не было использовано, поэтому оценка не может ограничиваться финальным ответом.

Три новые оценки

Чтобы сделать эти сбои измеримыми, Strands Evals SDK и Amazon Bedrock AgentCore Evaluations — возможность Amazon Bedrock AgentCore — добавляют оценки, ориентированные на навыки. Skill Selection Accuracy отвечает, был ли каждый вызванный навык уместным выбором для задачи, и возвращает бинарный результат для каждого вызванного навыка. Skill Instruction Following показывает, насколько полно агент следовал инструкциям вызванного навыка, и выдаёт пятиуровневую оценку с доказательствами по каждому предписанному шагу.

В Strands Evals есть и третий компонент: Skill Invoked — детерминированная проверка того, что названный навык был успешно загружен; она не вызывает модель и специфична для Strands Evals.

Пятиуровневая шкала выглядит так: Fully Followed (1.0), Mostly Followed (0.75), Partially Followed (0.5), Minimally Followed (0.25) и Not Followed (0.0); проход засчитывается при Mostly Followed и выше. Поскольку оценки на основе судьи возвращают результат по каждому вызванному навыку, многонавыковые прогоны остаются диагностируемыми: видно, какой именно результат занизил агрегат. Если навык вообще не вызван, оценки-судьи балл не выдают — их стоит сочетать с SkillInvoked там, где регрессионный тест требует заранее известной маршрутизации.

Пример с HR-ассистентом

В статье разбирается HR-ассистент с навыками планирования отпуска (PTO) и обсуждения льгот. Если сотрудник спрашивает про стоматологию и зрение, а агент вызывает навык льгот, ответ может получиться более гладким — но если выбрана не та «методичка», именно решение о маршрутизации и выделяет Skill Selection Accuracy.

Если же агент правильно вызывает навык планирования отпуска, а тот предписывает определить employee_id, проверить баланс PTO, сверить правила переноса с последней кадровой политикой и лишь затем подать заявку, пропуск проверки правил переноса даст правдоподобный ответ в обход процесса — этот сбой исполнения выделяет Skill Instruction Following. Починка у сбоев разная: неуместный выбор чаще указывает на пересекающиеся или неоднозначные описания навыков, а неполное следование — на необходимость более чётких шагов, другой структуры навыка или более сильной модели.

От прогона до шлюза в деплое

Strands Evals полезен там, где вы контролируете тест-кейсы и можете перегонять агента в разработке или в CI. В примере создаются кейс Case и набор оценок, траектория собирается декоратором TracedHandler, а вызов Experiment.run_evaluations возвращает отчёт.

В упрощённом отчёте из статьи агент загрузил навык pdf-table-extraction и выполнил pdftotext -layout, но не открыл извлечённый файл и не определил границы таблиц: Skill Selection Accuracy даёт 1.00 и проход, Skill Instruction Following — 0.50 и провал с разбором шагов, SkillInvoked — 1.00.

Из этого AWS предлагает сделать шлюз: добавлять SkillInvoked для каждого критичного навыка, который обязан вызываться в конкретном регрессионном кейсе, потому что проверка не обращается к модели и служит быстрой маршрутной ассерцией; останавливать сборку по report.test_passes, поднимая SystemExit(1); использовать агрегатные оценки для трендов, но калибровать порог на собственных кейсах.

Предпосылки: Python 3.10 или новее, аккаунт AWS с доступом к Amazon Bedrock и правами InvokeModel для модели-судьи; SDK ставятся как pip install strands-agents-evals strands-agents. По умолчанию оценки используют Amazon Bedrock с Claude в роли судьи. Извлечение навыков распознаёт сигналы плагина Strands AgentSkills, Claude Code, Claude Agent SDK, OpenAI Agents SDK, Codex, Gemini CLI, OpenHands, Google ADK и обычного чтения файла SKILL.md.

Оценка живых трейсов в AgentCore

AgentCore Evaluations работает напрямую с существующими трейсами OpenTelemetry и поддерживает оценку по запросу, пакетную обработку сохранённых сессий и непрерывную выборку живого трафика. Каждый результат содержит spanContext с sessionId, traceId и spanId распознанного вызова навыка, а сам вызов распознаётся либо по чтению файла SKILL.md, либо по нативному инструменту загрузки навыков в Strands Agents, LangGraph Deep Agents, Google ADK или Claude Agent SDK.

Команды собираются в AgentCore CLI: agentcore run eval с ключом --session-id для разбора конкретной сессии, agentcore run batch-evaluation для пакетной оценки сохранённых сессий и agentcore add online-eval с --sampling-rate 100 и последующим agentcore deploy для непрерывной онлайн-оценки. Непрерывная оценка полезна против дрейфа каталога навыков, неожиданных формулировок в реальных запросах и деградации следования инструкциям в длинных сессиях.

Помимо двух встроенных оценок на основе судьи, в AgentCore Evaluations можно создать собственную оценку уровня TOOL_CALL: шаблоны могут ссылаться на плейсхолдеры invoked_skill, skill_content, available_skills, user_message и context, а состав использованных плейсхолдеров определяет, когда оценка запускается.

Что советует AWS

Главное правило: маршрутизация и исполнение — два разных сбоя, и стратегия оценки должна их разделять. Высокий балл за выбор навыка при низком балле за следование инструкциям означает, что роутер выбрал правильный навык, но тот не был выполнен полностью; обратный паттерн — что навык сработал бы, если бы его вообще вызвали.

Перед созданием собственных оценок стоит начать со встроенных и зафиксировать базовый уровень, а там, где правильное поведение маршрутизации уже известно, не полагаться на модель-судью, а добавлять детерминированную проверку SkillInvoked. Не стоит смотреть только на агрегат: диагностика происходит на уровне доказательств по шагам — покрыт шаг полностью, выполнен частично или пропущен.

Описания навыков должны быть по-настоящему различимыми, а сам навык — не слишком широким: навык на шесть несвязанных функций не имеет единого определения корректного поведения, и оценивать его согласованно почти невозможно. Оценивать нужно только тот путь, который агент реально прошёл, иначе невыбранные ветви засчитываются как пропущенные шаги и тихо портят статистику прохождений, а перед доверием к баллам следует убедиться, что конвейер извлечения действительно работает на живых трейсах.

Пороги не переносятся автоматически между поверхностями: успешный балл в Strands Evals и успешный балл в AgentCore Evaluations не гарантированно означают одно и то же, и каждая поверхность требует собственной калибровки. И, наконец, качество навыков должно жить внутри пайплайна деплоя: регрессии должны блокировать релиз так же, как падающий юнит-тест.

Для сопровождения статьи AWS выложила пример оценки навыков во внутреннем цикле разработки: скрипт перегоняет HR-ассистента в процессе сборки, собирает траекторию через TracedHandler и оценивает её теми же тремя оценками, используя по умолчанию модель-судью global.anthropic.claude-sonnet-4-6; для предполётной проверки формата трассы есть ключ --validate-extraction.

Первоисточники

  1. AWS Machine Learning Blog — «Evaluate skill-equipped agents with Strands Evals and Amazon Bedrock AgentCore», 22 сентября 2026
  2. Strands Agents — Strands Evaluation quickstart (evals SDK)
  3. awslabs/agentcore-samples — inner_loop_eval.py: оценка навыков в Strands Evals SDK