手法

ReAct プロンプティング:ツールを使った推論と行動

ReAct プロンプティングは、推論とツール呼び出しを交互に行い、モデルが情報を調べて行動できるようにします。ループの仕組み、プロンプト例、よくある失敗の型を解説します。

英語の原文からの翻訳です。コード、プロンプト、モデルの出力は英語のまま掲載しています。

ReAct は「reasoning and acting(推論と行動)」の略で、モデルが「何をすべきか考える」ことと「ツールを使ってそれを実行する」ことを交互に行うプロンプティングのパターンです。2022 年に Yao らが提案したもので、今日のほとんどの AI エージェントの内部にある基本のループです。

ループ

ReAct エージェントは、答えられるようになるまで 3 つのステップを繰り返します。

  1. 思考(Thought)。 モデルは、自分が何を知っているか、次に何が必要かを推論します。
  2. 行動(Action)。 ツールと、それを呼び出す引数を選びます。
  3. 観察(Observation)。 アプリケーションがツールを実行し、結果をモデルに返します。

その後、観察が文脈の一部になった状態で、サイクルが繰り返されます。

Question: Is order 8841 eligible for a refund?

Thought: I need the order date and the refund window.
Action: get_order(order_id="8841")
Observation: {"date": "2026-09-02", "status": "delivered", "custom": false}

Thought: Delivered and not custom. I need the policy window.
Action: get_policy(topic="refunds")
Observation: "Refunds within 30 days of delivery, excluding custom items."

Thought: 36 days have passed, so it is outside the window.
Answer: No. The 30-day refund window ended on 2 October 2026.

行動を伴わない推論は、モデルの外にある事実に届きません。推論を伴わない行動は、ツールを闇雲に呼び出します。両者を交互に行うことで、それぞれの観察が次の判断を形づくります。

現代的なツール呼び出しでの ReAct

元の手法は、アプリケーションが解析するテキスト形式を使っていました。現在のモデル API にはツール呼び出しが組み込まれています。各ツールを名前、説明、パラメーターの JSON Schema で記述すると、モデルがツールを呼び出す構造化されたリクエストを返します。ループは同じで、配管の部分は API が担います。

これにより、プロンプトエンジニアリングは 3 か所に移ります。

1. システムプロンプト

目標、制限、いつ止めるかを記述します。

You are an order support agent. Use the tools to answer questions
about a customer's orders.

- Look up facts with tools. Do not guess order details.
- Call a tool only when its result is needed for the answer.
- If a tool returns an error, try once more with corrected arguments,
  then tell the customer what could not be checked.
- Never issue a refund above $200. Escalate instead.
- Stop and answer as soon as you have enough information.

2. ツールの説明

モデルはツールの説明だけを頼りにツールを選びます。各説明をプロンプトとして扱いましょう。

  • 弱い例:get_order: gets an order
  • より良い例:get_order: Returns date, status, items, and total for one order. Use when the customer mentions an order number. Does not include payment details.

ツールが何を返すか、いつ使うか、そして何をしないかを書きます。パラメーターには明確な名前を付け、形式を説明します。

3. ツールの結果

観察は文脈に戻されるので、その形が重要です。生の HTML ページではなく、コンパクトでラベル付きのデータを返します。モデルが対処できる明示的なエラーメッセージも含めましょう。「No order with that ID」は役に立ちますが、スタックトレースは役に立ちません。

失敗の型

ループ。 エージェントが同じ呼び出しを繰り返します。最大ステップ数を設定し、上限に達したときにどうするかをモデルに伝えます。

ツールの使いすぎ。 すでに知っていることにもツールを呼び出します。いつ呼び出してはいけないかを書きます。

誤った引数。 ID や形式を作り出します。パラメーターのスキーマを厳しくし、期待される形式を説明するエラーを返します。

文脈の肥大化。 すべての観察がステップごとに再読込されるため、コストはステップ数の 2 乗で増えます。古い観察は削るか要約します。トークン最適化を参照してください。

観察を通じたインジェクション。 ツールが返すウェブページやドキュメントに指示が含まれていることがあり、モデルがそれに従ってしまう可能性があります。これは間接的なプロンプトインジェクションで、エージェントの主要なセキュリティリスクです。ツールの結果をデータとして明示し、ツールにできることを制限し、元に戻せない操作には承認を必須にします。

早まった回答。 確認する前に答えてしまいます。事実に関する主張は、ツールの結果に基づくことを求めます。

ReAct を使う場面

状況 使うもの
手順があらかじめ分かっている プロンプトチェーン:より安く、予測しやすい
経路が見つかるものに依存する ReAct
タスクが最新または非公開のデータを必要とする 検索ツールを備えた ReAct
タスクが他のシステムで操作を行う ReAct。リスクの高い操作には承認を付ける
1 回の検索のあと回答するだけ ループではなく、1 回の検索ステップ

エージェントは最も柔軟な選択肢であり、最も信頼性を保ちにくい選択肢でもあります。その柔軟性が必要なときに使いましょう。

MCP でエージェントにツールを与える

Model Context Protocol は、エージェントにツールを提供する標準的な方法で、1 つのツールサーバーが多くの AI アプリケーションで動作します。PromptFlowEngine の MCP サーバーは、プロンプトの分析、再構成、サニタイズを読み取り専用のツールとして公開しています。エージェントは自分のループの中でこれらを使えます。たとえば、文脈を渡す前にサニタイズしたり、開始前にあいまいなタスクを仕様に変えたりできます。

エージェントの指示設計全般については、AI エージェント向けのプロンプトに進んでください。

実践してみる

MCPで試す

PromptFlowEngine を AI エージェントや MCP 対応ワークフローと接続します。 無料・決定論的で、アカウントは不要です。

関連する PromptFlowEngine ツール

手法のその他のガイド

プロンプトエンジニアリングガイドをすべて見る