10月13日、OpenAIは新しいオープンソースフレームワーク「Swarm」をGitHub上で公開した。同社は、このフレームワークを「マルチエージェントシステムの作成、オーケストレーション、およびデプロイを行うための実験的ツール」と説明している。
Swarmの目的は、エージェント間の調整と実行を軽量で高度に制御可能かつテストしやすくすることにある。OpenAIによれば、これを実現するための2つの主要な概念が「ルーチン」と「ハンドオフ」である。ルーチンは一連の指示とツールで構成されており、会話を別のエージェントに引き継ぐことができる。これらの基本的な構成要素は、ツールとエージェントネットワーク間の複雑な動態を表現できる。
Swarmは、OpenAIが提唱する「エージェント型AI」のコンセプトも示している。これは、言語モデル、特定の指示(システムプロンプト)、およびツールを含む抽象的な概念だ。これらのエージェントは、相互にタスクを渡したり、利用可能なツールを使用したりすることができる。
この図は、2つのAIアシスタントが協力して天気の質問に答える例を示している。トリアージアシスタントが質問を専門の天気アシスタントに引き渡し、正確な情報を取得して詳細な答えを提供する。
OpenAIによれば、Swarmの利点は学習曲線が緩やかであるにも関わらず、現実世界の問題に対してスケーラブルな解決策をテストできることだという。このフレームワークは主にクライアント側で動作し、呼び出し間で状態を保存しない。
コアコンセプト:ハンドオフとルーチン
Swarmの中核となるコンセプトは、エージェント間のハンドオフとルーチンを制御することにある。ハンドオフは、会話の制御を別のエージェントに引き継ぐ機能であり、電話の転送に似ている。ルーチンは、自然言語による手順の一連であり、ツールを使って実行される。これらは状態マシンのように考えられ、言語モデルによって確実に処理される。
OpenAIは、このアプローチが、単一のプロンプトでコーディングするのが難しい独立した多くの機能や指示の管理に適していると主張している。
以下は、2つのエージェントがそれぞれ協調動作するコードの例だ。
Pythonで記述されており、エージェント同士のハンドオフ(タスクの引き継ぎ)をシミュレーションしている。具体的には、2つのエージェント Agent A と Agent B が存在し、Agent A がユーザーの要求に応じて、エージェント Agent B に会話を引き継ぐような役割を果たしている。
from swarm import Swarm, Agent
# Swarmクライアントの作成
client = Swarm()
def transfer_to_agent_b():
return agent_b
# Agent クラスを使って agent_a を作成
# このエージェントは「You are a helpful agent.」というプロンプトに従い、会話を agent_b に引き継ぐ
agent_a = Agent(
name="Agent A",
instructions="You are a helpful agent.",
functions=[transfer_to_agent_b],
)
# Agent B は「Only speak in Haikus.」というプロンプトに従い、俳句形式でのみ返答を行う
agent_b = Agent(
name="Agent B",
instructions="Only speak in Haikus.",
)
# ユーザーが「I want to talk to agent B.」というメッセージを送信すると、agent_a がそれを受け取り、agent_b に会話が引き継がれる
response = client.run(
agent=agent_a,
messages=[{"role": "user", "content": "I want to talk to agent B."}],
)
print(response.messages[-1]["content"])
出力結果は以下のようになる(俳句のリズムで読める)。
Hope glimmers brightly,
New paths converge gracefully,
What can I assist?
詳細はGitHubリポジトリ上のREADMEドキュメントを参照していただきたい。