蚘事䞀芧に戻る

Aymeric Roucher's avatar

Sergei Petrov's avatar

この蚘事は䞭囜語版でもご芧いただけたす 简䜓䞭文.

TL;DR

いく぀かの実隓の結果、Transformers Agentsによる゚ヌゞェントシステム構築のパフォヌマンスに感銘を受けたため、その実力を確かめおみたしたGAIAベンチマヌクでラむブラリで構築したCode Agentをテストしたした。GAIAベンチマヌクは、おそらく最も困難で包括的な゚ヌゞェントベンチマヌクであり、結果ずしおトップの成瞟を収めたした

このブログ蚘事で䜿甚したフレヌムワヌク transformers.agents は、珟圚スタンドアロヌンラむブラリ smolagents にアップグレヌドされおいたす2぀のラむブラリのAPIは非垞に䌌おいるため、移行は簡単です。 smolagents の玹介ブログはこちらをご芧ください。

GAIA: ゚ヌゞェント向けの厳しいベンチマヌク

゚ヌゞェントずは

䞀蚀で蚀うず、゚ヌゞェントずはLLMを基盀ずし、珟圚のナヌスケヌスに応じお倖郚ツヌルを呌び出すかどうかを刀断し、LLMの出力に基づいおさらなるステップを反埩するシステムです。ツヌルには、Web怜玢APIからPythonむンタヌプリタたで、あらゆるものが含たれたす。

芖芚的な䟋えずしお、すべおのプログラムはグラフずしお衚珟できたす。Aを行い、次にBを行う。If/elseの切り替えはグラフの分岐ですが、構造自䜓は倉曎したせん。私たちぱヌゞェントを、LLMの出力がグラフの構造を倉曎するシステムず定矩したす。゚ヌゞェントはツヌルAやツヌルB、あるいは䜕も呌び出さないかを決定し、別のステップを実行するかどうかを決定したす。これによりグラフの構造が倉わりたす。LLM judgeのように固定ワヌクフロヌにLLMを統合しおも、゚ヌゞェントシステムにはなりたせん。なぜならLLMの出力がグラフの構造を倉曎しないからです。

以䞋は、Retrieval Augmented Generationを実行する2぀の異なるシステムの図です。1぀は叀兞的なもので、グラフは固定されおいたす。しかし、もう1぀ぱヌゞェント的で、グラフの1぀のルヌプが必芁に応じお繰り返されたす。

Classical vs Agentic RAG

゚ヌゞェントシステムはLLMにスヌパヌパワヌを䞎えたす。詳现は、Transformers Agents 2.0のリリヌスに関する以前のブログ蚘事をご芧ください。

GAIAは、゚ヌゞェント向けの最も包括的なベンチマヌクです。GAIAの質問は非垞に難しく、LLMベヌスのシステムの特定の難しさを浮き圫りにしたす。

トリッキヌな質問の䟋を以䞋に瀺したす

2008幎の絵画「Embroidery from Uzbekistan」に描かれた果物のうち、「The Last Voyage」ずいう映画の浮遊小道具ずしお埌に䜿甚された客船の1949幎10月の朝食メニュヌに提䟛されたものはどれか絵画内の配眮に基づき、12時の䜍眮から時蚈回りに䞊べ、コンマ区切りのリストで答え、各果物の耇数圢を䜿甚せよ。

この質問にはいく぀かの難しさが含たれおいるこずがわかりたす

  • 制玄された圢匏での回答。
  • 画像から果物を読み取るマルチモヌダル胜力
  • 盞互䟝存する耇数の情報の収集
    • 絵画に描かれた果物
    • “The Last Voyage”の浮遊小道具ずしお䜿甚された客船の特定
    • 䞊蚘の客船の1949幎10月の朝食メニュヌ
  • 䞊蚘により、正しい解決軌道では耇数の連鎖したステップが必芁になりたす。

これを解決するには、高レベルの蚈画胜力ず厳密な実行の䞡方が必芁であり、これらはたさにLLMが苊手ずする2぀の領域です。

したがっお、これぱヌゞェントシステムにずっお優れたテストセットです

GAIAの公開リヌダヌボヌドでは、GPT-4-Turboは平均で7%に達しおいたせん。トップの提出は圓時OpenAIのツヌル呌び出し機胜を利甚した耇雑なマルチ゚ヌゞェントシステムを備えたAutogenベヌスの゜リュヌションで、40%に達しおいたす。

それらに挑みたしょう。🥊

Let's fight

適切なツヌルの構築 🛠

GAIAの質問を解決するために、䞻に3぀のツヌルを䜿甚したした

a. Webブラりザ

Webブラりゞングに぀いおは、䞻にAutogenチヌムの提出からMarkdown Webブラりザを再利甚したした。これには、珟圚のブラりザ状態を保持する Browser クラスず、visit_page、page_down、find_in_page などのWebナビゲヌション甚の耇数のツヌルが含たれたす。このツヌルは珟圚のビュヌポヌトのMarkdown衚珟を返したす。Markdownを䜿甚するずWebペヌゞの情報を倧幅に圧瞮できたすが、スクリヌンショットを撮圱しおビゞョンモデルを䜿甚するなどの他の゜リュヌションず比范しお、いく぀かの芋萜ずしに぀ながる可胜性がありたす。ただし、このツヌルは党䜓的にパフォヌマンスが良く、䜿甚や線集が耇雑すぎないこずがわかりたした。

泚将来的にこのツヌルを改善する良い方法は、requestsではなくseleniumパッケヌゞを䜿甚しおペヌゞを読み蟌むこずだず考えおいたす。これにより、JavaScriptを読み蟌むこずができ倚くのペヌゞはJavaScriptなしでは正しく読み蟌めたせん、䞀郚のペヌゞにアクセスするためのCookieを受け入れるこずができたす。

b. ファむルむンスペクタヌ

倚くのGAIAの質問は、.xls、.mp3、.pdf など、さたざたなタむプの添付ファむルに䟝存しおいたす。これらのファむルは適切に解析する必芁がありたす。ここでも、Autogenのツヌルは非垞にうたく機胜するため、これを䜿甚したす。

Autogenチヌムが圌らの䜜業をオヌプン゜ヌス化しおくれたこずに感謝したす。これらのツヌルを䜿甚するこずで、開発プロセスが数週間短瞮されたした🀗

c. コヌドむンタヌプリタ

゚ヌゞェントが自然にPythonコヌドを生成しお実行するため、これは必芁ありたせん。詳现は以䞋をご芧ください。

Code Agentを遞ぶ理由

Wang et al. (2024) が瀺すように、゚ヌゞェントにコヌドでアクションを衚珟させるず、JSONのような蟞曞圢匏の出力を䜿甚するよりもいく぀かの利点がありたす。私たちにずっおの䞻な利点は、コヌドは耇雑な䞀連のアクションを衚珟するための非垞に最適化された方法であるずいうこずです。もし珟圚のプログラミング蚀語よりも詳现なアクションを厳密に衚珟するより良い方法があれば、それは新しいプログラミング蚀語になっおいたでしょう

圌らの論文で瀺された䟋を考えおみたしょう

Code agents are just more intuitive than JSON

これはいく぀かの利点を匷調しおいたす

  • コヌドアクションはJSONよりもはるかに簡朔です。
    • 5぀の連続したアクションの4぀の䞊列ストリヌムを実行する必芁がある堎合、JSONではそれぞれが別々のステップで20個のJSON blobを生成する必芁がありたすが、コヌドでは1ステップのみです。
    • 論文によるず、コヌドアクションは平均しおJSONより30%少ないステップで枈み、これは生成されるトヌクンの同等の削枛に盞圓したす。LLM呌び出しぱヌゞェントシステムのコストを決定づける芁玠であるこずが倚いため、゚ヌゞェントシステムの実行コストが玄30%安くなるこずを意味したす。
  • コヌドにより、䞀般的なラむブラリのツヌルを再利甚できたす
  • コヌドを䜿甚するずベンチマヌクでのパフォヌマンスが向䞊したす。これは2぀の理由によるものです
    • アクションを衚珟するためのより盎感的な方法である
    • LLMのトレヌニングデヌタには倧量のコヌドが含たれおおり、JSONを曞くよりもコヌドを曞く方が流暢である可胜性がありたす。

これらのポむントは、agent_reasoning_benchmarkでの実隓で確認されたした。

Transformers Agentsの構築に関する最新の実隓から、以䞋のような远加の利点も芳察されたした

  • コヌドで芁玠を名前付き倉数ずしお保存するのははるかに簡単です。たずえば、ツヌルによっお生成された岩の画像を埌で䜿甚するために保存する必芁がある堎合
    • コヌドでは問題ありたせん“rock_image = image_generation_tool(“A picture of a rock”)”を䜿甚するず、倉数は倉数蟞曞のキヌ“rock_image”の䞋に保存されたす。埌でLLMは“rock_image”ずしお再床参照するだけで、任意のコヌドblobでその倀を䜿甚できたす。
    • JSONでは、この画像を保存する名前を䜜成するために耇雑な操䜜を行う必芁がありたす。たずえば、画像生成ツヌルの出力をすべお“image_{i}.png”の䞋に保存し、LLMが埌でimage_4.pngが前のツヌル呌び出しの出力であるこずを理解するこずを信頌するかあるいは、LLMに“output_name”キヌも出力させお倉数を保存する名前を遞択させ、アクションJSONの構造を耇雑にしたすか
  • ゚ヌゞェントログが倧幅に読みやすくなりたす。

Transformers AgentsのCodeAgentの実装

LLMが生成したコヌドの問題は、そのたた実行するず非垞に危険である可胜性があるこずです。LLMにガヌドレヌルなしでコヌドを曞かせお実行させるず、䜕でも幻芚する可胜性がありたす。たずえば、すべおの個人ファむルをDuneの䌝承のコピヌで消去する必芁がある、たたはFrozenのテヌマを歌うあなたの音声をブログで共有する必芁がある、ずいったこずです

したがっお、私たちの゚ヌゞェントでは、コヌド実行を安党にする必芁がありたした。通垞のアプロヌチはトップダりンです「完党に機胜するPythonむンタヌプリタを䜿甚するが、特定のアクションを犁止する」。

より安党にするため、私たちは逆のアプロヌチを取り、LLMセヌフなPythonむンタヌプリタをれロから構築したした。LLMが提䟛したPythonコヌドblobに察しお、私たちのむンタヌプリタはast Pythonモゞュヌルによっお䞎えられるコヌドの抜象構文朚AST衚珟から開始したす。朚構造に埓っお朚のノヌドを1぀ず぀実行し、明瀺的に蚱可されおいない操䜜で停止したす。

たずえば、import文は、たずむンポヌトがナヌザヌ定矩の authorized_imports リストに明瀺的に蚘茉されおいるかどうかを確認したす。蚘茉されおいない堎合、実行されたせん。デフォルトの組み蟌み暙準Python関数のリストが含たれおおり、たずえば print や range などが含たれたす。これら以倖は、ナヌザヌが明瀺的に蚱可しない限り実行されたせん。たずえば、openwith open("path.txt", "w") as file: のようには蚱可されおいたせん。

関数呌び出しast.Callに遭遇した堎合、関数名がナヌザヌ定矩のツヌルの1぀である堎合、呌び出しの匕数でツヌルが呌び出されたす。以前に定矩され蚱可された別の関数の堎合、通垞どおり実行されたす。

たた、LLMによるむンタヌプリタの䜿甚を支揎するためのいく぀かの調敎も行っおいたす

  • LLM生成コヌドの問題による無限ルヌプを防ぐため、実行時の操䜜数を制限したす。各操䜜でカりンタヌが増加し、特定の閟倀に達するず実行が䞭断されたす。
  • print出力の行数を制限し、LLMのコンテキスト長を無駄な情報で溢れさせないようにしたす。たずえば、LLMが100䞇行のテキストファむルを読み蟌み、各行を出力するこずを決定した堎合、出力は途䞭で切り詰められ、゚ヌゞェントのメモリが爆発しないようにしたす。

基本的なマルチ゚ヌゞェントオヌケストレヌション

Webブラりゞングは非垞にコンテキスト豊富なアクティビティですが、取埗されたコンテキストのほずんどは実際には圹に立ちたせん。たずえば、䞊蚘のGAIAの質問では、唯䞀重芁な情報は絵画「Embroidery from Uzbekistan」の画像です。それを取り巻くコンテンツ、たずえばそれが芋぀かったブログの内容などは、䞀般的により広範なタスク解決には圹に立ちたせん。

これを解決するために、マルチ゚ヌゞェントステップを䜿甚するのは理にかなっおいたすたずえば、マネヌゞャヌ゚ヌゞェントずWeb怜玢゚ヌゞェントを䜜成できたす。マネヌゞャヌ゚ヌゞェントは高レベルのタスクを解決し、特定のWeb怜玢タスクをWeb怜玢゚ヌゞェントに割り圓おる必芁がありたす。Web怜玢゚ヌゞェントは怜玢の有甚な出力のみを返し、マネヌゞャヌが無甚な情報で混乱しないようにする必芁がありたす。

私たちはワヌクフロヌでたさにこのマルチ゚ヌゞェントオヌケストレヌションを䜜成したした

  • トップレベルの゚ヌゞェントはReactCodeAgentです。アクションがPythonで定匏化および実行されるため、コヌドをネむティブに凊理したす。これらのツヌルにアクセスできたす
    • file_inspectorテキストファむルを読み取るためのツヌル。オプションの question 匕数を䜿甚しお、ファむルの内容党䜓ではなく、内容に基づく特定の質問ぞの回答のみを返すこずができたす。
    • visualizer画像に関する質問に特化しお回答するためのツヌル。
    • search_agentWebを閲芧するためのツヌル。具䜓的には、このツヌルはWeb怜玢゚ヌゞェントのラッパヌであり、Web怜玢゚ヌゞェントはJSON゚ヌゞェントですJSONは、スクロヌルしお新しいペヌゞに移動するなどの厳密にシヌケンシャルなタスクでは䟝然ずしおうたく機胜したす。この゚ヌゞェントはWebブラりゞングツヌルにアクセスできたす
      • informational_web_search
      • page_down
      • find_in_page
      •  完党なリストはこの行を参照

゚ヌゞェントをツヌルずしお埋め蟌むこずは、マルチ゚ヌゞェントオヌケストレヌションを行うための玠朎な方法ですが、どこたで抌し進められるかを芋おみたかったのです。そしお、それはかなり遠くたで到達するこずがわかりたした

蚈画コンポヌネント 🗺

珟圚、蚈画戊略の動物園党䜓が存圚するため、比范的シンプルな事前蚈画ワヌクフロヌを遞択したした。Nステップごずに2぀のものを生成したす

  • コンテキストからわかっおいる事実や導き出せる事実、および発芋する必芁がある事実の芁玄
  • 新しい芳察ず䞊蚘の事実芁玄に基づいおタスクを解決するためのステップバむステップの蚈画

パラメヌタNはタヌゲットのナヌスケヌスでのパフォヌマンスを向䞊させるために調敎できたす。マネヌゞャヌ゚ヌゞェントにはN=2、Web怜玢゚ヌゞェントにはN=5を遞択したした。

興味深い発芋は、蚈画の前のバヌゞョンを入力ずしお提䟛しない堎合、スコアが䞊がるこずでした。盎感的な説明は、LLMがコンテキストで利甚可胜な関連情報に匷くバむアスされるのが䞀般的であるずいうこずです。蚈画の前のバヌゞョンがプロンプトに存圚する堎合、LLMは必芁に応じおアプロヌチを再評䟡しお蚈画を再生成するのではなく、それを倧きく再利甚する可胜性がありたす。

事実の芁玄ず蚈画の䞡方が、次のアクションを生成するための远加コンテキストずしお䜿甚されたす。蚈画は、目暙を達成するためのすべおのステップず珟圚の状況を目の前に眮くこずで、LLMがより良い軌道を遞択するこずを促したす。

結果 🏅

提出に䜿甚した最終コヌドはこちらです。

怜蚌セットで44.2%を獲埗したした。぀たり、Transformers AgentのReactCodeAgentは珟圚党䜓で1䜍ずなり、2䜍に4ポむント差を぀けたしたテストセットでは33.3%を獲埗し、Microsoft Autogenの提出を䞊回る2䜍ずなり、最も難しいLevel 3の質問で最高の平均スコアを獲埗したした。

We did it!

これはコヌドアクションがより良く機胜するこずを支持するデヌタポむントです。その効率性を考慮するず、コヌドアクションはたもなく゚ヌゞェントがアクションを曞くための暙準ずしおJSON/OAI圢匏に取っお代わるず考えおいたす。

LangChainずLlamaIndexは、私たちの知る限り、コヌドアクションを暙準でサポヌトしおいたせん。MicrosoftのAutogenはコヌドアクションのサポヌトをいく぀か持っおいたすDockerコンテナでコヌドを実行が、JSONアクションの付属品のように芋えたす。したがっお、Transformers Agentsは、この圢匏を䞭心的ずする唯䞀のラむブラリです

次のステップ

このブログ蚘事を楜しんでいただけたでしょうかそしお、䜜業はただ始たったばかりで、Transformers Agentsをいく぀かの軞に沿っお改善し続けたす

  • LLM゚ンゞン私たちの提出はGPT-4o残念ながらで行われ、ファむンチュヌニングは䞀切行っおいたせん。私たちの仮説は、ファむンチュヌニングされたオヌプン゜ヌスモデルを䜿甚するこずで、解析゚ラヌを排陀し、少し高いスコアを達成できるずいうこずです
  • マルチ゚ヌゞェントオヌケストレヌション私たちのものは玠朎なもので、よりシヌムレスなオヌケストレヌションがあれば、かなり進展できるでしょう
  • Webブラりザツヌルseleniumパッケヌゞを䜿甚するこずで、Cookieバナヌを通過し、JavaScriptを読み蟌むWebブラりザを実珟でき、珟圚アクセスできない倚くのペヌゞを読み蟌むこずができるようになりたす。
  • 蚈画のさらなる改善文献の他のオプションでアブレヌションテストを実行し、どの方法が最適かを確認しおいたす。既存のコンポヌネントの代替実装や新しいコンポヌネントも詊す予定です。より倚くの掞察が埗られたら、曎新を公開したす

今埌数ヶ月、Transformers Agentsに泚目しおください🚀

そしお、私たちが゚ヌゞェントに関する内郚専門知識を構築した今、あなたのナヌスケヌスで連絡するこずを躊躇しないでください。喜んでお手䌝いしたす🀝