【🐝 Agency Swarm】 Genesis Agencyを使ったAIエージェンシーの自動構築と実装

Agency Swarmのユニークな機能の1つであるGenesis Agencyを使用することで、AIエージェンシーの構造を自然言語での指示だけで自動的に定義・構築できます。本記事では、Web開発エージェンシーを例に、Genesis Agencyを使った実践的なAIエージェンシーの構築方法を解説します。

> **⚠️ 重要な注意点**
> Genesis Agencyで生成されるコードは基本的な実装のみを提供します。実際の運用には、エラーハンドリングの強化やセキュリティ対策など、追加の実装が必要です。本記事では、Genesis Agencyで生成したコードをRoo-Codeを使用して改善・拡張した実装例を紹介します。

## プロジェクト概要

今回構築するのは、以下の4つの専門エージェントで構成されるWeb開発エージェンシーです：

- Project Manager (PM): クライアントコミュニケーションとプロジェクト管理
- Frontend Developer: ユーザーインターフェース実装
- Backend Developer: サーバーサイド機能実装
- UI Designer: デザインとプロトタイピング

各エージェントはGitHub APIを活用して、コードやデザインファイルの管理、進捗トラッキングを行います。

https://hamaruki.com/agency-swarm-genesis-website/

## Genesis Agencyによるエージェンシー定義

### 2.1 基本セットアップ

まず、Genesis Agencyのインスタンスを作成します：

```python
from agency_swarm.agency.genesis import GenesisAgency
agency = GenesisAgency(with_browsing=False)
demo = agency.demo_gradio(height=900)
```

### 2.2 エージェンシー要件の定義

Genesis Agencyに対して、必要なエージェントとその役割を自然言語で指示します：

```bash
以下の構成でWebサイト制作を行うエージェンシーを作成してください：
- プロジェクトマネージャー（クライアントとの窓口）
- フロントエンドデベロッパー
- バックエンドデベロッパー
- UIデザイナー
GitHubのAPIとの連携も必要です。
```

## 生成されたエージェンシー構造


### 3.1 エージェンシーマニフェスト

```bash
WebDevAgencyは、クライアントのニーズに応じた高品質なWebサイトを制作することを目指します。プロジェクトマネージャーを中心に、フロントエンドデベロッパー、バックエンドデベロッパー、UIデザイナーが協力して、効率的かつ効果的にプロジェクトを進行します。また、GitHub APIを活用して、コードのバージョン管理やコラボレーションを円滑に行います。
```

### 3.2 コミュニケーションフロー

```python
agency = Agency([
    pm,  # プロジェクトマネージャーがユーザーとの窓口
    [pm, frontend],  # PMとフロントエンド開発者の連携
    [pm, backend],   # PMとバックエンド開発者の連携
    [pm, designer],  # PMとUIデザイナーの連携
    [frontend, backend],  # フロントエンドとバックエンドの連携
    [frontend, designer], # フロントエンドとデザイナーの連携
])
```

## Roo-Codeによる改善と拡張

Genesis Agencyで生成されたコードには以下の課題がありました：

1. エラーハンドリングが基本的
2. GitHub APIのレート制限への対応が不十分
3. 認証情報の管理が単純
4. ファイルの同時編集のロック機能がない

これらの課題に対して、Roo-Codeを使用して以下の改善を行いました：

### 4.1 エラーハンドリングの強化

```python
def handle_github_error(response):
    if response.status_code == 403:
        remaining = response.headers.get('X-RateLimit-Remaining')
        if remaining == '0':
            reset_time = int(response.headers.get('X-RateLimit-Reset', 0))
            wait_time = max(reset_time - time.time(), 0)
            time.sleep(wait_time)
            return True  # Retry needed
    elif response.status_code == 404:
        raise ResourceNotFoundError(f"Resource not found: {response.url}")
    elif response.status_code >= 500:
        raise ServerError(f"GitHub server error: {response.status_code}")
    return False  # No retry needed
```

### 4.2 ファイルロック機能の追加

```python
class FileLockManager:
    def __init__(self):
        self._locks = {}
        self._lock = threading.Lock()

    def acquire_lock(self, file_path, timeout=30):
        with self._lock:
            if file_path not in self._locks:
                self._locks[file_path] = threading.Lock()
            return self._locks[file_path].acquire(timeout=timeout)

    def release_lock(self, file_path):
        with self._lock:
            if file_path in self._locks:
                self._locks[file_path].release()
```

### 4.3 認証情報の安全な管理

```python
from cryptography.fernet import Fernet

class SecureTokenManager:
    def __init__(self):
        self.key = Fernet.generate_key()
        self.cipher_suite = Fernet(self.key)

    def encrypt_token(self, token):
        return self.cipher_suite.encrypt(token.encode())

    def decrypt_token(self, encrypted_token):
        return self.cipher_suite.decrypt(encrypted_token).decode()
```

## 最終的なプロジェクト構造

生成・改善後のプロジェクトは以下のような構造を持ちます：

```bash
WebDevAgency/
├── BackendDeveloper/
│   ├── tools/
│   │   └── GitHubPullRequestManager.py
├── FrontendDeveloper/
│   ├── tools/
│   │   ├── GitHubBranchManager.py
│   │   └── GitHubPullRequestManager.py
├── ProjectManager/
│   ├── tools/
│   │   ├── GitHubProgressTracker.py
│   │   └── GitHubRepositoryManager.py
├── UIDesigner/
│   ├── tools/
│   │   └── GitHubDesignFileManager.py
├── core/
│   ├── error_handling.py
│   ├── file_lock.py
│   └── security.py
└── agency.py
```

## リポジトリ

https://github.com/Sunwood-ai-labs/agency-swarm-WebDevAgency

## デモ動画

<blockquote class="twitter-tweet" data-media-max-width="560"><p lang="ja" dir="ltr">AIエージェントフレームワーク「Agency Swarm」で遊んでみる！！！③<br>作成したファイルをRoo-Codeで少し手直ししたら動いた。。。Toolの込み入ったGithubのAPI系は失敗しているがここまでのをほぼ自動で作成できるのはデカい！！ <a href="https://t.co/anYs1WSh0h">https://t.co/anYs1WSh0h</a> <a href="https://t.co/4yw2DcRtq0">pic.twitter.com/4yw2DcRtq0</a></p>&mdash; Maki@Sunwood AI Labs. (@hAru_mAki_ch) <a href="https://twitter.com/hAru_mAki_ch/status/1888677589692362858?ref_src=twsrc%5Etfw">February 9, 2025</a></blockquote> 

## 推奨プラクティス

1. **Genesis Agencyの活用**
   - 基本構造の迅速な生成に最適
   - カスタマイズや拡張の土台として利用

2. **Roo-Codeとの連携**
   - コード生成後の改善に効果的
   - 実装の質を向上させる

## まとめ

Genesis AgencyとRoo-Codeを組み合わせることで、AIエージェンシーの迅速な構築と堅牢な実装を実現できました。Genesis Agencyは基本構造の自動生成に優れ、Roo-Codeはその実装を本番環境で使用可能なレベルまで改善する強力なツールとなります。

実際のプロジェクトでは、生成されたコードを出発点として、必要な改善と拡張を加えていくアプローチが推奨されます。これにより、開発の効率化と品質の両立が可能となります。

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