「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
エージェント同士の会話を研究・実験する
- 開発元 / 主導:Microsoft Research発(OSS化)
- 難易度:高(研究色が強く、抽象度も高い)
- 強み:研究的自由度・拡張性・分散実行
- 弱み:実用より研究寄り、開発難度高
詳細 †
- Microsoft Research主導の「エージェント同士の会話」を中心に据えたフレームワーク。
- 人間とエージェント、エージェント同士が会話することでタスクを進める:Conversation-driven
- 研究色が強く、プロダクション利用には制御がやや粗い
特徴 †
- コンセプト:複数エージェント間の「会話ベースの協調」を重視。研究寄りの設計思想で、分散実行にも対応。
- 設計思想:研究色が強く、「エージェント間対話」を核にして、動的なタスク分担やツール利用を促進。
- 特徴的な機能:Multi-agent conversation / 分散ランタイム対応 / 高度なタスク分割・協調処理
- ユースケース:研究用途、複雑なマルチエージェントシミュレーション、実験的アプリ
実装 †
インストール †
仮想環境に、pipでインストールする。
python3 -m venv .venv
source .venv/bin/activate
deactivate
pip install -U autogenstudio
※ https://microsoft.github.io/autogen/stable/user-guide/autogenstudio-user-guide/installation.html
エージェント定義 †
- 定義して
from autogen_agentchat.agents import AssistantAgent
smart_agent = AssistantAgent(
name="smart_airline_agent",
model_client=model_client,
system_message="You are a helpful assistant for an airline. You give short, humorous answers, including the price of a roundtrip ticket.",
model_client_stream=True,
tools=[get_city_price], # ★
reflect_on_tool_use=True
)
※ 別途、get_city_price関数をツールとして開発
- マルチモーダル
- 構造化された出力
- AutogenのLangchainツールを使用
- 弱い/疑似的なHITLの例
- チームの相互作用
2エージェントによる順番交代方式の協調対話
- 主エージェント(実行役)
- 評価エージェント(レビュー役)
- AutoGen Coreのスタンドアロン・ランタイムを使用
- ルーティング専用のエージェント(RoutedAgent?)を使用。
- 入力されたタスクやメッセージを解析し、適切なエージェントに 振り分けるのが仕事。
- この、最も簡単なサンプルとして2つのエージェントにジャンケンせさ、結果を判定する。
- 内容はシンプルに、RoutedAgent?を使用したトレードオフ分析
- メリット・デメリットの2つの情報収集エージェントを使用
- メリット・デメリット情報からトレードオフ分析して採用可否の判定
ハンズオンのコンセプト †
https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?The%20Complete%20Agentic%20AI%20Engineering%20Course%20%282025%29#b0ee9256
https://github.com/OpenTouryoProject/DxCommon/blob/master/Notebook/path/ed-donner_agents/5_autogen/5_lab5_autogen_bigEEEpj_ja.ipynb
- 分散ランタイムへ動的に生成したエージェントを登録し動かしている。
- RoutedAgent?とAssistantAgent?は1:1で、生成されているのはRoutedAgent?
- RoutedAgent?がRoutedAgent?に処理を委譲しているが、協調動作と言える所までは行っていない。
- *.pyファイルの説明
- world.py : エントリ・ポイントと最初の処理
- creator.py : エージェント作成・登録・実行
- agent.py : エージェントの実装テンプレート
- agent_commented.py : 上記にコメントを追加したもの(実働しない)
- messages.py : Messageクラスとfind_recipient関数
機能 †
Autogen Core †
Autogenの中心にあるAutogenコアは、主に以下の特徴や役割を持っている。
- LLM 非依存な実行モデル
- イベント駆動/非同期実行
- メッセージ駆動/同期実行
- ライフサイクル管理
- エージェント定義
ランタイム抽象 †
- 「スタンドアロン」や「(実験的)分散」などのランタイムで、エージェントの実行環境を抽象化。
- ローカルやネットワーク越しの通信、プロセス間通信なども統一的に扱える。
- 単一エージェントだけでなく「多数のエージェント群」を組み合わせた協調シナリオを想定。
- 特徴:実行場所やプロトコルに依存せずエージェントを起動可能。
エージェント抽象化 †
- LLMを「エージェント」として抽象化。
- エージェント間のメッセージ送受信を統一的に扱える。
- 例:
- AssistantAgent?:タスク実行型の標準エージェント。
- RoutedAgent?:条件に応じて他のエージェントにメッセージを振り分ける。
メッセージ・ハンドリング †
- @message_handlerデコレータでメッセージ処理関数を登録可能。
- エージェントが受信した特定タイプのメッセージに対して処理を分岐できる。
- 特徴:イベント駆動型で、複雑なタスクフローを簡潔に定義可能。
非同期・並列処理 †
- async/await を活用してエージェント間通信を非同期に処理。
- 複数エージェントが同時にメッセージを処理してもブロッキングしない。
- 特徴:大規模マルチエージェント環境でも効率的に動作。
終了条件やキャンセルのサポート †
- CancellationToken? や TerminationCondition? といった仕組みで、エージェント間対話を柔軟に停止可能。
- 特徴:無限ループや長時間処理の制御が容易。
拡張性 †
- 独自エージェントの追加や、メッセージタイプの定義などが容易。
- 将来的なLLMやツールの統合に柔軟。
エージェント同士が話す(エージェント対話・協調の標準実装)
外部とつながる、現実世界と接続(外部統合・実運用向け拡張群)
- 各種 LLM プロバイダ対応
- Tool / Function / MCP 連携
- コード実行(Python, Shell など)
- ベクタDB、検索、RAG統合
- ロギング・トレーシング
人が触る(GUI・可視化・操作系)
- Web UI によるエージェント設計
- ワークフローの視覚的構築
- エージェント会話の可視化・再実行
AutoGen Bench / Evaluation †
周辺パッケージ(研究・品質保証向けの補助機能群)
- エージェントの性能評価
- タスク成功率・協調性能の測定
- 再現可能なベンチマーク実行
参考 †
2つの系統 †
0.3でMS版とコミュニティ版が分裂。
- 0.4以降は大幅に書き直されたMS版で、AG2がコミュニティ版
- その他に、商用のMicrosoft Agent Frameworkと言うモノもある。
MS公式 †
https://microsoft.github.io/autogen/
コミュニティ版 †
IT技術系 †
Qiita †
Zenn †