Reflexion: 再学習なしにミスから学習する言語エージェント
ミスをするたびに再学習することなく、時間の経過とともに改善していく Beancount帳簿エージェントを構築するには何が必要かを考えてきました。Shinnらによる「Reflexion: Language Agents with Verbal Reinforcement Learning」(NeurIPS 2023)はこの問いに直接答えており、その回答は有望であると同時に、見出しの数字が示唆するよりも制約が多いものでした。
論文の概要
Reflexion (Shinn, Cassano, Berman, Gopinath, Narasimhan, Yao; NeurIPS 2023) は、高コストな強化学習を通じてモデルの重みを調整する代わりに、エージェント自身に自然言語で失敗分析を書かせることで改善することを提案しています。各試行の後、自己反省(Self-Reflection)モデルが軌跡と報酬シグナルを読み取り、言語的な事後 分析(ポストモーテム)を生成してエピソードメモリバッファに追加します。次の試行では、アクター(Actor)が行動前に蓄積された反省を読み取ります。勾配計算は行われず、モデルの微調整もされません。「学習」は完全にコンテキストウィンドウ内で行われます。
アクター、評価者(Evaluator)、自己反省の3つのコンポーネントからなるアーキテクチャは、さまざまなタスクタイプに対応できるほどモジュール化されています。評価者は、バイナリ形式のユニットテスト結果、LLMによる判定、またはタスク固有のヒューリスティックなどが可能です。この柔軟性が、この論文をコーディングのベンチマーク以上に興味深いものにしています。
主なアイデア
- HumanEval Python pass@1において、Reflexion + GPT-4はGPT-4のベースラインである80%から**91%**に達しました。これは本物かつ大きな差です。Leetcode Hardでは7.5% → 15%に上昇しましたが、これは進歩であると同時に、それらの問題がいかに困難であり続けているかを思い出させるものでもあります。
- AlfWorld(テキストベースの家事計画)では、Reflexionは12回の試行後に130/134のタスクを解決しました(ReActベースラインは108/134)。これは論文中で最も説得力のある意思決定の結果です。
- HotpotQA(マルチホップQA)では、CoT + Reflexionは100個のサンプル問題で完全一致率が61%から75%に向上しました。
- MBPP(2つ目のPythonベン チマーク)では、Reflexionはパフォーマンスをわずかに低下させました(80.1% → 77.1%)。論文ではこの点について深く触れられていません。
- WebShopでは、Reflexionは効果を発揮しませんでした。著者はこれを、タスクに「大幅な多様性と探索」が必要であるためだと分析しています。エージェントは、製品検索全体で一般化できない役に立たない反省を書いてしまいました。
- メモリは1〜3個の保存された経験に制限されています。これはコンテキストの長さを考えると現実的ですが、エージェントが長期間の運用にわたって学習を蓄積できないことを意味します。
評価できる点と課題
核心となる主張は健全です。言語的な反省は、明確で検証可能なフィードバックがあるタスクにおいてパフォーマンスを向上させます。コードがユニットテストを通過したかどうかが分かれば、反省モジュールには推論するための具体的な材料があります。AlfWorldとHumanEvalの結果は本物であり、意義深いものです。
しかし、WebShopの失敗は示唆に富んでおり、論文ではやや過小評価されています。反省が機能するのは、評価者が明確で実行可能なシグナルを生成できる場合です。失敗のモードが「エージェントが広大な探索空間の誤った部分を探索した」ことである場合、次からは「別の検索語を試せ」と指示しても収束しません。これは構造的な限界です。言語的 強化は探索戦略の代わりにはなりません。
コーディング実験には、著者がブログ記事で認めている循環性もあります。エージェントは自身のコードを評価するために独自のユニットテストを生成します。欠陥のあるテストスイートは偽陽性を生みます。HumanEvalの91%という数字が維持されているのは、HumanEvalがグラウンドトゥルース(正解)のテストを提供しているからですが、外部の正解が存在しない新しい問題において、エージェントの自己評価ループの信頼性は低くなります。
再現性は切実な懸念事項です。主要な結果はすべてGPT-4を使用しており、starchat-betaの実験ではベースラインからの改善は見られませんでした。つまり、この手法はモデルの能力に依存しています。より小規模な、あるいはオープンウェイトのモデルを運用しているチームは、同様の利益を期待すべきではありません。
なぜこれが金融AIにとって重要なのか
Beancountのユースケースには、Reflexionをうまく機能させる特性がまさに備わっています。それは明確な評価者です。エージェントが取引の分類を誤った場合、帳簿のバランスチェックや照合ステップによって、「帳簿が一致するかしないか」というバイナリシグナルを生成できます。これは、WebShopの曖昧な製品検索の報酬よりもはるかに優れたフィードバック面 です。
具体的には、記帳の試行に失敗(無効な勘定科目、誤った通貨、アサーションエラーなど)した後に、「Expenses:Mealsを使用したが、この勘定科目にはサブカテゴリが必要である。次回は記帳前に勘定科目の階層を確認する」といった言語的な反省を生成するBeancount書き戻しエージェントが想像できます。この反省は保存され、次回の同様の取引時に取得されます。エージェントは実質的に、自身のミスからセッション固有のポリシーを蓄積していきます。
メモリ制限が主なアーキテクチャ上の課題です。1〜3個の経験バッファは単一のセッションには適していますが、実際に運用される会計エージェントは、数千の取引と数週間の運用にわたって学習する必要があります。Reflexionを長期間のメモリ(おそらく反省の要約やインデックス作成によるもの)に拡張することは未解決の課題です。この論文では解決されていません。
次に読むべき資料
- Language Agent Tree Search (LATS) (Zhou et al., arXiv:2310.04406; ICML 2024) — 反省と再試行のループにモンテカルロ木探索を組み合わせることでReflexionを拡張し、エージェントが1つの軌跡に固執するのではなく、複数の推論の枝を探索できるようにします。GPT-4でHumanEval 92.7%を達成。
- Retroformer (Yao et al., arXiv:2308.02151; ICLR 2024) — 自己反省に同じLLMを使用するのではなく、方策勾配法を介して別の軽量な回顧(retrospective)モデルを訓練することで、反省プロセスをタスク間で学習可能にします。より原理的ですが、微調整が必要です。
- Self-Reflection in LLM Agents: Effects on Problem-Solving Performance (arXiv:2405.06682, 2024) — 反省がいつ、なぜ役立つのかを具体的に調査した実証研究であり、タスクタイプ全体でのアブレーション研究が含まれています。Reflexionと他の修正戦略のどちらを適用すべきかを判断するのに役立ちます。
