AI の評価の例
AI の評価(AI evals)に使うの確かめ方を、確かめの種類ごとに 1 つずつ、文書と chaff の実際の出力で見せます。例 1〜3 の出力は、あのページの prompt-a.jsonl、prompt-b.jsonl、prompts-ja.jsonl に入っているものです。
| 例 | コマンド | 確かめること |
|---|---|---|
| 1: 要約は元の事実を守っているか | chaff compare | 元の文書と比べて落ちた事実、足された事実 |
| 2: RAG の回答の引用は原文にあるか | chaff cite | 引用がその番地にあるか |
| 3: 2 つの prompt を文章の形で比べる | chaff、chaff fix-plan | 生成文の目印と、作り直しに渡す計画 |
| 4: 自分と矛盾する回答 | chaff | 合わない合計、日付と合わない曜日 |
例 1: 要約は元の事実を守っているか
元の文書(source.md)は、短いサポートの報告です。2 つの model に要約させました。
# サポート窓口の四半期報告
今期、サポート窓口は 4,812 件の問い合わせに答えました。
最初の返信までの時間の中央値は、6 時間から 2.5 時間に縮みました。
新しいヘルプセンターは 2026年7月14日に公開しました。
8月に 2 人が加わり、窓口は 11 人になりました。
model A の要約(model-a.md)は、数をすべて残しました。
model B の要約(model-b.md)は、返信の時間を落とし、日付を違えて書きました。
# 要点
問い合わせ 4,812 件に答え、最初の返信は大幅に速くなりました。
ヘルプセンターを 2026年7月1日に公開し、8月に 2 人が加わって 11 人の体制です。
compare は、2 つの文書から同じ読み方で事実を取り出し、無くなったものと増えたものを並べます。
$ npx chaffjs compare source.md model-a.md
source.md → model-a.md
i 書き方だけ変わった事実 1 件
見出し: サポート窓口の四半期報告 → 要点 (1 行目 → 1 行目)
照合した事実 8 件 → 8 件: 数 6→6、日付 1→1、時刻 0→0、URL 0→0、コード 0→0、固有名詞 0→0、引用 0→0、見出し 1→1、条項の参照 0→0、脚注 0→0
落ちた事実も足された事実もありません
$ npx chaffjs compare source.md model-b.md
source.md → model-b.md
✗ 落ちた事実 3 件(source.md にあって model-b.md に無い)
数: 6 時間 (source.md:4)
数: 2.5 時間 (source.md:4)
日付: 2026年7月14日 (source.md:5)
✗ 足された事実 1 件(model-b.md にだけある)
日付: 2026年7月1日 (model-b.md:4)
i 書き方だけ変わった事実 1 件
見出し: サポート窓口の四半期報告 → 要点 (1 行目 → 1 行目)
照合した事実 8 件 → 6 件: 数 6→4、日付 1→1、時刻 0→0、URL 0→0、コード 0→0、固有名詞 0→0、引用 0→0、見出し 1→1、条項の参照 0→0、脚注 0→0
落ちた事実 3 件、足された事実 1 件
1 つめは終了コード 0、2 つめは 1 で終わります。--json を付けると、事実ごとに種類・文字・行が付きます。要約では、ある種類の事実をわざと省くことがあります。--allow-dropped name,url で、その種類は落ちても失敗にしません。詳しくは コマンド の compare にあります。
例 2: RAG の回答の引用は原文にあるか
原文(policy.md)は、条と項のある返金の決まりです。
# 返金の決まり
第1条(対象)
この決まりは、ウェブストアで受けた注文に適用する。
第2条(返金)
お客様は、商品が届いた日から 30 日以内に返金を求めることができる。
2 送料は返金しない。
3 返金は、注文に使ったカードに 10 営業日以内に行う。
回答は 2 か所を引きました。引用は、回答と一緒に JSON で返すよう model に頼みます(quotes.json)。回答のどの文が引用なのかを、chaff は推測しません。
[
{ "address": "2.1", "quote": "商品が届いた日から 30 日以内" },
{ "address": "2.2", "quote": "送料も全額を返金する。" }
]
$ npx chaffjs cite policy.md quotes.json
✓ 2.1「商品が届いた日から 30 日以内」: 一致
✗ 2.2「送料も全額を返金する。」: 引用文が原文のどこにもありません
終了コード 1 で終わります。--format json なら、引用ごとに status(一致は ok)と見つかった行が付きます。空白や全角・半角の違いは問いませんが、言葉が一つ違えば外れます。番地の読み方は 構造と引用 にあります。
例 3: 2 つの prompt を文章の形で比べる
同じ題「火曜日のデプロイが止まった理由を説明して」に、2 つの prompt で答えさせました。prompt A の答え(prompt-a.md)です。
# デプロイが止まった理由
火曜日のデプロイは、データベースの段で止まりました。
移行で既定値つきの列を足したため、いちばん大きな表への書き込みが 4 分止まりました。
ヘルスチェックは 2 分で打ち切られ、リリースは元に戻りました。
次は既定値なしで列を足し、値はあとから少しずつ入れます。
prompt B の答え(prompt-b.md)です。
# デプロイが止まった理由
近年、ソフトウェアの世界でデプロイは重要な役割を果たすと言えるでしょう。
本記事では、火曜日に何が起きたのかを深く掘り下げます。
**原因はコードではありません。データベースです。**
移行で既定値つきの列を足したため、いちばん大きな表への書き込みが 4 分止まりました。
ヘルスチェックは 2 分で打ち切られ、リリースは元に戻りました。
次は既定値なしで列を足し、値はあとから少しずつ入れます。地味に効く改善です。
いかがでしたか?参考になれば幸いです。
生成文の特徴を見るルールも、設定を書かなくても動きます。
$ npx chaffjs prompt-a.md --compact
prompt-a.md blog/tech · 日本語 ジャンルは既定から
指摘 0 件、動いていない rule 60 件
$ npx chaffjs prompt-b.md --compact
prompt-b.md blog/tech · 日本語 ジャンルは既定から
3:1 info 「重要な役割を果たす、と言えるでしょう、深く掘り下げる、本記事では、地味に効く」が揃っています(点 29、18 まで)
ai-tell
3:1 warning 「近年」は、どの記事にも当てはまる書き出しです
padded-intro
3:1 warning 「ai-tell、padded-intro、closing-cliche」が同じ文書にそろっています(3 種、3 種から)
ai-generated-composite
12:1 warning 「いかがでしたか」で締めています
closing-cliche
12:9 warning 「参考になれば幸いです」で締めています
closing-cliche
指摘 5 件、動いていない rule 60 件
たくさんの題で比べるときは、一つの出力ではなく率を比べます。chaff grade がルールごとの率を出し、--baseline が 2 つの回を並べます。動いていないのは、英語だけのルール、ジャンル blog/tech では見ないルール、表題より下の見出しが要るルール 1 件、意味を読むルール 1 件です。--compact を外すと、理由と一緒に並びます。
指摘を作り直しの段に戻すときは、fix-plan で直す指示にします。次は抜粋です。この後に、ルールごとの直す方向、例、見つけた箇所が続きます。
$ npx chaffjs fix-plan prompt-b.md
# 直す計画: prompt-b.md
言語 ja、ジャンル blog/tech
chaff が機械で見つけた箇所と、それぞれの直す方向です。chaff は書き直しません。書き直すのは、この計画を読む人か AI です。直したら、最後の確かめのコマンドを実行してください。
## 守ること
1. 事実、数、日付、条件、名前を変えない。
2. 元の文書に無い事実、人、数、原因、例を足さない。
3. 直すのに文書に無い具体(誰が、いつ、どれだけ)が要るときは、作らずに[ ]で空けて書き手に聞く。
4. 書き直しは 2 回まで。指摘を消すためだけに書き直しを繰り返さない。
## 勧める直し方: 全面書き直し(Full)
ai-generated-composite が出ています。文の言い回しを直しても、生成文の骨組みが残ります。
…
## 直したあとの確かめ
書き直したものを prompt-b.rewritten.md に保存して、次を実行します。
```bash
npx chaffjs prompt-b.rewritten.md
npx chaffjs compare prompt-b.md prompt-b.rewritten.md --distinct --allow-dropped heading --allow-added heading
npx chaffjs outline prompt-b.md prompt-b.rewritten.md
```
…
--json を付けると同じ計画を JSON で出すので、次の prompt に入れられます。最後の確かめの compare で、作り直した文章が事実を守ったかを確かめます。計画から書き直す手順は AIっぽさを直す にあります。
例 4: 自分と矛盾する回答
model が書いた見積もり(answer.md)です。合計が内訳の和と合わず、日付と曜日も合っていません。
# お見積もり
| 項目 | 金額 |
| --- | --- |
| 設計 | 40,000円 |
| 開発 | 120,000円 |
| 合計 | 150,000円 |
作業は 2026年10月6日(月)に始められます。
$ npx chaffjs answer.md --compact
answer.md blog/tech · 日本語 ジャンルは既定から
7:8 error 合計「150,000円」が、内訳の金額の和(160,000円)と合いません
total-mismatch
9:5 error 「2026年10月6日」は火曜日です(月曜日と書いてあります)
date-weekday-mismatch
指摘 2 件、動いていない rule 60 件
どちらも error なので終了コード 1 で終わり、chaff grade もこの出力を落とします。
次に読むページ
- 出力のファイルをまとめて採点する、採点の基準を書く、2 つの回を比べる、variant を並べるやり方は、AI の評価(AI evals)に使うにあります。
compare、cite、fix-planのオプションは、コマンドにあります。