bmad-eval について
ほかのスキルの評価を実行し、根拠に基づく結果を報告するBMadスキルです。baseline、variant、quality、triggerの4モードに対応し、実行成果物をタイムスタンプ付きフォルダーに保存します。
主な機能
- 014種類の評価モードを実行
- 02スキルと素のモデルを比較
- 03ルーブリックに沿って出力を採点
- 04トリガー動作を測定
- 05会話記録と実行成果物を保存
活用シーン
- 01スキルがモデルの結果を改善するか確認
- 02スキルの一部の効果を検証
- 03基準に沿って出力品質を評価
- 04スキルの説明が適切に反応するか確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bmad-code-org/ bmad-method --skill bmad-evalインストール後、Claude Code で/bmad-evalを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
bmod.tomlcustomize.tomlevals/triggers.jsonreferences/description-optimization.mdeval-format.mdgrader.mdharness.mdself-improvement.mdscripts/aggregate_benchmark.pyconvert_cases.pyeval_common.pyrun_evals.pyrun_triggers.pyscripts/tests/fake_harness.pytest_aggregate_benchmark.pytest_convert_cases.pytest_eval_common.pytest_run_evals.pytest_run_triggers.py詳細
スキル評価ランナー
あなたはスキルの評価を実行し、その結果を報告します。具体的な所見を引用し、些細な理由で合格している評価にフラグを立て、実行が成功したように見せるために許容範囲を広げてはなりません。このスキルではモデルやハーネスの名前は指定されていません。プロジェクトの評価が実行されるハーネスは、初回実行時にこのスキルのカスタマイズに記録されます。
4 つのモード
| モード | 答える問い | スクリプト / リファレンス |
|---|---|---|
| baseline | 同じ入力に対して、スキルは素のモデルを上回るか? | references/eval-format.md、scripts/run_evals.py |
| variant | あるセクションはその存在価値があるか、それとも削った版でも同等の成果を出すか? | references/eval-format.md、scripts/run_evals.py |
| quality | 出力は指定されたルーブリックを満たしているか? | references/grader.md、references/eval-format.md |
| trigger | 説明文は適切なクエリで発火し、それ以外では静かにしているか? | references/harness.md、scripts/run_triggers.py |
Baseline はすべてのケースを、スキルを配置した状態と何も配置していない状態で実行します。Variant はスキルを --variant-path にあるものと比較して実行します。Quality は 1 つの設定をそのルーブリックに照らして採点します。Trigger は実際の発火を測定します。references/description-optimization.md は複数ラウンドにわたって説明文を改善します。
ケースの形式
ケースは input + rubric + 任意の state_prefix + 任意のフィクスチャファイル です。state_prefix は入力の先頭に付加される角括弧付きのプライムで、スキルを一度にワークフロー途中の状態へ配置します。ケースは <skill>/evals/cases.json に、トリガークエリは {query, should_trigger} として <skill>/evals/triggers.json にあります。完全な形と、strong 対 weak の期待値分類体系は references/eval-format.md にあります。skill-creator の evals.json は uv run {skill-root}/scripts/convert_cases.py <evals.json> --output <cases.json> で変換できます(--to skill-creator で逆変換します)。
有効化時
uv run {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root} --key core.output_folderで config を、uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflowで customization を読み取ります。キーが存在しなくても問題ありません。{reports_folder}は{workflow.reports_folder}の{output_folder}を埋めたものです。<skill-path>/SKILL.mdが存在することを確認します。存在しない場合は明確なエラーを出して停止します。workflow.harness.commandが空で返ってきた場合は、references/harness.mdに従って、実行中の CLI のハーネス情報を割り出し、1 つのケースでそれを検証し、bmad-customizeスキル(インストール:npx skills add bmad-code-org/BMAD-METHOD --skill bmad-customize)を呼び出して記録します。ランナーはそこからそれらを読み取ります。キーボードに誰もいない場合は、停止して記録すべき表を示します。- ケースファイルを探します。ユーザーが指定したもの、次に
<skill-path>/evals/、次に<project-root>/evals/<skill-name>/、次に<project-root>/evals/以下の任意の場所の順です。何も見つからない場合は、停止してその旨を伝えます。ランナーはケースをでっち上げません。 - ユーザーが非対話実行を求めていない限り、実行サマリーを確認してから実行します。サマリーにはスキル、ケース、モード、出力ディレクトリを記載し、ハーネスコマンドを示し、権限プロンプトをオフにして実行され、コマンドがサンドボックスで包んでいない限りコンテインメントされないことを述べます。非対話実行にはハーネスがすでに記録されている必要があります。
実行の実施
ユーザーが <skill>(SKILL.md を保持するディレクトリ)に対して <mode> モードでの実行を要求し、バリアントモードの場合はバリアントスキルを指定します。プロジェクトルートは、_bmad/ または .git/ を保持するスキルの最初の祖先ディレクトリです。出力ディレクトリは、BMad がセットアップされている場合は {reports_folder}、そうでない場合は ~/bmad-evals/ です。各実行はそこに独自のタイムスタンプ付きフォルダーを持つため、実行が衝突することはありません。各ケースはクリーンルーム、つまりプロジェクト外の一時フォルダーで実行されます。このフォルダーにはスキルのコピーがワークスペースに配置され、環境がゼロから構築されるため、ホストの設定、過去の実行、プロジェクトの指示ファイル、インストール済みのスキルが結果に影響を与えることはありません。ランナーはカスタマイズからハーネスを自身で読み取ります。BMad のないプロジェクトでは、同じキーを持つ --harness <json> を渡してください。
ベースライン、バリアント、品質:
uv run {skill-root}/scripts/run_evals.py \
--cases <cases-file> --skill-path <skill> --output-dir <dir> \
--mode quality|baseline|variant [--variant-path <skill>] \
--label <skill-name>-<mode> [--runs N]
--runs のデフォルトは 1 で、簡単な確認用です。結果が確定したと見なされるのは 3 以上の場合のみです。ケースのサブセット、タイムアウト、ワーカーについてはスクリプトの docstring に記載されています。終了コード 0 は完全な実行を意味します。1 はケースがエラーになったか、タイムアウトしたか、コマンドが見つからなかったことを意味し、3 はハーネスが記録されていないことを意味します。トリガークエリがしきい値を満たさない場合も、エラーではなく結果です。
トリガー:
uv run {skill-root}/scripts/run_triggers.py \
--skill-path <skill> --queries <queries-file> --output-dir <dir> \
[--runs-per-query N]
品質については、ケースごとに references/grader.md の採点者を、そのルーブリック、トランスクリプトのパス、アーティファクトディレクトリ(そのケースの cwd/)、および <case-folder>/grading.json の grading_path とともに起動します。そのルーブリックのフィードバックをそのまま伝えてください。採点者がエラーになった場合は、そのケースを grading_error としてマークし、決してデフォルトの判定を付けないでください。
--runs が 1 より大きい場合、uv run {skill-root}/scripts/aggregate_benchmark.py --baseline <run-dir>/<config-a> --variant <run-dir>/<config-b> により、平均、標本標準偏差、最小値、最大値、差分が得られます(単一設定の場合は --runs <run-dir>/<config>)。
実行結果が弱く、ユーザーがそれを基にスキルを改善したい場合は、references/self-improvement.md に従ってください。
アーティファクト
各実行は出力ディレクトリ配下の日付付きフォルダーで、run.json にハーネスコマンドが記録されます。各ケースフォルダー、および各トリガー試行には、そのプロンプト、トランスクリプト(ハーネスが出力した内容)、stderr.txt、cwd/(実行後のワークスペース)、timing.json(呼び出しが終了した瞬間に書き込まれます)、および品質が実行された場合は grading.json が保持されます。実行フォルダーを削除、上書き、ローテーションしないでください。終了時に、その場所をユーザーに伝えてください。
結果
- 実行結果は、ホストのシェルではなく、クリーンな作業ディレクトリ内のスキルを反映します。
- 失敗は具体的な期待事項を証拠とともに示します。表面的な合格はフラグが立てられます。
- ケースごと(またはトリガークエリごと)に 3 回未満の実行から得られた結果は、簡単な確認として報告され、確定した結果として報告されることはありません。
- スキルがもはや勝利しないベースラインは、スキルにパッチを当てるのではなく、スキルを廃止することを示唆します。