Swarm Basic フォルダの解説：多機能エージェントシステムの基礎

## はじめに

Swarmは、OpenAIが開発した実験的なマルチエージェントオーケストレーションフレームワークです。このフレームワークは、複数のAIエージェントを効率的に連携させ、複雑なタスクを実行するための軽量で柔軟なソリューションを提供します。

この記事では、Swarmの基本的な機能を示す「basic」フォルダ内の例を詳しく解説します。これらの例を通じて、Swarmの主要な機能とその実用的な応用について理解を深めていきましょう。

<blockquote class="twitter-tweet" data-media-max-width="800"><p lang="ja" dir="ltr">swarmでさっそくサンプルのagent_handoffから動かしてみてます！<br>これは面白い！！<br>🔗<a href="https://t.co/DmsUQdQKep">https://t.co/DmsUQdQKep</a> <a href="https://t.co/Iu1IfmJnY8">https://t.co/Iu1IfmJnY8</a> <a href="https://t.co/CWmag7fQKd">pic.twitter.com/CWmag7fQKd</a></p>&mdash; Maki@Sunwood AI Labs. (@hAru_mAki_ch) <a href="https://twitter.com/hAru_mAki_ch/status/1845050164643606962?ref_src=twsrc%5Etfw">October 12, 2024</a></blockquote>

## セットアップと実行方法

Swarmを使用するには、以下の手順でセットアップを行います：

```powershell
# 仮想環境の作成と有効化
uv venv
.venv\Scripts\activate

# Swarmのインストール
uv pip install git+https://github.com/openai/swarm.git

# OpenAI APIキーの設定
$env:OPENAI_API_KEY = "your-api-key"

# リポジトリのクローンと移動
git clone https://github.com/openai/swarm.git
cd swarm/examples/basic

# 例の実行
python agent_handoff.py
```

## 1. agent_handoff.py：エージェント間の引き継ぎ

### 機能と検証できる機能
この例では、異なる言語を話す2つのエージェント（英語とスペイン語）間でのスムーズな引き継ぎを示しています。

- 複数のエージェントの設定
- 言語に基づくエージェントの切り替え
- 動的な会話の流れの制御

### コード例

```python
from swarm import Swarm, Agent

client = Swarm()

# 英語エージェントの設定
english_agent = Agent(
    name="English Agent",
    instructions="あなたは英語のみを話します。",
)

# スペイン語エージェントの設定
spanish_agent = Agent(
    name="Spanish Agent",
    instructions="あなたはスペイン語のみを話します。",
)

def transfer_to_spanish_agent():
    """スペイン語を話すユーザーを即座に転送します。"""
    return spanish_agent

# 英語エージェントに関数を追加
english_agent.functions.append(transfer_to_spanish_agent)

# メッセージの設定と実行
messages = [{"role": "user", "content": "Hola. ¿Como estás?"}]
response = client.run(agent=english_agent, messages=messages)

# 応答の出力
print(response.messages[-1]["content"])
```

### 応用と利点
- 多言語カスタマーサポートシステム
- 言語学習アプリケーション
- 国際的なビジネスコミュニケーションツール

この機能により、言語の壁を越えたシームレスなコミュニケーションが可能になり、グローバルなサービス提供が容易になります。

## 2. bare_minimum.py：最小限の設定

### 機能と検証できる機能
Swarmを使用するための最も基本的な設定を示しています。

- Swarmクライアントの初期化
- 基本的なエージェントの設定
- シンプルなメッセージ処理

### コード例

```python
from swarm import Swarm, Agent

client = Swarm()

# 基本的なエージェントの設定
agent = Agent(
    name="Agent",
    instructions="あなたは役立つエージェントです。",
)

# メッセージの設定と実行
messages = [{"role": "user", "content": "こんにちは！"}]
response = client.run(agent=agent, messages=messages)

# 応答の出力
print(response.messages[-1]["content"])
```

### 応用と利点
- 迅速なプロトタイピング
- シンプルなチャットボットの作成
- Swarmの基本概念の学習

この最小限の例は、開発者がSwarmの基本を素早く理解し、カスタムソリューションの構築を開始するのに役立ちます。

## 3. context_variables.py：コンテキスト変数の活用

### 機能と検証できる機能
エージェントの動作をカスタマイズするためのコンテキスト変数の使用方法を示しています。

- 動的な指示生成
- コンテキスト変数を用いた関数の実行
- エージェントの柔軟な振る舞いの制御

### コード例

```python
from swarm import Swarm, Agent

client = Swarm()

def instructions(context_variables):
    # コンテキスト変数から名前を取得し、指示を生成
    name = context_variables.get("name", "ユーザー")
    return f"あなたは役立つエージェントです。ユーザーを名前（{name}）で挨拶してください。"

def print_account_details(context_variables: dict):
    # アカウント詳細の出力
    user_id = context_variables.get("user_id", None)
    name = context_variables.get("name", None)
    print(f"アカウント詳細: {name} {user_id}")
    return "成功"

# エージェントの設定
agent = Agent(
    name="Agent",
    instructions=instructions,
    functions=[print_account_details],
)

# コンテキスト変数の設定
context_variables = {"name": "ジェームズ", "user_id": 123}

# 最初の応答を実行
response = client.run(
    messages=[{"role": "user", "content": "こんにちは！"}],
    agent=agent,
    context_variables=context_variables,
)
print(response.messages[-1]["content"])

# アカウント詳細の出力を実行
response = client.run(
    messages=[{"role": "user", "content": "アカウント詳細を表示してください！"}],
    agent=agent,
    context_variables=context_variables,
)
print(response.messages[-1]["content"])
```

### 応用と利点
- パーソナライズされたユーザー体験の提供
- 動的なシステム設定の管理
- コンテキストに応じた適応型AIアシスタント

コンテキスト変数を活用することで、ユーザーごとに最適化された対話や、状況に応じて変化するAIの動作を実現できます。

## 4. function_calling.py：関数呼び出し

### 機能と検証できる機能
エージェントから特定の関数を呼び出す方法を示しています。

- カスタム関数の定義と統合
- エージェントによる外部データの取得と処理
- 動的な情報提供

### コード例

```python
from swarm import Swarm, Agent

client = Swarm()

def get_weather(location) -> str:
    # 天気情報を返す関数（ダミーデータ）
    return "{'temp':67, 'unit':'F'}"

# エージェントの設定
agent = Agent(
    name="Agent",
    instructions="あなたは役立つエージェントです。",
    functions=[get_weather],
)

# メッセージの設定と実行
messages = [{"role": "user", "content": "ニューヨークの天気はどうですか？"}]

response = client.run(agent=agent, messages=messages)
print(response.messages[-1]["content"])
```

### 応用と利点
- リアルタイムデータ統合（例：天気情報）
- APIとの連携
- 複雑なタスクの自動化

この機能により、AIエージェントが外部システムやデータソースと連携し、より高度で実用的なタスクを実行できるようになります。

## 5. simple_loop_no_helpers.py：シンプルな対話ループ

### 機能と検証できる機能
ヘルパー関数を使用せずに、基本的な対話ループを実装する方法を示しています。

- 継続的な対話セッションの管理
- ユーザー入力の処理とエージェントの応答生成
- 会話履歴の維持と表示

### コード例

```python
from swarm import Swarm, Agent

client = Swarm()

# エージェントの設定
my_agent = Agent(
    name="Agent",
    instructions="あなたは役立つエージェントです。",
)

def pretty_print_messages(messages):
    # メッセージを整形して表示
    for message in messages:
        if message["content"] is None:
            continue
        print(f"{message['sender']}: {message['content']}")

messages = []
agent = my_agent
while True:
    # ユーザー入力を受け取る
    user_input = input("> ")
    messages.append({"role": "user", "content": user_input})

    # エージェントの応答を取得
    response = client.run(agent=agent, messages=messages)
    messages = response.messages
    agent = response.agent
    pretty_print_messages(messages)
```

### 応用と利点
- カスタム対話システムの開発
- 長期的な対話セッションの実装
- デバッグや学習目的のための会話ログ作成

この例は、開発者がSwarmの内部動作を理解し、より複雑な対話システムを構築するための基礎を提供します。

## まとめ

Swarmの「basic」フォルダに含まれる例は、マルチエージェントシステムの基本的な機能を効果的に示しています。これらの例を通じて、開発者は以下のような重要な概念と技術を学ぶことができます：

1. エージェント間の協調と引き継ぎ
2. コンテキストに応じた動的な振る舞い
3. 外部機能との統合
4. 継続的な対話セッションの管理

これらの基本的な構成要素を組み合わせることで、開発者は複雑で高度なAIシステムを構築し、様々な実用的なアプリケーションを開発することができます。Swarmは、その軽量性と柔軟性により、迅速なプロトタイピングから本格的な製品開発まで、幅広いシナリオに対応できる強力なツールとなっています。

Swarmを活用することで、複数のAIエージェントが協調して動作する次世代のインテリジェントシステムの開発が可能になり、ユーザーエクスペリエンスの向上や業務プロセスの最適化など、様々な分野でイノベーションを促進することができるでしょう。

各例のコードを実際に実行し、動作を確認することで、Swarmの機能をより深く理解し、自身のプロジェクトに適用する方法を学ぶことができます。これらの基本的な例を足掛かりに、より複雑で実用的なAIシステムの開発に挑戦してみてください。

## リポジトリ

https://github.com/Sunwood-ai-labs/swarm-sample-box/tree/main/examples/basic



 <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>