ReAct は「reasoning and acting(推論と行動)」の略で、モデルが「何をすべきか考える」ことと「ツールを使ってそれを実行する」ことを交互に行うプロンプティングのパターンです。2022 年に Yao らが提案したもので、今日のほとんどの AI エージェントの内部にある基本のループです。
ループ
ReAct エージェントは、答えられるようになるまで 3 つのステップを繰り返します。
- 思考(Thought)。 モデルは、自分が何を知っているか、次に何が必要かを推論します。
- 行動(Action)。 ツールと、それを呼び出す引数を選びます。
- 観察(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 エージェント向けのプロンプトに進んでください。