AI・機械学習
上級

ReActパターン(エージェンティックプランニング)(リアクトパターン)

Reasoning(推論)とActing(行動)を交互に実行するLLMエージェントの行動パターン。Thought→Action→Observationのループにより、外部ツールとのインタラクションを通じて段階的に問題を解決する。Yao et al.(2022)が提案。

0 回閲覧
0 いいね

ReActパターンとは

ReAct(Reasoning + Acting)パターンは、Yao et al.が2022年に発表した論文「ReAct: Synergizing Reasoning and Acting in Language Models」で提案されたLLMエージェントの行動パターンである。LLMが「考える(Thought)」「行動する(Action)」「結果を観察する(Observation)」の3ステップを交互に繰り返すことで、外部環境とインタラクションしながら問題を解決する。

従来のChain-of-Thought(CoT)プロンプティングが推論のみを行うのに対し、ReActは推論と行動を統合することで、外部知識の取得やツール利用が可能になる。これにより、LLM単体では解けない問題(最新情報の検索、計算、データベース操作など)に対応できる。

ReActの動作原理

ReActパターンの基本的な動作フローは以下の通りである。

Thought 1: [タスクについての推論]
Action 1: [実行するアクション(ツール名と入力)]
Observation 1: [アクションの実行結果]
Thought 2: [観察結果を踏まえた次の推論]
Action 2: [次のアクション]
Observation 2: [結果]
...
Thought N: [最終的な推論と結論]
Action N: Finish[最終回答]

各ステップの役割は以下の通りである。

ステップ役割生成主体
Thought現在の状況分析、次のアクションの計画、推論LLM
Action外部ツールの呼び出し(検索、計算、API等)LLM(生成)→ 環境(実行)
Observationアクションの実行結果外部環境

ThoughtステップではLLMが自由形式のテキストで推論を行う。「何がわかっているか」「何が足りないか」「次に何をすべきか」を明示的に言語化する。この言語化により、LLMの推論プロセスが透明になり、デバッグや改善が容易になる。

ReActと他の手法の比較

手法推論行動外部知識Hallucination耐性適するタスク
Standard Promptingなしなしなし低い単純なQA
Chain-of-Thought (CoT)ありなしなし中程度推論タスク
Act-onlyなしありあり低い(盲目的実行)定型操作
ReActありありあり高い複合タスク
Reflexionありありあり最も高い反復改善が必要なタスク

ReActの最大の強みは、推論と行動の相乗効果(Synergy)にある。推論により行動の方向性が定まり、行動の結果が推論を更新する。CoTだけでは外部情報にアクセスできずHallucinationが発生しやすく、Act-onlyでは行動の根拠が不明確で無駄な行動が増える。

ReActの実装方法

ReActの実装には主に2つのアプローチがある。

プロンプトベースの実装

Few-shotプロンプトでReActの例を提示し、LLMにパターンを模倣させる。LangChainやLlamaIndexでは、ReActエージェントがこの方式で実装されている。

プロンプトの構成要素:

  1. システム指示: ReActの形式で思考・行動すること
  2. ツール定義: 利用可能なツールの名前、説明、パラメータ
  3. Few-shot例: Thought→Action→Observationの具体例
  4. ユーザーの質問: 解決すべきタスク

フレームワークベースの実装

LangChainのAgentExecutor、OpenAI Agents SDK、CrewAIなどでは、ReActのループがフレームワークレベルで実装されている。LLMのFunction Calling機能を利用することで、ツール呼び出しの精度と安定性が向上する。

フレームワークReAct実装方式ツール連携特徴
LangChainAgentExecutor + ReAct promptTools/Toolkits豊富なツールエコシステム
LlamaIndexReAct AgentQueryEngine連携RAGとの統合が強い
OpenAI Agents SDKRunner + ToolCallFunction定義ハンドオフ対応
Anthropic ClaudeTool Use + 思考プロセスTool定義Extended Thinking連携

ReActの限界と改善手法

ReActにはいくつかの既知の限界がある。

限界詳細改善手法
長期計画の弱さ局所的な判断に偏り、長期的な計画が困難Plan-and-Solveとの併用
ループ問題同じThought→Actionを繰り返す最大ステップ数制限、履歴参照
ツール選択ミス不適切なツールを選択するツール説明の詳細化、Few-shot例の追加
計算コストステップ数に比例してトークン消費が増大ReWOO(計画と実行の分離)
エラー伝播初期のミスが後続ステップに波及Reflexionによる自己修正

ReWOO(Reasoning WithOut Observation)は、ReActの計算コスト問題を解決するために提案された手法で、計画フェーズですべてのThought/Actionを一括生成し、実行フェーズでまとめて実行する。これにより、LLMの呼び出し回数を削減できる。

実世界での活用事例

ReActパターンは以下の分野で広く活用されている。

  • 質問応答: Wikipedia検索と推論を組み合わせた複合質問への回答(HotpotQA等のベンチマークで高精度)
  • Webナビゲーション: Webページの閲覧・操作を推論に基づいて行う(WebShopベンチマーク)
  • コーディング: コードの理解→修正案の推論→実装→テスト実行のループ
  • データ分析: データの観察→仮説設定→検証コード実行→結論のループ
  • カスタマーサポート: 問い合わせ内容の理解→関連情報検索→回答生成

よくある質問(FAQ)

Q1: ReActとFunction Callingの違いは?

A1: ReActはLLMの行動パターン(思考と行動の交互実行)を定義するフレームワークであり、Function CallingはLLMがツールを呼び出すための技術的な仕組みである。ReActの「Action」ステップの実装手段としてFunction Callingが使われることが多い。つまり、ReActは設計パターン、Function Callingはその実装技術という関係である。

Q2: ReActプロンプトの設計で重要なポイントは?

A2: 最も重要なのは、(1)ツール定義の明確さ(何ができて何ができないかを明記)、(2)Few-shot例の品質(実際のタスクに近い例を2-3個提示)、(3)Thoughtの具体性を促す指示(「なぜそのアクションを選んだか」を明示させる)である。ツール定義が曖昧だと、LLMが存在しないツールを呼び出したり、誤ったパラメータを渡す確率が上がる。

Q3: ReActエージェントが無限ループに陥った場合の対処法は?

A3: 対処法は複数ある。(1)最大イテレーション数を設定する(通常10-15回)、(2)過去のThought/Action/Observationを要約してコンテキスト長を管理する、(3)同一Actionの連続実行を検出して別のアプローチを促す、(4)タイムアウトを設定する。根本的には、タスクの分解が不十分な場合にループが発生しやすいため、事前のタスク分解(Plan-and-Solve)と組み合わせることが有効である。

Q4: ReActはどのLLMでも使えるか?

A4: 理論的にはどのLLMでも使えるが、実用的にはGPT-4/4o、Claude 3.5/4系、Gemini 1.5 Pro以上の推論能力を持つモデルが推奨される。小型モデル(7B以下)ではThoughtの品質が低下し、ツール選択の精度も落ちる。ただし、ドメイン特化のファインチューニングを行えば小型モデルでも実用的な性能を達成できる場合がある。