LESSON 30分

ストーリー

田中VPoE
「CoTではLLMに推論過程を示させたね。でも実際の業務では、推論だけでは足りないことが多い。」
あなた
「どういうことですか?」
田中VPoE
「例えば障害調査のとき、推論しただけでは解決しない。ログを見て、メトリクスを確認して、仮説を検証する。つまり『考える』と『行動する』を交互にやる必要がある。」
あなた
「なるほど。それがReActパターンですか?」
田中VPoE
「その通り。Reasoning + Acting で ReAct。AIエージェントの基盤となる重要なパターンだよ。」

ReActパターンとは

ReAct(Reasoning + Acting)は、LLMに「思考(Thought)」「行動(Action)」「観察(Observation)」のサイクルを繰り返させるフレームワークだ。

Thought: 問題について推論する
Action: 情報を取得する / ツールを実行する
Observation: 行動の結果を観察する

Thought: 観察結果を踏まえてさらに推論する
Action: 次の行動を決定する
Observation: 結果を観察する

(繰り返し)

Final Answer: 最終回答を出力する

CoTとReActの違い

項目CoTReAct
アプローチ推論のみ推論 + 行動
外部情報使わないツールや外部APIを活用
用途計算・論理問題調査・検索・複合タスク
精度知識範囲内で高い最新情報や外部データにも対応
自己修正限定的観察結果で軌道修正可能

ReActの基本構造

プロンプトテンプレート

あなたは以下のツールにアクセスできます:
- search(query): ドキュメントを検索する
- calculate(expression): 計算を実行する
- lookup(key): データベースから値を取得する

タスク: {ユーザーの質問}

以下の形式で回答してください:

Thought: まず何を考えるか
Action: 使用するツールとパラメータ
Observation: ツールの実行結果

(必要に応じてThought/Action/Observationを繰り返す)

Final Answer: 最終回答

実践例

例1: NetShop社の売上調査

あなたはNetShop社のデータアナリストです。以下のツールが使えます:
- query_db(sql): データベースにSQLクエリを実行する
- search_docs(keyword): 社内ドキュメントを検索する
- calculate(expr): 計算を実行する

質問: 「先月の売上が前月比で最も伸びたカテゴリはどれですか?その要因も教えてください」

---

Thought: 先月と前々月のカテゴリ別売上データを取得して比較する必要がある。
まずデータベースから売上データを取得しよう。

Action: query_db("SELECT category, SUM(amount) as total
FROM orders
WHERE order_date >= '2026-01-01' AND order_date < '2026-03-01'
GROUP BY category, DATE_TRUNC('month', order_date)
ORDER BY category")

Observation:
| category | month | total |
|----------|-------|-------|
| 家電 | 1月 | 1200万 |
| 家電 | 2月 | 1500万 |
| 食品 | 1月 | 800万 |
| 食品 | 2月 | 850万 |
| アパレル | 1月 | 600万 |
| アパレル | 2月 | 900万 |

Thought: 前月比の伸び率を計算する。
- 家電: (1500-1200)/1200 = 25%
- 食品: (850-800)/800 = 6.25%
- アパレル: (900-600)/600 = 50%
アパレルが最も伸びている。要因を調べよう。

Action: search_docs("アパレル 2月 キャンペーン 施策")

Observation: 2月にアパレルカテゴリで「春物先取りセール」を実施。
バレンタインギフトキャンペーンも同時開催。

Thought: データと社内ドキュメントの情報を統合して回答できる。

Final Answer: 先月(2月)に前月比で最も売上が伸びたカテゴリはアパレル(+50%、600万→900万)です。
主な要因は「春物先取りセール」と「バレンタインギフトキャンペーン」の同時開催です。

例2: 障害調査

Thought: アラートが発生した。まずエラーログを確認する。
Action: search_logs("ERROR", timerange="last_1h")
Observation: 「Connection refused: port 5432」が大量に出力されている。

Thought: PostgreSQLへの接続が拒否されている。DBサーバーの状態を確認する。
Action: check_service("postgresql")
Observation: PostgreSQLプロセスは起動しているが、max_connectionsに到達。

Thought: コネクション数の上限に到達している。接続元を特定する。
Action: query_db("SELECT client_addr, count(*) FROM pg_stat_activity GROUP BY client_addr")
Observation: app-server-03 から85本の接続がある(通常は20本)。

Final Answer: app-server-03からのDB接続が異常増加(85本、通常20本)し、
max_connectionsに到達したことが原因です。app-server-03のコネクションプール設定を確認してください。

ReActをプロンプトで実装するコツ

1. 利用可能なツールを明確に定義する

利用可能なツール:
1. search(query: string) - テキスト検索を実行
2. calculate(expression: string) - 数式を計算
3. api_call(endpoint: string, method: string) - APIを呼び出す

各ツールの入力形式と出力形式を厳密に記述すること。

2. 停止条件を設定する

以下の条件で推論を停止してください:
- 十分な情報が得られた場合 → Final Answerを出力
- 3回のAction/Observationサイクルで解決しない場合 → 現時点の分析結果と追加調査が必要な項目を出力

3. Observationのフォーマットを指定する

Observationは以下の形式で提供されます:
- 成功: [SUCCESS] 結果データ
- 失敗: [ERROR] エラーメッセージ
- 部分成功: [PARTIAL] 取得できたデータ + 不足情報

ReActの適用場面

適用場面理由
情報収集タスク複数のソースから段階的に情報を集める必要がある
障害調査仮説→検証→修正のサイクルが必要
データ分析クエリ→結果確認→追加分析の繰り返し
AIエージェントツール利用の基盤パターン

まとめ

項目ポイント
ReActとは推論(Reasoning)と行動(Acting)を交互に実行するパターン
構造Thought → Action → Observation のサイクル
CoTとの違い外部ツールやデータを活用できる
適用場面情報収集、障害調査、データ分析、AIエージェント

チェックリスト

  • ReActパターンのThought/Action/Observationサイクルを理解した
  • CoTとReActの使い分けを判断できる
  • ツール定義と停止条件の設定方法を把握した
  • 実務でのReAct活用シーンをイメージできた

次のステップへ

次は「Self-Consistencyと多数決」として、複数の推論結果を統合する高度なテクニックを学ぼう。


推定読了時間: 30分