EnglishРусский Map

agent-skills-eval

title
agent-skills-eval
type
toolbox
summary
Исполнитель тестов, измеряющий прирост от skill'а сопоставлением прогонов с ним и без него
tags
typescript, ai, testing, skill-bundle, watchlist
language
TypeScript
license
MIT
created
2026-05-10
updated
2026-05-10
lang
ru
translation_of
agent-skills-eval
source_updated
2026-05-10
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-medium

Исполнитель тестов для Agent Skills - открытого стандарта от Anthropic для передачи агентам предметных знаний. Исходная предпосылка: написать SKILL.md просто; доказать, что он действительно помогает модели лучше справляться с задачей, куда сложнее. agent-skills-eval запускает каждый eval дважды: один раз with_skill с загрузкой в контекст, второй - without_skill (базовый уровень). Затем модель-судья оценивает оба результата по одним и тем же утверждениям (assertions) и формирует сравнительный отчёт.

Это недостающий инструмент измерений для экосистемы skill'ов, рассмотренной в mcp-vs-skills, library-skills, cli-anything, impeccable, agent-skill-linter. Другие инструменты этого кластера закрывают задачи создания, распространения, валидации и бандлинга. agent-skills-eval отвечает на эмпирический вопрос: изменил ли этот skill поведение модели измеримым образом?

Внесён в список наблюдения - один автор, четыре дня проекту на момент ingest'а, 257 звёзд. Строгое соответствие спецификации и чёткая изоляция от конкретного runtime'а говорят в пользу жизнеспособности, но сама экосистема agentskills.io пока молода, и подходящий паттерн оценки skill'ов ещё не проверен достаточной практикой.

Как устроен

                ┌─────────────────────────────┐
                │       same prompt           │
                └───────────────┬─────────────┘
                                │
                ┌───────────────┴─────────────┐
                ▼                             ▼
        ┌──────────────┐              ┌──────────────┐
        │ with_skill   │              │without_skill │
        │ SKILL.md in  │              │ baseline,    │
        │ context      │              │ no skill     │
        └──────┬───────┘              └──────┬───────┘
               │                             │
               ▼                             ▼
          target model                  target model
               │                             │
               ▼                             ▼
            output                        output
               │                             │
               └──────────┬──────────────────┘
                          ▼
                   ┌─────────────┐
                   │  judge      │  scores both against
                   │  model      │  the same assertions
                   └──────┬──────┘
                          ▼
                  pass / fail per side

Флаг --baseline как раз и включает сравнение. Без него выполняется только прогон with_skill.

Быстрый старт

npx agent-skills-eval ./skills \
  --target gpt-4o-mini \
  --judge gpt-4o-mini \
  --baseline \
  --strict

Структура каталога результатов:

agent-skills-workspace/
└── iteration-1/
    ├── meta.json            # run metadata
    ├── benchmark.json       # rolled-up pass/fail per skill
    ├── eval-basic/
    │   ├── with_skill/      # output, timing, judge grading
    │   └── without_skill/   # ↑ same, with the skill stripped
    └── report/
        └── index.html       # the visual report

Структура skill'а

Стандартный формат agentskills.io. Минимальный набор - SKILL.md плюс evals/evals.json:

{
  "skill_name": "my-skill",
  "evals": [
    {
      "id": "basic",
      "prompt": "Use the attached data to summarize revenue.",
      "files": ["evals/files/input.csv"],
      "expected_output": "The response identifies the highest revenue month.",
      "assertions": ["The output identifies the highest revenue month."]
    }
  ]
}

Если пропустить assertions, но указать expected_output, SDK автоматически преобразует ожидаемый результат в утверждение для судьи: минимальный eval всё равно выдаст осмысленную оценку pass / fail.

Модель провайдеров

По умолчанию совместим с OpenAI - работает с OpenAI, Together, Groq, Anthropic через слои совместимости с OpenAI, а также локальными серверами Llama. Подключить любой backend можно реализацией интерфейса Provider (пять полей, один метод): это пригодится для Ollama / vLLM / llama.cpp, внутренних API, mock-провайдеров в unit-тестах и слоёв маршрутизации.

SDK

Для CI-пайплайнов и собственных дашбордов:

import { OpenAICompatibleProvider, evaluateSkills } from "agent-skills-eval";

const provider = new OpenAICompatibleProvider({
  baseUrl: "https://api.openai.com/v1",
  apiKey: process.env.OPENAI_API_KEY!,
  model: "gpt-4o-mini",
  providerName: "openai",
});

await evaluateSkills({
  root: "./skills",
  workspace: "./agent-skills-workspace",
  baseline: true,
  concurrency: 4,
  workspaceLayout: "iteration",
  strict: true,
  target: { model: provider.model, provider },
  judge: { model: provider.model, provider },
  onEvent: consoleReporter(),
});

Потоковая передача в формате JSONL поддерживается через jsonlReporter({ file: "./events.jsonl" }).

Соответствие спецификации

Реализует спецификацию agentskills.io полностью:

  • YAML frontmatter в SKILL.md: обязательные name и description, опциональные license, compatibility, metadata, allowed-tools
  • Строгая валидация: длина имени, формат в нижнем регистре через дефис, совпадение с именем родительского каталога, длина описания
  • Опциональные каталоги scripts/, references/, assets/
  • Схема evals/evals.json: skill_name, evals[].id, prompt, expected_output, files, assertions
  • Официальная структура артефактов: iteration-N/<eval>/<mode>/outputs, timing.json, grading.json, benchmark.json
  • Сравнение с базовым уровнем: with_skill против without_skill

Сверх спецификации инструмент добавляет defaults для отдельных eval'ов, params модели, определения инструментов (tools), детерминированные tool_assertions и плоский workspaceLayout для дашбордов по нескольким skill'ам.

В чём отличия

Разделение на with_skill / without_skill - главное методологическое решение. Большинство фреймворков для оценки skill'ов или промптов измеряют абсолютную долю успешных прогонов (pass rate); здесь же измеряется прирост, полученный именно за счёт skill'а. Благодаря этому фреймворк подходит для регрессионного контроля при доработке skill'а: изменила ли новая редакция SKILL.md хоть что-то, или улучшение лишь кажется?

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

Ограничения

  • Подход с моделью-судьёй наследует обычную для таких решений нестабильность; детерминированные tool_assertions служат страховкой там, где поведение поддаётся прямой проверке.
  • Только TypeScript / Node; проектам со skill'ами на Python потребуется Node-окружение (sidecar) для запуска eval'ов.
  • Расходы удваиваются (2×: с skill'ом и без на каждой итерации); для набора из 50 eval'ов каждый прогон требует 100 вызовов целевой модели и 100 вызовов судьи.
  • Выбор модели-судьи ощутимо влияет на результат; фреймворк не даёт рекомендаций по выбору, оставляя это на усмотрение пользователя.

Критерии списка наблюдения

Внесён в watchlist - один автор, 4 дня проекту на момент ingest'а. Повторная проверка 2026-08-10 по критериям: число контрибьюторов, паттерны снижения нестабильности судьи, интеграция с остальной экосистемой agentskills.io, а также сохранение достаточной стабильности спецификации agentskills.io для инструментов этого уровня.

Связанные страницы

  • mcp-vs-skills (skill'ы как знания, MCP как возможности)
  • library-skills (модель распространения через распределённый реестр)
  • cli-anything (генерация skill'ов вместе с CLI)
  • impeccable, agent-skill-linter (валидация skill'ов, соседний уровень)
  • flue (каркас агентных сред, использующий skill'ы)
  • features-to-steal-from-npmx (контекст проектирования реестра)