Microsoft Agent Framework (C#) を見てみよう その2 ざっとリポジトリを見てみる
シリーズ記事
- 「雑感」とハローワールド
- ざっとリポジトリを見てみる
- ワークフローを見てみよう
- ワークフローの Executor を掘り下げる
- ワークフローで条件分岐とループを扱う
- Executor のステータス管理
- チェックポイントの永続化
- Human in the loop を試してみよう
- Semantic Kernel の Plugin の移行
- Durable Functions でワークフロー
- エージェントを見てみよう
- A2A対応のエージェントを作ってみよう
はじめに
前回は、個人的な Microsoft Agent Framework が出てくるまでの状況の雑感と、軽くシングルエージェントとマルチエージェントの機能を試してみました。
今回は、Microsoft Agent Framework が OSS で開発されているのでリポジトリからソースコードを clone してきてざっと眺めてみようと思います。
Microsoft Agent Framework のリポジトリ
リポジトリは GitHub にあります。
以下の URL からアクセスできます。
リポジトリのディレクトリ構造は以下のようになっています。
リポジトリの構造
リポジトリは Python と .NET の両方の実装を含んでいます。今回は .NET の実装にフォーカスして見ていきます。大きく分けると以下のような構成になっています。
agent-framework/
├── dotnet/ # .NET 実装
│ ├── src/ # ソースコード
│ ├── samples/ # サンプルコード
│ └── tests/ # テストコード
├── python/ # Python 実装
├── docs/ # ドキュメント
└── workflow-samples/ # ワークフロー定義ファイル (YAML)
.NET プロジェクト構成
.NET 側の src/ ディレクトリには、複数のプロジェクトが含まれています。実際に見てみるとかなり細かく分かれていて、関心の分離がしっかりされている印象です。
dotnet/src/
├── Microsoft.Agents.AI/ # コアライブラリ
├── Microsoft.Agents.AI.Abstractions/ # 抽象化レイヤー
├── Microsoft.Agents.AI.A2A/ # Agent-to-Agent 通信
├── Microsoft.Agents.AI.AzureAI/ # Azure AI 連携
├── Microsoft.Agents.AI.CopilotStudio/ # Copilot Studio 連携
├── Microsoft.Agents.AI.Hosting/ # ホスティング機能
├── Microsoft.Agents.AI.Hosting.A2A/ # A2A ホスティング
├── Microsoft.Agents.AI.Hosting.A2A.AspNetCore/ # ASP.NET Core 向け A2A ホスティング
├── Microsoft.Agents.AI.OpenAI/ # OpenAI 連携
├── Microsoft.Agents.AI.Workflows/ # ワークフロー機能
└── Microsoft.Agents.AI.Workflows.Declarative/ # 宣言的ワークフロー (YAML)
コア機能
Microsoft.Agents.AI がコアパッケージで、エージェントの基本機能が含まれています。前回の記事で使った ChatClientAgent などがここに入っています。このパッケージは Microsoft.Extensions.AI に依存していて、AI の呼び出しは IChatClient を通して行うようになっています。
Microsoft.Agents.AI.Abstractions は抽象化レイヤーで、インターフェースや基底クラスが定義されています。拡張性を考えた設計になっていますね。
各種 AI プロバイダー連携
Microsoft.Agents.AI.OpenAI は OpenAI との連携機能を提供します。Microsoft.Agents.AI.AzureAI は Azure AI サービスとの連携、Microsoft.Agents.AI.CopilotStudio は Microsoft Copilot Studio との連携を提供します。各 AI プロバイダーに特化した機能が独立したパッケージになっているので、必要なものだけを参照できます。
OpenAI や Azure AI (Azure AI Foundry Agent Service) や Copilot Studio の Microsoft と OpenAI には特別対応をして、その他の Agent には A2A などの汎用的なインターフェースで対応をする方針になっていることが見て取れます。
A2A 対応
Microsoft.Agents.AI.A2A は A2A 通信のプロトコル実装です。Microsoft.Agents.AI.Hosting.A2A と Microsoft.Agents.AI.Hosting.A2A.AspNetCore は、A2A 通信をホスティングするための機能で、ASP.NET Core アプリケーションでエージェントをホストして他のエージェントと通信できるようにします。A2A 自体の実装には GitHub の a2aproject 組織 配下の a2a-dotnet が使われています。
公式の A2A のライブラリでコントリビューターを見ると Microsoft のメンバーが多いので安心して使えそうですね。
ワークフロー機能
Microsoft.Agents.AI.Workflows はワークフロー機能のパッケージです。前回使った AgentWorkflowBuilder やシーケンシャル、ハンドオフ、グループチャットなどのマルチエージェントパターンがここに含まれています。
Microsoft.Agents.AI.Workflows.Declarative は、YAML でワークフローを定義する機能を提供しています。まだ実際には試したことはないですが workflow-samples/ ディレクトリにある YAML ファイルを読み込んで使うことができるのだと思います。個人的には YAML で書くくらいなら C# で書きたいと思うのですが、ワークフローをカスタマイズ出来るような機能を実装しようとしたり、アプリケーションとは独立してワークフローを更新するような機能を作りたいときにはとても良い選択しになりそうですね。
Declarative のプロジェクトは NuGet にはまだ公開されていないようなので、今後のリリースに期待したいと思います。
その他
Microsoft.Agents.AI.Hosting は、エージェントをホスティングするための基本機能を提供します。DI コンテナとの統合や、エージェントのライフサイクル管理などが含まれています。
個人的に気になるのは Agent が Singleton として DI コンテナに登録されているのですが MCP のツール呼び出しを考えると、Singleton だと MCP のクライアントとしてはスコープが長すぎるので、そこらへんとの相性がどうなのか心配です…。
サンプルコード
samples/ ディレクトリには充実したサンプルがあります。大きく分けると以下のような構成です。
dotnet/samples/
├── GettingStarted/ # 入門サンプル
│ ├── Agents/ # エージェントの基本サンプル (全15ステップ)
│ ├── Workflows/ # ワークフローのサンプル
│ ├── AgentOpenTelemetry/ # OpenTelemetry 連携
│ ├── AgentProviders/ # 各種プロバイダーとの連携
│ ├── AgentWithOpenAI/ # OpenAI を使ったエージェント
│ └── ModelContextProtocol/ # MCP (Model Context Protocol) 連携
├── SemanticKernelMigration/ # Semantic Kernel からの移行サンプル
└── AgentWebChat/ # Web チャットアプリのサンプル
Agents サンプル
GettingStarted/Agents/ には、エージェントの基本的な使い方を段階的に学べるサンプルが含まれています。
Agents/
├── Agent_Step01_Running # エージェントの実行
├── Agent_Step02_MultiturnConversation # マルチターン会話
├── Agent_Step03_UsingFunctionTools # ツール呼び出し
├── Agent_Step04_UsingFunctionToolsWithApprovals # ツール呼び出しの承認
├── Agent_Step05_StructuredOutput # 構造化された出力
├── Agent_Step06_PersistedConversations # 会話の永続化
├── Agent_Step07_3rdPartyThreadStorage # サードパーティのスレッドストレージ
├── Agent_Step08_Observability # 可観測性
├── Agent_Step09_DependencyInjection # 依存性注入
├── Agent_Step10_AsMcpTool # MCP ツールとしてのエージェント
├── Agent_Step11_UsingImages # 画像の使用
├── Agent_Step12_AsFunctionTool # ファンクションツールとしてのエージェント
├── Agent_Step13_Memory # メモリ機能
├── Agent_Step14_Middleware # ミドルウェア
└── Agent_Step15_Plugins # プラグイン
まだ、名前しか見てないので中身はこれから見ようと思っているのですが、どういう感じで使うのかを学ぶなら、ここら辺から確認するのがいいと思います。
Workflows サンプル
GettingStarted/Workflows/ には、ワークフローの基本的な使い方を学べるサンプルが含まれています。
Workflows/
├── _Foundational/ # 基礎的なワークフロー
├── Agents/ # エージェントを含むワークフロー
├── Checkpoint/ # チェックポイント機能
├── Concurrent/ # 並行実行
├── ConditionalEdges/ # 条件分岐
├── Declarative/ # YAML ベースのワークフロー
├── DeclarativeCode/ # YAML から C# コード生成
├── DeclarativeEject/ # YAML をコードに変換
├── HumanInTheLoop/ # 人間のフィードバック
├── Loop/ # ループ処理
├── Observability/ # 可観測性
├── SharedStates/ # 状態の共有
├── Visualization/ # 可視化
└── Resources/ # リソースファイル
こちらも、まだ中身はみてないのですがワークフローの使い方を調べる場合はここら辺から見ていくのが良さそうです。
その他のサンプル
AgentOpenTelemetry は OpenTelemetry を使った可観測性のサンプル、AgentProviders は各種 AI プロバイダー(OpenAI、Azure AI、Copilot Studio など)との連携サンプル、ModelContextProtocol は MCP を使ったサンプルです。
SemanticKernelMigration は Semantic Kernel から Agent Framework への移行を支援するサンプル集です。Semantic Kernel を使っていた人が Agent Framework に移行する際の参考になるように、同じ機能を両方のフレームワークで実装したサンプルが含まれています。これは親切ですね。
AgentWebChat は ASP.NET Core で実装された Web チャットアプリのサンプルで、実際のアプリケーションでどう使うかの参考になります。フロントエンドとバックエンドの両方が含まれていて、実践的な実装例として役立ちそうです。
まとめ
今回は、軽く .NET フォルダー構造をざっと見てみたのですが、samples の GettingStarted の配下を見て動きを学ぶのがよさそうなので、こらから Agent Framework をやろうと思っている人は、そこらへんから見ていくのが良いと思います。
次からは、この GettingStarted のサンプルを見て動き方を学んだ結果を紹介していこうと思います。
Discussion