この回のゴール
- ReAct (Reasoning + Acting) というエージェントの中核パターンを理解する
- LLM に 「考えること」を強制 すると精度が上がる理由を腹落ちさせる
- Claude の thinking block / Extended Thinking が現代版 ReAct であることを知る
- 自作エージェントで「思考ログ」を可視化できるようになる
1. 背景: なぜ「考えさせる」と精度が上がるか
Chain-of-Thought (CoT) の発見 (Wei et al., 2022):
通常のプロンプト:
Q: 太郎は 3 個のリンゴを持っている。そこに花子が 7 個くれた。合計は?
A: 10 個
CoT プロンプト:
Q: 太郎は 3 個のリンゴを持っている。そこに花子が 7 個くれた。合計は?
A: 太郎は最初に 3 個持っていた。花子から 7 個もらったので、3 + 7 = 10。答えは 10 個。
CoT の方が精度が高い。特に数学・論理問題で顕著。理由: - LLM は 一度生成した文脈に続いて 次を生成する - 途中の推論を書き出す ことで「次の 1 手」が決めやすくなる - 人間でも 紙に書きながら考えると間違えにくい のと同じ
2. ReAct — CoT を行動と組み合わせる (Yao et al., 2022)
CoT は「思考だけ」。ReAct は:
Thought: 「太郎が持ってる数を知る必要がある」
Action: lookup_person(name="太郎")
Observation: "太郎: リンゴ 3 個"
Thought: 「次は花子がくれた数」 ← 観測を踏まえて次の思考
Action: lookup_transaction(...)
Observation: "花子 → 太郎: 7 個"
Thought: 「これで計算できる」
Action: calculator(expression="3+7")
Observation: "10"
Thought: 「答えは 10 個」
Answer: 10 個
つまり:
Thought(考える) → Action(道具を使う) → Observation(結果を見る) を繰り返し、 最後に Answer を出す。
これが ReAct(\"Reasoning + Acting\")。
3. なぜ有効?
- Action だけ: 無計画に道具を使う → 無駄・誤選択
- Thought だけ: 実データなしに推論 → ハルシネーション
- Thought + Action: 計画と観測を組み合わせ、軌道修正 できる
実験では、CoT(思考のみ) や Act-only より ReAct が 大幅に精度向上 しました。
4. Claude での実装
方法 A: プロンプトで促す
system プロンプトに:
回答する前に必ず以下の手順で進めてください:
1. <thought> タグで何を考えているか書く
2. 必要なら tool を使う
3. 結果を踏まえて <thought> で次を考える
4. 十分な情報が揃ったら <answer> で答える
これだけで Claude は ReAct 的に振る舞います。
方法 B: thinking block(Claude 4 系の機能)
Claude 4.5 以降、Extended Thinking(拡張思考) が搭載されました:
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=16000,
thinking={"type": "enabled", "budget_tokens": 4000}, # 👈
messages=[...],
tools=[...],
)
for block in response.content:
if block.type == "thinking":
print("思考:", block.thinking) # 👈 内部思考が見える
elif block.type == "tool_use":
print("アクション:", block.name)
- budget_tokens: 明示的に思考予算を指定
- adaptive(Opus 4.7 等): モデルが 自動で必要なだけ考える
これは モデル内蔵の ReAct とも言えます。
5. 2 つの方式の比較
| 観点 | プロンプト ReAct | thinking block |
|---|---|---|
| 対応モデル | どれでも | Claude 4.5+ (Opus/Sonnet) |
| 思考の可視性 | 出力テキストに混在 | 専用の block で分離 |
| 出力制御 | やや複雑 | シンプル |
| 精度 | 十分高い | さらに高い |
| トークンコスト | 出力に含まれる | 別途課金 |
6. 思考はユーザーに見せる?
- 見せない: ユーザー向けチャットボット(答えだけが欲しい)
- 見せる: 開発者向けデバッグ、透明性が必要なシステム
- 折りたたみ: 知りたい人だけ見られる UI(現実的な妥協点)
まとめ
- ReAct = Thought → Action → Observation のサイクルで推論しながら行動
- 「考えてから動く」ことで CoT 単独 / Act 単独より大幅に精度向上
- Claude では プロンプト ReAct(汎用) と Extended Thinking(4.5+) の 2 方式
- 思考の可視化は UX とデバッグの両面で重要
この回の限界(次への動機)
ReAct で「賢く動く」ようにはなった。でもループが 無限に続いたら? トークン予算は? タイムアウトは? 👉 次回「状態管理と停止条件」で、暴走を防ぐガードレールを学びます。
参考文献
- Yao et al. (2022) ReAct: Synergizing Reasoning and Acting in Language Models
- Wei et al. (2022) Chain-of-Thought Prompting
- Anthropic: Extended Thinking