AIエージェントのReActループとは?思考と行動の仕組み
画像出典: パブリックドメイン(Wikimedia Commons)
AIエージェントの「自律」の正体は、Thought(思考)→Action(行動)→Observation(観察)という3つの手順をひたすら繰り返すループです。この考え方はReActという手法として2022年に論文で提案され、現在の多くのエージェント実装の土台になっています。暴走や空回りも同じループの構造から説明でき、停止条件の設計で防ぎます。
AIエージェントの「自律」は、意志のようなものではありません。やっているのは、驚くほど単純な3手順の繰り返しです。考える、道具を使う、結果を見る。それだけを何十回も回しているだけ、と言ってしまってもいい。
正直なところ、この構造を一度知ってしまうと、エージェントが賢く見える瞬間も、突然おかしな方向へ走り出す瞬間も、同じ仕組みから説明がつくようになります。賢さと暴走は、まったく同じループの表と裏です。
AIエージェントの仕組みとは?基本は3手順のループ
まず前提を合わせます。ChatGPTのようなチャットは、質問を受け取って答えを1回返して終わりです。1往復で完結する。ここまでは、多くの人が普段体験している通りです。
エージェントが違うのは、1回答えたところで終わらせず、答えを材料にしてもう一度考える点です。その繰り返しの型が、次の3つになります。
- Thought(思考)LLMが「次に何をすべきか」を言葉にして書き出します。「まず社名で検索して事業内容を確認する必要がある」のように、次の一手を宣言する段階です。
- Action(行動)その思考にもとづいて、外部のツールを呼び出します。Web検索、社内データベースへの問い合わせ、ファイルの読み書きなど、モデルの外にある機能です。
- Observation(観察)ツールが返してきた結果を、会話の続きとしてモデルに読み込ませます。ここで得た情報が、次のThoughtの材料になります。
この3つを1周したら、また1つ目に戻る。「考えながら行動し、行動の結果を踏まえてまた考える」——この往復こそがエージェントの正体です。
ループが1周ずつ進む様子
たとえば「取引先A社の直近の業績を調べてまとめて」と頼まれたとき、内部ではこう進みます。
| 1周目 | 思考「A社の正式名称と業種を確認しよう」→ 行動「Web検索」→ 観察「製造業、決算は3月期」 |
|---|---|
| 2周目 | 思考「決算期がわかったので直近の決算資料を探す」→ 行動「Web検索」→ 観察「決算短信のページを取得」 |
| 3周目 | 思考「必要な数値が揃った。もう調べる必要はない」→ 行動「回答を出力して終了」 |
注目してほしいのは3周目です。ループを抜ける判断も、モデル自身がThoughtとして行っているということ。ここが後で出てくる失敗パターンの急所になります。
なぜ「考える」と「動く」を交互にするのか?
この設計には出どころがあります。ReAct(Reasoning and Acting)という手法で、Princeton UniversityとGoogle Researchの研究者らによる論文「ReAct: Synergizing Reasoning and Acting in Language Models」(arXiv:2210.03629、2022年10月投稿)で提案され、翌2023年のICLR(国際学習表現会議)で正式に採択されました。名前のとおり、Reasoning(推論)とActing(行動)を組み合わせた造語です。
片方だけだと、それぞれ別の弱点が出ます。思考だけを積み重ねる方式は、Chain of Thought(考える過程を順に書かせる手法)と呼ばれます。これはモデルの内部知識だけで進むので、学習時点にない情報や最新の事実にはたどり着けません。
逆に、ツールを呼ぶ機能だけを与えても、今度は「どのツールをどんな条件で使うべきか」という判断の軸がありません。手は動くが、方針がない状態です。
ReActは、推論トレース(考えの筋道の記録)が行動計画の立案・追跡・更新と例外への対応を担い、行動が外部の知識ベースや環境との接点となって追加情報を取ってくる、という役割分担でこの両方を補います。思考が地図を描き、行動が実際に足を運ぶ。そういう分業だと考えるとイメージしやすいはずです。
論文では何が確かめられたのか
ReActは4つのベンチマーク(性能を測る標準的な課題セット)で評価されました。HotPotQA(複数の情報源をまたぐ質問応答)、Fever(事実検証)、ALFWorld(テキストベースのゲーム環境)、WebShop(Webページ上の操作)です。HotPotQAとFeverでは、Wikipediaの記事をプログラムから取得する窓口であるWikipedia APIを使い、通常の行動生成モデルを上回る結果を示し、Chain of Thoughtとも競合する性能を出しました。
興味深いのは、最も良かったのはReAct単体ではなく、ReActとChain of Thoughtの組み合わせだったという点です。外に取りに行く力と、内側で考え抜く力は、どちらかを選ぶものではなかったわけです。
エージェントはどうやってツールを呼び出している?
ここで素朴な疑問が残ります。言葉を生成しているだけのモデルが、どうやって検索エンジンやAPIを「実行」しているのか。
結論を言うと、モデル自身は何も実行していません。やっているのは、「このツールを、この引数で呼んでほしい」という指示を構造化されたデータとして書き出すことだけ。実際に呼び出すのは、モデルの外側にあるプログラムです。
この仕組みはFunction Calling(関数呼び出し)と呼ばれます。流れはこうです。
- あらかじめ、使えるツールの定義をJSONスキーマ(項目名と型を機械可読な形で書いた仕様)としてモデルに渡しておく
- モデルが「今ツールが必要か」を判断する
- 必要なら、ツール名とパラメータを構造化データとして出力する
- 外側のプログラムがそれを受け取り、実際に関数を実行する
- 実行結果をObservationとしてモデルに戻す
たとえば天気情報を取得する処理をPythonの関数として用意し、その入出力をJSONスキーマで説明してモデルに伝えておく、という実装例が公開されています。モデルは「注文票を書く人」で、実行するのは別の担当者だと思ってください。
この分離は、そのままエージェントの設計思想に対応しています。エージェントを組み立てるための開発ツール群であるLangChain、およびその上でループ構造を扱うLangGraphでは、create_react_agentという部品が用意されており、入力→プロンプト変換→LLM推論→出力判別という流れで「脳(判断ロジック)」と「体(実行ループ)」を分けた構造になっています。ReActはこうした多くのエージェント実装フレームワークの基盤として使われています。
AIエージェントが暴走・空回りする典型パターンは?
終わらないエージェントは、故障しているわけではありません。ループ構造から必然的に生じる副作用です。先ほど触れたとおり、「もう終わっていい」という判断もモデルのThoughtに委ねられています。その判断が下りなければ、ループは回り続けます。
1. 無限ループ
思考が堂々巡りになり、終了条件にたどり着かない状態です。似た検索を繰り返す、AとBの案を行き来し続ける、といった形で表面化します。
対策の基本はmax_iterations(最大反復回数)の設定です。「何周したら強制的に止めるか」を外側から決めておく。これは必須の設定とされています。判断を任せる相手に、判断できなかった場合の非常口を用意しておく、という発想です。
2. ハルシネーション
ツールを使わずに、モデルが事実を勝手に作ってしまうパターンです。「在庫は100台あります」のように、確認していない情報をそれらしく書いてしまう。
厄介なのは、出力の見た目が正常な場合とまったく変わらないことです。無限ループは動きの異常として気づけますが、これは静かに間違えます。
3. トークンコストの肥大化
Observationは会話の履歴に追加されていくので、ループを回すほど文脈が膨らみます。1周ごとに過去のやり取り全部を読み直すことになり、周回数に応じてトークン消費とコストが増えていきます。
10周で終わる想定が30周に伸びると、増えるのは時間だけではありません。長い検索結果を何度も観察に取り込む処理では、この膨張が効いてきます。
ループを回す以上、実行時間もコストも「やってみないと確定しない」性質があります。1回で答えが決まる定型処理や、応答速度が最優先の場面では、エージェント化はかえって不利になります。手順が決まっている作業は、素直にプログラムとして書いたほうが速くて安いことも多いです。
失敗を防ぐには何を設計すればいい?
上に挙げた3つの失敗に対して、共通して挙げられている対策は次の3点です。
- 停止条件の設計最大反復回数を決め、「どうなったら完了とみなすか」を明示しておきます。モデルの判断だけに終了を委ねない、という考え方です。
- プロンプトによる制約の明示使ってよいツール、守るべき手順、やってはいけないことを言葉で示します。「確認できない情報は書かず、不明と答える」といった指示が、ハルシネーションへの歯止めになります。
- ステート管理ここまでに何を試し、何が分かったのかを構造化して保持します。履歴を垂れ流しにせず整理することで、同じ行動の繰り返しを検知しやすくなります。
要は、賢さを上げるのではなく、外側の枠を先に決めるということです。ループを回すのはモデルですが、そのループをどこで打ち切るかを決めるのは設計者の側にあります。
使う側として見ておくとよいところ
自分でエージェントを組まない立場でも、ツールのログ画面で確認できることがあります。多くのエージェント型サービスは、実行中の思考と行動の履歴を表示します。そこで「同じ行動が3回以上続いていないか」「答えの根拠がObservationにあるか」を見るだけでも、空回りや作り話にかなり早く気づけます。
ループの構造を知っていれば、途中経過は暗号ではなく進捗表として読めます。エージェントに任せる範囲を決めるのも、その読み方が身についてからで遅くありません。
よくある質問
ReActループとは何ですか?
ReActループとは、AIが Thought(思考)→Action(行動)→Observation(観察)の3手順を繰り返してタスクを進める仕組みです。思考で次の一手を言語化し、行動で外部ツールを呼び出し、観察でその結果を取り込んで次の思考につなげます。2022年10月投稿の論文「ReAct: Synergizing Reasoning and Acting in Language Models」(arXiv:2210.03629)で提案され、2023年のICLRで採択されました。
AIエージェントとチャットAIは何が違いますか?
チャットAIは質問に対して1回答えを返して終わりますが、AIエージェントはその答えを材料に外部ツールを呼び出し、結果を見てさらに考える、という往復を繰り返します。違いは賢さの差ではなく、1往復で終わるか、終了条件を満たすまでループを回すかという構造の差です。
AIエージェントが同じ処理を繰り返して終わらないのはなぜですか?
ループを終了する判断もモデル自身の思考に委ねられているためで、その判断が下りないと堂々巡りが続きます。これは無限ループと呼ばれる典型的な失敗パターンで、対策として最大反復回数(max_iterations)の設定が必須とされています。
AIエージェントは自分で検索やAPIを実行しているのですか?
モデル自身は実行していません。あらかじめJSONスキーマなどで渡されたツール定義をもとに、モデルは「どのツールをどの引数で呼ぶか」を構造化データとして出力するだけで、実際の実行は外側のプログラムが行います。この仕組みはFunction Calling(関数呼び出し)と呼ばれます。
※記事で使用した内容・数値は変更される場合があります。最新情報は公式サイトをご確認ください。