Reflexion論文
https://scrapbox.io/files/65ba6876a3a25800249dbc6e.png
論文情報
タイトル:. Reflexion: Language agents with verbal reinforcement learning.
発行日:2023年3月
著者:Noah Shinn, Federico Cassano, Edward Berman, Ashwin Gopinath, Karthik Narasimhan, Shunyu Yao
所属:Northeastern University
論文を読んで感じたこと
Self-Refineとの違いがよくわからなかった(単一生成推論タスクしかできないとは?)ので、ChatGPTに聞いてみた code:md
「単一生成推論タスク」とは、一つの推論や判断を生成するタスクを指します。言い換えると、単一の出力や回答を生み出す問題や状況に対処する際の課題です。このタイプのタスクでは、複数のステップや段階を経て意思決定がなされることはありません。代わりに、与えられた入力(例えば質問や情報)に基づいて、一つの結論や解答が生成されます。
・Self-Refine:この方法は、生成されたテキスト(たとえば回答や解決策)を自己評価し、改善するための反復的なフレームワークです。しかし、このアプローチは「単一生成推論タスク」に限定されていると述べられています。つまり、Self-Refineは一回の試行で一つの結論を導き出すタイプのタスクに対して有効ですが、より複雑で複数のステップや段階を必要とするタスクには適していない可能性があります。
・Reflexion:このアプローチは、エージェント(言語モデル)が過去の試行(たとえば失敗やフィードバック)から学び、その経験を記憶に取り入れて将来の意思決定を改善する方法です。Reflexionは、単一の出力だけでなく、複数のステップを経る複雑なタスクにも適用可能です。言葉による反省を通じて、エージェントは自身の行動や決定を振り返り、より良い結果を得るための学習を促進します。
要するに、Self-Refineは単一の結果を生み出すタスクに特化した自己評価と改善の方法ですが、Reflexionはより広範なタスクタイプに適用可能で、自己反省に基づいてより複雑な学習プロセスを行うアプローチです。
論文のポイント
有用なフィードバックを作ることは困難
どこが悪いか見つける工程と
どうやって改善すべきかの解決策の策定の2つが必要だから
Reflexionの仕組み
https://scrapbox.io/files/65bae4360b206e002429beee.png
https://scrapbox.io/files/65baf09b85d66b0026b84dea.png
概要
大規模言語モデル(LLM)は、目標指向エージェントとして外部環境(例:ゲーム、コンパイラ、API)とのやり取りにますます使用されています。しかし、これらの言語エージェントが試行錯誤から迅速かつ効率的に学ぶことは依然として困難で、従来の強化学習方法は多量のトレーニングサンプルと高価なモデルの微調整を必要とします。我々はReflexionという新しいフレームワークを提案します。これは言語エージェントを重みを更新するのではなく、言語フィードバックによって強化するものです。具体的には、Reflexionエージェントはタスクフィードバック信号について言葉で反省し、その後、独自の反省テキストをエピソードメモリバッファに保持し、次の試行でより良い意思決定を行うように誘導します。Reflexionは、様々なタイプ(スカラー値や自由形式の言語)およびフィードバック信号のソース(外部または内部でシミュレートされたもの)を組み込むことが可能であり、多様なタスク(逐次的意思決定、コーディング、言語推論)においてベースラインエージェントを大きく上回る成果を達成しています。例えば、ReflexionはHumanEvalコーディングベンチマークで91%のpass@1精度を達成し、80%を達成した最先端のGPT-4を上回りました。また、我々は異なるフィードバック信号、フィードバックの組み込み方法、エージェントタイプを使用した削減分析と分析研究を行い、それらがパフォーマンスにどのように影響するかについての洞察を提供します。 1 はじめに
最近の研究(例:ReAct、SayCan、Toolformer、HuggingGPT、AIエージェント、WebGPT)は、大規模言語モデル(LLM)コア上に構築された自律的意思決定エージェントの実現可能性を示しています。これらの方法はLLMを使用してテキストと「アクション」を生成し、API呼び出しで使用され、環境で実行されます。これらは膨大なパラメータを持つ巨大なモデルに依存しているため、これまでのアプローチはエージェントを教育する方法としてコンテキスト例を使用することに限られていました。なぜなら、勾配降下法などのより伝統的な最適化手法は大量の計算と時間を必要とするからです。 本論文では、エージェントが以前の失敗から学ぶのに役立つ言葉の強化を使用するReflexionという代替アプローチを提案します。Reflexionは環境からのバイナリまたはスカラーフィードバックをテキストの要約としての言語フィードバックに変換し、次のエピソードでLLMエージェントに追加のコンテキストとして追加します。この自己反省的フィードバックは「意味論的」勾配信号として機能し、エージェントに具体的な改善方向を提供し、以前の失敗から学び、タスクでより良いパフォーマンスを発揮するように助けます。これは、人間が複雑なタスクを数回の試行で習得する方法に似ています – 以前の失敗に反省して、次の試行のための改善された攻撃計画を形成することによります。例えば、Figure1では、Reflexionエージェントは試行錯誤と自己反省を通じて意思決定、プログラミング、推論タスクを解決するために自身の行動を最適化しています。
https://scrapbox.io/files/65ba6f3061837e0026d0b9a3.png
有用な反省的フィードバックを生成することは困難です。なぜなら、モデルが間違いを犯した場所を正確に理解する必要がある(例:クレジット割り当て問題)だけでなく、改善のための実行可能な洞察を含む要約を生成する能力も必要だからです。我々はこれを行うための3つの方法を探求しています – 単純なバイナリ環境フィードバック、一般的な失敗ケースに対する事前定義されたヒューリスティック、およびLLMを使用した自己評価(例:意思決定におけるバイナリ分類)または自己記述ユニットテスト(プログラミング)。すべての実装において、評価信号は長期記憶に格納可能な自然言語体験要約に増幅されます。
Reflexionは従来のRLアプローチ(例:ポリシーまたは価値ベースの学習)と比較していくつかの利点があります:
1) 軽量でLLMの微調整を必要としない
2) スカラーまたはベクトル報酬と比較して正確なクレジット割り当てを実行するのが困難な、より洗練されたフィードバック形式を可能にする
3) 以前の経験に対するより明確かつ解釈可能な形式のエピソード記憶を許可する
4) 将来のエピソードにおける行動のためのより明確なヒントを提供する。
同時に、LLMの自己評価能力(またはヒューリスティック)に依存しているという欠点があり、成功の正式な保証がないという欠点もあります。しかし、LLMの能力が向上するにつれて、このパラダイムが時間とともに改善されることを期待しています。
我々は(1)長い軌道にわたる連続的なアクション選択の意思決定タスク、(2)知識集約的な単一ステップ生成改善の推論タスク、(3)コンパイラやインタープリターなどの外部ツールを効果的に使用するようにエージェントを教えるプログラミングタスクに関する実験を行います。これら3つのタスクタイプすべてで、Reflexionエージェントはより良い意思決定者、推論者、プログラマーであることが観察されます。より具体的には、Reflexionエージェントは12回の反復学習ステップで22%の絶対的な改善を達成し、強力なベースラインアプローチを超えるAlfWorld タスク、HotPotQA の推論質問で20%、そしてHumanEvalのPythonプログラミングタスクで最大11%の改善を達成しました。
要約すると、我々の貢献は次のとおりです:
我々は、「言葉による」強化の新しいパラダイムであるReflexionを提案し、エージェントの記憶エンコーディングとLLMパラメータの選択としてポリシーをパラメータ化します。
我々はLLMにおける自己反省という新たな特性を探求し、実証的に自己反省がいくつかの試行で複雑なタスクを学ぶのに非常に有用であることを示します。
我々はLeetcodeHardGymを紹介します。これは、19のプログラミング言語で「ハードレベル」の40の挑戦的なLeetcodeの質問からなるコード生成RLジム環境です。
我々は、Reflexionが複数のタスクにおいて強力なベースラインを上回り、様々なコード生成ベンチマークで最先端の結果を達成することを示します。
2 関連研究
推論と意思決定:
Self-Refineは、自己評価を通じて自律的に生成を改善する反復フレームワークを用いています。これらの自己評価と自己改善ステップは、「この生成をよりポジティブな方法で書くにはどうすればよいか」といった与えられたタスク制約に基づいています。Self-Refineは効果的ですが、単一生成推論タスクに限られています。 Pryzantらは同様の意味論的プロンプト記述最適化を行っていますが、これも単一生成タスクに限られています。Paulらは、推論応答を改善するために軌跡内の中間フィードバックを提供するために批評モデルを微調整しています。Xieらは、自己評価コンポーネントのための先見の利点を使用してより効率的な意思決定検索戦略を実行するために行動に対する確率論的ビームサーチを使用しています。YoranらとNairらは、複数の生成に対して推論するために決定モデルを使用しています。Kimらは評価ステップなしに固定数のステップでリトライパターンを使用しています。Goodmanは前回の生成に最適化を提案する質的評価ステップを実行しています。
本論文では、これらの概念のいくつかが自己反省を通じて自己反省的な経験の永続的な記憶を構築するために強化され、エージェントが自身の間違いを識別し、その間違いから時間をかけて学ぶべき教訓を自己提案することを可能にすることを示しています。
プログラミング:
過去の研究と最近の研究は、テスト駆動開発またはコードデバッグプラクティスのバリエーションを使用しています。AlphaCodeは隠されたテストケースで生成物を評価します。CodeTは生成された関数実装を評価するために使用される自己生成ユニットテストを使用しています。Self-Debuggingは、コード実行環境からのフィードバックを使用して既存の実装を改善するためのデバッグコンポーネントを使用しています。CodeRLは、実行環境からのフィードバックを与えられたプログラムをデバッグするためにアクター-クリティックセットアップを使用するRLフレームワークで問題を設定しています。AlphaCode、Self-Debugging、CodeRLは、あまり複雑ではないプログラムバグの修正に効果的ですが、それらはpass@1の適格性を無効にする基本真実のテストケースに依存しており、エラー識別と実装改善のギャップを埋めるために自己反省を使用していません。CodeTは隠れたテストケースにアクセスしていませんが、コードの書き方を改善するための自己学習ステップを実装していません。
3 Reflexion:言葉による反省を通じた強化
我々はReflexionのためのモジュール式定式化を開発し、3つの異なるモデルを利用しています:テキストとアクションを生成するアクター(Ma)、生成された出力を評価する評価モデル(Me)、言葉による強化手がかりを生成する自己反省モデル(Msr)。これらのモデルについて詳細な説明を提供し、次にReflexionフレームワーク内でのそれらの協力的機能を明確にします。
アクター:
アクターは、状態観測に基づいて必要なテキストとアクションを生成するように特別に促された大規模言語モデル(LLM)に基づいて構築されています。伝統的なポリシーベースのRLセットアップに類似して、我々は現在のポリシーπθで時刻tでアクションまたは生成atをサンプリングし、環境から観測otを受け取ります。我々は、CoT (Chain-of-Thought)やReActなど、さまざまなアクターモデルを探索しています。これらの多様な生成モデルにより、Reflexionフレームワーク内のテキストとアクション生成のさまざまな側面を探索し、そのパフォーマンスと効果性について貴重な洞察を提供しています。さらに、我々は、このエージェントに追加のコンテキストを提供するメモリコンポーネントmemも追加しています。この適応はBrooksらによって提案されたコンテキスト学習を使用するポリシー反復アプローチに触発されました。これがどのように充填されるかの詳細は以下に提供されています。 評価者:
Reflexionフレームワークの評価コンポーネントは、アクターが生成した出力の品質を評価する上で重要な役割を果たします。これは生成された軌跡を入力として受け取り、与えられたタスクコンテキスト内でそのパフォーマンスを反映する報酬スコアを計算します。意味論的空間に適用する効果的な価値と報酬関数を定義することは困難ですので、我々は評価モデルのいくつかのバリエーションを調査しています。推論タスクのために、我々は生成された出力が期待される解決策と密接に一致することを確保するために、正確な一致(EM)評価に基づく報酬関数を探求しています。
意思決定タスクでは、特定の評価基準に合わせた事前定義されたヒューリスティック関数を使用しています。さらに、意思決定とプログラミングタスクのための報酬を生成するLLM自体の異なるインスタンスを使用することも実験しています。この多面的な評価者設計アプローチにより、生成された出力を評価するさまざまな戦略を調査し、それらの効果性とタスクの範囲にわたる適合性についての洞察を提供しています。
自己反省:
LLMとしてインスタンス化された自己反省モデルは、将来の試行に対する貴重なフィードバックを提供するために言葉による自己反省を生成することにより、Reflexionフレームワーク内で重要な役割を果たします。成功/失敗などのスパースな報酬信号、現在の軌跡、および永続的なメモリmemを考慮に入れて、自己反省モデルは洗練された特定のフィードバックを生成します。このフィードバックはスカラー報酬よりも情報が豊富で、エージェントのメモリ(mem)に保存されます。例えば、複数ステップの意思決定タスクにおいて、エージェントが失敗信号を受け取ると、特定のアクションaiが後続の誤ったアクションai+1およびai+2につながったと推測することができます。その後、エージェントは異なるアクションa′iを取るべきだったと言葉で述べ、それが結果としてa′i+1およびa′i+2につながったであろうとして、この経験をその記憶に保存することができます。その後の試行で、エージェントは過去の経験を活用して時刻tでの意思決定アプローチを適応させ、アクションa′iを選択することができます。この試行、エラー、自己反省、永続的な記憶の反復プロセスにより、エージェントは情報豊富なフィードバック信号を活用してさまざまな環境での意思決定能力を迅速に向上させることができます。
記憶
Reflexionプロセスの中核となる要素は、短期記憶と長期記憶の概念です。推論時に、アクターは人間が細かい最近の詳細を記憶すると同時に長期記憶から重要な経験を思い出すように、短期記憶と長期記憶に基づいて判断を行います。RLセットアップでは、軌跡履歴が短期記憶として機能し、自己反省モデルからの出力が長期記憶に保存されます。これら2つの記憶コンポーネントは、他のLLMアクション選択作品と比べてReflexionエージェントの主な利点である、特定でありながら複数の試行から学んだ教訓に影響されるコンテキストを提供するために協力します。
Reflexionプロセス:
Reflexionは、1つの反復最適化プロセスとして定式化されています。最初の試行では、アクターは環境との相互作用により軌跡τ0を生成します。次に評価者が、rt = Me(τ0)として計算されるスコアr0を生成します。rtは、タスク固有のパフォーマンスが向上するにつれて改善する試行tのスカラー報酬です。最初の試行後、LLMによる改善に使用できるフィードバック形式にr0を増幅するために、自己反省モデルが{τ0, r0}のセットを分析して、メモリmemに保存される要約sr0を生成します。srtは、試行tのための言葉による経験フィードバックです。アクター、評価者、自己反省モデルはループで連携して作業し、評価者がτtが正しいと判断するまで続きます。3で述べられているように、Reflexionのメモリコンポーネントはその効果性にとって重要です。各試行tの後、srtがmemに追加されます。実際には、最大コンテキストLLMの制限に従って、保存される経験の最大数Ω(通常は1-3に設定)によってmemを制限します。
https://scrapbox.io/files/65bae4360b206e002429beee.png
4 実験
我々は、意思決定、推論、コード生成タスクにおいて様々な自然言語RLセットアップを評価します。具体的には、HotPotQAでの検索ベースの質問応答、AlfWorldでの一般的な家庭環境でのマルチステップタスク、HumanEval、MBPP、そして新しいベンチマークであるLeetcodeHardでのインタープリターとコンパイラを使用したコンテストライクな環境でのコードライティングタスクにエージェントに挑戦します。特に注目すべきは、ReflexionがAlfWorldで22%、HotPotQAで20%、HumanEvalで11%の強力なベースラインのパフォーマンスを向上させることです。
4.1 逐次的意思決定:ALFWorld
AlfWorldは、TextWorldに基づいてインタラクティブな環境でマルチステップタスクを解決するようエージェントに挑戦するテキストベースの環境のスイートです。Yaoらに従って、我々は6つの異なるタスクで134のAlfWorld環境でエージェントを実行し、隠されたオブジェクトを見つける(例:引き出しでのスパチュラの発見)、オブジェクトを移動する(例:ナイフをまな板に移動する)、他のオブジェクトでオブジェクトを操作する(例:トマトを冷蔵庫で冷やす)などが含まれます。我々は、Yaoらが長い軌跡意思決定で明確な中間思考を使用して成功を示したReActをアクションジェネレーターとして使用します。AlfWorldタスクは、環境がタスクが完了したかどうかのみを通知できるため、自己評価ステップを自然に必要とします。完全に自律的な行動を達成するために、我々は2つの自己評価技術を実装します:LLMを使用した自然言語分類と手書きのヒューリスティック。ヒューリスティックはシンプルです:エージェントが同じアクションを実行し、3回以上のサイクルで同じ反応を受け取るか、または現在の環境でのアクションの数が30を超える(非効率的な計画)場合、自己反省します。ベースライン実行では、自己反省が示唆されると、自己反省プロセスをスキップし、環境をリセットし、新しい試行を開始します。Reflexion実行では、エージェントは自己反省を使用して自分の間違いを見つけ、メモリを更新し、環境をリセットして新しい試行を開始します。最大限度を超える非常に長いプロンプトウィンドウを避けるために、我々はエージェントのメモリを最後の3つの自己反省(経験)に切り詰めます。 文法エラーを避けるために、我々はエージェントに2つのドメイン固有の数回ショット軌跡を提供します。我々はYaoらと同じ数回ショット軌跡例をGPT-3でLLMとして使用します。AlfWorldタスク、ReAct数回ショットプロンプト、Reflexion例は付録に含まれています。 https://scrapbox.io/files/65baef9b43e1d5002554dbea.png
結果:
ReAct + Reflexionは、幻覚と非効率的な計画を検出するためのシンプルなヒューリスティックを使用して、134のタスク中130を完了することで、ReActを大幅に上回りました。さらに、ReAct + Reflexionは、12回の連続試行で追加のタスクを解決する方法を学びます。ReActのみのアプローチでは、パフォーマンスの向上が試行6と7の間で停滞していることがわかります。
https://scrapbox.io/files/65baf09b85d66b0026b84dea.png
分析:
ベースラインが失敗したAlfWorld軌跡での一般的なエラーは、エージェントがアイテムを所持していると思い込んでいるが実際には所持していない場合です。エージェントは長い軌跡でいくつかのアクションを実行し、その間違いを見つけるためにアクションをバックトラックすることができません。Reflexionは自己反省を使用して長く失敗した軌跡を関連する経験に蒸留し、将来の「自己ヒント」として使用することで、これらのケースをほぼすべて排除します。AlfWorldでエージェントを助ける長期記憶の2つの主要なケースは次のとおりです:1) 長い軌跡での早期の間違いが簡単に特定されます。エージェントは新しいアクション選択または新しい長期計画を提案できます。2) アイテムをチェックするための多すぎる表面/コンテナがあります。エージェントは、複数の試行にわたる経験メモリを活用して部屋を徹底的に検索することができます。3では、学習曲線が複数の経験にわたる学習プロセスを示唆しており、エージェントが1と2のケースをうまくバランスさせていることが、最初の2回の試行の間の即時の改善のスパイク、次の11回の試行でほぼ完璧なパフォーマンスへの安定した増加によって示されています。一方、3では、ReActのみのエージェントが幻覚率22%で収束し、長期回復の兆候が見られないことが示されています。
https://scrapbox.io/files/65baf28c78b9f90025b8aff2.png
4.2 推論:HotpotQA
HotpotQAは、Wikipediaベースのデータセットで、113kの質問と回答のペアを含み、エージェントにいくつかのサポートドキュメントを解析し、推論することを求めます。推論能力のみの改善をテストするために、我々はステップバイステップのQ → AおよびQ, Cgt → Aの実装でReflexion + Chain-of-Thought (CoT) を実装しています。ここでQは質問、Cgtはデータセットからの真実のコンテキスト、Aは最終回答です。CoTはマルチステップ意思決定技術ではないため、提供されたテキストの大部分にわたる推論行動を分離するために、我々はCgtをエージェントに与えます。包括的な質問と回答能力をテストするために、推論とアクション選択が必要とされる場合、我々はWikipedia APIを使用して関連するコンテキストを取得し、ステップバイステップの明示的な思考を使用して回答を推測することができるReflexion + ReActエージェントを実装しています。CoTの実装では、6回ショットプロンプトを使用し、ReActでは2回ショットプロンプトを、自己反省では2回ショットプロンプトを使用しています。すべての例は付録にあります。
https://scrapbox.io/files/65baf2e03a20a50024c6bf5a.png
自然言語回答の堅牢な評価はNLPにおける長年の問題です。したがって、試行の間、我々は環境を使用してエージェントにバイナリ成功信号を与えるために、正確な一致回答の評価を使用します。各試行の後、バイナリ信号を増幅するために自己反省ループが使用されます。これは、AlfWorldの意思決定セットアップ4.1で3つの経験のメモリサイズと同様です。 結果:
Reflexionは、複数の学習ステップにわたって、すべてのベースラインアプローチを大幅なマージンで上回ります。さらに、ReActのみ、CoTのみ、およびCoT(GT)のみの実装は、いかなるタスクにおいても確率的に改善することができませんでした。つまり、いずれのベースラインアプローチからも最初の試行で失敗したタスクは、温度0.7を使用して後続の試行で解決することができませんでした。Reflexionの実行では、エージェントが経験を集め、特定のタスクで3回連続して失敗するまで失敗したタスクで再試行を許可しました。当然のことながら、CoT(GT)は、質問の真実のコンテキストにアクセスできたため、より高い正解率を達成しました。しかし、CoT(GT)エージェントは39%の質問に対して正しい回答を推測することができませんでしたが、Reflexionはエージェントが真実の回答にアクセスすることなく、その間違いを正して正確さを14%向上させるのに役立ちます。
https://scrapbox.io/files/65baf3363f77d2002698379f.png
分析:
我々は、CoT(GT)をベースラインアプローチとして使用して、推論における自己反省ステップの利点を分離するために除去実験を行います。CoT(GT)は、提供された真実のコンテキストでChain-of-Thought推論を使用し、長いコンテキストでの推論能力をテストします。次に、最も最近の軌跡を含むことによりエピソード記憶(EPM)の要素を追加します。Reflexionエージェントについては、最終的なパスとして標準的な自己反省ステップを実装します。直感的に、エージェントが最初の人で書かれた言語を使用して言葉による説明を使用することによって、反復的により効果的に学習しているかどうかをテストします。4は、自己反省がエピソード記憶学習の利点に対して8%の絶対的なブーストをもたらすことで学習を改善することを示しています。この結果は、自己反省によって導かれる洗練アプローチが、洗練のみのアプローチよりも効果的であるという主張を支持しています。
4.3 プログラミング
我々は、MBPP、HumanEval、そして我々の新しいデータセットLeetcodeHardGymでPythonおよびRustコードライティングにおけるベースラインとReflexionアプローチを評価します。MBPPとHumanEvalは、自然言語の説明が与えられた関数本体の生成精度を測定します。我々は、MultiPL-Eというベンチマーク言語コンパイラを使用して、HumanEvalとMBPPのサブセットをRust言語に翻訳します。MultiPL-Eは、Pythonベンチマークの質問を他の18言語に翻訳するために使用できる小さなコンパイラのコレクションです。我々は、Reflexion実装がコード生成において言語に依存せず、解釈された言語とコンパイルされた言語の両方に使用できることを示すために、Rustコード生成の実験を含めています。最後に、我々は新しいベンチマーク、LeetcodeHardGymを紹介します。これは、GPT-4の事前トレーニングカットオフ日である2022年10月8日以降にリリースされた40のLeetcodeハード評価の質問を含むインタラクティブなプログラミングジムです。 プログラミングのタスクは、自己生成されたユニットテストスイートなどのより具体的な自己評価プラクティスを使用する機会を提供します。したがって、我々のReflexionベースのプログラミングタスク実装は、pass@1の正確さの報告が可能です。テストスイートを生成するために、我々はChain-of-Thoughtプロンプトを使用して、対応する自然言語の説明を持つ多様で広範なテストを生成します。次に、提案された各テストの有効な抽象構文木(AST)を構築しようとして、文法的に有効なテスト文をフィルタリングします。最後に、生成されたユニットテストのコレクションからn個のテストをサンプリングしてテストスイートTを生成し、{t0, t1, ..., tn}として示します。我々は最大6つのユニットテストにnを設定します。ユニットテストスイートコンポーネント以外に、Reflexionプログラミングエージェントの学習ループのセットアップは、推論および意思決定エージェントと同一で、最大1つの経験のメモリ制限があります。
結果:Reflexionは、すべてのベンチマークでPythonとRustのすべてのベースライン精度を上回り、MBPP Python 1を除くすべてのベンチマークで新しい最先端の基準を設定しました。さらに、MBPP PythonにおけるReflexionの劣ったパフォーマンスについて調査を行います。
分析:自己反省を行うコード生成エージェントは、多様で包括的なテストを書く能力に制約されています。したがって、モデルが不安定なテストスイートを生成した場合、すべてのテストが誤ったソリューションで合格し、コード完了に対して偽陽性ラベルが付けられる可能性があります。一方、モデルが誤って記述されたテストスイートを生成した場合、一部のテストが正しいソリューションで失敗し、偽陰性のコード完了に基づいて自己反省生成が行われる可能性があります。Reflexionの実装を考慮すると、偽陰性は偽陽性よりも好ましいとされます。なぜなら、エージェントは自己反省を使用して誤ったテストを特定し、元のコード完了をそのまま維持するように自身に促すことができるからです。一方、無効なテストスイートが偽陽性完了(すべての内部テストケースが合格しているが、実装が誤っている)を返す場合、エージェントは無効な提出物を早期に報告します。2では、pass@1の精度を超えたパフォーマンスを分析するために、さまざまな条件が測定されています。以前、我々はMBPP PythonでベースラインGPT-4に対するReflexionの劣ったパフォーマンスを示しました。2では、内部テスト実行によって生成された偽陽性ラベルの顕著な不一致、すなわち提出物がすべてのユニットテストに合格している場合に失敗する確率を観察します。HumanEvalとMBPP Pythonのベースラインpass@1精度は、それぞれ82%と80%で比較的似ています。しかし、MBPP Pythonの偽陽性テスト実行率は16.3%で、HumanEval Pythonはわずか1.4%であり、全体的な精度は91%です。除去研究:我々はReflexionのテスト生成および自己反省の複合アプローチを、HumanEval Rustの最も難しい50問のサブセットでテストします。我々のRustコンパイラ環境は詳細なエラーログと有用なデバッグヒントを提供するため、妥協されたアプローチにとって良い実験場となります。最初に、内部テスト生成および実行ステップを省略し、現在の実装からのガイダンスなしに自己反省するエージェントをテストします。3は52%対60%(ベースライン)の精度を示し、これはエージェントがユニットテストなしでは現在の実装が正しいかどうかを判断できないことを示唆しています。したがって、エージェントは実装に有害な編集を行いながら、早期に戻るオプションなしで実行のすべての反復に参加する必要があります。
次に、失敗したユニットテストスイートの評価に続く自然言語の説明ステップを省略することによって自己反省の貢献をテストします。直感的には、これはエージェントに、すべての失敗したユニットテストにわたってエラーの特定と実装の改善というタスクを組み合わせることに挑戦します。興味深いことに、妥協されたエージェントはベースライン実行よりもパフォーマンスを向上させません。我々は、テスト生成およびコードコンパイルステップが構文および論理エラーを検出できることを観察しましたが、実装の修正はこれらの指標を反映していません。これらの実証的な結果は、自己反省なしに盲目的な試行錯誤デバッグ技術を提案する最近のいくつかの研究が、Rustでの複雑なプログラムの作成などのより困難なタスクには効果的でないことを示唆しています。
5 制限
Reflexionの核心は、自然言語を使用してポリシー最適化を行う最適化技術です。ポリシー最適化は経験を通じてアクション選択を改善する強力なアプローチですが、最適でない局所的な最小解に陥る可能性がまだあります。この研究では、最大容量を持つスライディングウィンドウに長期記憶を制限していますが、将来的にはReflexionのメモリコンポーネントを、ベクトル埋め込みデータベースや従来のSQLデータベースなどのより高度な構造で拡張することを奨励します。コード生成に特有の問題として、テスト駆動開発における入出力マッピングを正確に指定する多くの実用的な制限があります。これには、非決定論的なジェネレーター関数、APIと対話する不純な関数、ハードウェア仕様によって出力が変化する関数、または予測が困難な並列または同時動作を起動する関数が含まれます。
6 広範囲にわたる影響
大規模言語モデルは、インターネット、ソフトウェア、ロボティクスなどの外部環境および人間との相互作用にますます使用されています。我々の研究はこれらのエージェントをより大きな自動化と作業効率に向けて強化し、エンパワーメントする可能性がありますが、これらのエージェントが誤用された場合のリスクも増幅します。我々は、この研究方向には安全性と倫理的配慮においてさらなる努力が必要であると考えています。
一方、強化学習は、解釈可能性と整合性が困難であるブラックボックスポリシーと最適化セットアップに苦しんできました。我々が提案する「言葉による」強化学習は、これらの問題のいくつかに対処し、自律エージェントをより解釈可能で診断可能にする可能性があります。例えば、人間にとって理解が難しいツールの使用において、自己反省を監視してツールを使用する前に適切な意図を確認することができます。
7 結論
本研究では、過去の間違いから学ぶようにエージェントを教えるために言葉による強化を活用するアプローチであるReflexionを提示します。我々は実証的に、Reflexionエージェントが自己反省を利用することで、現在広く使用されている意思決定アプローチを大幅に上回ることを示しています。将来の研究では、Reflexionを使用して、従来のRL設定で徹底的に研究されているより高度な技術、例えば自然言語での価値学習やオフポリシー探索技術を採用することができます。