{"notes":[{"id":"transformers/react","category":"transformers","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"ReAct","subtitle":"知行合一","author":"Z. Yuan","paperDate":"2022-10-06","publishedOn":"2026-07-03","world":"external/react","paperTitle":"ReAct: Synergizing Reasoning and Acting in Language Models","paperUrl":"https://arxiv.org/abs/2210.03629","bibliography":{"title":"ReAct: Synergizing Reasoning and Acting in Language Models","authors":["Shunyu Yao","Jeffrey Zhao","Dian Yu","Nan Du","Izhak Shafran","Karthik Narasimhan","Yuan Cao"],"url":"https://arxiv.org/abs/2210.03629","pdfUrl":"https://arxiv.org/pdf/2210.03629v3","codeUrl":null,"preprint":{"id":"2210.03629","submittedOn":"2022-10-06","url":"https://arxiv.org/abs/2210.03629"},"publication":null,"citation":"@misc{transformersreact2022,\n  title = {{ReAct: Synergizing Reasoning and Acting in Language Models}},\n  author = {Shunyu Yao and Jeffrey Zhao and Dian Yu and Nan Du and Izhak Shafran and Karthik Narasimhan and Yuan Cao},\n  year = {2022},\n  eprint = {2210.03629},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2210.03629}\n}\n","citationPath":"/content/papers/citations/transformers/react.0a6bd417f7a8.bib"},"thumbnail":{"src":"/content/papers/assets/ae2cd6d5c68df8887227719a0ac6c5dee8763fa902af5af73260fdc0f1ca81cc.png","width":1122,"height":489},"locale":"ja","path":"/content/papers/ja/transformers/react.d768c4d96d64.md","headings":[{"id":"問題の定義","text":"問題の定義","depth":2},{"id":"問題の解決","text":"問題の解決","depth":2},{"id":"考えることも行動にする","text":"「考える」ことも行動にする","depth":3},{"id":"最小限のwikipediaツール","text":"最小限のWikipediaツール","depth":3},{"id":"どうすればモデルがこのように動くのか","text":"どうすればモデルがこのように動くのか","depth":3},{"id":"いつ自分を信じるべきか","text":"いつ自分を信じるべきか","depth":3},{"id":"考察","text":"考察","depth":2},{"id":"知識タスクの結果","text":"知識タスクの結果","depth":3},{"id":"どこで間違うのか","text":"どこで間違うのか","depth":3},{"id":"ファインチューニングすると小さいモデルが勝つ","text":"ファインチューニングすると小さいモデルが勝つ","depth":3},{"id":"質問応答だけではない","text":"質問応答だけではない","depth":3},{"id":"フレームワークなしでも作れる","text":"フレームワークなしでも作れる","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[]}],"text":"2022年、Chain-of-Thought（CoT）によって、大規模言語モデルに「一歩ずつ考えて」と頼むと、算術や常識推論の成績が大きく改善すると分かりました。\n\nただしCoTには問題があります。自分の頭の中だけで考えるのです。\n\n使うのはパラメータに記憶した知識です。途中で一つの事実を思い違いすると、その後の推論はすべてその間違いの上に積み上がり、最後には整然とした説明付きの誤答ができます。\n\n一方で、言語モデルを環境の中で**行動**させる研究もありました。ロボットの動作を計画する、Webページのボタンを押す、検索エンジンを呼ぶ、といったものです。しかし多くは行動を予測するだけで、今の状況を立ち止まって考える機会はほとんどありませんでした。\n\nプリンストン大学とGoogle ResearchのBrainチームによるこの論文は、ICLR 2023で発表されました。提案は、二つを交互に行うことです。**一歩考え、一歩動き、結果を見て、次を考える**。ReasoningとActingを合わせて、ReActと名付けました。\n\n後に登場する「自分で調べるagent」の出発点として、よく挙げられる研究でもあります。\n\n## 問題の定義\n\nまず、論文の説明に使われる例を見ます。HotpotQAは、複数のWikipedia資料を組み合わせて答えるマルチホップ質問応答データセットです。\n\n> Apple Remoteのほかに、Apple Remoteがもともと組み合わせるために設計されたプログラムを操作できる機器は何か？\n\n答えるには、まず対象のプログラムを知り、それを何で操作できるか調べる必要があります。\n\n著者らは四つの方法でモデルに答えさせます。\n\n[![HotpotQAの四つの解き方：Standard、CoT、Act-Onlyは誤答し、思考と検索を交互に行うReActが正解する](/content/papers/assets/ae2cd6d5c68df8887227719a0ac6c5dee8763fa902af5af73260fdc0f1ca81cc.png)](/content/papers/assets/ae2cd6d5c68df8887227719a0ac6c5dee8763fa902af5af73260fdc0f1ca81cc.png)\n\n*原論文Figure 1(1)。[**v3 PDFの2ページ**](https://arxiv.org/pdf/2210.03629v3#page=2)から抜粋、CC BY 4.0。赤は誤りやハルシネーション、緑は検索で得た正しい情報です。元の図の下半分にあるALFWorldの例は含めていません。*\n\n**(1a) Standard**：直接「iPod」と回答。誤りです。\n\n**(1b) CoT**：一歩ずつ考えます。「Apple RemoteはもともとApple TV用に設計された。Apple TVはiPhone、iPad、iPod Touchで操作できる」。推論は滑らかですが、最初の一文が間違っています。赤く示された部分はハルシネーションで、答えも当然間違います。\n\n**(1c) Act-Only**：考えずに検索だけをします。Apple Remote、Front Rowを調べ、「Front Row (software)」まで見つけました。しかし観察から答えをまとめられず、最後は「yes」と回答します。\n\n**(1d) ReAct**：\n\n- **Thought 1**：Apple Remoteを検索して、もともと何のプログラム用だったか調べる。\n- **Act 1**：`Search[Apple Remote]`\n- **Obs 1**：Apple RemoteはAppleが2005年に発売したリモコン……もともとは**Front Rowメディアセンター**を操作するために設計された。\n- **Thought 2**：対象はFront Rowだった。次はFront Rowを検索し、ほかに何で操作できるか調べる。\n- **Act 2**：`Search[Front Row]`\n- **Obs 2**：[Front Row]は見つからない。類似項目は「Front Row Seat to Earth」「Front Row Motorsports」「Front Row (software)」……。\n- **Thought 3**：Front Rowが見つからないので、Front Row (software)で検索し直す。\n- **Act 3**：`Search[Front Row (software)]`\n- **Obs 3**：Front Rowは開発終了したメディアセンターソフトウェア……。\n- **Thought 4**：Front Row (software)はApple Remoteか**キーボードのファンクションキー**で操作できる。答えはファンクションキーだ。\n- **Act 4**：`Finish[keyboard function keys]`\n\n正解です。\n\n四つを比べると、問題がはっきりします。\n\n- **考えるだけで調べない**CoTは、覚え違いした事実に引っ張られます。\n- **調べるだけで考えない**Actは、情報を得ても使い方が分かりません。\n\n著者らの問いは、**推論と行動を交互に行えば、互いの弱点を補えるか**です。\n\n## 問題の解決\n\n### 「考える」ことも行動にする\n\nまずagentの枠組みで問題を記述します。\n\n時刻$t$に、agentは環境から観察$o_t$を受け取り、それまでの文脈$c_t=(o_1,a_1,\\dots,o_{t-1},a_{t-1},o_t)$に基づいて行動$a_t$を選びます。\n\nReActの考え方は一文です。**行動空間を広げ、言語を加える。**\n\n$$\n\\hat{\\mathcal{A}}=\\mathcal{A}\\cup\\mathcal{L}\n$$\n\n$\\mathcal{A}$は検索など環境に働きかける従来の行動、$\\mathcal{L}$は言語空間です。$\\mathcal{L}$から選ばれる「行動」が、**思考**（thought）です。\n\n思考は環境を変えず、新しい観察も生みません。現在の文脈を整理して結果を書き込み、次のステップで使えるようにします。\n\n$$\nc_{t+1}=(c_t,\\hat{a}_t)\n$$\n\n先ほどの例では、問題の分解（Thought 1）、観察の要点抽出（2、4）、例外に応じた計画変更（3）、答えの整理（4）を担っています。\n\n### 最小限のWikipediaツール\n\nHotpotQAとFEVERの知識タスクには、三つの操作だけを持つ簡素なWikipedia APIを用意しました。\n\n1. **`search[entity]`**：項目があれば冒頭5文を返し、なければ検索エンジンが見つけた類似項目の上位5件を返す。\n2. **`lookup[string]`**：現在のページで、その文字列を含む次の文を返す。ブラウザのCtrl+Fに近い操作です。\n3. **`finish[answer]`**：答えを提出して終了する。\n\nこれらの操作は、ほぼ正確な項目名を使って短い文章を取ることしかできず、当時の優れた語彙検索器やニューラル検索器より弱いと著者らは説明します。これは意図的です。人がWikipediaを調べる方法を模し、何を調べるかを言語で推論させたいのです。\n\nFEVERは主張を「支持」「反駁」「情報不足」に分類する事実検証データセットです。両タスクとも、モデルへ渡すのは質問か主張だけで、参考段落は与えません。\n\n### どうすればモデルがこのように動くのか\n\n主実験では新しいモデルを学習しません。凍結したPaLM-540Bを使い、プロンプトに少数の実演例を入れます。\n\n学習セットからHotpotQAを6問、FEVERを3問ランダムに選び、完全な「思考・行動・観察」の軌跡を人手で書きます。例をさらに増やしても改善しなかったと報告しています。\n\n推論時の処理は、次のようなループで表せます。\n\n```python\ndef react(question, llm, tools, examples, max_steps=7):\n    prompt = examples + f\"Question: {question}\\n\"\n    for step in range(1, max_steps + 1):\n        # モデルがこのステップの思考と行動を書く。例えば：\n        # \"Thought 2: ...\\nAct 2: Search[Front Row]\"\n        output = llm(prompt, stop=[f\"Obs {step}:\"])\n        prompt += output\n\n        action, arg = parse_action(output)          # 例えば (\"search\", \"Front Row\")\n        if action == \"finish\":\n            return arg\n\n        observation = tools[action](arg)            # Wikipedia APIを呼ぶ\n        prompt += f\"\\nObs {step}: {observation}\\n\"  # 観察結果をプロンプトへ戻す\n    return None                                     # ステップ数を使い切っても答えが出なかった\n```\n\nこれは論文の説明に基づく模式的なコードです。要点は`stop`にあります。モデルが思考と行動を書いたところで止め、プログラムが実際に検索を行い、その結果を観察として戻します。観察は環境が返すもので、モデルが作り話をする部分ではありません。\n\n\n> [!TIP]\n> \n> **どのくらい頻繁に考えるのか？**\n> \n> HotpotQAやFEVERのような推論中心のタスクでは、思考と行動を厳密に交互にし、毎回考えてから動きます。\n> \n> 一方、ALFWorldのようなテキストアドベンチャーでは、「カウンター1へ行く」「引き出し2を開く」など、完了まで数十の行動が必要です。毎回考えるのは実用的でないため、モデルが挿入のタイミングを決めます。通常は計画、進捗確認、計画変更が必要なときです。\n\n\n### いつ自分を信じるべきか\n\n結果を分析すると、ReActとCoTには異なる長所がありました。ReActは事実に基づきやすく、CoTは推論の構造を組み立てるのが得意です。\n\nそこで二つの混合方式を設計します。CoT-SCはself-consistency版のCoTで、温度0.7で21本の推論をサンプリングし、多数決で答えを選びます。\n\n- **ReAct → CoT-SC**：制限ステップ内に答えられなければCoT-SCへ戻る。HotpotQAは7ステップ、FEVERは5ステップです。正解した軌跡のうち、7または5ステップをすべて使った割合は、それぞれ0.84%と1.33%でした。\n- **CoT-SC → ReAct**：$n$個のCoT-SCサンプルで、最頻回答の出現回数が$n/2$未満なら、自分の知識への確信が弱いと判断してReActで調べる。\n\n## 考察\n\n### 知識タスクの結果\n\n| 方法 | HotpotQA（EM） | FEVER（精度） |\n| --- | ---: | ---: |\n| Standard | 28.7 | 57.1 |\n| CoT | 29.4 | 56.3 |\n| CoT-SC | 33.4 | 60.4 |\n| Act | 25.7 | 58.9 |\n| ReAct | 27.4 | 60.9 |\n| CoT-SC → ReAct | 34.2 | **64.6** |\n| ReAct → CoT-SC | **35.1** | 62.0 |\n| 教師ありSoTA | 67.5 | 89.5 |\n\n*原論文Table 1をもとに整理。モデルはPaLM-540B。*\n\nまずReActとActを比べると、どちらのタスクでもReActが上です。同じように検索できても、思考が加わると答えを整理する力が変わります。\n\nReActとCoTでは、FEVERはReActが勝ち（60.9対56.3）、HotpotQAでは少し負けます（27.4対29.4）。著者らは、FEVERの「支持」と「反駁」は小さな細部で分かれることがあり、正確な資料を調べることが重要だと説明します。\n\n最良の結果は二つの混合方式です。HotpotQAではReAct → CoT-SCが35.1、FEVERではCoT-SC → ReActが64.6でした。サンプル数を変えた曲線では、どちらも3～5サンプルでCoT-SCの21サンプルに並びます。\n\nただし最後の行も見てください。これらのプロンプト手法は、教師あり学習の最良モデルから大きく離れています。HotpotQAの67.5、FEVERの89.5は、専用に学習したシステムの成績です。\n\n### どこで間違うのか\n\nHotpotQAでの違いを理解するため、著者らは両手法から正解50件、誤答50件ずつ、計200軌跡を取り、成功と失敗の種類を人手で分類しました。\n\n| 種類 | 説明 | ReAct | CoT |\n| --- | --- | ---: | ---: |\n| 成功：真陽性 | 推論も事実も正しい | 94% | 86% |\n| 成功：偽陽性 | 答えは正しいが、推論や事実を作っている | 6% | 14% |\n| 失敗：推論エラー | 同じ手順から抜け出せない場合を含む | 47% | 16% |\n| 失敗：検索結果の問題 | 結果がない、または役立つ情報がない | 23% | — |\n| 失敗：ハルシネーション | 推論や事実を作っている | 0% | 56% |\n| 失敗：ラベルの曖昧さ | 答えは正しいが参照解答と表現が異なる | 29% | 28% |\n\n*原論文Table 2をもとに整理。成功例と失敗例で、それぞれ割合を計算しています。*\n\nこの表は、よく見る価値があります。\n\n**CoTの最大の問題はハルシネーションです**。誤答の56%がこれに該当し、正解でも14%は作った推論で偶然当たったものです。ReActの誤答でハルシネーションは0%でした。\n\n**ただしReActにも癖があります**。推論エラーは失敗の47%で、CoTの16%より大幅に高くなります。著者らが見つけた特徴的なパターンは、以前の思考と行動を繰り返し、ループから抜け出せなくなることです。思考・行動・観察の交互構造は根拠を強めますが、推論の柔軟さを下げる面もあります。\n\n**検索失敗はReActを脱線させます**。失敗の23%は有用な情報が見つからないケースで、そこから考えを組み直すのが難しくなります。\n\nHotpotQAの参照解答の一部が古くなっていることも見つかりました。\n\n### ファインチューニングすると小さいモデルが勝つ\n\nプロンプトだけでは、PaLM-8Bと62BのReActは四手法中最下位です。小さいモデルが少数の例から推論と行動を同時に学ぶのは難しいのです。\n\nそこでReAct自身が生成した正解軌跡3,000件で小さいモデルをファインチューニングすると、結果が逆転しました。\n\n- ファインチューニングしたPaLM-8B ReActは、PaLM-62Bの全プロンプト手法を上回る。\n- ファインチューニングしたPaLM-62B ReActは、PaLM-540Bの全プロンプト手法を上回る。\n\nStandardやCoTのファインチューニングは、それほど効果がありません。著者らの説明では、これらは誤った事実も含めて暗記させがちなのに対し、ReActは推論の仕方とWikipediaの調べ方という、汎化しやすい技能を教えます。\n\n### 質問応答だけではない\n\n二つの対話型意思決定タスクでも評価しました。\n\n- **ALFWorld**：胡椒入れを探して引き出しへ入れるなど、家庭内の作業を行うテキストゲームです。最良のReAct試行の平均成功率は71%、行動だけのActの最良値は45%、模倣学習のBUTLERは37%でした。\n- **WebShop**：118万件の実在商品を使った模擬通販サイトで、利用者の説明に合う商品を探します。\n\n要旨では、1～2個の実演例だけを使うReActが、この二つのタスクで模倣学習と強化学習の手法をそれぞれ34、10パーセントポイント上回ったとまとめています。比較手法は$10^3$～$10^5$件のタスクデータで学習しています。\n\n### フレームワークなしでも作れる\n\nReActの魅力には、ほぼフレームワークなしで実装できる単純さもあります。\n\n2023年3月、Simon Willisonは[**簡単なPython実装**](https://til.simonwillison.net/llms/python-react-pattern)を書きました。`gpt-3.5-turbo`にThought、Action、PAUSE、Observationを順に出し、最後にAnswerを書くようシステムプロンプトで指示します。プログラムは正規表現で`Action:`の行を取り出し、Wikipedia検索、自分のブログ検索、電卓などのツールを実行し、結果を`Observation:`として戻します。最大5周です。\n\n彼は、電卓がPythonの`eval()`を直接使うため非常に危険で、WebAssemblyなどのサンドボックスへ入れるべきだとも注意しています。実装全体もまだ不安定です。\n\n使うツールをモデルに決めさせると、安全性と堅牢性がエンジニアリング上の課題になります。論文ではあまり掘り下げられていない点です。\n\n## 結論\n\nReActの中心は、一つの変更です。**agentの行動空間へ「思考」を加え**、言語モデルが推論と行動を交互に行えるようにします。\n\n論文の証拠から、次のことが分かります。\n\n1. **調べるだけでは情報を使いこなせない**。同じ検索機能を使っても、ReActは両知識タスクでActを上回ります。\n2. **考えるだけではハルシネーションが起きやすい**。CoTの誤答では56%、ReActでは0%でした。ただしReActには推論エラーやループが多くなります。\n3. **組み合わせると最もよい**。確信度やステップ数でReActとCoT-SCを切り替えると、両タスクで最良のプロンプト成績になります。\n4. **ファインチューニングで効果が広がる**。3,000軌跡の学習後、小さいReActが大きいモデルのプロンプト手法を上回ります。\n\nこれらのプロンプト手法は、専用学習したシステムにはまだ大きく及ばず、Wikipediaツールも意図的に弱く作られています。\n\nそれでも、「考え、調べ、結果を見て、また考える」というループは残りました。後のcoding agentがファイルを検索してコマンドを実行する流れも、おおむね同じです。三つのWikipedia操作が、grep、ファイル読み取り、ターミナルへ変わったのです。\n","imageSizes":{"/content/papers/assets/ae2cd6d5c68df8887227719a0ac6c5dee8763fa902af5af73260fdc0f1ca81cc.png":{"width":1122,"height":489}}}
