エージェント基盤・プロトコル

自己反省(Reflection)とは|見直しで直る欠陥と、何回見直しても直らない欠陥

自己反省とはどういう進め方なのか何が直って何が直らないのか反省の回数を増やせば良くなるのか

AIに出力させたあと、もう一度自分で読み返させて直させる進め方があります。自己反省、あるいはReflectionと呼ばれます。

ただし直る欠陥と直らない欠陥があります。5種類の欠陥で切り分けたところ、自分の中だけで直せたのは3種類で、残り2種類は何回見直しても変わりませんでした。

この記事の要点

  • 自己反省は出力を自分で読み返して直させる進め方
  • 形式・指示漏れ・論理の飛躍は自分で直せる
  • 事実の誤りと情報の古さは何回見直しても直らない
  • 直らない欠陥には外から正解を持ってくる仕組みが要る

見直しで直る欠陥と、何回見直しても直らない欠陥

5種類の欠陥を性質で分けました。読み返せば気づけるものは3種類、自分の中に正解がないものは2種類で、後者は回数を増やしても変わりません。

自己反省がどこまで効くのかを、欠陥の種類ごとに切り分けました。用意したのは出力によく混ざる5種類の欠陥です。

先に断っておくと、これはモデルを繰り返し動かした実測ではありません。欠陥を「読み返せば気づけるか」で分類した整理です。分類の根拠はコードに書いてあります。

javascript
const DEFECTS = [
  { name: '形式の誤り(JSONが壊れている)',       selfDetectable: true,
    reason: '構文として不正なので読み返せば分かる' },
  { name: '指示の見落とし(3件と言われたのに2件)', selfDetectable: true,
    reason: '指示と出力を突き合わせれば分かる' },
  { name: '論理の飛躍(根拠なく結論づけた)',      selfDetectable: true,
    reason: '自分の文章の筋を追えば分かる' },
  { name: '事実の誤り(存在しない機能を書いた)',  selfDetectable: false,
    reason: '間違って覚えているので読み返しても同じ結論になる' },
  { name: '情報の古さ(去年の料金を書いた)',      selfDetectable: false,
    reason: '新しい情報を持っていないので気づけない' },
];
text
5種類の欠陥に対して、自己反省で直るかどうか

  直る     形式の誤り(JSONが壊れている)
  直る     指示の見落とし(3件と言われたのに2件)
  直る     論理の飛躍(根拠なく結論づけた)
  直らない 事実の誤り(存在しない機能を書いた)
  直らない 情報の古さ(去年の料金を書いた)

自己反省で直る: 3 / 5
外部の情報が要る: 2 / 5

反省の回数を増やしたときに直る欠陥の数
  1回反省: 3 / 5(呼び出しは 2回)
  2回反省: 3 / 5(呼び出しは 3回)
  3回反省: 3 / 5(呼び出しは 4回)

分かれ目がはっきり出ました。直らない2つに共通するのは、正解を自分の外に取りに行かないと判定できないという点です。

自分の中にある欠陥は直る

壊れたJSONは、読み返せば構文として成立していないと分かります。3件と言われて2件しか出していないなら、指示と出力を並べれば数が合いません。どちらも判定に必要な材料が手元にそろっています

論理の飛躍も同じで、自分の書いた文章の筋を追い直せば、根拠の抜けた箇所は見つかります。

自分の中にない欠陥は直らない

存在しない機能を書いてしまった場合はどうでしょうか。読み返しても、間違って覚えているのですから同じ結論に辿り着きます。去年の料金を書いた場合も、新しい料金を知らない以上は気づきようがありません。

ですから反省の回数を増やしても意味がありません。実際、1回でも3回でも直った数は3種類のままで、増えたのは呼び出し回数だけでした。

Anthropicも、この点に対する手当てとして実行できる検査を渡すことを挙げています。テスト、ビルド、比較用の画面といった、結果が外から返ってくるものです。

反省の回数は増やしても、直る欠陥の数は変わらない。

単位: 種類1回反省(呼び出し2回)3種類2回反省(呼び出し3回)3種類3回反省(呼び出し4回)3種類5種類の欠陥のうち直った数。回数を増やしても3種類のまま変わらない。
図1 ── 反省の回数と、直った欠陥の数
出典Claude Code Docs「Best practices for Claude Code」2026-08-17 確認
Give Claude a check it can run: tests, a build, a screenshot to compare.
原文Claude Code Docs「Best practices for Claude Code」 この内容の有効期限2027-02-17

自己反省とはどういう進め方なのか

出したものを自分で読み返し、直すべき点を挙げてから書き直させます。作る側と見る側を分ける形にもできます。

自己反省は、一度出した答えをそのまま返さず、読み返させて直させる進め方です。人が下書きを見直してから提出するのと同じ流れになります。

1周の中身

まず答えを出させます。次にその答えを渡して、問題点を挙げさせます。最後に挙がった問題点を踏まえて書き直させる。この3段が1周です。

呼び出し回数は増えます。1周させるだけで2回、2周なら3回になります。

作る側と見る側を分ける形

同じモデルに見直させるかわりに、評価する役をもう1つ用意する形もあります。Anthropicはこれをevaluator-optimizerと呼び、片方が答えを作り、もう片方が評価と指摘を返す繰り返しだと説明しています。

とはいえ役を分けても、同じ知識しか持っていなければ結果は変わりません。前の節で直らなかった2種類は、役を分けただけでは直らないままです。

余談 「見直しました」は当てにならない

実装していて気づいたのは、見直させると必ず何かしら指摘が返ってくることです。直す必要がなくても、指摘を出そうとして書き換えが起きます。編集部では、指摘を挙げる段で「問題がなければ問題なしと返す」と明示するようにしています。

出典Anthropic Engineering「Building effective agents」2026-08-17 確認
In the evaluator-optimizer workflow, one LLM call generates a response while another provides evaluation and feedback in a loop.
原文Anthropic Engineering「Building effective agents」 この内容の有効期限2027-02-17

直らない欠陥をどう手当てするか

実行できる検査を足すか、答えを出した過程を知らない相手に見せるか。この2つが現実的な選択肢です。

自己反省で直らない欠陥にどう対処するかを整理します。方向は2つあり、機械に判定させるか、別の目を入れるかです。

実行できる検査を足す

いちばん確実なのは、正しさが自動で判定できる検査を用意することです。テストが通るか、ビルドが成功するか、想定した画面と一致するか。結果が外から返ってくるので、記憶違いの影響を受けません

この記事の元になった実演でいえば、料金が古いかどうかは料金ページを取りに行けば判定できます。実際に編集部では、記事に載せた引用が原文に存在するかを機械で照合しています。

過程を知らない相手に見せる

検査を書けない場合は、別の文脈で動く相手に結果だけを見せる手があります。Anthropicは、新しい文脈で動く確認役は差分と判断基準しか見ず、その変更を生んだ推論を知らないので、結果そのものを評価すると述べています。

同じ会話の中で見直させるのとは、ここが違います。自分の考えた筋道が見えていると、その筋道ごと正しいと思い込んだままになりがちです。

どこまでやるかの目安

  1. 形式が決まっている出力。自己反省で足りる。検査を書くならそちらが速い
  2. 指示の件数や項目が決まっている出力。自己反省で足りる
  3. 事実を含む出力。外部の情報と突き合わせる検査が要る
  4. 時間で変わる情報を含む出力。取得日を記録し、期限を決めて取り直す

3番目と4番目に自己反省を当てても、費用が増えるだけで精度は変わりません。前の節の数字がその証拠になります。

読み返して気づけない欠陥は、外から材料を入れるしかない。

読み返せば気づける欠陥かいいえ実行できる検査を足すはい反省の上限を決めたかいいえ先に上限を決めるはい自己反省で足りる。1回で切る5種類のうち3種類は自己反省で直り、2種類は検査を足さないと直らない。
図2 ── 欠陥の種類ごとの手当て
反省で悪くなることがある指摘を出させると、正しかった部分まで書き換わることがあります。書き直しの前後で何が変わったかを記録しておくと、悪化した箇所を後から見つけられます。記録の設計はエージェント可観測性の記事で、第三者役を別に立てる構成はサブエージェントの記事で扱っています。
出典Claude Code Docs「Best practices for Claude Code」2026-08-17 確認
A reviewer running in a fresh subagent context sees only the diff and the criteria you give it, not the reasoning that produced the change, so it evaluates the result on its own terms.
原文Claude Code Docs「Best practices for Claude Code」 この内容の有効期限2027-02-17

よくある質問

自己反省と第三者のレビューは何が違いますか
見る側が同じ知識を持っているかどうかが違います。自分で見直す場合は、間違って覚えていることには気づけません。別の文脈で動く相手に見せると、答えを出した過程を知らないまま結果だけを見るため、違う観点が入ります。
反省は何回させるのが良いですか
この記事の切り分けでは、回数を増やしても直る欠陥の数は変わりませんでした。増えるのは呼び出し回数だけです。1回で足りない場合は、回数ではなく外部の情報を足すほうが効きます。
自己反省は無意味ということですか
そうではありません。形式の誤りや指示の見落としは実際に直ります。ただし直る範囲が決まっているので、そこを超える欠陥には別の手当てが要る、という話です。
外部の情報とは何を指しますか
テストの実行結果、ビルドの成否、検索して得た最新の情報などです。自分の記憶の外にあって、正しさを判定できるものであれば何でもかまいません。

まとめ

  • 自己反省で直るのは読み返せば気づける欠陥だけ
  • 事実の誤りと情報の古さは自分の中に正解がないので直らない
  • 回数を増やしても直る数は3種類のままで呼び出しだけ増える
  • 直らない欠陥には実行できる検査か第三者の目を足す

今日から始められること

  1. 自動化したい仕事で、出力にどんな欠陥が出るかを書き出す
  2. 書き出した欠陥を、読み返せば気づけるものとそうでないものに分ける
  3. 後者に対して、実行できる検査を1つ用意する
  4. 反省の回数に上限を決めておく

実務で組んだ自己反省のワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る