エージェントの「リフレクション」は本物ではなく、単なる再実行だ

Dev.to / 2026/4/26

💬 オピニオンSignals & Early TrendsIdeas & Deep Analysis

要点

  • 多くのエージェントフレームワークでは、最初の回答を生成した後に「反省(リフレクション)」して修正するように見えるが、実際には同じモデルを2回サンプリングし、批評っぽいプロンプトで誘導しているだけで、真のメタ認知ではないことが多い。
  • レビュー側に別の批評者や特権的な情報はなく、元の回答が持っていない知識を参照できないため、反省ステップも同じ盲点を繰り返し、誤った回答に対しても自信に満ちた“正しい理由”を作ってしまうことがある。
  • リフレクション型の連鎖が役立つのは、ラウンド間で条件付けが変わる場合に限られ、たとえばタスク分解、ツール出力や検索/取得結果の追加、温度やシステムプロンプトの変更で分布を変えることが挙げられる。
  • 誤りをより確実に見つけるのは、非対称な批評(別モデル・別スキャフォールド、テスト通過・検索結果・ユーザーの明確化など“実データ”を伴う検証)である。
  • エージェントの reflect() ステップが入力を変えないのであれば削除してコスト(トークン)差を確認すべきで、品質が下がらない可能性がありつつトークン節約につながると提案している。

どんな現代的なエージェント・フレームワークでも十分に眺めていると、こうした光景が見えてきます。まずモデルが出力を生成し、その出力を「熟考(リフレクト)」し、次に自分自身を「修正」し、最後に最終回答を送り出すのです。

それはメタ認知のように見えます。けれども違います。

同じモデルが、同じ重みで、2回サンプリングされているだけで、2回目は1回目の結果に条件付けされています。別の批評者(クリティック)は存在しません。特権的な視点もありません。レビューする側もレビューされる側も同じネットワークであり、レビュー側は元のモデルがそれまでに既にエンコードしていなかったものは何も見ることができません。

これは「反省(リフレクション)芝居」です。

実際に起きていること

「では、先ほどの回答を今すぐ批評して」とプロンプトした場合、モデルは自分自身のより深い層に相談しません。同じ分布から、批評の形をしたプレフィックス付きで再デコードするだけです。出力が自己修正に見えるのは、プロンプトが、修正の形をしたトークンへと偏らせるからです。

元の回答が、モデルが関連する事実を欠いていたために間違っていたのだとすると、リフレクションのステップでもその事実は欠いたままです。誤った答えに対して流暢な自信を得て、次に「なぜその誤った答えが正しいのか」という流暢な自信も得ることになります。

さらにトークン。相変わらずの盲点。より高い請求額。

実際に役立つ場所

リフレクション風のチェーンは、狭いケースでは役に立ちます:

  • タスクが分解可能で、モデルがサブステップを再攻撃できる場合(例:動く作業用パッドを使った計算)。
  • ラウンド間で入力を変える場合 — ツールの出力の追加、検索(リトリーバル)、別の役割。
  • モデルを異なる温度または異なるシステムプロンプトでサンプリングする場合 — 本当に異なる分布を強制するため。

3つのいずれのケースでも、得られる利益は「能力としての“反省”」ではなく、条件付けの変更によって生まれます。

1ラウンド目と2ラウンド目の間で「reflect」という単語以外なにも変わっていないのなら、同じ答えを作るためのより高価な方法を見ているだけです。

正直なパターン

実際にエラーを捕まえるのは非対称な批評です。つまり、別のモデル、別のプロンプトの足場、そして実際の信号を持つ検証器(テストが通る、検索結果が得られる、ユーザーの追加の説明)です。レビュー側には、元のモデルが持っていなかった情報が必要です。

「同じモデルを2回目で回す」ことは、最も安い批評者であり、その分だけの価値しか得られません。

あなたのエージェントループに、入力を変えないreflect()ステップがあるなら、それを削除して差分の料金を確認してください。おそらく品質は落ちません。確実にトークンを節約できます。