
ReAct
"考えて行動せよ"
Introduction
ReAct(Reasoning and Acting)は大型言語モデルが推論(Reasoning)と行動(Acting)を交互に実行しながら複雑な問題を解決するプロンプティング技法です。2022年にGoogle ResearchとPrinceton Universityで開発されたこの方法論は、既存のChain-of-Thoughtとは異なり、外部ツールとの相互作用を通じてより正確で信頼できる結果を導出します。
Motivation
既存のLLMはChain-of-Thought、CoT方式で推論能力を示しはしましたが、これはモデル内部でのみ動作する「思考」でした。つまり、外部世界と相互作用できず、一度間違った事実を思い出すと継続してエラーを伝播する可能性がある問題がありました。例えば、「Apple Phoneのオペレーティングシステム名は?」という質問にモデルが「Windows」と間違って思い込むと、継続してその間違った思考に基づいて誤った答えを出す可能性があります。
逆に「行動のみ(Act-only)」するモデルは外部環境との相互作用はしますが、高レベルの目標について抽象的に「思考」したり作業記憶を維持する能力が不足していました。例えば、ウェブサイトで商品を購入する際、単純にクリックを繰り返すだけで目標を忘れてしまったり、状況に合わない行動をする可能性があります。
Method
基本構造:
Thought: [推論過程]
Action: [実行する行動]
Observation: [行動結果]
Thought: [追加推論]
Action: [次の行動]
...実際の使用例示
Wikipedia検索による質問回答:
Question: コロラド造山帯の東部区域が拡張される地域の高度範囲は?
Thought 1: コロラド造山帯を検索して東部区域がどこに拡張されるかを見つける必要がある。
Action 1: Search[コロラド造山帯]
Observation 1: コロラド造山帯はコロラドと周辺地域の山脈形成エピソードでした...
Thought 2: 東部区域に関する情報がないので'eastern sector'を探してみよう。
Action 2: Lookup[eastern sector]
Observation 2: 東部区域はGreat Plainsに拡張し、Central Plains造山帯と呼ばれます。
Thought 3: Great Plainsの高度範囲を見つける必要がある。
Action 3: Search[Great Plains 高度]
Observation 3: Great Plainsは東西に約1,800フィートから7,000フィートまで上昇します。
Action 4: Finish[1,800 to 7,000 ft]思考(Thought)
モデルの「内部独白」のような推論過程です。問題を解くための計画を立て、進行状況を追跡し、例外状況を処理し、次の行動を決定するのに必要な推論を言語で表現します。
例示: 「Apple Phoneのオペレーティングシステムを見つけなければならない。まず『Apple Phone』を検索し、その次にオペレーティングシステム関連情報を探してみよう」
行動(Action)
モデルが「外部世界と相互作用」する段階です。事例では主に検索エンジン(Wikipedia API)やウェブ環境との相互作用を例示として提示しました。
例示: Search[Apple Phone]のようなコマンドを実行
観察(Observation)
行動を通じて得た外部環境のフィードバックです。この観察結果は再びモデルの「思考」に影響を与え、次の行動を計画するのに使用されます。
例示: 検索結果として受け取った情報
Details
🧠 ReActが解決する核心問題
1. 幻覚(Hallucination)問題解決
既存CoTの問題:
Q: バミューダトライアングルは太平洋にあるか?
CoT: バミューダトライアングルは太平洋の神秘的な地域です。(❌ 幻覚)ReActの解決:
Thought: バミューダトライアングルの位置を確認する必要がある。
Action: Search[バミューダトライアングル]
Observation: バミューダトライアングルは北大西洋西部に位置する地域です。
Thought: 観察結果によると太平洋ではなく大西洋にある。
Answer: いいえ、大西洋にあります。(✅ 正確)2. 動的情報処理
ReActはリアルタイムで情報を検索・更新できるため、最新情報が必要なタスクに優れています。
3. エラー回復能力
Thought: 検索結果が不十分だ。他のキーワードで再検索してみよう。
Action: Search[他のキーワード]💡 性能ベンチマーク
HotpotQA & FEVERデータセット結果:
ReAct: HotpotQA 27.4%、FEVER 60.9%
CoT: HotpotQA 29.4%、FEVER 56.3%
ReAct + CoT結合: HotpotQA 35.1%、FEVER 64.6%(最高性能)
ALFWorld & WebShop環境:
ALFWorld: 71%成功率(既存Act-only 45%比58%向上)
WebShop: 40%成功率(既存IL+RL 28.7%比39%向上)
いつ使用すべきか?
LLMの内部知識だけでは不足したり、最新/正確な事実確認が必要な時:
既存のCoT(Chain-of-Thought)方式はモデル内部でのみ推論するため、幻覚(Hallucination)現象や間違った情報によるエラー伝播が発生する可能性があります。
複雑で多段階的な問題解決が必要な場合:
単純な質問回答を超えて、複数段階を経る必要がある複雑なタスク(例:マルチホップ質問回答、ウェブサイトナビゲーション、テキストベースゲーム)に適合します。
LLMの問題解決過程を透明に理解したい時:
ReActはモデルの**「思考(Thought)」と「行動(Action)」を明示的に記録するため、LLMがどのような論理的フローで問題を解決していくかを人が容易に把握し理解できます。これはモデルのデバッグと問題診断**に大きな助けとなります。
人間がLLMの行動を制御したり介入する必要がある時:
モデルの「思考」部分を人が直接見て修正し、モデルの行動を調節できます。例えば、モデルが特定のアイテムを見つけられずに迷っている時、「そのアイテムはそこにあるはずだ」とヒントを与えて正しい行動を誘導できます。これは新しい形の人間-機械協働を可能にします。
少数の例示(few-shot)でも良い性能を出す必要がある時:
ReActは1〜6個の少数例示(in-context examples)だけでも多様なタスクで既存方式より優れた汎化性能を示します。これは膨大な量の学習データが必要な他のモデルよりデータ効率性が高いという利点があります。
モデルの内部知識と外部検索能力をシナジー効果で結合したい時:
時にはLLMの内部推論(CoT)が特定部分でより強みを見せ、外部検索(Act)がまた別の部分で強みを見せます。ReActはこの2つを効果的に結合して最適な性能を達成できます。例えば、モデルが内部知識で確信を持てない時に外部検索に転換する戦略が効果的です。
Best Practices
🏆 1. 明確なアクション空間定義
効果的なアクション設計:
# Wikipedia検索例示
available_actions = [
"Search[entity]", # エンティティ検索
"Lookup[string]", # ページ内文字列検索
"Finish[answer]" # 回答完了
]実際の適用:
✅ 明確なアクション:
Action: Search[Tesla Model 3 2024 price]
❌ 曖昧なアクション:
Action: Find information about Tesla🎯 2. 体系的なThought構造化
2.1 目標分解パターン
Thought: この問題を解決するには次の段階が必要だ:
1. [主題]に関する基本情報収集
2. [詳細事項]確認
3. [最終回答]導出2.2 進行状況追跡
Thought: これまで[A]と[B]を確認した。今度は[C]を見つける必要がある。2.3 エラー認識及び回復
Thought: 前回の検索結果が不十分だ。他のキーワードで再検索しよう。
Action: Search[alternative keyword]🔧 3. 効果的なプロンプトテンプレート
あなたは質問に答えるために以下の形式を使用する必要があります:
Thought: [現在状況分析及び次の行動計画]
Action: [実行する行動]
Observation: [行動結果]
... (必要時反復)
Finish: [最終回答]
使用可能なアクション:
- Search[query]: 情報検索
- Lookup[term]: 特定用語検索
- Calculator[expression]: 計算実行
- Finish[answer]: 回答完了
例示:
Question: エッフェル塔の高さは?
Thought: エッフェル塔の正確な高さを見つけるために検索してみよう。
Action: Search[エッフェル塔 高さ]3.2 ドメイン別適用例示テンプレート
数学問題解決:
Thought: この数学問題を段階別に分解してみよう。
1. 与えられた条件整理
2. 必要な公式確認
3. 計算実行
Action: Calculator[複雑な計算式]研究分析:
Thought: このトピックについて多角度分析が必要だ。
1. 最新研究動向把握
2. 専門家意見収集
3. データクロスチェック
Action: Search[最新研究論文]⚡ 4. 性能最適化ティップ
4.1 アクション回数制限
# 無限ループ防止
max_iterations = 7
if iteration_count > max_iterations:
Finish[現在まで収集された情報ベース回答]4.2 効率的な検索キーワード
✅ 効果的なキーワード:
- 具体的で明確な用語
- 公式名称使用
- 年度、数字含有
❌ 非効率的なキーワード:
- あまりに一般的な用語
- 曖昧な表現
- 長い文章4.3 早期終了条件
Thought: 十分な情報を収集した。これ以上の検索は不要だ。
Finish[収集された情報ベース最終回答]Limitations
推論過程の柔軟性不足およびエラー反復:
ReActの推論(Thought)、行動(Action)、観察(Observation)の交互進行方式は構造的制約となる可能性があり、CoT(Chain-of-Thought)よりより高い推論エラー率を示す可能性があります。
特に、モデルが以前に生成した思考と行動を反復的に生成してループに陥るエラーパターンが発生する可能性があります。
外部情報検索結果への高い依存性:
外部知識ベース(例:Wikipedia API)との相互作用はReActの強みですが、情報がないか有用でない検索結果はReActの推論を妨害し、エラーからの回復を困難にします。これは事実性(factuality)と柔軟性(flexibility)間の予想された妥協点です。
少数例学習(Few-shot Learning)環境での学習難易度:
PaLM-8B/62Bのような小さな言語モデルで少数例プロンプティングでReActを使用する場合、他の方式より性能が最も低かったです。これは制限された文脈内例示だけで推論と行動を同時に学習することが困難だからです。
複雑なタスクはより多くのデモが必要であり、これはインコンテキスト学習(in-context learning)の入力長制限を容易に超過する可能性があります。また、人間専門家の性能とはまだ相当な差を示します。
外部環境相互作用の潜在的危険性:
言語モデルが外部環境(例:ウェブ、物理的環境)と相互作用する行動空間を持つことは、不適切または私的な情報照会、あるいは有害な行動のような潜在的なリスクを内包します。論文ではこのようなリスクを最小化するため、相互作用を特定ウェブサイト(Wikipedia、WebShop)に制限し、危険な行動が不可能になるよう設計しました。