リフレクションとは
Reflection / 自己内省
LLMが自身の出力を振り返り、批判・評価したうえで応答を改善する反復的な手法
ひとことで言うと
AIが自分の出した答えを見直し、直しながら精度を上げていく方法。
概要
リフレクション(Reflection)とは、LLMやエージェントが一度生成した出力を、自ら(または別のLLM呼び出し)によって振り返り評価し、その評価結果をもとに出力を修正・改善する反復的な手法。 人間が文章を書いた後に見直して推敲するのと同様に、「生成 → 自己評価・批判 → 修正」というループを1回ないし複数回繰り返すことで、単発の生成だけでは得られにくい精度や品質の向上を狙う。 コード生成の自己テスト・修正や、複雑な推論タスクにおける誤りの検出・訂正等に応用される。 ただし自己評価もLLM自身の判断に依存するため、モデルが持つ弱点や誤りをリフレクションだけでは検出できない場合もあり、外部のテスト実行やツールによる客観的な検証と組み合わせるとより効果的とされる。
背景
LLMは一度の生成で誤りを含む出力をすることがある。 その出力自体を入力として与え直し「この出力に問題はないか」と問いかけると、誤りを検出・修正できることが確認されている。 リフレクションは、この自己評価・修正の能力を意図的にプロンプトやループとして組み込み、出力品質を高めるために考案された。
歴史
2023年: MadaanらがSelf-Refineとして、LLM自身にフィードバックと修正を反復させる手法を提案。 同年、ShinnらがReflexionとして、タスク失敗時の内省をテキストとして記憶し次の試行に活かすエージェント向けの手法を提案。
アーキテクチャ
生成役のLLM(Actor)が出力を生成し、評価役のLLM(Critic、同一モデルの別呼び出しの場合もある)がその出力を評価してフィードバックを生成する。 生成役はこのフィードバックを踏まえて出力を修正し、このサイクルを品質が十分と判断されるか規定の回数に達するまで繰り返す。
ワークフロー
生成役(Actor)が出力を生成 → 評価役(Critic)が出力を評価しフィードバックを生成 → 生成役がフィードバックを踏まえ出力を修正 → 品質が十分と判断されるか規定回数に達するまで繰り返す。
コード例
生成 → 自己評価 → 修正を繰り返すリフレクションループ
def reflect_and_improve(task: str, llm, max_iterations: int = 3) -> str:
output = llm.complete(task)
for _ in range(max_iterations):
critique = llm.complete(f"次の出力の問題点を指摘してください:\n{output}")
if "問題なし" in critique:
break
output = llm.complete(
f"次の出力を、指摘に基づいて修正してください。\n出力: {output}\n指摘: {critique}"
)
return output利点
- 単発の生成では気づけない誤りや改善点を、自己評価によって検出・修正できる場合がある
- 複雑な推論やコード生成タスクで、出力品質を段階的に高められる
- 特定のフレームワークを使わず、既存のLLM呼び出しの前後にプロンプトを追加するだけで導入できる
欠点
- 生成と評価を繰り返す分、単発の生成より推論コストと時間がかかる
- 自己評価自体が誤っていると、かえって出力を悪化させる場合がある
- 繰り返し回数の上限や停止条件を適切に設計しないと、改善が進まないまま試行を無駄に続けてしまう
比較
- Chain-of-Thought — Chain-of-Thoughtが単一の推論過程を段階的に言語化するのに対し、リフレクションは一度出した結論を事後的に見直す
- AIエージェント — リフレクションは、AIエージェントの試行錯誤を通じた自己改善を支える手法の1つ
関連用語
よくある質問
リフレクションと推論モデルの違いは?
推論モデルは、出力前の内部推論過程を通じて精度を高めるようモデル自体が学習・最適化されている。 リフレクションは、モデルの学習方法を問わず生成後に振り返り・修正を繰り返すプロンプト・ワークフロー上の手法という違いがある。
リフレクションは何回繰り返すべき?
タスクやコストの許容度による。 数回で改善が頭打ちになることが多いため、固定回数の上限を設けるか、評価結果が一定の基準を満たした時点で打ち切るのが一般的。