1. ReActとは何か
ReAct(Reason + Act)は、大規模言語モデル(LLM)が「推論」と「行動」を交互に行うことでタスクを解決するためのプロンプト設計パラダイムです(Yao et al., 2022)。
従来のアプローチには以下のような課題がありました:
- Reasoningのみ(Chain-of-Thought):複数ステップの推論は可能だが、外部世界にアクセスできないため、知識不足や幻覚(hallucination)が生じやすい。
- Actingのみ:外部APIや環境操作はできるが、戦略的にどの行動を選ぶかを考える「高次推論」が欠ける。
ReActはこの2つを統合し、タスクに応じて「思考(Thought)」と「行動(Action)」を交互に生成することで、
- 高度な計画立案(reason to act)
- 環境からの情報取得による推論の補強(act to reason)
を同時に実現します。
実験では、質問応答(HotpotQA)、事実検証(Fever)、テキストベースの環境操作(ALFWorld)、ウェブナビゲーション(WebShop)といった多様なベンチマークで既存手法を上回る成果を示しました。
2. ReActの基本アイデア
ReActの核心は、推論(Reasoning)と行動(Acting)を明示的に「インタリーブ(交互実行)」する点にあります。
推論(Reasoning)
- タスクをどう進めるかを自然言語で「思考トレース(reasoning trace)」として出力する。
- 例:「まずXについて調べる必要がある」
- このトレースは、計画の維持・更新や例外処理の判断に役立つ。
行動(Acting)
- 推論結果をもとに、外部環境と対話する具体的なアクションを実行する。
- 例:
search[X]
でWikipediaを検索 - 観測(Observation)として返ってきた結果を次の推論に取り込む。
相乗効果
ReActの特徴は、この reason ↔ act の双方向性 にあります。
- reason → act:推論に基づいて行動を選ぶことで、戦略的に外部環境を活用できる。
- act → reason:行動結果を推論に取り込むことで、新しい知識や状況に応じて柔軟に計画を修正できる。
3. アルゴリズムの流れ
以下は論文で示されている、知識探索+質問応答タスク(例:HotpotQA)を例にした ReAct の流れです。
3.1 タスク形式とアクション空間の定義
入力:ユーザからの質問(例:「XとYの関係を説明せよ」など)
外部環境とのやり取りを可能にするため、ReAct では アクション空間 (action space) を定義
- 例:
search[entity]
:Wikipedia 検索 - 例:
lookup[string]
:そのページ内で文字列検索 - 例:
finish[answer]
:回答を最終出力
これらのアクションを通じて、LLM は必要な情報を外部から取得できるようにする
3.2 推論/行動の交互ステップ(Trajectory)
ReAct ではタスクを解くために「思考 (thought)」 + 「行動 (action)」 + 「観測 (observation)」 を交互に繰り返す軌道 (trajectory) を構成します。 arXiv
具体的な流れの例をステップごとに示すと:
ステップ | 出力(Thought or Action) | 説明 |
---|---|---|
Thought | 「まず X に関する概要を取得すべきだ」 | タスク分解や戦略立案 |
Action | search[X] | Wikipedia 検索を実行 |
Observation | 検索結果:X に関する文章断片 | 外部知識を取得 |
Thought | 「ここから Y との関係を探るには、X の記述中のキーワード Z を見るべきだ」 | 観測結果をもとに次の戦略を考える |
Action | lookup[Z] | ページ内文字列検索 |
Observation | 見つかった文:Z に言及する文 | 詳細情報取得 |
Thought | 「この文から得られた情報を組み合わせて関係をまとめられる」 | 推論を進める |
Action | finish[answer] | 回答を最終出力 |
Observation | — | ループ終了/出力完了 |
このように、Thought → Action → Observation → Thought → … のループをたどりながら、必要な知識を段階的に取得しつつ答えを構成します。
3.3 “思考 vs 行動”の統合的モデル
ReAct はアクション空間を拡張して、言語思考 (thought) をアクション空間の一部とみなします。すなわち、通常の “行動” に加えて “思考” も選択可能なように扱います。
モデルは入力コンテキスト(過去の観測・行動・思考履歴)をもとに、次に出力すべきものを選びます(思考を出すか、行動を出すか)
思考 (thought) を選ぶと、外部環境には影響せず、次のステップまでの文脈を更新するのみです。行動 (action) を選ぶと、外部サービス(検索など)を呼び出し観測結果が返ってきます。
3.4 ループ停止条件と最終出力
モデルが finish[answer]
アクションを出したら、観測なしにタスクを終了し、回答を最終出力するステップへ進みます。
または、あらかじめ設定したステップ数の上限に達したり、十分な情報が得られたと判断したりしたらループを打ち切る場合もあります。
3.5 エラー処理・例外対応
思考と行動を交互に使う構造の中で、観測結果が情報を返さない、あるいは 検索が無意味な結果 を返すことがあり得ます(例:empty検索結果)
そのような場合、モデルは例外処理的に他の検索手法を試したり、思考によって探索方針を変えたりします(例:別のキーワードで再検索)
また、同じ思考/行動を繰り返してしまうループ性の問題も報告されており、適切な停止判断や履歴抑制が課題とされています。
4. LangGraphでの実装例
coming soon…
5. 利点と課題
5.1 利点
幻覚(hallucination)の抑制
- Reasoningのみの手法は、外部情報に基づかない推論を続けるため幻覚が多い。
- ReActでは、外部環境からの観測(Observation)を逐次取り込むことで推論を現実世界に「グラウンディング」できる。
- 論文でも、FEVER(事実検証タスク)でReActが幻覚を大幅に減らしたと報告されている。
計画立案能力と柔軟性
- Acting-onlyでは行動の順序を誤ることが多いが、ReActはThoughtを通じて戦略を明示的に表現できる。
- これにより、マルチステップ推論や例外処理が可能になる。
解釈可能性(Interpretability)
- Thought(推論トレース)が外部化されるため、人間が途中経過を確認できる。
- 論文では、失敗ケースのデバッグや改善に役立つと指摘されている。
低リソースでの高性能
- 強化学習や大規模模倣学習モデルと比較して、少数ショットのプロンプトでも高い成功率を実現。
- WebShopタスクでは、1〜2ショットの例示で強化学習ベースのエージェントを上回った。
5.2 課題
効率性の問題
- ThoughtとActionを逐次生成するため、ステップ数が多いタスクでは遅延やAPIコールコストが増える。
- 論文でも「trajectoryの長さがタスクに依存する」点が指摘されている。
無限ループ・反復行動のリスク
- モデルが同じActionを繰り返すなど、進展のないループに陥ることがある。
- 実験でも、特にALFWorldでこの現象が報告されている。
アクション空間設計への依存
- どのツール(search, lookup, APIなど)をアクション空間に定義するかが性能に直結する。
- 社内適用では、適切なツール設計・アクセス制御が必須。
スケーラビリティの限界
- 大規模で複雑なタスク(数十ステップ以上)では、推論履歴が肥大化しコンテキスト長の制約に引っかかる可能性。
- 論文でも「long-horizon tasks」への対応は今後の課題とされている。
コメント