「ReAct:言語モデルにおける推論と行動の相乗効果」(Yao et al., 2022)で導入されました。これはプロンプトの構成方法を根本的に変えました。それ以前は、主に以下の2つの極端な例が見られました。
・推論のみ(CoT):モデルは問題を徹底的に考えますが、リアルタイムデータにアクセスできません。事前学習済みの重みのみに依存するため、現在の出来事に関する幻覚に陥ります。
・動作のみ:モデルはツールを呼び出すことができます (また、呼び出すことが許可されています) が、中間ステップが意味を成すかどうかを確認せずに API 呼び出しを連鎖させるなど、盲目的に呼び出します。
ReAct は、シンプルだが重要な変更を提案します。2つをインターリーブします。
トライステートループ
ReAct パターンは、モデルを次の 3 つの特定の状態の連続ループに強制します。1.思考:エージェントは現在の状態を分析し、今後の行動計画を書き留めます。これは先ほど説明したCoTスクラッチパッドです。
2.アクション:エージェントは、考えに基づいて外部ツール (search_googleまたは) を呼び出すための特定のコマンドを生成します。calc_math
3.観察(クリティカル):モデルが一時停止します。システムはアクション(コードの実行またはAPIへのアクセス)を実行し、出力を観察としてプロンプトにフィードバックします。
このフィードバックループにより、モデルは自己修正を行うことができます。API呼び出しが失敗したり、予期しないデータが返されたりした場合、次の「思考」ステップでエージェントは結果を偽造するのではなく、再試行することができます。
例
プロンプト: 「Amazon の創設者と Linux の創設者ではどちらが年上ですか?」・思考: Amazonの創設者を特定し、生年月日を調べる必要があります。行動: Search[“founder of Amazon”] 観察:ジェフ・ベゾスはAmazonの創設者です。
・思考:ジェフ・ベゾスの誕生日を調べたい。行動: Search[“Jeff Bezos date of birth”] 観察: 1964年1月12日。
・思考: Linuxの創始者を特定し、生年月日を調べる必要があります。行動: Search[“founder of Linux”] 観察: Linus TorvaldsはLinuxの創始者です。
・思考:リーナス・トーバルズの誕生日を調べてみよう。行動:Search[“Linus Torvalds birthdate”] 観察:1969年12月28日。
・考え: 1964年は1969年より前なので、ジェフ・ベゾスの方が年上です。行動: Finish[“Jeff Bezos is older”]
ここで何が起こったか:モデルは事前に答えを知らず、最初に誰を探すべきかも知りませんでした。最初のステップで得た観察情報を基に、2番目のステップの思考を導き出しました。