ジェネラティブエージェンツの大嶋です。
「AIエージェントキャッチアップ #60 - Microsoft Agent Framework」という勉強会を開催しました。
https://generative-agents.connpass.com/event/377601/generative-agents.connpass.com
アーカイブ動画はこちらです。
Microsoft Agent Framework
今回は、Semantic KernelやAutoGenからアイデアをまとめて拡張された「Microsoft Agent Framework」をキャッチアップしました。
Microsoft Agent FrameworkのGitHubリポジトリはこちらです。
公式ドキュメントはこちらです。
今回のポイント
Microsoft Agent Frameworkとは
Microsoft Agent Frameworkは、AIエージェントの構築、オーケストレーション、デプロイのためのフレームワーク(パブリックプレビュー)です。
Semantic KernelとAutoGenのアイデアを統合・拡張したもので、同じチームによる後継プロジェクトとのことです。
Microsoft Agent Frameworkでは、「AIエージェント」と「ワークフロー」を実装できます。
PythonとC#/.NETをサポートしており、この記事ではPython版を対象とします。
基本的な使い方
Microsoft Agent Frameworkは、uv add agent-framework --preでインストールできます。
基本的なエージェントの実装は以下のようになります。
import asyncio from agent_framework.openai import OpenAIChatClient async def main() -> None: async with ( OpenAIChatClient(model_id="gpt-5-nano").create_agent( instructions="You are good at telling jokes.", ) as agent, ): result = await agent.run("Tell me a joke about a pirate.") print(result.text) if __name__ == "__main__": asyncio.run(main())
OpenAIChatClientなどのcreate_agentでエージェントを作成し、runメソッドで実行します。
runの代わりにrun_streamメソッドを使用することで、ストリーミングにも対応しています。
create_agentには、「ツール」やLangChain v1のような「ミドルウェア」も設定可能です。
ワークフローの実装
Microsoft Agent Frameworkでは、ワークフローも実装できます。
ワークフローの各ステップは、Executorを継承したクラスか@executorデコレーターを使用して実装します。
class UpperCase(Executor): def __init__(self, id: str): super().__init__(id=id) @handler async def to_upper_case(self, text: str, ctx: WorkflowContext[str]) -> None: result = text.upper() await ctx.send_message(result)
@executor(id="reverse_text_executor") async def reverse_text(text: str, ctx: WorkflowContext[Never, str]) -> None: result = text[::-1] await ctx.yield_output(result)
そして、WorkflowBuilderのadd_edgeやset_start_executorでワークフローを構築します。
upper_case = UpperCase(id="upper_case_executor") workflow = ( WorkflowBuilder() .add_edge(upper_case, reverse_text) .set_start_executor(upper_case) .build() )
ワークフローをrun_streamで実行すると、ワークフロー中のイベントをストリーミングできます。
async def main() -> None: async for event in workflow.run_stream("hello world"): print(f"Event: {event}") if isinstance(event, WorkflowOutputEvent): print(f"Workflow completed with result: {event.data}")
Microsoft Agent Frameworkのワークフローは、ステップの並列化や条件分岐にも対応しています。
LangGraphとの違い
LangGraphとの違いとしては、ワークフローのステップ間での値の受け渡し方が挙げられます。
LangGraphでは、ワークフローの中で共有される「ステート」を定義して、ステートを介して値を受け渡すのが基本です。
一方、Microsoft Agent Frameworkのワークフローでは、ステップ中にctx.send_messageとして渡した値が、次のステップの入力になるようになっています。
Human-in-the-Loop機能
Microsoft Agent Frameworkは、Human-in-the-Loopもサポートしています。
ワークフローのステップでctx.request_infoを使うと、一度処理を中断して追加の情報を求めることができます。
await ctx.request_info( request_data=HumanFeedbackRequest(prompt=prompt), response_type=str, )
詳細は以下の公式ドキュメント・サンプルコードを参照してください。
次回のご案内
以上、今回は「Microsoft Agent Framework」をキャッチアップしました。
次回は「AIエージェントキャッチアップ #61 - AG-UI」ということで、AIエージェントをUIに接続する方法を標準化する「AG-UI」がテーマです!
https://generative-agents.connpass.com/event/378311/generative-agents.connpass.com
ご興味・お時間ある方はぜひご参加ください!
また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!