コンテンツにスキップ

05 — eval を書く

Eval は「出力が良さそうだった」を「出力が M ケースにわたって N 基準を通過した」に変えます。このチュートリアルでは my_explainerチュートリアル 03 の Skill)のルーブリックを構築して実行する方法を説明します。

eval の形式

eval スペックは frontmatter と 1 つ以上のケースを持つ Markdown ファイルです:

---
skill_dsl_path: my_explainer
model: standard
---

# Case: short_topic

input: photosynthesis

## Phase: outline
- 各箇条書きは完全な文である。
- 箇条書きは異なる角度をカバーする(重複なし)。

## Phase: expand
- 段落はすべての 3 つの箇条書きに言及している。
- トーンはフレンドリーで、学術的でない。

## Phase: <name> ブロックはルーブリック基準をリストします。eval Skill は judge_phase を使用して各基準を Phase ごとに採点します。

ステップ 1: ドラフトを生成する

reyn run eval_builder "build an eval for my_explainer covering tone and structure"

eval_builder は Skill を読み取り、ケースと基準のドラフトを作成し、reyn/local/my_explainer/eval.md に書き込みます。

ステップ 2: レビューする

ファイルを開きます。調整します:

  • ケース — エッジケースを追加します(空のトピック、非常に長いトピック、曖昧なトピック)。
  • 基準 — 曖昧なものをテスト可能な文に絞り込みます。「段落が良く書かれている」は確実に採点できません。「段落が 2-4 文である」は確実に採点できます。

ステップ 3: 実行する

reyn eval reyn/local/my_explainer/eval.md

出力:

=== Eval: my_explainer  [3 case(s)] ===
    model=standard

━━━ case: short_topic ━━━
  input: photosynthesis
  ✓ score=0.95  (4/4 required)

━━━ case: long_topic ━━━
  ...

═══════════════════════════════════════════════════
 ✓ 3/3 cases passed
 Results → .reyn/eval-results/my_explainer/<timestamp>.json
═══════════════════════════════════════════════════

reyn eval はステータス 0(全通過)、1(スペックの読み込み失敗)、または 2(ケース失敗)で終了します。

ステップ 4: ルーブリックを絞り込む

基準が「不正な出力でも通過する」場合、十分に具体的ではありません。失敗したケースを確認します:

cat .reyn/eval-results/my_explainer/<timestamp>.json

失敗した各基準について、レポートには judge の推論が含まれます。それを使って基準をより具体的に書き直し、再実行します。

eval は非インタラクティブ

reyn eval はプロンプトを表示しません。ターゲット Skill が必要とする Permission はすべて事前承認されている必要があります(reyn.yamlpermissions: またはこれまでの reyn run から .reyn/approvals.yaml に保存済み)。事前承認がなければ、ケースは未完了として報告されます。manage-permissions を参照してください。

学んだこと

  • eval スペックは Markdown の Phase をキーとしたルーブリックです。
  • eval_builder がドラフトを生成し、あなたがレビューしてイテレートします。
  • reyn eval はすべてのケースを非インタラクティブに実行してレポートを書き込みます。

次へ