ReActエージェントとは

共同執筆者

Dave Bergmann

Senior Staff Writer, AI Models

IBM Think

ReActエージェントとは

AIエージェントであるReActエージェントは、「推論とアクション」(ReAct)フレームワークを用いて、思考の連鎖(CoT)による推論と外部ツールの活用を組み合わせます。このReActフレームワークにより、大規模言語モデル(LLM)は、エージェント型ワークフローにおいて、複雑なタスクや意思決定をより効果的に処理できるようになります。

ReActは、2023年の論文「ReACT: 言語モデルにおける推論とアクションの相乗効果」でYao氏らによって初めて提案されました。一般的には、 機械学習 (ML)のパラダイムとして、LLMの推論能力と行動実行能力を統合する手法と理解されています。

より具体的には、ReActは、LLMをエージェントの「頭脳」として使用し、検索拡張生成(RAG)から複雑なマルチエージェントのワークフローまでを調整するAIエージェントが環境と構造化され、柔軟に対話できるように設計された概念的フレームワークです。

従来の人工知能(AI)システムとは異なり、ReActエージェントは意思決定とタスクの実行を分離しません。そのため、生成AIが単なる会話型チャットボットを超えて、より複雑な問題解決へと進化するうえで、ReActパラダイムの開発は重要な一歩となりました。

ReActエージェントとそれに派生したアプローチは、AIアプリケーションにおいて、計画・実行・予期しない状況への適応を自律的に行う能力を引き続き支えています。

The DX Leaders

AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。

ご登録いただきありがとうございます。

ニュースレターは日本語で配信されます。すべてのニュースレターに登録解除リンクがあります。サブスクリプションの管理や解除はこちらから。詳しくはIBMプライバシー・ステートメントをご覧ください。

ReActエージェントはどのように機能するのか

ReActフレームワークは、人間が複雑なタスクの計画や実行を段階的に行う際に、自然言語を直感的に、しばしば内なる独り言として活用する方法に着想を得ています。

ルールベースやあらかじめ定義されたワークフローを実行するのではなく、ReActエージェントは、LLMの推論能力に基づいて、新たな情報や前のステップの結果に応じてアプローチを動的に調整します。

短い旅行の荷造りを想像してみてください。まずは重要な要素を考え(「現地の天気はどうだろう」)、そして次に外部の情報源を参照するでしょう(「現地の天気予報を調べよう」)。

その新しい情報(「寒くなりそうだ」)をもとに、次に考慮すべきこと(「暖かい服は持っていたかな」)や行動(「クローゼットを確認しよう」)を決めます。その行動を取ることで、思いがけない問題に直面するかもしれません(「暖かい服は全部収納してあった」)、そしてそれに応じて次のステップを調整します(「重ね着できる服はあるかな」)。

同様に、ReActフレームワークでは、プロンプト・エンジニアリングを活用して、AIエージェントの活動を思考、アクション、観察を交互に繰り返す形式的なパターンに構造化します。

  • 言語化されたCoTによる推論ステップ(思考)は、モデルが大きなタスクをより扱いやすいサブタスクに分解するのに役立ちます。

  • アクションを実行した後、モデルは進捗を再評価し、その観察をもとに最終的な答えを出すか、次の思考に反映させます。理想的には、この観察には、モデルの通常のコンテキスト・ウィンドウ内で以前に得られた情報や、外部のメモリー・コンポーネントからの情報も考慮されるべきです。

ReActエージェントの性能は、その中心となるLLMが複雑なタスクを「言語的に」思考しながら進める能力に大きく依存しているため、ReActエージェントは高度な推論力と指示遂行能力を備えた高性能なモデルから大きな恩恵を受けます。

コストとレイテンシーを最小限に抑えるために、マルチエージェント型のReActフレームワークでは、中心となるエージェントとして、より高性能な大規模モデルを主に活用し、その推論プロセスやアクションの一環として、より小型で効率的なモデルを用いた複数のエージェントにサブタスクを委任することがあります。

ReActエージェント・ループ

このフレームワークは本質的に、思考、アクション、観察を交互に繰り返すプロセスによってモデルが問題解決を行う、フィードバック・ループを形成します。

このループが1回完了するたび、つまりエージェントがアクションを実行し、その結果に基づいて観察を行った後には、ループを繰り返すか終了するかを判断する必要があります。

ReActパスの図解

いつ、どのようにして推論ループを終了させるかは、ReActエージェントの設計において重要な検討事項です。ループの最大反復回数を設定することは、レイテンシー、コスト、トークン使用量を制限し、無限ループの発生を防ぐためのシンプルな方法です。

逆に、ループは特定の条件が満たされたときに終了するよう設定することもできます。たとえば、モデルが一定の信頼度のしきい値を超える最終的な答えを特定した場合などです。

このような推論とアクションのループを実現するために、ReActエージェントは通常、LLMに与えるシステムプロンプト内やユーザーのクエリーのコンテキスト内で、ReActプロンプトのバリエーションのいずれかを使用します。

ReActプロンプト

ReActプロンプティングとは、LLMが思考アクション観察のループというReActパラダイムに従って動作するように誘導するための、特定のプロンプト手法です。従来のReActプロンプト手法を明示的に使用しなくてもReActエージェントを構築することは可能ですが、ほとんどのReActベースのエージェントはこの手法を実装するか、少なくともそこから直接的なインスピレーションを得ています。

ReActプロンプティングは、最初にReActの原論文で示されたもので、その主な役割は、LLMにReActループに従うよう指示し、ユーザーのクエリーを処理する際にどのツールが使用可能か、つまりどのアクションが実行可能かを明示することです。

明示的な指示による場合でも、フューショットの例を含む場合でも、ReActプロンプティングは以下を満たす必要があります。

  • モデルに思考の連鎖による推論を促す: タスクを段階的に思考しながら進め、思考とアクションを交互に行うようモデルに促します。

  • アクションを定義する: モデルが実行可能な具体的なアクションを明確にします。アクションには、特定の種類の次の思考やサブプロンプトの生成が含まれることもありますが、通常は外部ツールの使用やAPIの呼び出しが関わります。

  • モデルに観測を行うよう指示する: 各アクションの後にコンテキストを再評価し、その更新されたコンテキストを次の推論ステップに活用するようモデルに促します。

  • ループ: 必要に応じて、前のステップを繰り返すようモデルに指示します。ループを終了するための具体的な条件(たとえば、最大反復回数)を設定することもできますし、正しい最終アウトプットに到達したと判断した時点で推論プロセスを終了するようエージェントに指示することも可能です。

  • 最終回答のアウトプット:終了条件が満たされた時点で、ユーザーの最初のクエリーに対する最終回答のアウトプットを提示します。多くのLLMの活用と同様に、最終アウトプットを導き出す前に思考の連鎖による推論を行うモデルとして、ReActエージェントも推論プロセスを「スクラッチパッド」内で実行するよう促されることがよくあります。

ReActプロンプティングの古典的なデモンストレーションの1つが、組み込み済みのZERO_SHOT_REACT-DESCRIPTIONに対するシステム・プロンプトです。 LangchainのLangGraphにおけるReActエージェントモジュールは、「ゼロショット」と呼ばれています。これは、あらかじめ定義されたこのシステム・プロンプトによって、このモジュールとともに使用されるLLMがReActエージェントとして動作するために、追加の例を必要としないためです。

Answer the following questions as best you can. You have access to the following tools: 

Wikipedia: A wrapper around Wikipedia. Useful for when you need to answer general questions about people, places, companies, facts, historical events, or other subjects. Input should be a search query.
duckduckgo_search: A wrapper around DuckDuckGo Search. Useful for when you need to answer questions about current events. Input should be a search query.
Calculator: Useful for when you need to answer questions about math.

Use the following format:

Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [Wikipedia, duckduckgo_search, Calculator]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question

Begin!

Question: {input}
Thought:{agent_scratchpad}
AIエージェント

AIエージェントの5つのタイプ:自律機能と実世界アプリケーション

目標主導型でユーティリティーベースのAIがワークフローや複雑な環境にどのように適応するかをご覧ください。

ReActエージェントのメリット

ReActフレームワークの導入は、LLMを活用したエージェント型ワークフローの進化における重要な一歩となりました。リアルタイムかつ現実世界の外部情報にLLMを結びつける検索拡張生成(RAG)から、現代の推論モデルへとつながるReFlexionのようなその後のブレークスルーに貢献するまで、ReActはテキスト生成をはるかに超えたタスクにLLMを活用する動きを促進してきました。

ReActエージェントの有用性は、主にReActフレームワークが本来備えているいくつかの特性に由来しています。

  • 汎用性: ReActエージェントは、さまざまな外部ツールやAPIと連携できるように構成可能です。関連するツールを用いてReActプロンプトをファインチューニングすることでパフォーマンスを向上させることはできますが、ツール呼び出しを実行するために、事前にモデルを設定しておく必要はありません。

  • 適応性: この汎用性に加え、どのツールやAPIを呼び出すべきかを動的かつ状況に応じて判断する性質により、ReActエージェントは推論プロセスを通じて新たな課題に適応することが可能です。特に、長いコンテキスト・ウィンドウ内で動作する場合や外部メモリーで拡張されている場合には、過去の失敗や成功から学び、予期せぬ障害や状況にも対応できます。これにより、ReActエージェントは柔軟性と耐障害性を備えた存在となります。

  • 説明可能性: ReActエージェントの言語化された推論プロセスは追いやすく、デバッグを容易にし、比較的ユーザーフレンドリーに構築・最適化できる点で優れています。

  • 精度: 元のReAct論文でも述べられているように、思考の連鎖(CoT)による推論はLLMに多くのメリットをもたらしますが、同時にハルシネーションのリスクも高まります。ReActは、CoTと外部情報ソースとの接続を組み合わせることで、ハルシネーションを大幅に低減し、ReActエージェントの精度と信頼性を高めます。

ReActエージェントと関数呼び出し

エージェント型AIにおけるもう1つの代表的なパラダイムが関数呼び出しです。これは、エージェント的な能力を補完するために、2023年6月にOpenAIによって導入されGPTモデルで使用されました。

関数呼び出しのパラダイムでは、特定の状況でツール呼び出しを行うべきかをモデルが判断できるようにファインチューニングを行い、呼び出す関数に必要な引数を含む構造化されたJSONオブジェクトをアウトプットさせることが求められます。

現在では、IBM® Granite®をはじめ、MetaのLlamaシリーズ、AnthropicのClaude、そして Google Geminiなど、多くの商用およびオープンソースのLLMファミリーが関数呼び出しに対応しています。

ReActと関数呼び出しのどちらが「優れているか」は、基本的には特定のユースケースの性質に依存します。比較的単純(あるいは少なくとも予測可能)なタスクを扱うシナリオでは、関数呼び出しの方が、ReActエージェントよりも高速に実行でき、トークンを節約でき、実装もシンプルな場合があります。

そのような状況では、ReActエージェントによるCoTを繰り返すループに消費されるトークンの量が、非効率と見なされる可能性があります。

本質的なトレードオフとして挙げられるのは、モデルがどのツールをいつ、どのように使うかを柔軟にカスタマイズできる能力が相対的に低いことです。同様に、エージェントが複雑な推論を必要とするタスクや、動的または予測困難なシナリオを扱う場合には、関数呼び出しの硬直性がエージェントの適応性を制限してしまう可能性があります。そのような状況では、特定のツール呼び出しに至った段階的な推論の過程を確認できることが、有益であることが多いのです。

ReActエージェントのはじめ方

ReActエージェントは、Pythonで一からコードを書く方法でも、BeeAIのようなオープンソースのフレームワークを活用して開発する方法でも、さまざまな形で設計・実装することができます。ReActパラダイムの人気と定着により、GitHubやその他の開発者コミュニティには、ReActエージェントに関する豊富な文献やチュートリアルが公開されています。

カスタムのReActエージェントを開発する代替手段として、BeeAI、LlamaIndex、LangChainのLangGraphなど多くのエージェント型AIフレームワークは、事前構成済みのReActエージェント・モジュールを提供しており、特定のユースケースに対応しています。

関連ソリューション
IBMのAIエージェント開発

開発者が、IBM watsonx.aiを使用してAIエージェントの構築、デプロイ、および監視を行えるようにします。

watsonx.aiの詳細はこちら
IBMのAIエージェントとアシスタント

業界で最も包括的な機能セットの1つを使用して、企業がAIエージェントとアシスタントを構築、カスタマイズ、管理できるようにすることで、生産性を飛躍的に向上させます。

AIエージェントの詳細はこちら
IBM Granite

開発者の効率性を考慮したGraniteの小型オープンモデルで、コストを90%以上削減します。エンタープライズ対応モデルは、安全性ベンチマークに対して、さらにサイバーセキュリティーからRAGまでの幅広い企業タスクに対して優れたパフォーマンスを発揮します。

Graniteの詳細はこちら
次のステップ

包括性で業界でも屈指の機能セットを使用して、複雑なワークフローを自動化し、生産性を飛躍的に向上させましょう。企業がAIエージェントとアシスタントを構築、カスタマイズ、管理するのに役立つ機能セットです。

watsonx.aiエージェントの開発の詳細はこちら watsonx Orchestrateの詳細はこちら