ジェネラティブエージェンツの大嶋です。
「AIエージェントキャッチアップ #6 - Swarm (OpenAI)」という勉強会を開催しました。
generative-agents.connpass.com
アーカイブ動画はこちらです。
Swarm
今回は、OpenAI社が公開した実験的なマルチエージェントフレームワーク「Swarm」を動かしたり、READMEやソースコードを読んだりしてみました。
今回のポイント
Swarmのコンセプト
SwarmはOpenAIのCookbook「Orchestrating Agents: Routines and Handoffs」で紹介されている「Routine」と「Handoff」というアイデアをもとに実装したものになっています。
Swarmが何をしているのかは、このCookbookを読むとよく分かります。
簡単に言えば、
- 特定のシステムプロンプトのもと、Function callingでツールを使いながら処理を進める一連の手順をRoutineと呼び、RoutineはAgentとみなすことができる
- Function callingの関数がAgent型を返す場合は、そのAgentに処理が切り替わるように実装でき、それをHandsoffと呼ぶ
という内容です。
上記のCookbookではOpenAIパッケージを使ってそのような処理が実装されており、それをライブラリ化したのが「Swarm」ということです。
SwarmのHello World
SwarmのHello World的なコードとしては、README に以下のように書かれています。
from swarm import Swarm, Agent client = Swarm() def transfer_to_agent_b(): return agent_b agent_a = Agent( name="Agent A", instructions="You are a helpful agent.", functions=[transfer_to_agent_b], ) agent_b = Agent( name="Agent B", instructions="Only speak in Haikus.", ) response = client.run( agent=agent_a, messages=[{"role": "user", "content": "I want to talk to agent B."}], ) print(response.messages[-1]["content"])
システムプロンプト(instructions)の異なる2つのエージェントを用意して、agent_aにはtransfer_to_agent_b、つまりagent_bに切り替わるツールを与えています。
agent_aは必要に応じてFunction callingで処理をagent_bに切り替えるようになっている、ということです。
Swarmの機能
Swarmは主に以下の2つの機能が実装されただけの非常にシンプルなフレームワークでした。
- 単純なFunction callingを使ったAgent機能(LangGraphのcreate_react_agentのような機能)
- Function callingの関数がAgent型を返す場合に、Agent(システムプロンプトやツール)が切り替わる機能
※処理の実行開始時やシステムプロンプトの組み立て時、Function callingの関数実行時に、context_variablesという値を共有するような機能もあります
実際にSwarmの実装を参照すると swarm/core.py に前述のCookbookとほとんど同じような処理が実装されているだけです。
Swarmの特徴だと感じた点
Swarmはとにかく単純なマルチエージェントフレームワークでした。
Agentのようなオブジェクトを作成して実行するという流れはAutoGenやcrewAIに似ていますが、Swarmはより単純で、Function callingでエージェントがお互い呼び出し合うだけになっています。
LangChainやLangGraphでは、開発者が明示的に処理の流れ(ChainやGraph)を定義するのに対して、Swarmでは処理の流れ自体もLLMが動的に考えていくことになっています。
そのため、Swarmで特定のワークフローを組んだりしたい場合は、システムプロンプトなどでうまく調整することになりそうです。
現状ではSwarmのような単純なフレームワークで解決できることは少なく、開発者が明示的にワークフローを組みたくなるケースが多いと思います。
しかし今後LLMがより高性能になっていくと、Swarmのように単純なフレームワークでもタスクを解決できることが増えていくのかもしれません。
次回のご案内
以上、今回はOpenAIのSwarmをキャッチアップしました。
次回は「AIエージェントキャッチアップ #7 - Bolt.new」ということで、ブラウザで動作するフルスタックWeb開発エージェント「Bolt.new」がテーマです!
generative-agents.connpass.com
ご興味・お時間ある方はぜひご参加ください!
また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!