AIを一人で働かせるのはやめよう:AutoGenでマルチエージェントチームを構築する

Artificial Intelligence tutorial - IT technology blog
Artificial Intelligence tutorial - IT technology blog

AIとターミナルの間で「伝書鳩」になる苦悩

先週、上司からかなりハードなタスクを頼まれました。Apple、Microsoft、Googleの過去5年間の成長を比較するグラフを作成し、短い分析を添えるというものです。従来のやり方でChatGPTを使うと、要件をコピーし、Pythonコードを取得し、自分のマシンに貼り付けて実行し、エラーが出ればまたそのエラーをコピーしてAIに修正させる…という作業になります。このプロセスを5〜7回も繰り返し、情報の「仲介役」をするだけで1時間近く費やしてしまいました。

問題はAIが賢くないことではありません。実際、現実のプロジェクトには常に「調整」が必要です。開発者がコードを書けばテスターが確認し、その後にマネージャーが結果を承認します。一つのプロンプト(シングルエージェント)だけでは、論理的な思考が重なる長期的なタスクにおいて、AIは混乱したり息切れしたりしがちです。

なぜ単体AIは「お手上げ」になりやすいのか?

実戦を通じて、単一のAIシステムが実際のプロジェクトで失敗する3つの壁に気づきました:

  • フィードバックループ(Feedback Loop)の欠如: AIは結果を出すと、それが正しいと思い込みます。こちらが指摘しない限り、自分でコードを実行してどこが間違っているかを確認する能力がありません.
  • コンテキストの過負荷: コード作成、分析、レポート作成など、あまりに多くの仕事を一つのプロンプトに詰め込むと、AIは集中力を欠きやすくなります。その結果、重要な詳細を見落とすことがよくあります。
  • スキルの限界: 文章作成が得意なモデルが、必ずしも正確な計算やリアルタイムのデータ取得の方法を知っているとは限りません。

デベロッパーにとっての一般的な解決策

これを解決するために、現在の開発コミュニティでは主に3つの道が選ばれています:

  1. 手動のプロンプトエンジニアリング: 自分でタスクを細分化し、結果をコピペでやり取りします。これは非常に手間がかかり、挫折しやすいです。
  2. LangChainの活用: 固定された「鎖(Chains)」を構築します。この方法は安定していますが、少し硬直的で、プロセスの途中で予期せぬエラーが発生した際に対応が難しくなります。
  3. マルチエージェントシステム(Multi-Agent Systems): これが最も効果的なアプローチです。一つのAIにすべてを任せるのではなく、チームとして細分化し、各エージェントが役割を担い、互いに対話させます。

AutoGen – AIを真の「部署」へと変える

MicrosoftのAutoGenは、今私が最も気に入っているツールです。最大の特徴は「会話中心(Conversation-centric)」のメカニズムにあります。最終的な目標を提示するだけで、エージェントたちが自ら議論し、コードを書き、実行し、要件を満たすまで結果を検証します。

クイックインストール

システムをクリーンに保つため、仮想環境(venv)に pyautogen ライブラリをインストールすることをお勧めします。

pip install pyautogen

この例では、最高の精度を得るためにOpenAIのGPT-4oを使用します。

チーム構成:AssistantとUserProxy

AutoGenの世界では、2つの主要なキャラクターに慣れる必要があります:

  • AssistantAgent: 思考の専門家。直接考え、コードを書く担当です。
  • UserProxyAgent: あなたの代理人。Assistantが書いたコードを実行し、エラーや成功結果をフィードバックする権限を持ちます。

以下は、株価データを取得するための自動対話をセットアップするコード例です:

import autogen

config_list = [{"model": "gpt-4o", "api_key": "YOUR_API_KEY"}]

# Assistantを作成 - 「プログラマー」
assistant = autogen.AssistantAgent(
    name="Coder",
    llm_config={"config_list": config_list}
)

# UserProxyを作成 - 「実行役」
user_proxy = autogen.UserProxyAgent(
    name="Executor",
    human_input_mode="NEVER",
    max_consecutive_auto_reply=10,
    code_execution_config={"work_dir": "coding", "use_docker": False},
)

# タスクを依頼
user_proxy.initiate_chat(
    assistant,
    message="AppleとTeslaの過去1ヶ月の株価を取得し、比較グラフを描画して 'compare.png' というファイルに保存してください。"
)

自動エラー修正の「ピンポン」メカニズム

上記のコードを実行すると、非常に興味深いプロセスが自動的に進行するのがわかります:

  1. ExecutorCoder にリクエストを送ります。
  2. Coderyfinance ライブラリを使用したPythonスクリプトを書きます。
  3. Executorcoding ディレクトリ内にファイルを自動生成し、実行を試みます。
  4. もしマシンにライブラリが足りなければ、Executor はエラーを Coder に投げ返します。
  5. Coder はエラーを受け取り、解決のために pip install コマンドを自ら書き、再実行します。

LangChainと比較して、AutoGenはエラーハンドリング(Error Handling)のループが格段にスムーズです。まるで2人の有能な部下が連携して仕事を進めているのを眺めているような感覚です。

実践で得た「血の滲むような」教訓

AutoGenは非常に強力ですが、APIの請求額が跳ね上がるという代償を払ったこともあります。最適化のための注意点をいくつか挙げます:

  • コスト管理: エージェント同士が修正のために数十回も「お喋り」を続けることがあります。無限ループで資金を溶かさないよう、常に max_consecutive_auto_reply を低め(5〜10程度)に設定してください。
  • システムセキュリティ: デフォルトでは、AIがマシンのファイルを削除するようなコードを書く可能性があります。実行環境を隔離するために、常にDocker(use_docker: True)を有効にしましょう。
  • モデルの使い分け: すべてのエージェントにGPT-4oを使う必要はありません。Coderには強力なモデルを使い、単純な役割には安価なモデル(GPT-4o-miniやローカルのOllamaなど)を割り当てることで、コストを60〜70%削減できます。

Lời kết

シングルエージェントからマルチエージェントへの移行は、生産性における大きな飛躍です。AutoGenを使えば、あなたは「伝書鳩」の役割から解放され、目標の方向性を定めることに集中できるようになります。複雑なデータ分析タスクがあるなら、ぜひ小さなAIチームを構築してみてください。その結果、あなたのワークフローは劇的に変わるはずです。

Share: