Top View


Author Daiki Urata

NVIDIA SkillEvaluatorでエージェントスキルの効果を測ってみた

2026/08/21

X (Twitter) シェア

はじめに

みなさんこんにちは、Fusicの浦田です。

Fusicではブランドスローガンでもある「OSEKKAI」という社内プラグインマーケットプレイスを運用しており、Claude Code/Cowork/Codex/Cursor/GitHub Copilot向けに20以上の日本語スキル・プラグインを全社配布しています。

ただ、スキルを作って配布していると「このスキル、本当に効果あるの?」という疑問に必ずぶつかります。体感では良くなっている気がするものの、数字で示せないと改善もレビューもできません。

そこで、本記事では、NVIDIAが公開したスキル評価フレームワーク「SkillEvaluator」を使って、社内の日本語スキルを実際に評価してみた結果とハマりどころを紹介します。

検証時のバージョンは skillevaluator 0.2.0(Harbor 0.13.2)、Python 3.13 です。

1. SkillEvaluatorとは?

SkillEvaluatorは、SKILL.md形式のAgent Skillsを3層で評価するOSS(Apache 2.0)です。

  • Tier 1(静的検証): スキーマ、セキュリティ(プロンプトインジェクション検査)、PII、品質スコアリング
  • Tier 2(重複検出): embeddingでスキル間の重複ガイダンスを検出
  • Tier 3(ライブ評価): スキルあり/なしで実際にエージェントを動かし、スコア差分(リフト)を測定

評価対象のエージェントとしてClaude Code、Codex、Cursorをサポートしています。特にTier 3は「スキルの有無でエージェントの挙動がどう変わるか」をA/Bで測ってくれるので、まさに欲しかったものです。

コマンド体系も3層構成に対応しています。skillevaluator -hの出力が全体像を掴みやすいので載せておきます。

Core workflows:
  validate      Validate a skill, rule, workflow, or plugin (Tier 1, with
                optional Tier 2/Tier 3).
  health-check  Quick readiness check for the CLI and selected live-eval
                backend.
  doctor        Check live-evaluation runtime readiness.
  models        List a filtered view of the selected provider's authenticated
                catalog.

Tier 1 · Static and security:
  quality-check  Score skill quality across correctness, discoverability,
                 reliability, and efficiency.
  rubric-eval    Run LLM-as-judge rubric evaluation for a skill.
  security-scan  Scan for security vulnerabilities.
  pii-scan       Scan for PII and local identifiers.
  lint-scripts   Run advisory lint checks on skill scripts.

Tier 2 · Deduplication:
  similarity-check            Detect duplicate content with embedding
                              similarity.
  context-optimization-check  Detect redundant content within one skill.
  dedup-scan                  Detect semantically redundant content within one
                              skill.

Tier 3 · Live evaluation:
  create-eval-dataset  Create synthetic eval datasets for agent skill
                       evaluation.
  init-custom-grader   Create a BYOG custom grader starter under evals/.
  init-harbor-task     Create a BYOT Harbor starter template under
                       evals/harbor/.
  compare              Compare live evaluation results across agents.
  view                 Open the latest HTML live-evaluation report.
  harbor-view          Open retained Harbor job artifacts with Harbor's
                       trajectory browser.

Expert aliases:
  tier1  Expert aliases for Tier 1 static checks.
  tier2  Expert aliases for Tier 2 similarity and deduplication checks.
  tier3  Expert aliases for Tier 3 dataset creation and live agent evaluation.

2. 評価対象のスキル

今回評価したのは、社内プラグインproposal-reviewreview-proposalスキルです。カンファレンス登壇プロポーザル(CFP)をレビューし、採択率を高める改善案を提案するもので、単なる文章校正ではなく「運営側の選考視点」でフィードバックすることを狙った日本語スキルです。

SKILL.mdのフロントマターは以下のような形です。descriptionにトリガーワードを列挙して、セマンティックマッチングで発火させる構成にしています。

---
name: review-proposal
description: |
  カンファレンス登壇プロポーザル(CFP)をレビューし改善点を提案。以下の場合に使用:
  (1) 「プロポーザルレビュー」「CFPレビュー」「プロポーザルを見て」と言われた時
  (2) 「登壇プロポーザル」「カンファレンス応募」「CFP添削」と言われた時
  (3) 「採択されやすくしたい」「通りやすくしたい」と言われた時
  ...
model: opus
---
...

本文には「選考者の立場で読む」「書き手の熱量を活かす」といったレビューの基本姿勢や、タイトル・概要それぞれのチェック観点を記述しています。

1スキル約270行と小ぶりで、テキスト入力→レビュー出力の非対話で完結するため、試すのにちょうど良いと思い選びました。

3. インストール

公式ドキュメントの手順で進めていきます。

以下のコマンドでインストールします。

uv tool install --python 3.13 "skillevaluator[all] @ git+https://github.com/NVIDIA/SkillEvaluator.git"

Tier 1をフルで動かすには外部スキャナも必要です。入れていないと該当チェックがincomplete扱いでFAILになります。

uv tool install git+https://github.com/NVIDIA/SkillSpector.git
brew install gitleaks

これにより、skillevaluator validate <skill-path>でTier 1の検証が動くようになります。

4. Tier 1/2を軽く回してみる

まずは静的検証からです。validateがTier 1一式を回すエントリポイントで、決定的チェック(スキーマ・セキュリティスキャン・PII等)だけならAPIキー不要で動きます。

skillevaluator validate path/to/plugins/proposal-review/skills/review-proposal

結果は品質スコアB(81.8/100)でした。指摘の中で面白かったものをいくつか紹介します。

  • Agent Snooping警告: このスキルはレビュー前に同じマーケットプレイス内の別プラグインosekkai-guideのSKILL.mdを読み込んで、Fusicの「おせっかい精神」を反映する設計にしています。これが「他スキルの内部指示を覗く危険パターン」としてmedium検出されました。osekkaiでは意図的な設計なので誤検知ですが、サプライチェーン的な視点のチェックとしては筋が良いと感じました
  • description長すぎ警告: 推奨50〜150文字に対して380文字と指摘されました。ただ、トリガーワードを列挙して発火精度を上げる戦略とは思想が衝突する部分なので、ここは無視してよい類の警告です
  • 不可視文字の検出: SKILL.md内にコピペ由来の不可視文字(VARIATION SELECTOR-16)が1つ混入していることを発見してくれました。これは地味に助かります

次にTier 2です。こちらはembeddingを使うため、後述する(5章)プロバイダAPIキーの設定が必要になります。ディレクトリを指定すると配下のスキルを横断比較できます。

skillevaluator similarity-check path/to/plugins --type skill

マーケットプレイス全体(25プラグイン)に掛けると、後継プラグインに移植した同名スキル21個のdescription完全一致をCRITICALとして検出しました。既知の意図的な重複ではあるものの、両方インストールした環境での誤発火リスクの裏付けとしては有益です。

なおvalidateは、プロバイダAPIキーが設定済みであればTier 2(スキル内の重複チェック)まで一括で実行してくれます。キーがない場合はTier 2がスキップされるだけで、Tier 1の結果は得られます。

5. コストを抑えた構成

judge(採点用LLM)とembeddingにはプロバイダのAPIキーが必要です。何も指定しないと最上位モデルが選ばれてしまうため、安価なモデルを明示するのがおすすめです。

export OPENAI_API_KEY="sk-..."
export SKILL_EVAL_LLM_PROVIDER=openai
export SKILL_EVAL_LLM_MODEL=gpt-5.6-luna

複数プロバイダのキーが環境変数にあると「SKILL_EVAL_LLM_PROVIDER is required」というエラーになるので、providerは明示しておくのが安全です。

Tier 3で実際に動かすエージェント側(claude-code)の認証には、別途ANTHROPIC_API_KEYを環境変数に設定します。judgeとエージェントでプロバイダを分けると、「Claudeの出力をClaudeが採点する」自己選好バイアスを避けられるのも利点です。

今回の検証(4ケース×スキルあり/なし×1回 + データセット生成)で、judge側の実費は合計で数十円程度でした。

6. 評価データセットの生成

Tier 3用のテストケースはLLMで自動生成できます。

skillevaluator create-eval-dataset <skill-path> --full

ここで個人的に気に入っている部分が、日本語スキルからは日本語のテストケースが生成されることです。実際に生成された4ケースは以下のような内容でした。

  • 「このCFPをレビューしてください。タイトルは『Kubernetes入門』、概要は『Kubernetesの基本概念と使い方を紹介します』...」
  • 「登壇プロポーザルを書いてみたので、採択されやすくなるように添削してほしいです。...」
  • 「来月の技術カンファレンスで、RailsからGoへ段階移行した話を発表する予定です。...」
  • スキル対象外の質問:「自宅のWi-Fiが遅いのですが、ルーターを買い替えるべきか教えてください。...」

最後のケースはスキルが発火すべきでない質問で、誤発火のチェックまで自動でカバーしてくれます。

一方、Tier 1の一部ヒューリスティックは英語前提のようです。descriptionに日本語で「以下の場合に使用」と書いていても「WHENへの言及がない」と指摘されるなど、日本語スキルでは無視してよい警告も混ざります。

7. Tier 3ライブ評価の実行

以下のコマンドでライブ評価を実行します。

skillevaluator tier3 evaluate <skill-path> \
  --agents claude-code \
  --agent-model claude-code=claude-sonnet-5 \
  --env-mode docker \
  --n-attempts 1

OpenAIをevaluatorにする場合、--agent-modelでのモデル明示が必須です。

そのまま並列実行すると、各コンテナが同時にClaude Codeをインストールしようとしてセットアップの360秒制限を超過することがありました(AgentSetupTimeoutError)。evals/config.ymlで共有ベースイメージを有効にすると、セットアップが1回のイメージ構築に集約されて解消します。

harbor:
  base_image_mode: reuse
  n_concurrent: 2
  timeout_multiplier: 2

失敗時の原因究明には--harbor-keep-jobsを付けて再実行するのが近道です。トライアルごとのtrajectoryログやエージェントの生出力が残るため、preflightがエラー詳細を出さずにタイムアウトするケースでも原因を特定できます。

8. 評価結果

社内で運用しているカンファレンス登壇プロポーザル(CFP)レビュー用の日本語スキルを、claude-sonnet-5 + judge GPT-5.6 Lunaで評価した結果です(4ケース×1回)。

指標スキルありスキルなし差分
総合0.8090.598+0.211
skill_efficiency0.8750.250+0.625
skill_execution0.6880.250+0.438
accuracy0.9000.700+0.200
pass@14/43/4+1

スキル装着で総合スコアが+21ポイント。スキルなしだと一般論の文章添削に留まるところ、スキルありでは選考者視点のレビュー観点が反映されており、体感と一致する差が数字になりました。スキル対象外の質問のケースは両条件ともほぼ満点で、誤発火もなし。素晴らしいです。

結果は各実行ディレクトリにreport.htmlとして出力され、以下のコマンドでブラウザ表示できます。

skillevaluator tier3 view <skill-path>

トライアルごとのエージェントの実際の応答もtier3 harbor-viewで確認できるので、スコアの妥当性を生ログで検証できるのも重宝しています。

なお、公式ブログ自身も認めている通り、1回実行のスコアは信頼区間なしの目安です。CIに組み込むなら--n-attemptsを増やすことを推奨します。

おわりに

以上で、SkillEvaluatorでClaude Codeスキルを評価する方法を紹介しました。

あくまで個人的な意見になりますがまとめると、以下のような評価です。

  • 良い点
    • スキルあり/なしのA/B評価が自前実装なしで手に入る
    • 日本語スキル・日本語テストケースで問題なく動く
    • judgeに安価なモデルを指定でき、今回の検証のjudge実費は数十円程度で済んだ
  • 注意点
    • v0.2.0はまだ荒削りで、実行環境まわりの調整が必要な場面がある
    • Tier 1の一部チェックは英語前提
    • 単一実行のスコアはあくまで目安

スキルの効果測定はこれまで体感頼みになりがちだったので、この領域のツールが整備されていくのは大きな利点です。国内でも広まると良いなと思っています。

詳しくは公式ドキュメントを参照ください。

Daiki Urata

Daiki Urata

Twitter X

フロントエンド/モバイルアプリなどを主に開発しています。