![見出し画像](https://assets.st-note.com/production/uploads/images/168552885/rectangle_large_type_2_b569c28bdd4331a76ba6e371ae43a3a9.jpeg?width=1200)
マルチエージェントAI: Smolagentsによるシンプルなコード実装
6,778 文字
皆さんこんにちは。クリスマスの飾り付けがまだ片付いていないと思われるかもしれませんが、少し説明させてください。
私はここでコーヒーを飲みながら、パデュー大学数学科のある論文を読んでいます。彼らは強化された数学的推論のための特殊なトレーニングを発見したと言っています。言語的理解と数学的推論スキルの両方を必要とする複雑な問題を解決したいと主張しています。そして新しい方法論を見つけました。
通常なら私はこれを読んで理解しようとし、それからYouTubeビデオを作ろうとするでしょう。でも1月2日の今日、皆さんにもっと良いものを届けたい、私自身にもそうあるべきだと思いました。これを理解してみましょう。なぜなら、これを任意のLLMに投げ込んで「要約して」「主なポイントを教えて」「方法論を説明して」と言うことはできます。ビデオで見る必要はありません。既にこれについての自動生成されたYouTubeビデオもあります。皆さんにはもっと良いものを届けたい。一緒に見てみましょう。実際に試してみましょう。
新年なので、前回のビデオで紹介した新しいコードベースのエージェント設定と比較してみます。Hugging Faceのsmalagentを使えば、コードエージェントを定義するのにツールすら必要ありません。ただモデル(Llama 3)を与え、追加で認可されたインポートを指定するだけです。ここには数学関数用のmatモデルとPythonモデルがあります。すると突然、コードエージェントはAIシステムとしてあらゆる数学関数を実行し、絶対に正しい答えを提供できるようになります。
なぜなら、これはコード化されているからです。LLMが数学を推測しようとするのではなく、単にここに接続された計算機なのです。朝からこれを見ていて、私は考えました。LLMがあって、ここでは素晴らしい数学科の人々が、LLMを見て新しい数学的な言語と区別のパターンを学習させようとしています。でも彼らが得るのは何でしょう?単に教師あり微調整されたLLMで、数学的パターンを学習し、おそらく発見しただけです。
コアとなる知識を抽象化することはできていません。ただパターンを学習しただけです。前回のビデオで私たちが行ったのは、新しいAIエージェントを構築することでした。全く新しい技術です。このコードエージェントに、Pythonの数学ライブラリやPythonインタープリターを追加して、単純に結果を計算できることをお見せしました。
今私が持っているのはAIエージェントで、このAIエージェントのコアは、たとえばQanのKoda 2.5のような非常に強力なLLMです。数学的計算機能を備えたエージェントがあるのです。その違いがお分かりでしょうか。
皆さんにもっと良いものを届けたいと言ったとき、私たち全員がより良いLLMに値すると考えています。巨大な一枚岩のLLMを作り、パターン認識システムにすべてを詰め込もうとするのは意味があるのでしょうか?なぜ賢いエージェントを作って、単純に数学的計算機や、PythonのmatライブラリやC++ライブラリを接続し、ほとんどハルシネーションを起こさないようにしないのでしょうか。
これがどうして可能なのかと思われるかもしれません。私は大学で理論物理の近似計算をPythonでコーディングし、大学を卒業することができました。驚くべきことです。今何が起きているのか分かりますか?私たちは今、多かれ少なかれ同じことができる単純なネットワークのAIシステムをコーディングしようとしています。
私たちが達成したいのは、Gemini 2.0やSonet 4o、または好きなものを選んでください。オープンシステム用に提供するものは何でも、同じことができるようになることです。しかし、これを抽象的に見ると、これがLLMで、これは単なるツールであり、将来のAIのためのツールであることが分かります。
このシステムをパターン認識システムで内在的に学習させることに意味があるのでしょうか、それともコード生成でできることをすべて学習させることには意味がないのでしょうか。それを見てみましょう。
前回のビデオを覚えていますか?LLMについて話していたとき、コードエージェントにはステップバイステップの手順があり、思考の連鎖を思い出してください。REACTフレームワークの推論と行動に従います。エージェントは、つまりエージェントのコアLLMは、ステップバイステップで考え始めます。コードを生成することで行動します。行動は積極的な行為で、環境との相互作用かもしれません。コードを生成し、Pythonインタープリター環境でのコードの結果を観察し、ユーザーのタスクが完了するまで戦略を洗練させます。
そして2つ目のクラス、ツール呼び出しエージェントをお見せしました。これが私たちが古典的なエージェントと呼ぶものです。最初のものはPythonコードで行いましたが、ツール呼び出しエージェントは、すべてのAPI接続、すべてのデータベースクエリ、構造化または半構造化された入出力を持つすべてのものに接続します。JSONライクなツール呼び出しがあります。
これがコードだと言いました。これがコード例です。必要なものはこれだけです。Hugging Faceのsmalagentsがあり、ツール呼び出しエージェントがあり、事前定義されたツールまたは自分で構築したツールがあります。そしてモデルを使います。これがLLMです。ツール呼び出しエージェントには、API呼び出しや関数呼び出しで非常に優れたパフォーマンスを発揮するLLMを使用します。Hugging Faceから好きなLLMを選んでください。
システムプロンプトがあり、これは可能なツールの説明に直接接続されています。これだけです。17分のところで、ツール呼び出しエージェントはLLMの能力を活用して、動的に適切なツールを選択し、単純にJSON形式でツール呼び出しを形成すると説明しました。
そして違いをお見せしました。コードエージェントがPythonコードとPython実行で計算やコードベースのタスクを実行し、科学をする場合は多くの数値計算やコンピューターシミュレーションが必要で、コードエージェントがあれば、Pythonのエコシステムにあるものはすべて単純に統合でき、関数呼び出しの問題は一切ありません。
古典的なツール呼び出しエージェントは、データベース構造があってそれを呼び出したい場合に使います。smalagentsを使えば、これを実装する新しい方法があります。次のステップに進むとすると、大きな一枚岩のシステムを持つか、相互作用すべき複数のエージェントシステムを定義するかを考えることができます。
これは二元論ではありませんが、一枚岩のAIソリューションをいつ適用するか、あるいは新しい複数のAIエージェントの構成でどこまで行けるのか、そしてそれらのエージェントがどのように行動し相互作用を学習するのかを考える必要があります。
そして、これを複数ステップのエージェント構成でどのようにコーディングするのか。各ステップで、エージェント内のコアLLMはアクションを書くことができ、このコードエージェントを見ると、私たちはこれをPythonで行っています。他のものについて、OpenAIとの違い、Langchainとの違い、その他との違いは何かと質問されました。
素晴らしい質問です。アクションを書き出す一般的な形式は、OpenAI、Anthropic、その他多くのAIシステムプロバイダーによって、ツール名と引数をJSONとして書き出すさまざまな形式があります。Hugging Faceはドキュメントで、もしこれが最善のものであれば、JSONが最高のプログラミング言語になり、プログラミングは地獄になるだろうと述べています。これはHugging Faceからの引用で、私のアイデアではありませんが、これを読んで微笑まずにはいられませんでした。
科学的な裏付けが欲しければ、こちらに素晴らしい研究があります。実行可能なコードアクションがより良いLLMエージェントを引き出すと言っており、まさにこのトピックについて調べています。LLMエージェントのアクションを統合するために実行可能なPythonコードを使用することを提案しています。統一されたアクション空間を構築し、これをcode actと呼んでいます。
これがHugging Faceの新しいsmalagentの先駆けとなる素晴らしいアイデアであることが分かります。既にPythonインタープリターと統合されており、code actはコードアクションを実行し、事前のアクションを具体化できます。これがOpenAI、Anthropic、その他の実装形式よりも優れていることを示しています。
これらが科学的評価や科学論文からの洞察であり、より良く、より速く、より安価になるのに役立っています。Hugging Faceにはsmalagentの概念的なガイド、エージェントへの入門があり、違いが正確に何なのかを示しています。いくつかの質問があったので、これが理解の助けになるかもしれません。
古典的なものがこれです。新しいものが優れている理由は何でしょうか。古典的なテキストからJSONへのLLMエージェントがJSONをアクションとして使用する場合と、新しいsmalagentでcode actを使用するLLMエージェントがコードをアクションとして使用する場合を比較すると、応答に必要なアクションが大幅に少なくなっていることが分かります。
古典的なJSONでは、各行でハルシネーションアクションが発生する可能性がありますが、これは単なるコードです。どれほど単純なことか分かります。もちろん、私たちはマルチエージェントシステムに焦点を当てており、複雑な推論タスクに進みたい、本物のものを持ちたいと考えています。
smalagentの基本クラスだけでなく、マネージドエージェントについても話しました。9分7秒のところで言及し、多くの人が「マネージドエージェントについていつ説明したのか」と聞いてきました。完全なビデオを見ていない人もいるからですね。もちろん、私は役に立ちたいと思います。
ウェブエージェントを構築しました。これは単にGoogleのようなものです。DuckDuckGo検索ツールがあり、インターネットを検索します。この新しいAIエージェントシステムでこれをどのように行うのか。お見せしたように、Hugging Face APIモデルを使用し、好きなHugging Faceモデルをモデルとして選択し、4行のコードでウェブエージェントを構築します。
ツール呼び出しエージェントが必要です。DuckDuckGo検索サーバーはローカルネットワークの外にあるからです。ウェブページを訪問するなど、何でも好きなことができます。ツール呼び出しエージェントを定義し、ツールを定義し、LLMを定義します。コアには常にAIインテリジェンスとしてLLMがあり、反復回数を定義します。これだけです。
マルチエージェントシステムに進みたい場合、どうするのかと聞かれます。単純です。このエージェント、インターネット検索用のツール呼び出しエージェントを、他のエージェントが呼び出せるようにマネージドエージェントにラップするだけです。階層構造に進む場合は、マネージャーエージェントが呼び出せるようにします。オフィスと同じような階層構造があるのが分かります。
コーディング方法は簡単です。ウェブエージェントではなく、マネージドウェブエージェントを使用します。smalagentの異なるクラス、マネージドエージェントを使用します。管理したいエージェント、この場合はウェブエージェントを定義し、特定の一意の識別子を与え、マネージャーエージェントが入力出力、説明、何ができるか、いつ使用すべきかを正確に理解するための説明が必要です。これは自動的にシステムプロンプトに動的に統合されます。
もちろん、コードでマネージャーエージェントを作成する必要があり、初期化時にマネージドエージェントをマネージドエージェントの引数として渡します。
smalagentでマルチエージェントシステムを構築する方法はこれです。私が言ったように、これは現在学ぶのに最も簡単なシステムです。推論を行うコードエージェント、データベースなどへの接続を行うツール呼び出しエージェント、そしてマルチエージェントシステムを構築したい場合はマネージドエージェントがあります。現在私はスウォームエージェントに取り組んでいます。
これらのエージェントには特別なものがあります。JSONではなくコードベースなので、Pythonのエコシステム内で動作します。最も単純な方法をお見せしました。数学関数用のPythonモジュールを、接続の問題なく内在的に追加するだけです。素晴らしいと思いませんか?
そして、ツールを見ています。今日私が理解している限り、ツールはかなり異なるものになり得ます。deep causalityをお見せしましたが、彼らはグラフ構造、高次元グラフ構造について議論しているだけです。私たちは構築できます。3年前に使用した、または現在のPython実装であるNetwork Xを使用できます。自分でもう一度勉強し直す必要があります。かなり長い時間が経っています。
グラフニューラルネットワークでのメッセージパッシングについて20-25本のビデオがあります。smalagentのこの新機能を使えば、グラフニューラルネットワークでの異なる3種類のメッセージパッシングとそれ以上のものを単純にツールとして見ることができます。これは私たちのエージェントシステムに全く新しい推論の道を開きます。
なぜなら、特定の問題に対してローカルインテリジェンスを使用できると想像しているからです。ここでは、特定の推論問題に対してグラフニューラルネットワークでのメッセージパッシングのコード実装を使用します。コードエージェントに「メッセージパッシングのためのグラフニューラルネットワークへの接続を与えるよ、これが重要な推論問題を解決するよ」と伝えます。
コアにはまだLLM、たとえばSonet 3.5やSonet 4がありますが、問題の解決にSonet 4を使用する必要はありません。なぜなら、このプラットフォームはSonet 4や5をトレーニングできるよりもはるかに強力だからです。単に「これが正しい仕事のための正しいツールだ」と言い、結果を持ってきて、コードエージェントに「これが結果だ」と伝えます。これは自動的に行われるべきです。LLMにこの結果を理解させ、タスクのコンテキストに戻し、答えを与えさせます。
これは計算機やNetwork Xグラフ実装、あるいはグラフニューラルネットワークのように、LLM内のセマンティック推論構造ではなく、コードで計算された正しい結果であることがほぼ確実だからです。
これが現在私を魅了していることであり、smalagentはその単純さにもかかわらず強力であるため、これを可能にします。これがLangchainやその他のAIエージェント実装との違いです。
現在、Pythonは上位3つの言語の1つだと思います。C++のようなAI向けですが、Rやその他好きなものを使用しても、定義されたシステムで推論パスを操作する場合、数値シミュレーション、物理シミュレーション、化学シミュレーション、材料科学、コンピューターシミュレーションなど、すべての1000、10000、100000のPythonモジュールがあり、それらを使用するゲートウェイが開かれました。
LLMのパターントレーニングデータを生成するために、まずそれらの合成データを生成する必要はありません。これは時間の無駄であり、エネルギーの無駄であり、お金の無駄です。正しい仕事には正しいツールを使用してください。
これが今日のところです。これが今日私が実験していることです。スウォームエージェントの実装をここで書く方法、入手可能なすべての異なるコードLLMを試しています。それらが私を助けてくれる可能性がありますが、時には人間の脳を使用する必要があるようです。そして、どこかでこのアイデアが気に入っています。
このビデオが気に入ったら、購読して次のビデオでお会いできれば嬉しいです。