{"id":20968,"date":"2025-10-26T10:51:26","date_gmt":"2025-10-26T10:51:26","guid":{"rendered":"https:\/\/pokecon.jp\/job\/?p=20968"},"modified":"2025-10-26T10:51:26","modified_gmt":"2025-10-26T10:51:26","slug":"microsoft-agent-framework%e9%96%8b%e7%99%ba%e5%85%a5%e9%96%80-azure-qiita","status":"publish","type":"post","link":"https:\/\/pokecon.jp\/job\/20968\/","title":{"rendered":"Microsoft Agent Framework\u958b\u767a\u5165\u9580 #Azure &#8211; Qiita"},"content":{"rendered":"\n<\/p>\n<div>\n<h2 data-sourcepos=\"2:1-2:9\">\n<span id=\"\u6982\u8981\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E6%A6%82%E8%A6%81\"><i class=\"fa fa-link\"\/><\/a>\u6982\u8981<\/h2>\n<p data-sourcepos=\"3:1-3:278\"><a target=\"_blank\" href=\"https:\/\/learn.microsoft.com\/ja-jp\/agent-framework\/overview\/agent-framework-overview\" rel=\"nofollow noopener\" target=\"_blank\">Microsoft Agent Framework<\/a> \u306f\u3001Microsoft \u304c OSS \u3068\u3057\u3066\u63d0\u4f9b\u3059\u308b <strong>AI \u30a8\u30fc\u30b8\u30a7\u30f3\u30c8 &amp; \u30de\u30eb\u30c1\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u958b\u767a\u3059\u308b<\/strong> \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002<\/p>\n<p data-sourcepos=\"5:2-5:343\">Microsoft \u306e\u65e2\u5b58\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3042\u308b\u3001<a target=\"_blank\" href=\"https:\/\/github.com\/microsoft\/semantic-kernel\" rel=\"nofollow noopener\" target=\"_blank\">Semantic Kernel<\/a> \u3068 <a target=\"_blank\" href=\"https:\/\/github.com\/microsoft\/autogen\" rel=\"nofollow noopener\" target=\"_blank\">AutoGen<\/a> \u306e\u30e1\u30ea\u30c3\u30c8\u3092\u7d71\u5408\u3057\u3001\u540c\u3058\u30c1\u30fc\u30e0\u306b\u3088\u3063\u3066\u69cb\u7bc9\u3055\u308c\u305f\u6b21\u4e16\u4ee3\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u958b\u767a\u57fa\u76e4\u3068\u3057\u3066\u4f4d\u7f6e\u3065\u3051\u3089\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"7:1-7:122\"><a target=\"_blank\" href=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F662d79e9-3dc3-4131-b8c6-f3af3f6350ae.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=588569a8ae0280583db2aefcf4625f39\" target=\"_blank\" rel=\"nofollow noopener\"><img decoding=\"async\" src=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F662d79e9-3dc3-4131-b8c6-f3af3f6350ae.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=588569a8ae0280583db2aefcf4625f39\" alt=\"image.png\" srcset=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F662d79e9-3dc3-4131-b8c6-f3af3f6350ae.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;w=1400&amp;fit=max&amp;s=e6f87991b2ce84a713de6eaef464b6b4 1x\" data-canonical-src=\"https:\/\/qiita-image-store.s3.ap-northeast-1.amazonaws.com\/0\/1273574\/662d79e9-3dc3-4131-b8c6-f3af3f6350ae.png\" loading=\"lazy\"\/><\/a><\/p>\n<p data-sourcepos=\"10:1-10:99\">\u672c\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306f\u3001\u5927\u304d\u304f\u4ee5\u4e0b\u306e\u30ab\u30c6\u30b4\u30ea\u306b\u3088\u3063\u3066\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<div class=\"s_table\"><table data-sourcepos=\"12:1-15:242\">\n<thead>\n<tr data-sourcepos=\"12:1-12:126\">\n<th data-sourcepos=\"12:2-12:24\">\u30ab\u30c6\u30b4\u30ea<\/th>\n<th data-sourcepos=\"12:26-12:125\">\u5185\u5bb9<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr data-sourcepos=\"14:1-14:195\">\n<td data-sourcepos=\"14:2-14:13\"><strong>Agents<\/strong><\/td>\n<td data-sourcepos=\"14:15-14:194\">LLM \u306b\u3088\u308b\u610f\u601d\u6c7a\u5b9a\u30fb\u30c4\u30fc\u30eb\u5b9f\u884c\u30fb\u5fdc\u7b54\u751f\u6210\u3092\u62c5\u3046\u500b\u5225\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3002Azure \u3084 OpenAI \u306a\u3069\u8907\u6570\u306e\u30e2\u30c7\u30eb\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u30b5\u30dd\u30fc\u30c8\u3002<\/td>\n<\/tr>\n<tr data-sourcepos=\"15:1-15:242\">\n<td data-sourcepos=\"15:2-15:19\"><strong>Workflows<\/strong><\/td>\n<td data-sourcepos=\"15:21-15:241\">\u8907\u6570\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3084\u95a2\u6570\u3092\u30b0\u30e9\u30d5\u69cb\u9020\u3067\u3064\u306a\u304e\u3001\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u5b9a\u7fa9\u3002\u578b\u5b89\u5168\u306a\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0 \/ \u5165\u308c\u5b50 \/ Human-in-the-Loop \/ \u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8\u518d\u958b \u306a\u3069\u3092\u30b5\u30dd\u30fc\u30c8\u3002<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<h2 data-sourcepos=\"17:1-17:51\">\n<span id=\"\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u62bd\u8c61\u5316\u306b\u3088\u308b\u30e1\u30ea\u30c3\u30c8\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E6%8A%BD%E8%B1%A1%E5%8C%96%E3%81%AB%E3%82%88%E3%82%8B%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88\"><i class=\"fa fa-link\"\/><\/a>\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u62bd\u8c61\u5316\u306b\u3088\u308b\u30e1\u30ea\u30c3\u30c8<\/h2>\n<p data-sourcepos=\"18:1-18:162\">Agent Framework \u306e\u3059\u3079\u3066\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306f <code>BaseAgent<\/code> \u3092\u7d99\u627f\u3059\u308b\uff08\uff1d<code>AgentProtocol<\/code> \u3092\u6e80\u305f\u3059\uff09\u3053\u3068\u304c\u5171\u901a\u8981\u4ef6\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"21:1-21:277\">\u3053\u306e\u8a2d\u8a08\u306b\u3088\u308a\u3001<strong>\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3068\u3057\u3066\u306e\u632f\u308b\u821e\u3044\u304c\u7d71\u4e00<\/strong>\u3055\u308c\u3001Azure AI Foundry Agent \u3084 Copilot Studio Agent \u306e\u3088\u3046\u306a\u7570\u306a\u308b\u5b9f\u88c5\u57fa\u76e4\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3067\u3082\u3001\u540c\u3058\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u3067\u6271\u3048\u308b\u3053\u3068\u304c\u4fdd\u8a3c\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"23:1-23:184\">\u3064\u307e\u308a\u3001<strong>\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u5dee\u7570\u3092\u62bd\u8c61\u5316\u3057\u3001\u5b89\u5168\u306b\u30de\u30eb\u30c1\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30fb\u30aa\u30fc\u30b1\u30b9\u30c8\u30ec\u30fc\u30b7\u30e7\u30f3\u3078\u8f09\u305b\u3089\u308c\u308b\u3053\u3068\u304c\u6700\u3082\u5927\u304d\u306a\u4fa1\u5024<\/strong>\u3067\u3059\u3002<\/p>\n<p data-sourcepos=\"25:1-25:137\"><a target=\"_blank\" href=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2Fae2ca717-d2bc-48d4-b774-1c91478a6e82.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=2456a3f707b77173d0dbcf3189234fd4\" target=\"_blank\" rel=\"nofollow noopener\"><img decoding=\"async\" src=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2Fae2ca717-d2bc-48d4-b774-1c91478a6e82.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=2456a3f707b77173d0dbcf3189234fd4\" alt=\"ms_agent_fs_class_01.png\" srcset=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2Fae2ca717-d2bc-48d4-b774-1c91478a6e82.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;w=1400&amp;fit=max&amp;s=71973fa4624c6c12ac24beede8b1eb5e 1x\" data-canonical-src=\"https:\/\/qiita-image-store.s3.ap-northeast-1.amazonaws.com\/0\/1273574\/ae2ca717-d2bc-48d4-b774-1c91478a6e82.png\" loading=\"lazy\"\/><\/a><\/p>\n<h3 data-sourcepos=\"29:1-29:17\">\n<span id=\"agentprotocol\" class=\"fragment\"\/><a target=\"_blank\" href=\"#agentprotocol\"><i class=\"fa fa-link\"\/><\/a>AgentProtocol<\/h3>\n<p data-sourcepos=\"30:1-30:123\"><strong>AgentProtocol<\/strong> \u306b\u306f\u300c\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3068\u3057\u3066\u6271\u3046\u305f\u3081\u306b\u5fc5\u9808\u3068\u306a\u308b\u6319\u52d5\u300d\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<div class=\"s_table\"><table data-sourcepos=\"32:1-35:72\">\n<thead>\n<tr data-sourcepos=\"32:1-32:70\">\n<th data-sourcepos=\"32:2-32:12\">\u7a2e\u5225<\/th>\n<th data-sourcepos=\"32:14-32:69\">\u4f8b<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr data-sourcepos=\"34:1-34:74\">\n<td data-sourcepos=\"34:2-34:18\">\u30d7\u30ed\u30d1\u30c6\u30a3<\/td>\n<td data-sourcepos=\"34:20-34:73\">\n<code>id<\/code>, <code>name<\/code>, <code>display_name<\/code>, <code>description<\/code>\n<\/td>\n<\/tr>\n<tr data-sourcepos=\"35:1-35:72\">\n<td data-sourcepos=\"35:2-35:16\">\u30e1\u30bd\u30c3\u30c9<\/td>\n<td data-sourcepos=\"35:18-35:71\">\n<code>run(...)<\/code>, <code>run_stream(...)<\/code>, <code>get_new_thread(...)<\/code>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<h3 data-sourcepos=\"38:1-38:13\">\n<span id=\"baseagent\" class=\"fragment\"\/><a target=\"_blank\" href=\"#baseagent\"><i class=\"fa fa-link\"\/><\/a>BaseAgent<\/h3>\n<p data-sourcepos=\"40:1-40:96\"><strong>BaseAgent<\/strong> \u306f\u3001<code>AgentProtocol<\/code> \u3092\u6e80\u305f\u3059\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u300c\u5171\u901a\u57fa\u76e4\u300d\u3067\u3059\u3002<\/p>\n<ul data-sourcepos=\"42:1-46:0\">\n<li data-sourcepos=\"42:1-42:64\">\u30b9\u30ec\u30c3\u30c9\uff0f\u5c65\u6b74\u7ba1\u7406\uff08<code>AgentThread<\/code> \u306e\u4e92\u63db\u5b9f\u88c5\uff09<\/li>\n<li data-sourcepos=\"43:1-43:32\">\u30c4\u30fc\u30eb\u5316\uff08<code>.as_tool()<\/code>\uff09<\/li>\n<li data-sourcepos=\"44:1-44:20\">\u30df\u30c9\u30eb\u30a6\u30a7\u30a2<\/li>\n<li data-sourcepos=\"45:1-46:0\">\u89b3\u6e2c\u30fb\u30c8\u30ec\u30fc\u30b9 \u306a\u3069<\/li>\n<\/ul>\n<blockquote data-sourcepos=\"47:1-47:172\">\n<p data-sourcepos=\"47:3-47:172\">\u958b\u767a\u8005\u304c\u76f4\u63a5\u89e6\u308c\u308b\u3053\u3068\u306f\u5c11\u306a\u3044\u3067\u3059\u304c\u3001<strong>\u3069\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3067\u3082\u540c\u3058\u3088\u3046\u306b\u52d5\u304f<\/strong> \u3053\u3068\u3092\u652f\u3048\u3066\u3044\u308b\u306e\u304c\u3053\u306e\u30ec\u30a4\u30e4\u30fc\u3067\u3059\u3002<\/p>\n<\/blockquote>\n<h3 data-sourcepos=\"49:1-49:13\">\n<span id=\"chatagent\" class=\"fragment\"\/><a target=\"_blank\" href=\"#chatagent\"><i class=\"fa fa-link\"\/><\/a>ChatAgent<\/h3>\n<p data-sourcepos=\"51:1-52:153\"><strong>ChatAgent<\/strong> \u306f <code>BaseAgent<\/code> \u306e\u6c4e\u7528\u5b9f\u88c5\u3067\u3042\u308a\u3001\u6700\u3082\u5229\u7528\u983b\u5ea6\u306e\u9ad8\u3044\u30af\u30e9\u30b9\u3067\u3059\u3002<br \/><code>chat_client<\/code> \u306b <code>ChatClientProtocol<\/code> \u6e96\u62e0\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\uff08Azure \/ OpenAI \u306a\u3069\uff09\u3092\u5dee\u3057\u8fbc\u3080\u3060\u3051\u3067\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u5316\u3067\u304d\u307e\u3059\u3002<\/p>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"54:1-64:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">ChatAgent<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">agent_framework.azure<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">AzureOpenAIChatClient<\/span>\n\n<span class=\"n\">agent<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">ChatAgent<\/span><span class=\"p\">(<\/span>\n    <span class=\"n\">chat_client<\/span><span class=\"o\">=<\/span><span class=\"nc\">AzureOpenAIChatClient<\/span><span class=\"p\">(...),<\/span>\n    <span class=\"n\">name<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">assistant<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">instructions<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Be helpful and concise.<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">tools<\/span><span class=\"o\">=<\/span><span class=\"p\">[...],<\/span>  <span class=\"c1\"># \u4efb\u610f\uff1a\u95a2\u6570\/MCPTool \u306a\u3069\n<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre>\n<\/div>\n<\/div>\n<h3 data-sourcepos=\"67:1-67:28\">\n<span id=\"\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u7d71\u5408\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC%E7%B5%B1%E5%90%88\"><i class=\"fa fa-link\"\/><\/a>\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u7d71\u5408<\/h3>\n<p data-sourcepos=\"68:1-68:132\"><code>AgentProtocol<\/code> \u306b\u6e96\u62e0\u3057\u3066\u3044\u308c\u3070 \u305d\u306e\u307e\u307e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u4e0a\u306e\u30ce\u30fc\u30c9\uff08<code>Executor<\/code>\uff09\u3068\u3057\u3066\u63a5\u7d9a\u3067\u304d\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"70:1-70:15\">\u305d\u306e\u305f\u3081\u3001<\/p>\n<ul data-sourcepos=\"71:1-74:0\">\n<li data-sourcepos=\"71:1-71:52\">Azure AI Foundry \u3067\u4f5c\u6210\u3057\u305f\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8<\/li>\n<li data-sourcepos=\"72:1-72:52\">Chat Completion API \u30d9\u30fc\u30b9\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8<\/li>\n<li data-sourcepos=\"73:1-74:0\">Responses API \u30d9\u30fc\u30b9\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8 \u306a\u3069<\/li>\n<\/ul>\n<p data-sourcepos=\"75:1-75:192\">\u306e\u3088\u3046\u306b\u5b9f\u88c5\u5143\u3084\u30e9\u30f3\u30bf\u30a4\u30e0\u304c\u7570\u306a\u3063\u3066\u3044\u3066\u3082\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5168\u4f53\u3067\u7d71\u4e00\u7684\u306a\u30de\u30eb\u30c1\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30fb\u30aa\u30fc\u30b1\u30b9\u30c8\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n<h2 data-sourcepos=\"79:1-79:9\">\n<span id=\"\u6982\u8981-1\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E6%A6%82%E8%A6%81-1\"><i class=\"fa fa-link\"\/><\/a>\u6982\u8981<\/h2>\n<p data-sourcepos=\"81:1-81:179\">Agent Framework \u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306f\u3001LLM \u306e\u63a8\u8ad6\u3067\u30e6\u30fc\u30b6\u30fc\u610f\u56f3\u3092\u89e3\u91c8\u3057\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u30c4\u30fc\u30eb\u3092\u547c\u3073\u51fa\u3057\u3066\u81ea\u5f8b\u7684\u306b\u30bf\u30b9\u30af\u3092\u89e3\u6c7a\u3057\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"83:1-83:42\">\u4ee5\u4e0b\u306f\u30b7\u30f3\u30d7\u30eb\u306a\u5b9f\u88c5\u4f8b\u3067\u3059\u3002<\/p>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"85:1-118:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"kn\">import<\/span> <span class=\"n\">asyncio<\/span>\n<span class=\"kn\">import<\/span> <span class=\"n\">os<\/span>\n\n<span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">ChatAgent<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">agent_framework.azure<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">AzureOpenAIChatClient<\/span>\n\n\n<span class=\"c1\"># ---------- \u95a2\u6570\u306e\u5b9a\u7fa9 ----------\n<\/span><span class=\"k\">def<\/span> <span class=\"nf\">get_weather<\/span><span class=\"p\">(<\/span><span class=\"n\">location<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"nb\">str<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">Get weather for a location.<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"k\">return<\/span> <span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Weather in <\/span><span class=\"si\">{<\/span><span class=\"n\">location<\/span><span class=\"si\">}<\/span><span class=\"s\">: 72\u00b0F and sunny<\/span><span class=\"sh\">\"<\/span>\n\n<span class=\"c1\"># ---------- \u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u4f5c\u6210 ----------\n<\/span><span class=\"n\">agent<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">ChatAgent<\/span><span class=\"p\">(<\/span>\n    <span class=\"n\">name<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">WeatherAgent<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">chat_client<\/span><span class=\"o\">=<\/span><span class=\"nc\">AzureOpenAIChatClient<\/span><span class=\"p\">(...),<\/span>\n    <span class=\"n\">instructions<\/span> <span class=\"o\">=<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">\u3042\u306a\u305f\u306f\u512a\u308c\u305f\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8\u3067\u3059\u3002<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">tools<\/span><span class=\"o\">=<\/span><span class=\"p\">[<\/span><span class=\"n\">get_weather<\/span><span class=\"p\">]<\/span>\n<span class=\"p\">)<\/span>\n\n\n<span class=\"c1\"># ---------- \u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u5b9f\u884c ----------\n<\/span><span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">main<\/span><span class=\"p\">():<\/span>\n\n    <span class=\"n\">response<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">agent<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\u30d1\u30ea\u306e\u6c17\u6e29\u306f\uff1f<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Assistant: <\/span><span class=\"si\">{<\/span><span class=\"n\">response<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n<span class=\"n\">asyncio<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"nf\">main<\/span><span class=\"p\">())<\/span>\n\n\n<span class=\"c1\"># ---------- \u51fa\u529b\u4f8b ----------\n# Assistant: \u30d1\u30ea\u306e\u73fe\u5728\u306e\u6c17\u6e29\u306f\u7d0422\u00b0C\uff0872\u00b0F\uff09\u3067\u3001\u6674\u308c\u3066\u3044\u307e\u3059\u3002\n<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<h2 data-sourcepos=\"121:1-121:12\">\n<span id=\"\u30c4\u30fc\u30eb\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E3%83%84%E3%83%BC%E3%83%AB\"><i class=\"fa fa-link\"\/><\/a>\u30c4\u30fc\u30eb<\/h2>\n<p data-sourcepos=\"122:1-122:137\">\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u304c\u5229\u7528\u3067\u304d\u308b\u30c4\u30fc\u30eb\u306b\u306f\u5927\u304d\u304f\u3001<strong>\u95a2\u6570\u578b\u30c4\u30fc\u30eb<\/strong>\u3068<strong>\u30db\u30b9\u30c8\u578b\u30c4\u30fc\u30eb<\/strong>\u304c\u5229\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n<div class=\"s_table\"><table data-sourcepos=\"124:1-127:220\">\n<thead>\n<tr data-sourcepos=\"124:1-124:122\">\n<th data-sourcepos=\"124:2-124:18\">\u533a\u5206<\/th>\n<th data-sourcepos=\"124:20-124:84\">\u8aac\u660e<\/th>\n<th data-sourcepos=\"124:86-124:121\">\u5178\u578b\u7528\u9014<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr data-sourcepos=\"126:1-126:179\">\n<td data-sourcepos=\"126:2-126:26\"><strong>\u95a2\u6570\u578b\u30c4\u30fc\u30eb<\/strong><\/td>\n<td data-sourcepos=\"126:28-126:130\">Python \u95a2\u6570\u306a\u3069\u3092\u30c4\u30fc\u30eb\u5316\u3057\u3001LLM \u304c\u76f4\u63a5\u547c\u3073\u51fa\u3059\u5f62\u5f0f\u3002<\/td>\n<td data-sourcepos=\"126:132-126:178\">\u30ab\u30b9\u30bf\u30e0\u51e6\u7406\u30fb\u30ed\u30fc\u30ab\u30eb\u5b9f\u884c<\/td>\n<\/tr>\n<tr data-sourcepos=\"127:1-127:220\">\n<td data-sourcepos=\"127:2-127:28\"><strong>\u30db\u30b9\u30c8\u578b\u30c4\u30fc\u30eb<\/strong><\/td>\n<td data-sourcepos=\"127:30-127:174\">Web\u691c\u7d22\u30fb\u30b3\u30fc\u30c9\u5b9f\u884c\u30fb\u30d5\u30a1\u30a4\u30eb\u691c\u7d22\u30fbMCP \u306a\u3069\u3001\u30b5\u30fc\u30d3\u30b9\u5074\u306b\u7d44\u307f\u8fbc\u307e\u308c\u305f Build-in \u30c4\u30fc\u30eb\u3092\u305d\u306e\u307e\u307e\u5229\u7528\u3002<\/td>\n<td data-sourcepos=\"127:176-127:219\">\u958b\u767a\u30fb\u904b\u7528\u8ca0\u8377\u3092\u4e0b\u3052\u305f\u3044\u5834\u5408<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<h3 data-sourcepos=\"129:1-129:25\">\n<span id=\"\u30db\u30b9\u30c8\u578b\u30c4\u30fc\u30eb\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E3%83%9B%E3%82%B9%E3%83%88%E5%9E%8B%E3%83%84%E3%83%BC%E3%83%AB\"><i class=\"fa fa-link\"\/><\/a>\u30db\u30b9\u30c8\u578b\u30c4\u30fc\u30eb<\/h3>\n<p data-sourcepos=\"130:1-130:259\">\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e <strong>\u30b5\u30fc\u30d3\u30b9\u5074\u3067\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\u7d44\u307f\u8fbc\u307f\u6e08\u307f\uff08Build-in\uff09<\/strong> \u30c4\u30fc\u30eb\u3092\u305d\u306e\u307e\u307e\u5229\u7528\u3057\u307e\u3059\u3002\u4f8b\u3068\u3057\u3066\u3001Web \u691c\u7d22\u3084\u30b3\u30fc\u30c9\u5b9f\u884c\u3001\u30d5\u30a1\u30a4\u30eb\u691c\u7d22\u3001MCP \u9023\u643a\u306a\u3069\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"132:1-132:132\">\u8a8d\u8a3c\u30fb\u5b9f\u884c\u30fb\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306a\u3069\u3092\u30b5\u30fc\u30d3\u30b9\u5074\u304c\u62c5\u3046\u305f\u3081\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u5b9f\u88c5\u304c\u6700\u5c0f\u9650\u3067\u6e08\u307f\u307e\u3059\u3002<\/p>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"134:1-145:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">ChatAgent<\/span><span class=\"p\">,<\/span> <span class=\"n\">HostedCodeInterpreterTool<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">agent_framework.azure<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">AzureOpenAIResponsesClient<\/span>\n\n<span class=\"c1\"># ---------- \u30db\u30b9\u30c8\u578b\u30b3\u30fc\u30c9\u5b9f\u884c\u30c4\u30fc\u30eb\u3092\u5229\u7528 ----------\n<\/span><span class=\"n\">agent<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">ChatAgent<\/span><span class=\"p\">(<\/span>\n    <span class=\"n\">name<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">CodeInterpreterAgent<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">chat_client<\/span><span class=\"o\">=<\/span><span class=\"nc\">AzureOpenAIResponsesClient<\/span><span class=\"p\">(...),<\/span>\n    <span class=\"n\">instructions<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">...<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">tools<\/span><span class=\"o\">=<\/span><span class=\"nc\">HostedCodeInterpreterTool<\/span><span class=\"p\">(),<\/span>\n<span class=\"p\">)<\/span>\n<\/code><\/pre>\n<\/div>\n<\/div>\n<h3 data-sourcepos=\"149:1-149:17\">\n<span id=\"agent-as-tool\" class=\"fragment\"\/><a target=\"_blank\" href=\"#agent-as-tool\"><i class=\"fa fa-link\"\/><\/a>Agent as Tool<\/h3>\n<p data-sourcepos=\"151:1-151:113\">\u65e2\u5b58\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092 \u300c\u30c4\u30fc\u30eb\u5316\u300d \u3057\u3066\u3001\u5225\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u304b\u3089\u547c\u3073\u51fa\u3059\u6a5f\u80fd\u3067\u3059\u3002<\/p>\n<p data-sourcepos=\"153:1-153:184\">\u3053\u308c\u306b\u3088\u308a\u3001<strong>\u5c02\u9580\u5bb6\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u95a2\u6570\u30c4\u30fc\u30eb\u306e\u3088\u3046\u306b\u4f7f\u3046<\/strong>\u3053\u3068\u304c\u3067\u304d\u3001\u30b7\u30f3\u30d7\u30eb\u306a\u30de\u30eb\u30c1\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u69cb\u6210\u3092\u8fc5\u901f\u306b\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<\/p>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"155:1-175:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">ChatAgent<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">agent_framework.azure<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">AzureOpenAIChatClient<\/span>\n\n<span class=\"c1\"># ---------- \u5b50\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u69cb\u7bc9 &amp; \u30c4\u30fc\u30eb\u5316 ----------\n<\/span><span class=\"n\">specialist<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">ChatAgent<\/span><span class=\"p\">(<\/span>\n    <span class=\"n\">name<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">WeatherExpert<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">chat_client<\/span><span class=\"o\">=<\/span><span class=\"nc\">AzureOpenAIChatClient<\/span><span class=\"p\">(...),<\/span>\n    <span class=\"n\">instructions<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\u5929\u6c17\u3060\u3051\u306b\u7b54\u3048\u308b\u5c02\u9580\u5bb6\u3002<\/span><span class=\"sh\">\"<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"n\">weather_tool<\/span> <span class=\"o\">=<\/span> <span class=\"n\">specialist<\/span><span class=\"p\">.<\/span><span class=\"nf\">as_tool<\/span><span class=\"p\">(...)<\/span>\n\n<span class=\"c1\"># ---------- \u89aa\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u69cb\u7bc9 ----------\n<\/span><span class=\"n\">manager<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">ChatAgent<\/span><span class=\"p\">(<\/span>\n    <span class=\"n\">name<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Manager<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">chat_client<\/span><span class=\"o\">=<\/span><span class=\"nc\">AzureOpenAIChatClient<\/span><span class=\"p\">(...),<\/span>\n    <span class=\"n\">instructions<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\u8cea\u554f\u3092\u5206\u89e3\u3057\u3001\u5fc5\u8981\u306a\u3089\u30c4\u30fc\u30eb\u3067\u89e3\u6c7a\u3059\u308b\u3002<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">tools<\/span><span class=\"o\">=<\/span><span class=\"p\">[<\/span><span class=\"n\">weather_tool<\/span><span class=\"p\">],<\/span> <span class=\"c1\"># \u2190 \u30c4\u30fc\u30eb\u3068\u3057\u3066\u6307\u5b9a\n<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre>\n<\/div>\n<\/div>\n<h3 data-sourcepos=\"179:1-179:14\">\n<span id=\"mcp-\u5bfe\u5fdc\" class=\"fragment\"\/><a target=\"_blank\" href=\"#mcp-%E5%AF%BE%E5%BF%9C\"><i class=\"fa fa-link\"\/><\/a>MCP \u5bfe\u5fdc<\/h3>\n<p data-sourcepos=\"180:1-180:68\">Azure Framework \u3067\u306f\u3001MCP \u30c4\u30fc\u30eb\u306b\u3082\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"182:1-197:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">ChatAgent<\/span><span class=\"p\">,<\/span> <span class=\"n\">MCPStreamableHTTPTool<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">agent_framework.azure<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">AzureOpenAIChatClient<\/span>\n\n<span class=\"n\">mcp<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">MCPStreamableHTTPTool<\/span><span class=\"p\">(<\/span>\n    <span class=\"n\">name<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Microsoft Learn MCP<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">url<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">https:\/\/learn.microsoft.com\/api\/mcp<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"n\">agent<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">ChatAgent<\/span><span class=\"p\">(<\/span>\n    <span class=\"n\">name<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">DocsAgent<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">chat_client<\/span><span class=\"o\">=<\/span><span class=\"nc\">AzureOpenAIChatClient<\/span><span class=\"p\">(...),<\/span>\n    <span class=\"n\">instructions<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\u5fc5\u8981\u306b\u5fdc\u3058\u3066 MCP \u3067\u793e\u5185\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u691c\u7d22\u3057\u3066\u7b54\u3048\u308b\u3002<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">tools<\/span><span class=\"o\">=<\/span><span class=\"p\">[<\/span><span class=\"n\">mcp<\/span><span class=\"p\">],<\/span>\n<span class=\"p\">)<\/span>\n<\/code><\/pre>\n<\/div>\n<\/div>\n<h2 data-sourcepos=\"201:1-201:21\">\n<span id=\"\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E3%83%9F%E3%83%89%E3%83%AB%E3%82%A6%E3%82%A7%E3%82%A2\"><i class=\"fa fa-link\"\/><\/a>\u30df\u30c9\u30eb\u30a6\u30a7\u30a2<\/h2>\n<p data-sourcepos=\"202:1-202:228\">\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306f\u3001\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u5b9f\u884c\u306e\u5404\u6bb5\u968e\u306b\u4ecb\u5165\u3057\u3066\u95a2\u6570\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30b3\u30a2\u30ed\u30b8\u30c3\u30af\u3092\u5909\u66f4\u305b\u305a\u306b\u6b21\u306e\u3088\u3046\u306a\u6a2a\u65ad\u7684\u6a5f\u80fd\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002<\/p>\n<ul data-sourcepos=\"204:1-207:0\">\n<li data-sourcepos=\"204:1-204:47\">\u30ed\u30b0\u8a18\u9332\uff08\u51e6\u7406\u958b\u59cb\u30fb\u7d42\u4e86\u306a\u3069\uff09<\/li>\n<li data-sourcepos=\"205:1-205:71\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\uff0f\u5165\u529b\u691c\u8a3c\uff08\u4e0d\u6b63\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u906e\u65ad\uff09<\/li>\n<li data-sourcepos=\"206:1-207:0\">\u7d50\u679c\u5909\u63db\uff08\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u6574\u5f62\u3001\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3001\u4e0a\u66f8\u304d\uff09<\/li>\n<\/ul>\n<p data-sourcepos=\"208:1-208:112\">Agent Framework \u306b\u306f\u3001\u51e6\u7406\u306e\u7c92\u5ea6\u306b\u5fdc\u3058\u3066 3 \u7a2e\u985e\u306e\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<div class=\"s_table\"><table data-sourcepos=\"211:1-215:102\">\n<thead>\n<tr data-sourcepos=\"211:1-211:70\">\n<th data-sourcepos=\"211:2-211:15\">\u7a2e\u5225<\/th>\n<th data-sourcepos=\"211:17-211:40\">\u4ecb\u5165\u30dd\u30a4\u30f3\u30c8<\/th>\n<th data-sourcepos=\"211:42-211:69\">\u4e3b\u7528\u9014<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr data-sourcepos=\"213:1-213:98\">\n<td data-sourcepos=\"213:2-213:11\">Agent<\/td>\n<td data-sourcepos=\"213:13-213:36\">Run \u306e\u958b\u59cb\u301c\u7d42\u4e86<\/td>\n<td data-sourcepos=\"213:38-213:97\">\u5b9f\u884c\u8a08\u6e2c\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u56de\u7b54\u3001\u5168\u4f53\u30dd\u30ea\u30b7\u30fc<\/td>\n<\/tr>\n<tr data-sourcepos=\"214:1-214:90\">\n<td data-sourcepos=\"214:2-214:11\">Chat<\/td>\n<td data-sourcepos=\"214:13-214:34\">LLM \u547c\u51fa\u3057\u524d\u5f8c<\/td>\n<td data-sourcepos=\"214:36-214:89\">PII \u30de\u30b9\u30af\u3001\u30d7\u30ed\u30f3\u30d7\u30c8\u5f37\u5316\u3001\u5dee\u3057\u66ff\u3048<\/td>\n<\/tr>\n<tr data-sourcepos=\"215:1-215:102\">\n<td data-sourcepos=\"215:2-215:11\">Function<\/td>\n<td data-sourcepos=\"215:13-215:40\">\u30c4\u30fc\u30eb\u547c\u51fa\u3057\u524d\u5f8c<\/td>\n<td data-sourcepos=\"215:42-215:101\">\u5f15\u6570\u691c\u8a3c\u3001\u30db\u30ef\u30a4\u30c8\/\u30d6\u30e9\u30c3\u30af\u30ea\u30b9\u30c8\u3001\u627f\u8a8d<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<details>\n<summary>\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9<\/summary>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"219:1-311:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"kn\">import<\/span> <span class=\"n\">asyncio<\/span>\n<span class=\"kn\">import<\/span> <span class=\"n\">os<\/span>\n\n<span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">ChatAgent<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">agent_framework.azure<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">AzureOpenAIChatClient<\/span>\n\n<span class=\"kn\">from<\/span> <span class=\"n\">typing<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">Callable<\/span><span class=\"p\">,<\/span> <span class=\"n\">Awaitable<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">AgentRunContext<\/span><span class=\"p\">,<\/span> <span class=\"n\">FunctionInvocationContext<\/span><span class=\"p\">,<\/span> <span class=\"n\">ChatContext<\/span>\n\n\n<span class=\"c1\"># ---------- \u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u5b9a\u7fa9 ----------\n<\/span><span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">logging_agent_middleware<\/span><span class=\"p\">(<\/span>\n    <span class=\"n\">context<\/span><span class=\"p\">:<\/span> <span class=\"n\">AgentRunContext<\/span><span class=\"p\">,<\/span>\n    <span class=\"nb\">next<\/span><span class=\"p\">:<\/span> <span class=\"n\">Callable<\/span><span class=\"p\">[[<\/span><span class=\"n\">AgentRunContext<\/span><span class=\"p\">],<\/span> <span class=\"n\">Awaitable<\/span><span class=\"p\">[<\/span><span class=\"bp\">None<\/span><span class=\"p\">]],<\/span>\n<span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">Agent\u5b9f\u884c\u306e\u524d\u5f8c\u3067\u30ed\u30b0\u51fa\u529b<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">&gt; Before Agent Execution<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">await<\/span> <span class=\"nf\">next<\/span><span class=\"p\">(<\/span><span class=\"n\">context<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">&gt; After Agent Execution<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n<span class=\"c1\"># ---------- \u30c1\u30e3\u30c3\u30c8\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u5b9a\u7fa9 ----------\n<\/span><span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">logging_chat_middleware<\/span><span class=\"p\">(<\/span>\n    <span class=\"n\">context<\/span><span class=\"p\">:<\/span> <span class=\"n\">ChatContext<\/span><span class=\"p\">,<\/span>\n    <span class=\"nb\">next<\/span><span class=\"p\">:<\/span> <span class=\"n\">Callable<\/span><span class=\"p\">[[<\/span><span class=\"n\">ChatContext<\/span><span class=\"p\">],<\/span> <span class=\"n\">Awaitable<\/span><span class=\"p\">[<\/span><span class=\"bp\">None<\/span><span class=\"p\">]],<\/span>\n<span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">LLM\u547c\u3073\u51fa\u3057\u524d\u5f8c\u3067\u30ed\u30b0\u51fa\u529b<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">  &gt; Before LLM Call. Messages: <\/span><span class=\"si\">{<\/span><span class=\"nf\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">context<\/span><span class=\"p\">.<\/span><span class=\"n\">messages<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">for<\/span> <span class=\"n\">m<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">context<\/span><span class=\"p\">.<\/span><span class=\"n\">messages<\/span><span class=\"p\">:<\/span>\n        <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">    - <\/span><span class=\"si\">{<\/span><span class=\"n\">m<\/span><span class=\"p\">.<\/span><span class=\"n\">role<\/span><span class=\"si\">}<\/span><span class=\"s\">: <\/span><span class=\"si\">{<\/span><span class=\"n\">m<\/span><span class=\"p\">.<\/span><span class=\"n\">text<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>  \n    <span class=\"k\">await<\/span> <span class=\"nf\">next<\/span><span class=\"p\">(<\/span><span class=\"n\">context<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">  &gt; After LLM Call<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n<span class=\"c1\"># ---------- \u95a2\u6570\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u5b9a\u7fa9 ----------\n<\/span><span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">logging_function_middleware<\/span><span class=\"p\">(<\/span>\n    <span class=\"n\">context<\/span><span class=\"p\">:<\/span> <span class=\"n\">FunctionInvocationContext<\/span><span class=\"p\">,<\/span>\n    <span class=\"nb\">next<\/span><span class=\"p\">:<\/span> <span class=\"n\">Callable<\/span><span class=\"p\">[[<\/span><span class=\"n\">FunctionInvocationContext<\/span><span class=\"p\">],<\/span> <span class=\"n\">Awaitable<\/span><span class=\"p\">[<\/span><span class=\"bp\">None<\/span><span class=\"p\">]],<\/span>\n<span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u30c4\u30fc\u30eb\u547c\u3073\u51fa\u3057\u524d\u5f8c\u3067\u30ed\u30b0\u51fa\u529b<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">    &gt; Before Function Call: <\/span><span class=\"si\">{<\/span><span class=\"n\">context<\/span><span class=\"p\">.<\/span><span class=\"n\">function<\/span><span class=\"p\">.<\/span><span class=\"n\">name<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">await<\/span> <span class=\"nf\">next<\/span><span class=\"p\">(<\/span><span class=\"n\">context<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">    &gt; After Function Call<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n<span class=\"c1\"># ---------- \u95a2\u6570\u5b9a\u7fa9 ----------\n<\/span><span class=\"k\">def<\/span> <span class=\"nf\">get_weather<\/span><span class=\"p\">(<\/span><span class=\"n\">location<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"nb\">str<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">Get weather for a location.<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">        - Executing get_weather function.<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">return<\/span> <span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Weather in <\/span><span class=\"si\">{<\/span><span class=\"n\">location<\/span><span class=\"si\">}<\/span><span class=\"s\">: 72\u00b0F and sunny<\/span><span class=\"sh\">\"<\/span>\n\n<span class=\"c1\"># ---------- \u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u4f5c\u6210 ----------\n<\/span><span class=\"n\">agent<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">ChatAgent<\/span><span class=\"p\">(<\/span>\n    <span class=\"n\">name<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">WeatherAgent<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">chat_client<\/span><span class=\"o\">=<\/span><span class=\"nc\">AzureOpenAIChatClient<\/span><span class=\"p\">(<\/span>\n        <span class=\"n\">api_key<\/span><span class=\"o\">=<\/span><span class=\"n\">API_KEY<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">endpoint<\/span><span class=\"o\">=<\/span><span class=\"n\">ENDPOINT<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">deployment_name<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">gpt-4.1<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">),<\/span>\n    <span class=\"n\">instructions<\/span> <span class=\"o\">=<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">\u3042\u306a\u305f\u306f\u512a\u308c\u305f\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8\u3067\u3059\u3002<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">tools<\/span><span class=\"o\">=<\/span><span class=\"p\">[<\/span><span class=\"n\">get_weather<\/span><span class=\"p\">],<\/span>\n    <span class=\"n\">middleware<\/span><span class=\"o\">=<\/span><span class=\"p\">[<\/span>\n        <span class=\"n\">logging_agent_middleware<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">logging_function_middleware<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">logging_chat_middleware<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">],<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"c1\"># ---------- \u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u5b9f\u884c ----------\n<\/span><span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">main<\/span><span class=\"p\">():<\/span>\n\n    <span class=\"n\">response<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">agent<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\u30d1\u30ea\u306e\u6c17\u6e29\u306f\uff1f<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Assistant: <\/span><span class=\"si\">{<\/span><span class=\"n\">response<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n<span class=\"n\">asyncio<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"nf\">main<\/span><span class=\"p\">())<\/span>\n\n\n<span class=\"c1\"># ---------- \u51fa\u529b\u4f8b ----------\n# &gt; Before Agent Execution\n#   &gt; Before LLM Call. Messages: 2\n#     - system: \u3042\u306a\u305f\u306f\u512a\u308c\u305f\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8\u3067\u3059\u3002\n#     - user: \u30d1\u30ea\u306e\u6c17\u6e29\u306f\uff1f\n#   &gt; After LLM Call\n#     &gt; Before Function Call: get_weather\n#         - Executing get_weather function.\n#     &gt; After Function Call\n#   &gt; Before LLM Call. Messages: 4\n#     - system: \u3042\u306a\u305f\u306f\u512a\u308c\u305f\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8\u3067\u3059\u3002\n#     - user: \u30d1\u30ea\u306e\u6c17\u6e29\u306f\uff1f\n#     - assistant:\n#     - tool:\n#   &gt; After LLM Call\n# &gt; After Agent Execution\n# Assistant: \u30d1\u30ea\u306e\u6c17\u6e29\u306f\u6442\u6c0f\u7d0422\u00b0C\uff08\u83ef\u6c0f72\u00b0F\uff09\u3067\u3001\u6674\u308c\u3066\u3044\u307e\u3059\u3002\n<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<\/details>\n<h2 data-sourcepos=\"317:1-317:12\">\n<span id=\"\u30e1\u30e2\u30ea\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E3%83%A1%E3%83%A2%E3%83%AA\"><i class=\"fa fa-link\"\/><\/a>\u30e1\u30e2\u30ea<\/h2>\n<p data-sourcepos=\"318:1-318:294\">Agent Framework \u3067\u306f\u3001\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u8a18\u61b6\u306b\u304a\u3044\u3066\u3001 <strong>\u77ed\u671f\u8a18\u61b6\uff08\u30b9\u30ec\u30c3\u30c9\uff0f\u4f1a\u8a71\u5c65\u6b74\uff09<\/strong> \u3068 <strong>\u9577\u671f\u8a18\u61b6\uff08\u55dc\u597d\u30fb\u77e5\u8b58\u306e\u6301\u3061\u8d8a\u3057\uff09<\/strong> \u306e\u4e8c\u5c64\u3092\u6a19\u6e96\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001<strong>\u4f1a\u8a71\u7d99\u7d9a<\/strong>\u3068<strong>\u30d1\u30fc\u30bd\u30ca\u30e9\u30a4\u30ba<\/strong>\u3092\u4e21\u7acb\u3057\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"320:1-320:122\"><a target=\"_blank\" href=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F0e15474d-27cb-42f8-99ff-e332b906b871.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=ed08cacefc7c293ebb66d31507e9b75f\" target=\"_blank\" rel=\"nofollow noopener\"><img decoding=\"async\" src=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F0e15474d-27cb-42f8-99ff-e332b906b871.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=ed08cacefc7c293ebb66d31507e9b75f\" alt=\"image.png\" srcset=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F0e15474d-27cb-42f8-99ff-e332b906b871.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;w=1400&amp;fit=max&amp;s=2e32a41b1a166bcb9d15f366bca88dad 1x\" data-canonical-src=\"https:\/\/qiita-image-store.s3.ap-northeast-1.amazonaws.com\/0\/1273574\/0e15474d-27cb-42f8-99ff-e332b906b871.png\" loading=\"lazy\"\/><\/a><\/p>\n<h3 data-sourcepos=\"324:1-324:16\">\n<span id=\"\u77ed\u671f\u8a18\u61b6\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E7%9F%AD%E6%9C%9F%E8%A8%98%E6%86%B6\"><i class=\"fa fa-link\"\/><\/a>\u77ed\u671f\u8a18\u61b6<\/h3>\n<p data-sourcepos=\"325:1-325:184\">\u77ed\u671f\u8a18\u61b6\u306f\u3001<strong>AgentThread<\/strong> \u3068\u3057\u3066\u7ba1\u7406\u3055\u308c\u3001\u540c\u3058\u30b9\u30ec\u30c3\u30c9\u3092\u6e21\u3057\u7d9a\u3051\u308b\u3053\u3068\u3067\u300c\u524d\u306e\u767a\u8a71\u3084\u30c4\u30fc\u30eb\u5b9f\u884c\u7d50\u679c\u300d\u3092\u8e0f\u307e\u3048\u305f\u5fdc\u7b54\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"329:1-340:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"c1\"># ---------- \u65b0\u898f\u30b9\u30ec\u30c3\u30c9\u3092\u4f5c\u6210 ----------\n<\/span><span class=\"n\">thread<\/span> <span class=\"o\">=<\/span> <span class=\"n\">agent<\/span><span class=\"p\">.<\/span><span class=\"nf\">get_new_thread<\/span><span class=\"p\">()<\/span>\n\n<span class=\"c1\"># ---------- 1 \u30bf\u30fc\u30f3\u76ee ----------\n<\/span><span class=\"n\">response<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">agent<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\u65e5\u672c\u306e\u9996\u90fd\u306f\uff1f<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">thread<\/span><span class=\"o\">=<\/span><span class=\"n\">thread<\/span><span class=\"p\">)<\/span>\n<span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">response<\/span><span class=\"p\">)<\/span>  <span class=\"c1\"># \u4f8b: \u6771\u4eac\u3067\u3059\u3002\n<\/span>\n<span class=\"c1\"># ---------- 2 \u30bf\u30fc\u30f3\u76ee ----------\n<\/span><span class=\"n\">response<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">agent<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\u305d\u306e\u4eba\u53e3\u306f\uff1f<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">thread<\/span><span class=\"o\">=<\/span><span class=\"n\">thread<\/span><span class=\"p\">)<\/span>\n<span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">response<\/span><span class=\"p\">)<\/span>  <span class=\"c1\"># \u4f8b: \u6771\u4eac\u90fd\u306e\u63a8\u8a08\u4eba\u53e3\u306f\u7d041,400\u4e07\u4eba\u3067\u3059\u3002\n<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<h3 data-sourcepos=\"344:1-344:16\">\n<span id=\"\u9577\u671f\u8a18\u61b6\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E9%95%B7%E6%9C%9F%E8%A8%98%E6%86%B6\"><i class=\"fa fa-link\"\/><\/a>\u9577\u671f\u8a18\u61b6<\/h3>\n<p data-sourcepos=\"346:1-348:96\">\u9577\u671f\u8a18\u61b6\u306f\u30b9\u30ec\u30c3\u30c9\u3092\u8de8\u3044\u3067\u6b8b\u3059\u77e5\u8b58\u3092\u6271\u3044\u307e\u3059\u3002<br \/><strong>ContextProvider<\/strong> \u3067\u69cb\u6210\u3055\u308c\u3001\u4fdd\u7ba1\u30fb\u7ba1\u7406\u306f\u3001<code>AgentThread<\/code> \u5185\u306e <code>context_provider<\/code>\uff08\uff1d<code>AggregateContextProvider<\/code>\uff09\u306b\u7d10\u3065\u304d\u307e\u3059\u3002<br \/>\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u5b9f\u884c\u306e <strong>\u524d\u5f8c<\/strong> \u306b\u30e1\u30bd\u30c3\u30c9\u3092\u5dee\u3057\u8fbc\u3093\u3067\u8aad\u307f\u66f8\u304d\u3057\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"350:1-350:122\"><a target=\"_blank\" href=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2Fd974e737-d02e-44f8-914a-d83c3c32554e.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=721cc0b4525469a72a9bd835b1c51442\" target=\"_blank\" rel=\"nofollow noopener\"><img decoding=\"async\" src=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2Fd974e737-d02e-44f8-914a-d83c3c32554e.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=721cc0b4525469a72a9bd835b1c51442\" alt=\"image.png\" srcset=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2Fd974e737-d02e-44f8-914a-d83c3c32554e.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;w=1400&amp;fit=max&amp;s=e586f4fc6fc9536fce7b61268d272c8a 1x\" data-canonical-src=\"https:\/\/qiita-image-store.s3.ap-northeast-1.amazonaws.com\/0\/1273574\/d974e737-d02e-44f8-914a-d83c3c32554e.png\" loading=\"lazy\"\/><\/a><\/p>\n<div class=\"s_table\"><table data-sourcepos=\"353:1-356:118\">\n<thead>\n<tr data-sourcepos=\"353:1-353:104\">\n<th data-sourcepos=\"353:2-353:24\">\u30bf\u30a4\u30df\u30f3\u30b0<\/th>\n<th data-sourcepos=\"353:26-353:53\">\u30e1\u30bd\u30c3\u30c9<\/th>\n<th data-sourcepos=\"353:55-353:103\">\u5f79\u5272<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr data-sourcepos=\"355:1-355:179\">\n<td data-sourcepos=\"355:2-355:38\">\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u5b9f\u884c <strong>\u524d<\/strong>\n<\/td>\n<td data-sourcepos=\"355:40-355:59\"><code>invoking()<\/code><\/td>\n<td data-sourcepos=\"355:61-355:178\">\u8a18\u61b6\u304b\u3089 <strong>instructions \/ messages \/ tools<\/strong> \u3092\u7d44\u307f\u7acb\u3066\u3001LLM \u3078\u6e21\u3059\u8ffd\u52a0\u306e\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u6ce8\u5165<\/td>\n<\/tr>\n<tr data-sourcepos=\"356:1-356:118\">\n<td data-sourcepos=\"356:2-356:38\">\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u5b9f\u884c <strong>\u5f8c<\/strong>\n<\/td>\n<td data-sourcepos=\"356:40-356:59\"><code>invoked()<\/code><\/td>\n<td data-sourcepos=\"356:61-356:117\">\u4f1a\u8a71\u304b\u3089\u5b66\u7fd2\u3059\u3079\u304d\u60c5\u5831\u3092\u62bd\u51fa\u3057\u4fdd\u5b58<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<details>\n<summary>\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9<\/summary>\n<p data-sourcepos=\"361:1-361:108\">\u4ee5\u4e0b\u306f\u300c\u30e6\u30fc\u30b6\u30fc\u304c\u597d\u304d\u306a\u90fd\u5e02\u300d\u3092\u5b66\u7fd2\u3057\u3001\u6b21\u56de\u306e\u56de\u7b54\u3067\u6d3b\u7528\u3059\u308b\u5b9f\u88c5\u4f8b\u3067\u3059\u3002<\/p>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"363:1-419:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">ContextProvider<\/span><span class=\"p\">,<\/span> <span class=\"n\">Context<\/span>\n\n<span class=\"c1\"># ---------- \u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u5b9a\u7fa9 ----------\n<\/span><span class=\"k\">class<\/span> <span class=\"nc\">UserPrefMemory<\/span><span class=\"p\">(<\/span><span class=\"n\">ContextProvider<\/span><span class=\"p\">):<\/span>\n    <span class=\"k\">def<\/span> <span class=\"nf\">__init__<\/span><span class=\"p\">(<\/span><span class=\"n\">self<\/span><span class=\"p\">):<\/span>\n        <span class=\"n\">self<\/span><span class=\"p\">.<\/span><span class=\"n\">pref_city<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">None<\/span>  <span class=\"c1\"># \u30e6\u30fc\u30b6\u30fc\u55dc\u597d\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\uff08\u4f8b\uff1a\u597d\u304d\u306a\u90fd\u5e02\uff09\n<\/span>\n    <span class=\"c1\"># \u5b9f\u884c\"\u524d\" : \u8a18\u61b6\u3092LLM\u306b\u6ce8\u5165\n<\/span>    <span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">invoking<\/span><span class=\"p\">(<\/span><span class=\"n\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">messages<\/span><span class=\"p\">,<\/span> <span class=\"o\">**<\/span><span class=\"n\">kwargs<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"n\">Context<\/span><span class=\"p\">:<\/span>\n        <span class=\"k\">if<\/span> <span class=\"n\">self<\/span><span class=\"p\">.<\/span><span class=\"n\">pref_city<\/span><span class=\"p\">:<\/span>\n            <span class=\"k\">return<\/span> <span class=\"nc\">Context<\/span><span class=\"p\">(<\/span>\n                <span class=\"n\">instructions<\/span><span class=\"o\">=<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\u30e6\u30fc\u30b6\u30fc\u306f <\/span><span class=\"si\">{<\/span><span class=\"n\">self<\/span><span class=\"p\">.<\/span><span class=\"n\">pref_city<\/span><span class=\"si\">}<\/span><span class=\"s\"> \u304c\u597d\u304d\u3002\u56de\u7b54\u3067\u512a\u5148\u7684\u306b\u89e6\u308c\u308b\u3053\u3068\u3002<\/span><span class=\"sh\">\"<\/span>\n                <span class=\"c1\"># instructions \u3060\u3051\u3067\u306a\u304f messages \/ tools \u3082\u8ffd\u52a0\u53ef\u80fd \n<\/span>            <span class=\"p\">)<\/span>\n        <span class=\"k\">return<\/span> <span class=\"nc\">Context<\/span><span class=\"p\">()<\/span>\n\n    <span class=\"c1\"># \u5b9f\u884c\"\u5f8c\" : \u65b0\u3057\u3044\u55dc\u597d\u306e\u691c\u51fa \u2192 \u8a18\u61b6\n<\/span>    <span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">invoked<\/span><span class=\"p\">(<\/span><span class=\"n\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">request_messages<\/span><span class=\"p\">,<\/span> <span class=\"n\">response_messages<\/span><span class=\"o\">=<\/span><span class=\"bp\">None<\/span><span class=\"p\">,<\/span> <span class=\"o\">**<\/span><span class=\"n\">kwargs<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n        <span class=\"n\">text<\/span> <span class=\"o\">=<\/span> <span class=\"n\">request_messages<\/span><span class=\"p\">[<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">].<\/span><span class=\"n\">text<\/span> <span class=\"k\">if<\/span> <span class=\"n\">request_messages<\/span> <span class=\"k\">else<\/span> <span class=\"sh\">\"\"<\/span>\n        <span class=\"k\">if<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">I like <\/span><span class=\"sh\">\"<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">text<\/span><span class=\"p\">:<\/span>\n            <span class=\"n\">self<\/span><span class=\"p\">.<\/span><span class=\"n\">pref_city<\/span> <span class=\"o\">=<\/span> <span class=\"n\">text<\/span><span class=\"p\">.<\/span><span class=\"nf\">split<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">I like <\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)[<\/span><span class=\"mi\">1<\/span><span class=\"p\">].<\/span><span class=\"nf\">split<\/span><span class=\"p\">()[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span>\n\n<span class=\"c1\"># ---------- \u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u521d\u671f\u5316 ----------\n<\/span><span class=\"n\">memory<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">UserPrefMemory<\/span><span class=\"p\">()<\/span>\n\n<span class=\"c1\"># ---------- \u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30fb\u30b9\u30ec\u30c3\u30c9\u306e\u69cb\u7bc9 ----------\n<\/span><span class=\"n\">agent<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">ChatAgent<\/span><span class=\"p\">(<\/span>\n    <span class=\"n\">name<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">MemoryAgent<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">chat_client<\/span><span class=\"o\">=<\/span><span class=\"nc\">AzureOpenAIChatClient<\/span><span class=\"p\">(...),<\/span>\n    <span class=\"n\">instructions<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\u6587\u8108\u3092\u6d3b\u7528\u3057\u3066\u4e01\u5be7\u306b\u7b54\u3048\u308b\u3002<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">context_providers<\/span><span class=\"o\">=<\/span><span class=\"p\">[<\/span><span class=\"n\">memory<\/span><span class=\"p\">],<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"n\">thread<\/span> <span class=\"o\">=<\/span> <span class=\"n\">agent<\/span><span class=\"p\">.<\/span><span class=\"nf\">get_new_thread<\/span><span class=\"p\">()<\/span>\n\n<span class=\"c1\"># ---------- \u5b9f\u884c ----------\n<\/span><span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">main<\/span><span class=\"p\">():<\/span>\n\n    <span class=\"c1\"># 1\u56de\u76ee\uff1a\u5b66\u7fd2\u30d5\u30a7\u30fc\u30ba\n<\/span>    <span class=\"k\">await<\/span> <span class=\"n\">agent<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">I like Paris<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">thread<\/span><span class=\"o\">=<\/span><span class=\"n\">thread<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"c1\"># 2\u56de\u76ee\uff1a\u6d3b\u7528\u30d5\u30a7\u30fc\u30ba\uff08Paris \u304c\u56de\u7b54\u306b\u53cd\u6620\u3055\u308c\u308b\uff09\n<\/span>    <span class=\"k\">await<\/span> <span class=\"n\">agent<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\u304a\u3059\u3059\u3081\u30b9\u30dd\u30c3\u30c8\u306f\uff1f<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">thread<\/span><span class=\"o\">=<\/span><span class=\"n\">thread<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"c1\"># \u9577\u671f\u8a18\u61b6\u3092\u78ba\u8a8d\n<\/span>    <span class=\"n\">user_pref_memory<\/span> <span class=\"o\">=<\/span> <span class=\"n\">thread<\/span><span class=\"p\">.<\/span><span class=\"n\">context_provider<\/span><span class=\"p\">.<\/span><span class=\"n\">providers<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">user_pref_memory<\/span><span class=\"p\">:<\/span>\n        <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">=== \u8a18\u61b6\u3055\u308c\u305f\u60c5\u5831 ===<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\u30e6\u30fc\u30b6\u30fc\u306e\u597d\u307f\u306e\u90fd\u5e02: <\/span><span class=\"si\">{<\/span><span class=\"n\">user_pref_memory<\/span><span class=\"p\">.<\/span><span class=\"n\">pref_city<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n<span class=\"n\">asyncio<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"nf\">main<\/span><span class=\"p\">())<\/span>\n\n<span class=\"c1\"># ---------- \u51fa\u529b\u4f8b ----------\n# === \u8a18\u61b6\u3055\u308c\u305f\u60c5\u5831 ===\n# \u30e6\u30fc\u30b6\u30fc\u306e\u597d\u307f\u306e\u90fd\u5e02: Paris\n<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<\/details>\n<h2 data-sourcepos=\"427:1-427:9\">\n<span id=\"\u6982\u8981-2\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E6%A6%82%E8%A6%81-2\"><i class=\"fa fa-link\"\/><\/a>\u6982\u8981<\/h2>\n<p data-sourcepos=\"428:1-429:241\">Workflows \u306f\u3001\u8907\u6570\u306e Executor \u3068\u305d\u308c\u3089\u3092\u7d50\u3076 Edge \u3092\u7d44\u307f\u5408\u308f\u305b\u3001\u51e6\u7406\u306e\u30d5\u30ed\u30fc\u3092\u30b0\u30e9\u30d5\u3068\u3057\u3066\u8868\u73fe\u3059\u308b\u4ed5\u7d44\u307f\u3067\u3059\u3002<br \/>Agent Framework \u3067\u306f\u3001\u4e26\u5217\u5b9f\u884c\u3084\u30d5\u30a1\u30f3\u30a2\u30a6\u30c8\u30fb\u30d5\u30a1\u30f3\u30a4\u30f3\u3001\u72b6\u614b\u7ba1\u7406\u3001Human-in-the-Loop \u306a\u3069\u3092\u99c6\u4f7f\u3057\u3066\u8907\u96d1\u306a\u30d3\u30b8\u30cd\u30b9\u30d7\u30ed\u30bb\u30b9\u3092\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3068\u3057\u3066\u5b9a\u7fa9\u3057\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"431:1-431:122\"><a target=\"_blank\" href=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F3e40e24b-db67-4957-9142-3b6a2d03ecd9.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=bb75ab37004b7a922fa334b5132678ee\" target=\"_blank\" rel=\"nofollow noopener\"><img decoding=\"async\" src=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F3e40e24b-db67-4957-9142-3b6a2d03ecd9.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=bb75ab37004b7a922fa334b5132678ee\" alt=\"image.png\" srcset=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F3e40e24b-db67-4957-9142-3b6a2d03ecd9.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;w=1400&amp;fit=max&amp;s=ab050511b3ecc50317ca18ce47553571 1x\" data-canonical-src=\"https:\/\/qiita-image-store.s3.ap-northeast-1.amazonaws.com\/0\/1273574\/3e40e24b-db67-4957-9142-3b6a2d03ecd9.png\" loading=\"lazy\"\/><\/a><\/p>\n<h2 data-sourcepos=\"433:1-433:36\">\n<span id=\"\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u69cb\u6210\u8981\u7d20\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC%E3%81%AE%E6%A7%8B%E6%88%90%E8%A6%81%E7%B4%A0\"><i class=\"fa fa-link\"\/><\/a>\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u69cb\u6210\u8981\u7d20<\/h2>\n<p data-sourcepos=\"434:1-434:67\">Workflows \u306f\u3001\u6b21\u306e 4 \u3064\u306e\u8981\u7d20\u3067\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<div class=\"s_table\"><table data-sourcepos=\"436:1-441:135\">\n<thead>\n<tr data-sourcepos=\"436:1-436:77\">\n<th data-sourcepos=\"436:2-436:21\">\u8981\u7d20\u540d<\/th>\n<th data-sourcepos=\"436:23-436:34\">\u5f79\u5272<\/th>\n<th data-sourcepos=\"436:36-436:76\">\u8aac\u660e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr data-sourcepos=\"438:1-438:131\">\n<td data-sourcepos=\"438:2-438:15\"><strong>Executor<\/strong><\/td>\n<td data-sourcepos=\"438:17-438:36\">\u51e6\u7406\u30e6\u30cb\u30c3\u30c8<\/td>\n<td data-sourcepos=\"438:38-438:130\">\u5165\u529b\u3092\u53d7\u3051\u53d6\u308a\u3001\u51e6\u7406\u3057\u3001\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u307e\u305f\u306f\u6700\u7d42\u51fa\u529b\u3078\u9001\u308b<\/td>\n<\/tr>\n<tr data-sourcepos=\"439:1-439:117\">\n<td data-sourcepos=\"439:2-439:15\"><strong>Edge<\/strong><\/td>\n<td data-sourcepos=\"439:17-439:28\">\u63a5\u7d9a<\/td>\n<td data-sourcepos=\"439:30-439:116\">Executor \u540c\u58eb\u3092\u3064\u306a\u304e\u3001\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u30fb\u6761\u4ef6\u5206\u5c90\u30fb\u4e26\u5217\u5316\u3092\u8868\u73fe<\/td>\n<\/tr>\n<tr data-sourcepos=\"440:1-440:97\">\n<td data-sourcepos=\"440:2-440:15\"><strong>Workflow<\/strong><\/td>\n<td data-sourcepos=\"440:17-440:30\">\u5b9f\u884c\u5668<\/td>\n<td data-sourcepos=\"440:32-440:96\">Executor \u3068 Edge \u304b\u3089\u306a\u308b<strong>\u6709\u5411\u30b0\u30e9\u30d5<\/strong>\u305d\u306e\u3082\u306e<\/td>\n<\/tr>\n<tr data-sourcepos=\"441:1-441:135\">\n<td data-sourcepos=\"441:2-441:15\"><strong>Event<\/strong><\/td>\n<td data-sourcepos=\"441:17-441:32\">\u53ef\u89b3\u6e2c\u6027<\/td>\n<td data-sourcepos=\"441:34-441:134\">\u5b9f\u884c\u4e2d\u306e\u72b6\u614b\u3084\u5fdc\u7b54\u3092\u8ffd\u8de1\uff08\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0 \/ \u975e\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u4e21\u5bfe\u5fdc\uff09<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<h2 data-sourcepos=\"447:1-447:11\">\n<span id=\"executor\" class=\"fragment\"\/><a target=\"_blank\" href=\"#executor\"><i class=\"fa fa-link\"\/><\/a>Executor<\/h2>\n<p data-sourcepos=\"448:1-449:124\"><code>Executor<\/code> \u306f\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u6700\u5c0f\u5358\u4f4d\u3067\u3059\u3002<br \/><strong>\u5165\u529b\u3092\u53d7\u3051 \u2192 \u51e6\u7406\u3057 \u2192 \u51fa\u529b\uff08\u30e1\u30c3\u30bb\u30fc\u30b8 or \u6700\u7d42\u7d50\u679c\uff09\u3092\u8fd4\u3059<\/strong> \u3068\u3044\u3046\u5f79\u5272\u3092\u6301\u3061\u307e\u3059\u3002<\/p>\n<ul data-sourcepos=\"451:1-453:0\">\n<li data-sourcepos=\"451:1-451:42\">LLM \u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u5185\u5305\u3055\u305b\u308b<\/li>\n<li data-sourcepos=\"452:1-453:0\">Python \u306a\u3069\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u51e6\u7406\u3060\u3051\u3092\u62c5\u5f53\u3055\u305b\u308b<\/li>\n<\/ul>\n<p data-sourcepos=\"454:1-454:45\">\u3068\u3044\u3063\u305f\u4e21\u65b9\u306e\u6d3b\u7528\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<h3 data-sourcepos=\"457:1-457:16\">\n<span id=\"\u5b9a\u7fa9\u65b9\u6cd5\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E5%AE%9A%E7%BE%A9%E6%96%B9%E6%B3%95\"><i class=\"fa fa-link\"\/><\/a>\u5b9a\u7fa9\u65b9\u6cd5<\/h3>\n<p data-sourcepos=\"458:1-458:93\">Executor \u306e\u5b9a\u7fa9\u65b9\u6cd5\u306b\u306f\u3001\u4ee5\u4e0b\u306e 2 \u30d1\u30bf\u30fc\u30f3\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<div class=\"s_table\"><table data-sourcepos=\"460:1-463:119\">\n<thead>\n<tr data-sourcepos=\"460:1-460:83\">\n<th data-sourcepos=\"460:2-460:29\">\u8a18\u6cd5<\/th>\n<th data-sourcepos=\"460:31-460:58\">\u8aac\u660e<\/th>\n<th data-sourcepos=\"460:60-460:82\">\u9069\u3057\u305f\u7528\u9014<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr data-sourcepos=\"462:1-462:141\">\n<td data-sourcepos=\"462:2-462:35\"><strong>\u30af\u30e9\u30b9\u7d99\u627f + <code>@handler<\/code><\/strong><\/td>\n<td data-sourcepos=\"462:37-462:104\">\u5165\u529b\u578b\u3054\u3068\u306b\u8907\u6570\u30cf\u30f3\u30c9\u30e9\u3092\u6301\u3066\u308b\u3002\u5236\u5fa1\u304c\u660e\u78ba<\/td>\n<td data-sourcepos=\"462:106-462:140\">\u72b6\u614b\u7ba1\u7406\u30fb\u8907\u6570\u5165\u529b\u5bfe\u5fdc<\/td>\n<\/tr>\n<tr data-sourcepos=\"463:1-463:119\">\n<td data-sourcepos=\"463:2-463:39\"><strong>\u95a2\u6570\u30d9\u30fc\u30b9\uff08<code>@executor<\/code>\uff09<\/strong><\/td>\n<td data-sourcepos=\"463:41-463:88\">\u6700\u3082\u7c21\u6f54\u30021\u3064\u306e\u51e6\u7406\u3067\u5b8c\u7d50<\/td>\n<td data-sourcepos=\"463:90-463:118\">\u5c0f\u3055\u306a\u95a2\u6570\u7684\u51e6\u7406<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<p data-sourcepos=\"465:1-465:25\"><strong>\u30af\u30e9\u30b9\u30d9\u30fc\u30b9\u4f8b<\/strong><\/p>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"467:1-472:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"k\">class<\/span> <span class=\"nc\">UpperCase<\/span><span class=\"p\">(<\/span><span class=\"n\">Executor<\/span><span class=\"p\">):<\/span>\n    <span class=\"nd\">@handler<\/span>\n    <span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">to_upper_case<\/span><span class=\"p\">(<\/span><span class=\"n\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">text<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">:<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">[<\/span><span class=\"nb\">str<\/span><span class=\"p\">])<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n        <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">send_message<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">.<\/span><span class=\"nf\">upper<\/span><span class=\"p\">())<\/span>\n<\/code><\/pre>\n<\/div>\n<\/div>\n<p data-sourcepos=\"474:1-474:22\"><strong>\u95a2\u6570\u30d9\u30fc\u30b9\u4f8b<\/strong><\/p>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"476:1-480:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"nd\">@executor<\/span><span class=\"p\">(<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">upper_case_executor<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">upper_case<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">:<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">[<\/span><span class=\"nb\">str<\/span><span class=\"p\">])<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n    <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">send_message<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">.<\/span><span class=\"nf\">upper<\/span><span class=\"p\">())<\/span>\n<\/code><\/pre>\n<\/div>\n<\/div>\n<h3 data-sourcepos=\"483:1-483:28\">\n<span id=\"\u578b\u8a2d\u8a08\u304c\u91cd\u8981\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E5%9E%8B%E8%A8%AD%E8%A8%88%E3%81%8C%E9%87%8D%E8%A6%81\"><i class=\"fa fa-link\"\/><\/a>\u300c\u578b\u300d\u8a2d\u8a08\u304c\u91cd\u8981<\/h3>\n<p data-sourcepos=\"485:1-485:74\">Agent Framework \u3067\u306f Executor \u306b <strong>\u578b\u6ce8\u91c8<\/strong> \u3092\u4ed8\u3051\u308b\u3053\u3068\u3067\u3001<\/p>\n<ul data-sourcepos=\"487:1-490:0\">\n<li data-sourcepos=\"487:1-487:56\">\u300c\u3069\u3093\u306a\u30c7\u30fc\u30bf\u3092\u53d7\u3051\u53d6\u308b\u304b\u300d(Input Type)<\/li>\n<li data-sourcepos=\"488:1-488:39\">\u300c\u4e0b\u6d41\u306b\u4f55\u3092\u6e21\u3059\u304b\u300d(T_Out)<\/li>\n<li data-sourcepos=\"489:1-490:0\">\u300c\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306b\u6700\u7d42\u7684\u306b\u8fd4\u3059\u5024\u306f\u4f55\u304b\u300d(T_W_Out)<\/li>\n<\/ul>\n<p data-sourcepos=\"491:1-491:33\">\u3092\u660e\u793a\u7684\u306b\u5ba3\u8a00\u3057\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"493:1-494:94\">\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u69cb\u7bc9\u6642\uff08build \u6642\uff09\u306b\u578b\u6574\u5408\u6027\u304c\u691c\u67fb\u3055\u308c\u308b\u305f\u3081\u3001<br \/><strong>\u5927\u898f\u6a21\u30fb\u8907\u96d1\u306a\u30d5\u30ed\u30fc\u3067\u3082\u5b89\u5168\u306b\u69cb\u7bc9\u3067\u304d\u308b<\/strong>\u306e\u304c\u5927\u304d\u306a\u7279\u5fb4\u3067\u3059\u3002<\/p>\n<p data-sourcepos=\"497:1-497:122\"><a target=\"_blank\" href=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2Faae15277-95a7-49e8-b42f-a17f11c216ea.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=16740c9924382a29f04031f85c66313b\" target=\"_blank\" rel=\"nofollow noopener\"><img decoding=\"async\" src=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2Faae15277-95a7-49e8-b42f-a17f11c216ea.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=16740c9924382a29f04031f85c66313b\" alt=\"image.png\" srcset=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2Faae15277-95a7-49e8-b42f-a17f11c216ea.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;w=1400&amp;fit=max&amp;s=36f83d762723267e99b60ebcc0142fa6 1x\" data-canonical-src=\"https:\/\/qiita-image-store.s3.ap-northeast-1.amazonaws.com\/0\/1273574\/aae15277-95a7-49e8-b42f-a17f11c216ea.png\" loading=\"lazy\"\/><\/a><\/p>\n<p data-sourcepos=\"500:1-501:60\"><strong>\u5165\u529b\u578b\uff08Input Type\uff09<\/strong><br \/>Executor \u304c <strong>\u4f55\u3092\u53d7\u4fe1\u3059\u308b\u304b<\/strong> \u3092\u793a\u3059\u578b\u3067\u3059\u3002<\/p>\n<div class=\"s_table\"><table data-sourcepos=\"503:1-506:55\">\n<thead>\n<tr data-sourcepos=\"503:1-503:77\">\n<th data-sourcepos=\"503:2-503:17\">\u30b9\u30bf\u30a4\u30eb<\/th>\n<th data-sourcepos=\"503:19-503:76\">\u5165\u529b\u578b\uff08Input Type\uff09\u306e\u6307\u5b9a\u7b87\u6240<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr data-sourcepos=\"505:1-505:98\">\n<td data-sourcepos=\"505:2-505:21\">\u30af\u30e9\u30b9\u30d9\u30fc\u30b9<\/td>\n<td data-sourcepos=\"505:23-505:97\">\n<code>@handler<\/code> \u30e1\u30bd\u30c3\u30c9\u306e<strong>\u7b2c2\u5f15\u6570<\/strong> \uff08\u203b \u7b2c\u4e00\u5f15\u6570\u306f <code>self<\/code>\uff09<\/td>\n<\/tr>\n<tr data-sourcepos=\"506:1-506:55\">\n<td data-sourcepos=\"506:2-506:19\">\u95a2\u6570\u30d9\u30fc\u30b9<\/td>\n<td data-sourcepos=\"506:21-506:54\">\u95a2\u6570\u306e<strong>\u7b2c1\u5f15\u6570<\/strong>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<p data-sourcepos=\"509:1-510:70\"><strong>\u30e1\u30c3\u30bb\u30fc\u30b8\u9001\u4fe1\u578b\uff08T_Out\uff09<\/strong><br \/>\u6b21\u306e Executor \u306b\u9001\u308b\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u578b\u3068\u9001\u4ed8\u65b9\u6cd5\u3067\u3059\u3002<\/p>\n<ul data-sourcepos=\"512:1-515:0\">\n<li data-sourcepos=\"512:1-512:89\">\n<code>WorkflowContext[T_Out, T_W_Out]<\/code> \u306e <strong>1 \u756a\u76ee\u306e T_Uot<\/strong> \u3067\u578b\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<\/li>\n<li data-sourcepos=\"513:1-515:0\">\n<code>ctx.send_message()<\/code> \u3067 <strong>\u6b21\u306e Executor \u3078\u9001\u308b\u30c7\u30fc\u30bf<\/strong> \u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<\/li>\n<\/ul>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"516:1-522:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"k\">class<\/span> <span class=\"nc\">UpperCase<\/span><span class=\"p\">(<\/span><span class=\"n\">Executor<\/span><span class=\"p\">):<\/span>\n\n    <span class=\"nd\">@handler<\/span>\n    <span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">to_upper_case<\/span><span class=\"p\">(<\/span><span class=\"n\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">text<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">:<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">[<\/span><span class=\"nb\">str<\/span><span class=\"p\">])<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n        <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">send_message<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">.<\/span><span class=\"nf\">upper<\/span><span class=\"p\">())<\/span>  <span class=\"c1\"># \u3053\u3053\u3067 T_Out = str\n<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<p data-sourcepos=\"525:1-526:99\"><strong>\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u51fa\u529b\u578b\uff08T_W_Out\uff09<\/strong><br \/>\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u5168\u4f53\u306e\u6700\u7d42\u51fa\u529b\u306b\u30c7\u30fc\u30bf\u3092\u9001\u308a\u305f\u3044\u6642\u306e\u578b\u3068\u9001\u4ed8\u65b9\u6cd5\u3067\u3059\u3002<\/p>\n<ul data-sourcepos=\"528:1-530:0\">\n<li data-sourcepos=\"528:1-528:91\">\n<code>WorkflowContext[T_Out, T_W_Out]<\/code> \u306e <strong>2 \u756a\u76ee\u306e T_W_Out<\/strong> \u3067\u578b\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<\/li>\n<li data-sourcepos=\"529:1-530:0\">\n<code>ctx.yield_output()<\/code> \u3067 <strong>\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u5168\u4f53\u306e\u6700\u7d42\u51fa\u529b<\/strong> \u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<\/li>\n<\/ul>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"531:1-535:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"nd\">@executor<\/span><span class=\"p\">(<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">reverse_text_executor<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">reverse_text<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">:<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">[<\/span><span class=\"n\">Never<\/span><span class=\"p\">,<\/span> <span class=\"nb\">str<\/span><span class=\"p\">])<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n    <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">yield_output<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">[::<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">])<\/span>  <span class=\"c1\"># \u3053\u3053\u3067 T_W_Out = str\n<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<p data-sourcepos=\"538:1-538:22\"><strong>\u578b\u6307\u5b9a\u306e\u4e00\u4f8b<\/strong><\/p>\n<div class=\"s_table\"><table data-sourcepos=\"540:1-545:87\">\n<thead>\n<tr data-sourcepos=\"540:1-540:91\">\n<th data-sourcepos=\"540:2-540:34\">\u4f8b<\/th>\n<th data-sourcepos=\"540:36-540:58\">\u30e1\u30c3\u30bb\u30fc\u30b8\u9001\u4fe1<\/th>\n<th data-sourcepos=\"540:60-540:73\">\u6700\u7d42\u51fa\u529b<\/th>\n<th data-sourcepos=\"540:75-540:90\">\u610f\u5473<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr data-sourcepos=\"542:1-542:96\">\n<td data-sourcepos=\"542:2-542:32\"><code>WorkflowContext<\/code><\/td>\n<td data-sourcepos=\"542:34-542:46\">\u306a\u3057<\/td>\n<td data-sourcepos=\"542:48-542:57\">\u306a\u3057<\/td>\n<td data-sourcepos=\"542:59-542:95\">[Never, Never] \u3068\u540c\u3058\u6319\u52d5<\/td>\n<\/tr>\n<tr data-sourcepos=\"543:1-543:79\">\n<td data-sourcepos=\"543:2-543:32\"><code>WorkflowContext[str]<\/code><\/td>\n<td data-sourcepos=\"543:34-543:42\">str<\/td>\n<td data-sourcepos=\"543:44-543:53\">\u306a\u3057<\/td>\n<td data-sourcepos=\"543:55-543:78\">\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u307f<\/td>\n<\/tr>\n<tr data-sourcepos=\"544:1-544:93\">\n<td data-sourcepos=\"544:2-544:32\"><code>WorkflowContext[Any, Any]<\/code><\/td>\n<td data-sourcepos=\"544:34-544:42\">Any<\/td>\n<td data-sourcepos=\"544:44-544:49\">Any<\/td>\n<td data-sourcepos=\"544:51-544:92\">\u3069\u3061\u3089\u3082\u578b\u81ea\u7531\uff08\u8a66\u4f5c\u5411\u304d\uff09<\/td>\n<\/tr>\n<tr data-sourcepos=\"545:1-545:87\">\n<td data-sourcepos=\"545:2-545:32\"><code>WorkflowContext[Never, int]<\/code><\/td>\n<td data-sourcepos=\"545:34-545:46\">\u306a\u3057<\/td>\n<td data-sourcepos=\"545:48-545:53\">int<\/td>\n<td data-sourcepos=\"545:55-545:86\">\u6700\u7d42\u51fa\u529b\u3060\u3051\u8fd4\u3059\u7d42\u7aef<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<h2 data-sourcepos=\"549:1-549:30\">\n<span id=\"\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u69cb\u7bc9\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC%E3%81%AE%E6%A7%8B%E7%AF%89\"><i class=\"fa fa-link\"\/><\/a>\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u69cb\u7bc9<\/h2>\n<h3 data-sourcepos=\"550:1-550:22\">\n<span id=\"\u69cb\u7bc9\u30d7\u30ed\u30bb\u30b9\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E6%A7%8B%E7%AF%89%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9\"><i class=\"fa fa-link\"\/><\/a>\u69cb\u7bc9\u30d7\u30ed\u30bb\u30b9<\/h3>\n<p data-sourcepos=\"551:1-551:84\">\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u69cb\u7bc9\u306b\u306f\u3001<code>WorkflowBuilder<\/code> \u30af\u30e9\u30b9\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n<ol data-sourcepos=\"553:1-557:0\">\n<li data-sourcepos=\"553:1-553:33\">\n<code>WorkflowBuilder<\/code> \u3092\u521d\u671f\u5316<\/li>\n<li data-sourcepos=\"554:1-554:32\">\n<strong>\u958b\u59cb Executor<\/strong> \u3092\u6307\u5b9a<\/li>\n<li data-sourcepos=\"555:1-555:74\">\n<strong>Edge<\/strong> \u3067 <strong>Executor \u540c\u58eb<\/strong>\u3092\u63a5\u7d9a\uff08\u6709\u5411\u30b0\u30e9\u30d5\u3092\u8a2d\u8a08\uff09<\/li>\n<li data-sourcepos=\"556:1-557:0\">\n<strong>Build<\/strong> \u3057\u3066\u5b9f\u884c\u30e2\u30c7\u30eb\u3092\u78ba\u5b9a<\/li>\n<\/ol>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"558:1-573:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"c1\"># 1. WorkflowBuilder \u3092\u521d\u671f\u5316\n<\/span><span class=\"n\">builder<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">WorkflowBuilder<\/span><span class=\"p\">()<\/span>\n\n<span class=\"c1\"># 2. \u958b\u59cb Executor \u3092\u6307\u5b9a\n<\/span><span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">set_start_executor<\/span><span class=\"p\">(<\/span><span class=\"n\">upper_case<\/span><span class=\"p\">)<\/span>\n\n<span class=\"c1\"># 3. Edge \u3067 Executor \u540c\u58eb\u3092\u63a5\u7d9a\uff08\u6709\u5411\u30b0\u30e9\u30d5\u3092\u8a2d\u8a08\uff09\n<\/span><span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">add_edge<\/span><span class=\"p\">(<\/span><span class=\"n\">executor1<\/span><span class=\"p\">,<\/span> <span class=\"n\">executor2<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">add_fan_out_edges<\/span><span class=\"p\">(<\/span><span class=\"n\">executor2<\/span><span class=\"p\">,<\/span> <span class=\"p\">[<\/span><span class=\"n\">executor3<\/span><span class=\"p\">,<\/span> <span class=\"n\">executor4<\/span><span class=\"p\">])<\/span>\n<span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">add_fan_in_edge<\/span><span class=\"p\">([<\/span><span class=\"n\">executor3<\/span><span class=\"p\">,<\/span> <span class=\"n\">executor4<\/span><span class=\"p\">],<\/span> <span class=\"n\">executor5<\/span><span class=\"p\">)<\/span>\n<span class=\"bp\">...<\/span>\n\n<span class=\"c1\"># 4. Build \u3057\u3066\u5b9f\u884c\u30e2\u30c7\u30eb\u3092\u78ba\u5b9a\n<\/span><span class=\"n\">workflow<\/span> <span class=\"o\">=<\/span> <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">build<\/span><span class=\"p\">()<\/span>\n<\/code><\/pre>\n<\/div>\n<\/div>\n<h3 data-sourcepos=\"577:1-577:37\">\n<span id=\"\u30d3\u30eb\u30c9\u6642\u306e\u691c\u8a3c\u30b9\u30c6\u30c3\u30d7\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E3%83%93%E3%83%AB%E3%83%89%E6%99%82%E3%81%AE%E6%A4%9C%E8%A8%BC%E3%82%B9%E3%83%86%E3%83%83%E3%83%97\"><i class=\"fa fa-link\"\/><\/a>\u30d3\u30eb\u30c9\u6642\u306e\u691c\u8a3c\u30b9\u30c6\u30c3\u30d7<\/h3>\n<p data-sourcepos=\"578:1-578:103\">\u30d3\u30eb\u30c9\u6642\u306b\u306f\u3001\u6b21\u306e<strong>\u9759\u7684\u691c\u8a3c<\/strong>\u304c\u884c\u308f\u308c\u3001\u5b9f\u884c\u6642\u30a8\u30e9\u30fc\u3092\u672a\u7136\u306b\u9632\u304e\u307e\u3059\u3002<\/p>\n<div class=\"s_table\"><table data-sourcepos=\"580:1-585:96\">\n<thead>\n<tr data-sourcepos=\"580:1-580:76\">\n<th data-sourcepos=\"580:2-580:27\">\u691c\u8a3c\u9805\u76ee<\/th>\n<th data-sourcepos=\"580:29-580:75\">\u5185\u5bb9<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr data-sourcepos=\"582:1-582:120\">\n<td data-sourcepos=\"582:2-582:27\">\u578b\u4e92\u63db\u6027<\/td>\n<td data-sourcepos=\"582:29-582:119\">\u63a5\u7d9a\u3055\u308c\u305f Executor \u9593\u3067\u30e1\u30c3\u30bb\u30fc\u30b8\u578b\u304c\u4e92\u63db\u3067\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d<\/td>\n<\/tr>\n<tr data-sourcepos=\"583:1-583:120\">\n<td data-sourcepos=\"583:2-583:31\">\u30b0\u30e9\u30d5\u63a5\u7d9a\u6027<\/td>\n<td data-sourcepos=\"583:33-583:119\">\u3059\u3079\u3066\u306e Executor \u304c\u958b\u59cb\u70b9\u304b\u3089 <strong>\u5230\u9054\u53ef\u80fd<\/strong> \u3067\u3042\u308b\u3053\u3068\u3092\u691c\u8a3c<\/td>\n<\/tr>\n<tr data-sourcepos=\"584:1-584:128\">\n<td data-sourcepos=\"584:2-584:33\">Executor \u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0<\/td>\n<td data-sourcepos=\"584:35-584:127\">\u5404 Executor \u304c\u6b63\u3057\u304f <strong>\u30d0\u30a4\u30f3\u30c9\uff0f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316<\/strong> \u3055\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d<\/td>\n<\/tr>\n<tr data-sourcepos=\"585:1-585:96\">\n<td data-sourcepos=\"585:2-585:23\">Edge \u691c\u8a3c<\/td>\n<td data-sourcepos=\"585:25-585:95\">\n<strong>\u91cd\u8907\u30a8\u30c3\u30b8<\/strong> \u3084 <strong>\u7121\u52b9\u306a\u63a5\u7d9a<\/strong> \u3092\u691c\u77e5<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<h2 data-sourcepos=\"590:1-590:33\">\n<span id=\"\u8c4a\u5bcc\u306a\u30a8\u30c3\u30b8\u30d1\u30bf\u30fc\u30f3\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E8%B1%8A%E5%AF%8C%E3%81%AA%E3%82%A8%E3%83%83%E3%82%B8%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3\"><i class=\"fa fa-link\"\/><\/a>\u8c4a\u5bcc\u306a\u30a8\u30c3\u30b8\u30d1\u30bf\u30fc\u30f3<\/h2>\n<p data-sourcepos=\"591:1-591:224\">Agent Framework \u306e <strong>Edge<\/strong> \u306b\u306f\u3001\u5b9f\u52d9\u306e\u30d5\u30ed\u30fc\u8a2d\u8a08\u306b\u305d\u306e\u307e\u307e\u4f7f\u3048\u308b\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u624b\u6cd5\u304c\u63c3\u3063\u3066\u3044\u307e\u3059\u3002\u6761\u4ef6\u5206\u5c90\u3084\u30d5\u30a1\u30f3\u30a2\u30a6\u30c8\uff0f\u30d5\u30a1\u30f3\u30a4\u30f3\u306a\u3069\u3001\u67d4\u8edf\u306b\u8868\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n<div class=\"s_table\"><table data-sourcepos=\"594:1-600:75\">\n<thead>\n<tr data-sourcepos=\"594:1-594:61\">\n<th data-sourcepos=\"594:2-594:35\">\u30a8\u30c3\u30b8\u7a2e\u985e<\/th>\n<th data-sourcepos=\"594:37-594:60\">\u8aac\u660e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr data-sourcepos=\"596:1-596:67\">\n<td data-sourcepos=\"596:2-596:25\"><strong>Direct Edge<\/strong><\/td>\n<td data-sourcepos=\"596:27-596:66\">\u4e00\u5bfe\u4e00\u3067\u7d20\u76f4\u306b\u3064\u306a\u3050<\/td>\n<\/tr>\n<tr data-sourcepos=\"597:1-597:73\">\n<td data-sourcepos=\"597:2-597:25\"><strong>Conditional Edge<\/strong><\/td>\n<td data-sourcepos=\"597:27-597:72\">\u6761\u4ef6\u304c\u6210\u7acb\u3057\u305f\u3068\u304d\u3060\u3051\u901a\u3059<\/td>\n<\/tr>\n<tr data-sourcepos=\"598:1-598:77\">\n<td data-sourcepos=\"598:2-598:25\"><strong>Switch \/ Case Edge<\/strong><\/td>\n<td data-sourcepos=\"598:27-598:76\">\u8907\u6570\u6761\u4ef6\u306e\u3044\u305a\u308c\u304b\u3078\u632f\u308a\u5206\u3051\u308b<\/td>\n<\/tr>\n<tr data-sourcepos=\"599:1-599:69\">\n<td data-sourcepos=\"599:2-599:25\"><strong>Fan-Out Edge<\/strong><\/td>\n<td data-sourcepos=\"599:27-599:68\">1 \u2192 \u591a\u3078\u5206\u5c90\uff08\u4e26\u5217\u5b9f\u884c\uff09<\/td>\n<\/tr>\n<tr data-sourcepos=\"600:1-600:75\">\n<td data-sourcepos=\"600:2-600:25\"><strong>Fan-In Edge<\/strong><\/td>\n<td data-sourcepos=\"600:27-600:74\">\u591a \u2192 1 \u3078\u5408\u6d41\uff08\u4e26\u5217\u7d50\u679c\u3092\u96c6\u7d04\uff09<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<h3 data-sourcepos=\"604:1-604:15\">\n<span id=\"direct-edge\" class=\"fragment\"\/><a target=\"_blank\" href=\"#direct-edge\"><i class=\"fa fa-link\"\/><\/a>Direct Edge<\/h3>\n<p data-sourcepos=\"605:1-605:97\"><strong>2 \u3064\u306e Executor \u3092\u76f4\u5217\u306b\u63a5\u7d9a<\/strong>\u3057\u307e\u3059\u3002<code>add_edge(source, target)<\/code> \u3092\u4f7f\u3044\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"607:1-607:122\"><a target=\"_blank\" href=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F9ad86cb6-2ed4-4648-9da2-6d347eff5038.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=97f8c37e3eb63ec71a32036dd29a5118\" target=\"_blank\" rel=\"nofollow noopener\"><img decoding=\"async\" src=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F9ad86cb6-2ed4-4648-9da2-6d347eff5038.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=97f8c37e3eb63ec71a32036dd29a5118\" alt=\"image.png\" srcset=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F9ad86cb6-2ed4-4648-9da2-6d347eff5038.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;w=1400&amp;fit=max&amp;s=324421e61978d36dfb763c3bf7175970 1x\" data-canonical-src=\"https:\/\/qiita-image-store.s3.ap-northeast-1.amazonaws.com\/0\/1273574\/9ad86cb6-2ed4-4648-9da2-6d347eff5038.png\" loading=\"lazy\"\/><\/a><\/p>\n<details>\n<summary>\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9<\/summary>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"611:1-654:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"kn\">import<\/span> <span class=\"n\">asyncio<\/span>\n\n<span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"p\">(<\/span>\n    <span class=\"n\">WorkflowBuilder<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">WorkflowContext<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">executor<\/span>\n<span class=\"p\">)<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">typing_extensions<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">Never<\/span>\n\n<span class=\"c1\"># ---------- Executor \u5b9a\u7fa9 ----------\n<\/span><span class=\"nd\">@executor<\/span><span class=\"p\">(<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">upper_case_executor<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">upper_case<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">:<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">[<\/span><span class=\"nb\">str<\/span><span class=\"p\">])<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u5165\u529b\u30c6\u30ad\u30b9\u30c8\u3092\u5927\u6587\u5b57\u306b\u5909\u63db<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">send_message<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">.<\/span><span class=\"nf\">upper<\/span><span class=\"p\">())<\/span>\n\n<span class=\"nd\">@executor<\/span><span class=\"p\">(<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">reverse_text_executor<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">reverse_text<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">:<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">[<\/span><span class=\"n\">Never<\/span><span class=\"p\">,<\/span> <span class=\"nb\">str<\/span><span class=\"p\">])<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u5165\u529b\u30c6\u30ad\u30b9\u30c8\u3092\u53cd\u8ee2<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">yield_output<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">[::<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">])<\/span>\n\n<span class=\"c1\"># ---------- \u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u69cb\u7bc9 ----------\n# \u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u69cb\u7bc9\n# 1. WorkflowBuilder \u3092\u521d\u671f\u5316\n# 2. \u958b\u59cb Executor \u3092\u6307\u5b9a\n# 3. Edge \u3067 Executor \u540c\u58eb\u3092\u63a5\u7d9a\uff08\u6709\u5411\u30b0\u30e9\u30d5\u3092\u8a2d\u8a08\uff09\n# 4. Build \u3057\u3066\u5b9f\u884c\u30e2\u30c7\u30eb\u3092\u78ba\u5b9a\n<\/span><span class=\"n\">builder<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">WorkflowBuilder<\/span><span class=\"p\">()<\/span>\n<span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">set_start_executor<\/span><span class=\"p\">(<\/span><span class=\"n\">upper_case<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">add_edge<\/span><span class=\"p\">(<\/span><span class=\"n\">upper_case<\/span><span class=\"p\">,<\/span> <span class=\"n\">reverse_text<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">workflow<\/span> <span class=\"o\">=<\/span> <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">build<\/span><span class=\"p\">()<\/span>\n\n<span class=\"c1\"># ---------- \u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u5b9f\u884c ----------\n<\/span><span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">main<\/span><span class=\"p\">()<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n\n    <span class=\"n\">events<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">workflow<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">hello world<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">events<\/span><span class=\"p\">.<\/span><span class=\"nf\">get_outputs<\/span><span class=\"p\">())<\/span>   \n    \n<span class=\"k\">if<\/span> <span class=\"n\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">__main__<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span>\n    <span class=\"n\">asyncio<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"nf\">main<\/span><span class=\"p\">())<\/span>\n\n<span class=\"c1\"># ---------- \u51fa\u529b\u4f8b ----------\n# ['DLROW OLLEH']\n<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<\/details>\n<h3 data-sourcepos=\"658:1-658:20\">\n<span id=\"conditional-edge\" class=\"fragment\"\/><a target=\"_blank\" href=\"#conditional-edge\"><i class=\"fa fa-link\"\/><\/a>Conditional Edge<\/h3>\n<p data-sourcepos=\"659:1-660:192\">\u7279\u5b9a\u306e\u6761\u4ef6\u3092\u6e80\u305f\u3057\u305f\u5834\u5408\u306b\u306e\u307f\u901a\u904e\u3067\u304d\u308b\u300c<strong>\u6761\u4ef6\u4ed8\u304d\u30a8\u30c3\u30b8<\/strong>\u300d\u3067\u3059\u3002<br \/><code>add_edge(..., condition=)<\/code> \u306e\u3088\u3046\u306b <code>condition<\/code> \u5c5e\u6027\u3078\u6761\u4ef6\u95a2\u6570\u3092\u6307\u5b9a\u3059\u308b\u3068\u3001\u305d\u306e\u95a2\u6570\u304c <code>True<\/code> \u3092\u8fd4\u3057\u305f\u3068\u304d\u3060\u3051\u30a8\u30c3\u30b8\u304c\u6709\u52b9\u5316\u3055\u308c\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"662:1-662:122\"><a target=\"_blank\" href=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2Fbe12b4ac-23c4-4596-9fff-1c3bea8b2368.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=e29adb6fae439c5f80ba7150627173b6\" target=\"_blank\" rel=\"nofollow noopener\"><img decoding=\"async\" src=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2Fbe12b4ac-23c4-4596-9fff-1c3bea8b2368.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=e29adb6fae439c5f80ba7150627173b6\" alt=\"image.png\" srcset=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2Fbe12b4ac-23c4-4596-9fff-1c3bea8b2368.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;w=1400&amp;fit=max&amp;s=5cd84b2a9f8467ab06107c39752c7653 1x\" data-canonical-src=\"https:\/\/qiita-image-store.s3.ap-northeast-1.amazonaws.com\/0\/1273574\/be12b4ac-23c4-4596-9fff-1c3bea8b2368.png\" loading=\"lazy\"\/><\/a><\/p>\n<details>\n<summary>\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9<\/summary>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"666:1-730:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"kn\">import<\/span> <span class=\"n\">asyncio<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">typing<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">Never<\/span>\n\n<span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"p\">(<\/span>\n    <span class=\"n\">WorkflowBuilder<\/span><span class=\"p\">,<\/span> \n    <span class=\"n\">WorkflowContext<\/span><span class=\"p\">,<\/span> \n    <span class=\"n\">executor<\/span><span class=\"p\">,<\/span> \n<span class=\"p\">)<\/span>\n\n<span class=\"c1\"># ---------- Executor \u5b9a\u7fa9 ----------\n<\/span><span class=\"nd\">@executor<\/span><span class=\"p\">(<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">start<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">start<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">:<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">[<\/span><span class=\"nb\">str<\/span><span class=\"p\">])<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u958b\u59cb\u30ce\u30fc\u30c9: \u5165\u529b\u6587\u5b57\u5217\u3092\u305d\u306e\u307e\u307e\u4e0b\u6d41\u306b\u6d41\u3059<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">send_message<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">)<\/span>\n\n<span class=\"nd\">@executor<\/span><span class=\"p\">(<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">handle_normal<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">handle_normal<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">:<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">[<\/span><span class=\"n\">Never<\/span><span class=\"p\">,<\/span> <span class=\"nb\">str<\/span><span class=\"p\">])<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u901a\u5e38\u51e6\u7406: \u6700\u7d42\u51fa\u529b\uff08yield_output\uff09\u3092\u8fd4\u3059<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">yield_output<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">OK: <\/span><span class=\"si\">{<\/span><span class=\"n\">text<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n<span class=\"nd\">@executor<\/span><span class=\"p\">(<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">handle_spam<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">handle_spam<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">:<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">[<\/span><span class=\"n\">Never<\/span><span class=\"p\">,<\/span> <span class=\"nb\">str<\/span><span class=\"p\">])<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u30b9\u30d1\u30e0\u51e6\u7406: \u6700\u7d42\u51fa\u529b\uff08yield_output\uff09\u3092\u8fd4\u3059<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">yield_output<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">SPAM: blocked<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n<span class=\"c1\"># ---------- \u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u6761\u4ef6 ----------\n<\/span><span class=\"k\">def<\/span> <span class=\"nf\">is_spam<\/span><span class=\"p\">(<\/span><span class=\"n\">msg<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"nb\">bool<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u30e1\u30c3\u30bb\u30fc\u30b8\u306b <\/span><span class=\"sh\">'<\/span><span class=\"s\">spam<\/span><span class=\"sh\">'<\/span><span class=\"s\"> \u3092\u542b\u3080\u304b\u3069\u3046\u304b\uff08\u5358\u7d14\u306a\u6761\u4ef6\u5224\u5b9a\uff09<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"k\">return<\/span> <span class=\"nf\">isinstance<\/span><span class=\"p\">(<\/span><span class=\"n\">msg<\/span><span class=\"p\">,<\/span> <span class=\"nb\">str<\/span><span class=\"p\">)<\/span> <span class=\"ow\">and<\/span> <span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">spam<\/span><span class=\"sh\">\"<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">msg<\/span><span class=\"p\">.<\/span><span class=\"nf\">lower<\/span><span class=\"p\">())<\/span>\n\n<span class=\"k\">def<\/span> <span class=\"nf\">is_not_spam<\/span><span class=\"p\">(<\/span><span class=\"n\">msg<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"nb\">bool<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u30b9\u30d1\u30e0\u3067\u306f\u306a\u3044\u304b<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"k\">return<\/span> <span class=\"nf\">isinstance<\/span><span class=\"p\">(<\/span><span class=\"n\">msg<\/span><span class=\"p\">,<\/span> <span class=\"nb\">str<\/span><span class=\"p\">)<\/span> <span class=\"ow\">and<\/span> <span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">spam<\/span><span class=\"sh\">\"<\/span> <span class=\"ow\">not<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">msg<\/span><span class=\"p\">.<\/span><span class=\"nf\">lower<\/span><span class=\"p\">())<\/span>\n\n<span class=\"c1\"># ---------- \u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u69cb\u7bc9 ----------\n<\/span><span class=\"n\">builder<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">WorkflowBuilder<\/span><span class=\"p\">()<\/span>\n<span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">set_start_executor<\/span><span class=\"p\">(<\/span><span class=\"n\">start<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">add_edge<\/span><span class=\"p\">(<\/span><span class=\"n\">start<\/span><span class=\"p\">,<\/span> <span class=\"n\">handle_spam<\/span><span class=\"p\">,<\/span>   <span class=\"n\">condition<\/span><span class=\"o\">=<\/span><span class=\"n\">is_spam<\/span><span class=\"p\">)<\/span>      <span class=\"c1\"># - \"spam\" \u3092\u542b\u3080 \u2192 handle_spam\n<\/span><span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">add_edge<\/span><span class=\"p\">(<\/span><span class=\"n\">start<\/span><span class=\"p\">,<\/span> <span class=\"n\">handle_normal<\/span><span class=\"p\">,<\/span> <span class=\"n\">condition<\/span><span class=\"o\">=<\/span><span class=\"n\">is_not_spam<\/span><span class=\"p\">)<\/span>  <span class=\"c1\"># - \"spam\" \u3092\u542b\u307e\u306a\u3044 \u2192 handle_normal\n<\/span><span class=\"n\">workflow<\/span> <span class=\"o\">=<\/span> <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">build<\/span><span class=\"p\">()<\/span>\n\n<span class=\"c1\"># ---------- \u5b9f\u884c\u4f8b ----------\n<\/span><span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">main<\/span><span class=\"p\">():<\/span>\n    <span class=\"c1\"># \u4f8b1: \u901a\u5e38\u30e1\u30c3\u30bb\u30fc\u30b8\n<\/span>    <span class=\"n\">events<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">workflow<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Hello team<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Output (normal):<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">events<\/span><span class=\"p\">.<\/span><span class=\"nf\">get_outputs<\/span><span class=\"p\">()[<\/span><span class=\"mi\">0<\/span><span class=\"p\">])<\/span>\n\n    <span class=\"c1\"># \u4f8b2: \u30b9\u30d1\u30e0\u30e1\u30c3\u30bb\u30fc\u30b8\n<\/span>    <span class=\"n\">events<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">workflow<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Buy now!! SPAM offer!!<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Output (spam):  <\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">events<\/span><span class=\"p\">.<\/span><span class=\"nf\">get_outputs<\/span><span class=\"p\">()[<\/span><span class=\"mi\">0<\/span><span class=\"p\">])<\/span>\n\n    <span class=\"c1\"># \u53ef\u8996\u5316\n<\/span>    <span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">WorkflowViz<\/span>\n    <span class=\"n\">viz<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">WorkflowViz<\/span><span class=\"p\">(<\/span><span class=\"n\">workflow<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Mermaid:<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">viz<\/span><span class=\"p\">.<\/span><span class=\"nf\">to_mermaid<\/span><span class=\"p\">())<\/span>\n\n<span class=\"k\">if<\/span> <span class=\"n\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">__main__<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span>\n    <span class=\"n\">asyncio<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"nf\">main<\/span><span class=\"p\">())<\/span>\n\n<span class=\"c1\"># ---------- \u51fa\u529b\u4f8b ----------\n# Output (normal): OK: Hello team\n# Output (spam):   SPAM: blocked\n<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<\/details>\n<h3 data-sourcepos=\"735:1-735:22\">\n<span id=\"switch--case-edge\" class=\"fragment\"\/><a target=\"_blank\" href=\"#switch--case-edge\"><i class=\"fa fa-link\"\/><\/a>Switch \/ Case Edge<\/h3>\n<p data-sourcepos=\"736:1-736:198\"><code>Switch \/ Case Edge<\/code> \u306f\u3001\u8907\u6570\u306e\u6761\u4ef6\u3092<strong>\u4e0a\u304b\u3089\u9806\u756a\u306b\u8a55\u4fa1<\/strong>\u3057\u3001<strong>\u6700\u521d\u306b True \u306b\u306a\u3063\u305f\u30bf\u30fc\u30b2\u30c3\u30c8 Executor \u3078<\/strong>\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3059\u308b\u4ed5\u7d44\u307f\u3067\u3059\u3002<\/p>\n<p data-sourcepos=\"738:1-738:122\"><a target=\"_blank\" href=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F0a14f766-7cab-4e6e-836c-3f84998971a3.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=7d455b4217e21792c38f3f4b805f4d90\" target=\"_blank\" rel=\"nofollow noopener\"><img decoding=\"async\" src=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F0a14f766-7cab-4e6e-836c-3f84998971a3.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=7d455b4217e21792c38f3f4b805f4d90\" alt=\"image.png\" srcset=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F0a14f766-7cab-4e6e-836c-3f84998971a3.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;w=1400&amp;fit=max&amp;s=13c027b547d1adfdc648f7f45bb2befb 1x\" data-canonical-src=\"https:\/\/qiita-image-store.s3.ap-northeast-1.amazonaws.com\/0\/1273574\/0a14f766-7cab-4e6e-836c-3f84998971a3.png\" loading=\"lazy\"\/><\/a><\/p>\n<details>\n<summary>\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9<\/summary>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"743:1-821:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"kn\">import<\/span> <span class=\"n\">asyncio<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">typing<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">Any<\/span><span class=\"p\">,<\/span> <span class=\"n\">Never<\/span>\n\n<span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"p\">(<\/span>\n    <span class=\"n\">WorkflowBuilder<\/span><span class=\"p\">,<\/span>      \n    <span class=\"n\">WorkflowContext<\/span><span class=\"p\">,<\/span>      \n    <span class=\"n\">executor<\/span><span class=\"p\">,<\/span>             \n    <span class=\"n\">Case<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">Default<\/span>\n<span class=\"p\">)<\/span>\n\n\n\n<span class=\"c1\"># ---------- Executor \u5b9a\u7fa9 ----------\n<\/span><span class=\"nd\">@executor<\/span><span class=\"p\">(<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">start<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">start<\/span><span class=\"p\">(<\/span><span class=\"n\">msg<\/span><span class=\"p\">:<\/span> <span class=\"n\">Any<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">:<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">[<\/span><span class=\"n\">Any<\/span><span class=\"p\">])<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u958b\u59cb\u30ce\u30fc\u30c9: \u5165\u529b\u3092\u305d\u306e\u307e\u307e\u4e0b\u6d41\u3078\u6d41\u3059\uff08Switch \u306e\u8d77\u70b9\uff09<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">send_message<\/span><span class=\"p\">(<\/span><span class=\"n\">msg<\/span><span class=\"p\">)<\/span>\n\n<span class=\"nd\">@executor<\/span><span class=\"p\">(<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">handle_text<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">handle_text<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">:<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">[<\/span><span class=\"n\">Never<\/span><span class=\"p\">,<\/span> <span class=\"nb\">str<\/span><span class=\"p\">])<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u6587\u5b57\u5217: \u5927\u6587\u5b57\u306b\u3057\u3066\u6700\u7d42\u51fa\u529b<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">yield_output<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">TEXT: <\/span><span class=\"si\">{<\/span><span class=\"n\">text<\/span><span class=\"p\">.<\/span><span class=\"nf\">upper<\/span><span class=\"p\">()<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n<span class=\"nd\">@executor<\/span><span class=\"p\">(<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">handle_number<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">handle_number<\/span><span class=\"p\">(<\/span><span class=\"n\">n<\/span><span class=\"p\">:<\/span> <span class=\"nb\">int<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">:<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">[<\/span><span class=\"n\">Never<\/span><span class=\"p\">,<\/span> <span class=\"nb\">str<\/span><span class=\"p\">])<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u6570\u5024: 2\u500d\u3057\u3066\u6700\u7d42\u51fa\u529b<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">yield_output<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">NUMBER: <\/span><span class=\"si\">{<\/span><span class=\"n\">n<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">2<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n<span class=\"nd\">@executor<\/span><span class=\"p\">(<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">handle_other<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">handle_other<\/span><span class=\"p\">(<\/span><span class=\"n\">obj<\/span><span class=\"p\">:<\/span> <span class=\"n\">Any<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">:<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">[<\/span><span class=\"n\">Never<\/span><span class=\"p\">,<\/span> <span class=\"nb\">str<\/span><span class=\"p\">])<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u305d\u306e\u4ed6: \u578b\u540d\u3092\u8fd4\u3057\u3066\u6700\u7d42\u51fa\u529b<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">yield_output<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">OTHER: <\/span><span class=\"si\">{<\/span><span class=\"nf\">type<\/span><span class=\"p\">(<\/span><span class=\"n\">obj<\/span><span class=\"p\">).<\/span><span class=\"n\">__name__<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n\n<span class=\"c1\"># ---------- \u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u69cb\u7bc9 ----------\n<\/span><span class=\"n\">builder<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">WorkflowBuilder<\/span><span class=\"p\">()<\/span>\n<span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">set_start_executor<\/span><span class=\"p\">(<\/span><span class=\"n\">start<\/span><span class=\"p\">)<\/span>\n\n<span class=\"c1\"># Switch-Case:\n# - \u30bd\u30fc\u30b9\u304b\u3089\u306e\u5165\u529b\u304c\u3001\"\u6587\u5b57\u5217\" \u306a\u3089 handle_text\n# - \u30bd\u30fc\u30b9\u304b\u3089\u306e\u5165\u529b\u304c\u3001\"\u6570\u5024\" \u306a\u3089 handle_number\n# - \u30bd\u30fc\u30b9\u304b\u3089\u306e\u5165\u529b\u304c\u3001\u305d\u306e\u3069\u308c\u306b\u3082\u8a72\u5f53\u3057\u306a\u3051\u308c\u3070 Default -&gt; handle_other\n<\/span><span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">add_switch_case_edge_group<\/span><span class=\"p\">(<\/span>\n    <span class=\"n\">source<\/span><span class=\"o\">=<\/span><span class=\"n\">start<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">cases<\/span><span class=\"o\">=<\/span><span class=\"p\">[<\/span>\n        <span class=\"nc\">Case<\/span><span class=\"p\">(<\/span><span class=\"n\">condition<\/span><span class=\"o\">=<\/span><span class=\"k\">lambda<\/span> <span class=\"n\">m<\/span><span class=\"p\">:<\/span> <span class=\"nf\">isinstance<\/span><span class=\"p\">(<\/span><span class=\"n\">m<\/span><span class=\"p\">,<\/span> <span class=\"nb\">str<\/span><span class=\"p\">),<\/span> <span class=\"n\">target<\/span><span class=\"o\">=<\/span><span class=\"n\">handle_text<\/span><span class=\"p\">),<\/span>\n        <span class=\"nc\">Case<\/span><span class=\"p\">(<\/span><span class=\"n\">condition<\/span><span class=\"o\">=<\/span><span class=\"k\">lambda<\/span> <span class=\"n\">m<\/span><span class=\"p\">:<\/span> <span class=\"nf\">isinstance<\/span><span class=\"p\">(<\/span><span class=\"n\">m<\/span><span class=\"p\">,<\/span> <span class=\"nb\">int<\/span><span class=\"p\">),<\/span> <span class=\"n\">target<\/span><span class=\"o\">=<\/span><span class=\"n\">handle_number<\/span><span class=\"p\">),<\/span>\n        <span class=\"nc\">Default<\/span><span class=\"p\">(<\/span><span class=\"n\">target<\/span><span class=\"o\">=<\/span><span class=\"n\">handle_other<\/span><span class=\"p\">),<\/span>\n    <span class=\"p\">],<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"n\">workflow<\/span> <span class=\"o\">=<\/span> <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">build<\/span><span class=\"p\">()<\/span>\n\n\n<span class=\"c1\"># ---------- \u5b9f\u884c\u4f8b ----------\n<\/span><span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">main<\/span><span class=\"p\">():<\/span>\n    <span class=\"n\">samples<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"sh\">\"<\/span><span class=\"s\">hello world<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"mi\">21<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span><span class=\"sh\">\"<\/span><span class=\"s\">x<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span> <span class=\"mi\">1<\/span><span class=\"p\">}]<\/span>\n    <span class=\"k\">for<\/span> <span class=\"n\">s<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">samples<\/span><span class=\"p\">:<\/span>\n        <span class=\"n\">events<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">workflow<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"n\">s<\/span><span class=\"p\">)<\/span>\n        <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Input :<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">s<\/span><span class=\"p\">)<\/span>\n        <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Output:<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">events<\/span><span class=\"p\">.<\/span><span class=\"nf\">get_outputs<\/span><span class=\"p\">()[<\/span><span class=\"mi\">0<\/span><span class=\"p\">])<\/span>\n        <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">-<\/span><span class=\"sh\">\"<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">7<\/span><span class=\"p\">)<\/span>\n\n<span class=\"k\">if<\/span> <span class=\"n\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">__main__<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span>\n    <span class=\"n\">asyncio<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"nf\">main<\/span><span class=\"p\">())<\/span>\n\n<span class=\"c1\"># ---------- \u51fa\u529b\u4f8b ----------\n# Input : hello world\n# Output: TEXT: HELLO WORLD\n# -------\n# Input : 21\n# Output: NUMBER: 42\n# -------\n# Input : {'x': 1}\n# Output: OTHER: dict\n# -------\n<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<\/details>\n<h3 data-sourcepos=\"826:1-826:25\">\n<span id=\"fan-out--fan-in-edge\" class=\"fragment\"\/><a target=\"_blank\" href=\"#fan-out--fan-in-edge\"><i class=\"fa fa-link\"\/><\/a>Fan-Out \/ Fan-In Edge<\/h3>\n<p data-sourcepos=\"827:1-827:122\"><strong>Fan-Out<\/strong> \u306f 1\u2192\u591a \u306b\u5206\u5c90\u3057\u3066\u4e26\u5217\u5b9f\u884c\u3057\u3001<strong>Fan-In<\/strong> \u306f \u591a\u21921 \u306b\u96c6\u7d04\u3057\u3066\u7d50\u679c\u3092\u307e\u3068\u3081\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"829:1-829:122\"><a target=\"_blank\" href=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F7ad8ec12-fe06-4cd1-a009-97b2597a5572.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=aeae9ff32164dc5d7039f6f1f39dd9e4\" target=\"_blank\" rel=\"nofollow noopener\"><img decoding=\"async\" src=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F7ad8ec12-fe06-4cd1-a009-97b2597a5572.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=aeae9ff32164dc5d7039f6f1f39dd9e4\" alt=\"image.png\" srcset=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F7ad8ec12-fe06-4cd1-a009-97b2597a5572.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;w=1400&amp;fit=max&amp;s=7cb48e45c6dd510d7c181506a52fd805 1x\" data-canonical-src=\"https:\/\/qiita-image-store.s3.ap-northeast-1.amazonaws.com\/0\/1273574\/7ad8ec12-fe06-4cd1-a009-97b2597a5572.png\" loading=\"lazy\"\/><\/a><\/p>\n<details>\n<summary>\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9<\/summary>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"834:1-893:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"kn\">import<\/span> <span class=\"n\">asyncio<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">typing<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">Never<\/span>\n\n<span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"p\">(<\/span>\n    <span class=\"n\">WorkflowBuilder<\/span><span class=\"p\">,<\/span>      \n    <span class=\"n\">WorkflowContext<\/span><span class=\"p\">,<\/span>      \n    <span class=\"n\">executor<\/span><span class=\"p\">,<\/span>             \n<span class=\"p\">)<\/span>\n\n<span class=\"c1\"># ---------- Executors ----------\n<\/span>\n<span class=\"nd\">@executor<\/span><span class=\"p\">(<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">start<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">start<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">:<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">[<\/span><span class=\"nb\">str<\/span><span class=\"p\">])<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u958b\u59cb\u30ce\u30fc\u30c9: \u5165\u529b\u6587\u5b57\u5217\u3092\u305d\u306e\u307e\u307e\u4e0b\u6d41\u3078\u6d41\u3059\uff08Fan-Out \u306e\u8d77\u70b9\uff09<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">send_message<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">)<\/span>\n\n<span class=\"nd\">@executor<\/span><span class=\"p\">(<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">count_words<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">count_words<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">:<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">[<\/span><span class=\"nb\">int<\/span><span class=\"p\">])<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u5358\u8a9e\u6570\u3092\u6570\u3048\u308b\uff08\u30b9\u30da\u30fc\u30b9\u533a\u5207\u308a\u30fb\u8d85\u30b7\u30f3\u30d7\u30eb\uff09<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">send_message<\/span><span class=\"p\">(<\/span><span class=\"nf\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">.<\/span><span class=\"nf\">split<\/span><span class=\"p\">()))<\/span>\n\n<span class=\"nd\">@executor<\/span><span class=\"p\">(<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">count_chars<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">count_chars<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">:<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">[<\/span><span class=\"nb\">int<\/span><span class=\"p\">])<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u6587\u5b57\u6570\u3092\u6570\u3048\u308b\uff08\u6539\u884c\u542b\u3080\u30fb\u8d85\u30b7\u30f3\u30d7\u30eb\uff09<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">send_message<\/span><span class=\"p\">(<\/span><span class=\"nf\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">))<\/span>\n\n<span class=\"nd\">@executor<\/span><span class=\"p\">(<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">aggregate<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">aggregate<\/span><span class=\"p\">(<\/span><span class=\"n\">results<\/span><span class=\"p\">:<\/span> <span class=\"nb\">list<\/span><span class=\"p\">[<\/span><span class=\"nb\">int<\/span><span class=\"p\">],<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">:<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">[<\/span><span class=\"n\">Never<\/span><span class=\"p\">,<\/span> <span class=\"nb\">str<\/span><span class=\"p\">])<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u96c6\u7d04\u30ce\u30fc\u30c9\uff08Fan-In \u306e\u7d42\u70b9\uff09<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"n\">words<\/span><span class=\"p\">,<\/span> <span class=\"n\">chars<\/span> <span class=\"o\">=<\/span> <span class=\"n\">results<\/span>  \n    <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">yield_output<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Words: <\/span><span class=\"si\">{<\/span><span class=\"n\">words<\/span><span class=\"si\">}<\/span><span class=\"s\">, Chars: <\/span><span class=\"si\">{<\/span><span class=\"n\">chars<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n<span class=\"c1\"># ---------- \u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u69cb\u7bc9 ----------\n<\/span><span class=\"n\">builder<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">WorkflowBuilder<\/span><span class=\"p\">()<\/span>\n<span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">set_start_executor<\/span><span class=\"p\">(<\/span><span class=\"n\">start<\/span><span class=\"p\">)<\/span>\n\n<span class=\"c1\"># Fan-Out: start \u304b\u3089 2 \u7cfb\u7d71\u306b\u4e26\u5217\u5206\u5c90\n<\/span><span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">add_fan_out_edges<\/span><span class=\"p\">(<\/span><span class=\"n\">start<\/span><span class=\"p\">,<\/span> <span class=\"p\">[<\/span><span class=\"n\">count_words<\/span><span class=\"p\">,<\/span> <span class=\"n\">count_chars<\/span><span class=\"p\">])<\/span>\n\n<span class=\"c1\"># Fan-In: 2 \u7cfb\u7d71\u306e\u7d50\u679c\u304c\u63c3\u3063\u305f\u3089 aggregate \u306b list \u3067\u6e21\u3055\u308c\u308b\n<\/span><span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">add_fan_in_edges<\/span><span class=\"p\">([<\/span><span class=\"n\">count_words<\/span><span class=\"p\">,<\/span> <span class=\"n\">count_chars<\/span><span class=\"p\">],<\/span> <span class=\"n\">aggregate<\/span><span class=\"p\">)<\/span>\n\n<span class=\"n\">workflow<\/span> <span class=\"o\">=<\/span> <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">build<\/span><span class=\"p\">()<\/span>\n\n<span class=\"c1\"># ---------- \u5b9f\u884c\u4f8b ----------\n<\/span><span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">main<\/span><span class=\"p\">():<\/span>\n    <span class=\"n\">text<\/span> <span class=\"o\">=<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">Fan out and fan in are powerful workflow patterns.<\/span><span class=\"sh\">\"<\/span>\n    <span class=\"n\">events<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">workflow<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">outputs<\/span> <span class=\"o\">=<\/span> <span class=\"n\">events<\/span><span class=\"p\">.<\/span><span class=\"nf\">get_outputs<\/span><span class=\"p\">()<\/span> \n    <span class=\"k\">if<\/span> <span class=\"n\">outputs<\/span><span class=\"p\">:<\/span>\n        <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Output:<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">outputs<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">])<\/span>\n\n<span class=\"k\">if<\/span> <span class=\"n\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">__main__<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span>\n    <span class=\"n\">asyncio<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"nf\">main<\/span><span class=\"p\">())<\/span>\n\n\n<span class=\"c1\"># ---------- \u51fa\u529b\u4f8b ----------\n# Output: Words: 9, Chars: 50\n<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<\/details>\n<h2 data-sourcepos=\"897:1-897:34\">\n<span id=\"\u5171\u6709\u72b6\u614bshared-states\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E5%85%B1%E6%9C%89%E7%8A%B6%E6%85%8Bshared-states\"><i class=\"fa fa-link\"\/><\/a>\u5171\u6709\u72b6\u614b\uff08Shared States\uff09<\/h2>\n<p data-sourcepos=\"898:1-898:135\">\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u5185\u3067\u306f\u3001\u5171\u6709\u72b6\u614b\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001Executor \u9593\u306e\u60c5\u5831\u5171\u6709\u304c\u5bb9\u6613\u306b\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"900:1-900:122\"><a target=\"_blank\" href=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F6c66e6d5-d95f-48ed-84c3-1be53eb39b7c.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=bcdcecdd21784d2943bffb17b07e29e3\" target=\"_blank\" rel=\"nofollow noopener\"><img decoding=\"async\" src=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F6c66e6d5-d95f-48ed-84c3-1be53eb39b7c.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=bcdcecdd21784d2943bffb17b07e29e3\" alt=\"image.png\" srcset=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F6c66e6d5-d95f-48ed-84c3-1be53eb39b7c.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;w=1400&amp;fit=max&amp;s=2dafe1e74fdaafbdf6e6d28eabf12bff 1x\" data-canonical-src=\"https:\/\/qiita-image-store.s3.ap-northeast-1.amazonaws.com\/0\/1273574\/6c66e6d5-d95f-48ed-84c3-1be53eb39b7c.png\" loading=\"lazy\"\/><\/a><\/p>\n<details>\n<summary>\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9<\/summary>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"906:1-942:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"kn\">import<\/span> <span class=\"n\">asyncio<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">typing<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">Never<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">WorkflowBuilder<\/span><span class=\"p\">,<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">,<\/span> <span class=\"n\">executor<\/span>\n\n<span class=\"n\">PREFIX_KEY<\/span> <span class=\"o\">=<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">greeting_prefix<\/span><span class=\"sh\">\"<\/span>\n\n<span class=\"c1\"># ---------- Executors ----------\n<\/span><span class=\"nd\">@executor<\/span><span class=\"p\">(<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">save_prefix<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">save_prefix<\/span><span class=\"p\">(<\/span><span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">:<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">[<\/span><span class=\"nb\">str<\/span><span class=\"p\">])<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u5171\u6709\u72b6\u614b\u306b prefix \u3092\u4fdd\u5b58\u3057\u3001\u540d\u524d\u3092\u4e0b\u6d41\u3078\u9001\u308b<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">set_shared_state<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"o\">=<\/span><span class=\"n\">PREFIX_KEY<\/span><span class=\"p\">,<\/span> <span class=\"n\">value<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Hello<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>  <span class=\"c1\"># \u5171\u6709\u72b6\u614b\u306b\u30c7\u30fc\u30bf\u3092\u4fdd\u5b58\n<\/span>    <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">send_message<\/span><span class=\"p\">(<\/span><span class=\"n\">name<\/span><span class=\"p\">)<\/span>\n\n<span class=\"nd\">@executor<\/span><span class=\"p\">(<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">greet<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">greet<\/span><span class=\"p\">(<\/span><span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">:<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">[<\/span><span class=\"n\">Never<\/span><span class=\"p\">,<\/span> <span class=\"nb\">str<\/span><span class=\"p\">])<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u5171\u6709\u72b6\u614b\u304b\u3089 prefix \u3092\u53d6\u5f97\u3057\u3001\u540d\u524d\u3092\u7d50\u5408\u3057\u3066\u51fa\u529b\u3059\u308b<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"n\">prefix<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">get_shared_state<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"o\">=<\/span><span class=\"n\">PREFIX_KEY<\/span><span class=\"p\">)<\/span>       <span class=\"c1\"># \u5171\u6709\u72b6\u614b\u304b\u3089\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\n<\/span>    <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">yield_output<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"si\">{<\/span><span class=\"n\">prefix<\/span><span class=\"si\">}<\/span><span class=\"s\">, <\/span><span class=\"si\">{<\/span><span class=\"n\">name<\/span><span class=\"si\">}<\/span><span class=\"s\">.<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n<span class=\"c1\"># ---------- \u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u69cb\u7bc9 ----------\n<\/span><span class=\"n\">builder<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">WorkflowBuilder<\/span><span class=\"p\">()<\/span>\n<span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">set_start_executor<\/span><span class=\"p\">(<\/span><span class=\"n\">save_prefix<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">add_edge<\/span><span class=\"p\">(<\/span><span class=\"n\">save_prefix<\/span><span class=\"p\">,<\/span> <span class=\"n\">greet<\/span><span class=\"p\">)<\/span> \n<span class=\"n\">workflow<\/span> <span class=\"o\">=<\/span> <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">build<\/span><span class=\"p\">()<\/span>\n\n<span class=\"c1\"># ---------- \u5b9f\u884c\u4f8b ----------\n<\/span><span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">main<\/span><span class=\"p\">():<\/span>\n    <span class=\"n\">events<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">workflow<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Taro<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">events<\/span><span class=\"p\">.<\/span><span class=\"nf\">get_outputs<\/span><span class=\"p\">()[<\/span><span class=\"mi\">0<\/span><span class=\"p\">])<\/span> \n\n<span class=\"k\">if<\/span> <span class=\"n\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">__main__<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span>\n    <span class=\"n\">asyncio<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"nf\">main<\/span><span class=\"p\">())<\/span>\n\n<span class=\"c1\"># ---------- \u51fa\u529b\u4f8b ----------\n# Hello, Taro.\n<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<blockquote data-sourcepos=\"944:1-947:51\">\n<ul data-sourcepos=\"944:2-947:51\">\n<li data-sourcepos=\"944:2-945:66\">\n<code>ctx.set_shared_state(key=<key>, value=<value>)<\/value><\/key><\/code>:<br \/>\u30ad\u30fc\u3092\u6307\u5b9a\u3057\u3066\u3001\u5024\u3092\u5171\u6709\u72b6\u614b\u30b9\u30c8\u30ec\u30fc\u30b8\u306b\u4fdd\u5b58<\/li>\n<li data-sourcepos=\"946:2-947:51\">\n<code>ctx.get_shared_state(key=<key>)<\/key><\/code>:<br \/>\u30ad\u30fc\u3092\u6307\u5b9a\u3057\u3066\u5171\u6709\u72b6\u614b\u304b\u3089\u5024\u3092\u53d6\u5f97<\/li>\n<\/ul>\n<\/blockquote>\n<\/details>\n<h2 data-sourcepos=\"953:1-953:27\">\n<span id=\"\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88\"><i class=\"fa fa-link\"\/><\/a>\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8<\/h2>\n<p data-sourcepos=\"954:1-955:133\">\u9577\u6642\u9593\u307e\u305f\u306f\u8907\u6570\u30b9\u30c6\u30c3\u30d7\u306b\u308f\u305f\u308b\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3067\u306f\u3001<strong>\u51e6\u7406\u306e\u9014\u4e2d\u7d4c\u904e\uff08\u72b6\u614b\uff09\u3092\u300c\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8\u300d\u3068\u3057\u3066\u4fdd\u5b58<\/strong>\u3067\u304d\u307e\u3059\u3002<br \/>\u9014\u4e2d\u3067\u5931\u6557\u3057\u3066\u3082\u201c\u6700\u521d\u304b\u3089\u3084\u308a\u76f4\u3057\u201d\u306b\u306a\u3089\u305a\u3001<strong>\u4fdd\u5b58\u5730\u70b9\u304b\u3089\u5b89\u5168\u306b\u518d\u958b<\/strong>\u3067\u304d\u308b\u4ed5\u7d44\u307f\u3067\u3059\u3002<\/p>\n<details>\n<summary>\u30b3\u30fc\u30c9\u30a4\u30e1\u30fc\u30b8<\/summary>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"960:1-992:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"p\">(<\/span>\n    <span class=\"n\">InMemoryCheckpointStorage<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">WorkflowBuilder<\/span><span class=\"p\">,<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"bp\">...<\/span>\n\n<span class=\"c1\"># ---------- \u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8\u3092\u4fdd\u6301\u3059\u308b\u30b9\u30c8\u30ec\u30fc\u30b8\u4f5c\u6210 ----------\n<\/span><span class=\"n\">checkpoint_storage<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">InMemoryCheckpointStorage<\/span><span class=\"p\">()<\/span>\n\n<span class=\"c1\"># ---------- \u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u69cb\u7bc9 ----------\n<\/span><span class=\"n\">builder<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">WorkflowBuilder<\/span><span class=\"p\">()<\/span>\n<span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">set_start_executor<\/span><span class=\"p\">(<\/span><span class=\"n\">start_executor<\/span><span class=\"p\">)<\/span>  \n<span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">add_edge<\/span><span class=\"p\">(<\/span><span class=\"n\">start_executor<\/span><span class=\"p\">,<\/span> <span class=\"n\">executor_b<\/span><span class=\"p\">)<\/span>  \n<span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">add_edge<\/span><span class=\"p\">(<\/span><span class=\"n\">executor_b<\/span><span class=\"p\">,<\/span> <span class=\"n\">executor_c<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">add_edge<\/span><span class=\"p\">(<\/span><span class=\"n\">executor_b<\/span><span class=\"p\">,<\/span> <span class=\"n\">end_executor<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">with_checkpointing<\/span><span class=\"p\">(<\/span><span class=\"n\">checkpoint_storage<\/span><span class=\"p\">)<\/span> <span class=\"c1\"># \u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8\u3092\u6307\u5b9a\n<\/span><span class=\"n\">workflow<\/span> <span class=\"o\">=<\/span> <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">build<\/span><span class=\"p\">()<\/span>\n\n<span class=\"c1\"># ---------- \u521d\u56de\u5b9f\u884c ----------\n<\/span><span class=\"k\">async<\/span> <span class=\"k\">for<\/span> <span class=\"n\">event<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">workflow<\/span><span class=\"p\">.<\/span><span class=\"nf\">run_streaming<\/span><span class=\"p\">(<\/span><span class=\"nb\">input<\/span><span class=\"p\">):<\/span>\n<span class=\"bp\">...<\/span>\n\n<span class=\"c1\"># ---------- \u4fdd\u5b58\u3055\u308c\u305f\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8\u4e00\u89a7\u3092\u53d6\u5f97 ----------\n<\/span><span class=\"n\">checkpoints<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">checkpoint_storage<\/span><span class=\"p\">.<\/span><span class=\"nf\">list_checkpoints<\/span><span class=\"p\">()<\/span>\n\n<span class=\"c1\"># ---------- \u6700\u5f8c\u306b\u4fdd\u5b58\u3055\u308c\u305f\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8\u304b\u3089\u9014\u4e2d\u518d\u958b ----------\n<\/span><span class=\"n\">last_checkpoint<\/span> <span class=\"o\">=<\/span> <span class=\"n\">checkpoints<\/span><span class=\"p\">[<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">]<\/span>\n<span class=\"k\">async<\/span> <span class=\"k\">for<\/span> <span class=\"n\">event<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">workflow<\/span><span class=\"p\">.<\/span><span class=\"nf\">run_stream_from_checkpoint<\/span><span class=\"p\">(<\/span><span class=\"n\">last_checkpoint<\/span><span class=\"p\">.<\/span><span class=\"n\">checkpoint_id<\/span><span class=\"p\">):<\/span>\n<span class=\"bp\">...<\/span>\n\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/details>\n<p data-sourcepos=\"996:1-997:126\"><strong>\u4fdd\u5b58\u3055\u308c\u308b\u3082\u306e<\/strong><br \/>\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8\u3067\u306f\u3001\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u518d\u69cb\u7bc9\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u4ee5\u4e0b\u306e\u72b6\u614b\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002<\/p>\n<div class=\"s_table\"><table data-sourcepos=\"999:1-1004:105\">\n<thead>\n<tr data-sourcepos=\"999:1-999:67\">\n<th data-sourcepos=\"999:2-999:31\">\u4fdd\u5b58\u5bfe\u8c61<\/th>\n<th data-sourcepos=\"999:33-999:66\">\u8aac\u660e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr data-sourcepos=\"1001:1-1001:93\">\n<td data-sourcepos=\"1001:2-1001:37\">\u5404 Executor \u306e\u73fe\u5728\u306e\u72b6\u614b<\/td>\n<td data-sourcepos=\"1001:39-1001:92\">\u3044\u307e\u3069\u306e\u51e6\u7406\u306e\u9014\u4e2d\u306a\u306e\u304b<\/td>\n<\/tr>\n<tr data-sourcepos=\"1002:1-1002:131\">\n<td data-sourcepos=\"1002:2-1002:63\">\u6b21\u306e\u30b9\u30fc\u30d1\u30fc\u30b9\u30c6\u30c3\u30d7\u306b\u6e21\u308b\u4fdd\u7559\u30e1\u30c3\u30bb\u30fc\u30b8<\/td>\n<td data-sourcepos=\"1002:65-1002:130\">\u307e\u3060\u6d88\u8cbb\u3055\u308c\u3066\u3044\u306a\u3044\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u5185\u5bb9<\/td>\n<\/tr>\n<tr data-sourcepos=\"1003:1-1003:117\">\n<td data-sourcepos=\"1003:2-1003:41\">\u4fdd\u7559\u4e2d\u306e\u8981\u6c42\u30fb\u5fdc\u7b54<\/td>\n<td data-sourcepos=\"1003:43-1003:116\">\u672a\u5b8c\u4e86\u306e\u3084\u308a\u3068\u308a\uff08API\u547c\u3073\u51fa\u3057\u30fbLLM\u30ec\u30b9\u30dd\u30f3\u30b9\uff09\u306a\u3069<\/td>\n<\/tr>\n<tr data-sourcepos=\"1004:1-1004:105\">\n<td data-sourcepos=\"1004:2-1004:35\">\u5171\u6709\u72b6\u614b\uff08Shared State\uff09<\/td>\n<td data-sourcepos=\"1004:37-1004:104\">\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u5168\u4f53\u3067\u5171\u6709\u3057\u3066\u3044\u308b\u5909\u6570\/\u72b6\u614b<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<h2 data-sourcepos=\"1008:1-1008:36\">\n<span id=\"\u30ea\u30af\u30a8\u30b9\u30c8\u30ec\u30b9\u30dd\u30f3\u30b9\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B9\"><i class=\"fa fa-link\"\/><\/a>\u30ea\u30af\u30a8\u30b9\u30c8\uff06\u30ec\u30b9\u30dd\u30f3\u30b9<\/h2>\n<p data-sourcepos=\"1009:1-1009:206\">\u696d\u52d9\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3067\u306f\u3001\u9014\u4e2d\u3067 <strong>\u4eba\u9593\u306e\u627f\u8a8d<\/strong>\u3001<strong>\u5916\u90e8\u30b7\u30b9\u30c6\u30e0\u306e\u5fdc\u7b54<\/strong>\u3001<strong>\u975e\u540c\u671f\u30b8\u30e7\u30d6\u306e\u5b8c\u4e86\u5f85\u3061<\/strong> \u3068\u3044\u3063\u305f\u5916\u90e8\u8981\u56e0\u304c\u5fc5\u8981\u306b\u306a\u308b\u533a\u9593\u304c\u983b\u51fa\u3057\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"1011:1-1011:171\">Agent Framework \u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306f\u3001\u3053\u306e\u3088\u3046\u306a\u300c<strong>\u4e00\u6642\u505c\u6b62 \u2192 \u5916\u90e8\u306e\u5224\u65ad \u2192 \u518d\u958b<\/strong>\u300d\u3068\u3044\u3046\u6319\u52d5\u3092\u30cd\u30a4\u30c6\u30a3\u30d6\u306b\u30b5\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002<\/p>\n<h3 data-sourcepos=\"1013:1-1013:19\">\n<span id=\"\u51e6\u7406\u306e\u6d41\u308c\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E5%87%A6%E7%90%86%E3%81%AE%E6%B5%81%E3%82%8C\"><i class=\"fa fa-link\"\/><\/a>\u51e6\u7406\u306e\u6d41\u308c<\/h3>\n<p data-sourcepos=\"1014:1-1014:119\">\u30ea\u30af\u30a8\u30b9\u30c8\uff06\u30ec\u30b9\u30dd\u30f3\u30b9\u306f\u3001<code>RequestInfoExecutor<\/code> \u3068\u3044\u3046\u7279\u6b8a\u306a Executor \u3092\u4ecb\u3057\u3066\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"1016:1-1016:229\">\u3053\u306e Executor \u306b\u5230\u9054\u3059\u308b\u3068\u3001\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306f\u5916\u90e8\u5fdc\u7b54\u3092\u5f85\u3064\u72b6\u614b\u306b\u9077\u79fb\u3057\u307e\u3059\u3002\u30db\u30b9\u30c8\u30a2\u30d7\u30ea\uff08UI\/\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\uff09\u304c\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u9001\u308b\u3068\u3001\u505c\u6b62\u5730\u70b9\u304b\u3089\u81ea\u52d5\u518d\u958b\u3055\u308c\u307e\u3059\u3002<\/p>\n<div class=\"s_table\"><table data-sourcepos=\"1018:1-1023:249\">\n<thead>\n<tr data-sourcepos=\"1018:1-1018:195\">\n<th data-sourcepos=\"1018:2-1018:22\">\u30b9\u30c6\u30c3\u30d7<\/th>\n<th data-sourcepos=\"1018:24-1018:122\">\u4f55\u304c\u8d77\u304d\u308b\u304b<\/th>\n<th data-sourcepos=\"1018:124-1018:194\">\u88dc\u8db3<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr data-sourcepos=\"1020:1-1020:237\">\n<td data-sourcepos=\"1020:2-1020:30\">\u2460 \u30ea\u30af\u30a8\u30b9\u30c8\u9001\u4fe1<\/td>\n<td data-sourcepos=\"1020:32-1020:146\">\u4e0a\u6d41 Executor \u2192 <code>RequestInfoExecutor<\/code> \u306b\u4f9d\u983c\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u51fa<\/td>\n<td data-sourcepos=\"1020:148-1020:236\">\u4f9d\u983c\u30da\u30a4\u30ed\u30fc\u30c9\u306f <code>RequestInfoMessage<\/code> \u7d99\u627f\u578b<\/td>\n<\/tr>\n<tr data-sourcepos=\"1021:1-1021:241\">\n<td data-sourcepos=\"1021:2-1021:34\">\u2461 \u505c\u6b62\uff06\u30a4\u30d9\u30f3\u30c8\u767a\u884c<\/td>\n<td data-sourcepos=\"1021:36-1021:164\">\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u4e00\u6642\u505c\u6b62\u3057\u3001<code>RequestInfoEvent<\/code> \u3092<strong>\u30a2\u30d7\u30ea\u5074\u3078\u901a\u77e5<\/strong>\n<\/td>\n<td data-sourcepos=\"1021:166-1021:240\">\u72b6\u614b\u306f <code>IN_PROGRESS_PENDING_REQUESTS<\/code> \u2192 <code>IDLE_WITH_PENDING_REQUESTS<\/code>\n<\/td>\n<\/tr>\n<tr data-sourcepos=\"1022:1-1022:176\">\n<td data-sourcepos=\"1022:2-1022:28\">\u2462 \u5916\u90e8\u304b\u3089\u5fdc\u7b54<\/td>\n<td data-sourcepos=\"1022:30-1022:142\">\u30e6\u30fc\u30b6\u30fc\/\u5916\u90e8\u304c\u5224\u65ad\u3057\u3001<code>send_responses_streaming(...)<\/code>\uff08\u307e\u305f\u306f <code>send_responses(...)<\/code>\uff09\u3067\u8fd4\u5374<\/td>\n<td data-sourcepos=\"1022:144-1022:175\"\/>\n<\/tr>\n<tr data-sourcepos=\"1023:1-1023:249\">\n<td data-sourcepos=\"1023:2-1023:26\">\u2463 \u518d\u958b\uff06\u7d99\u7d9a<\/td>\n<td data-sourcepos=\"1023:28-1023:148\">\n<code>RequestInfoExecutor<\/code> \u304c <code>RequestResponse<\/code> \u3092\u53d7\u7406\u3057\u3001\u5143\u306e\u5b9f\u884c\u7d4c\u8def\u306e\u6b21 Executor \u3078\u9032\u3080<\/td>\n<td data-sourcepos=\"1023:150-1023:248\">\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8\u5bfe\u5fdc\u3067\u5b89\u5168\u306b\u518d\u958b<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<details>\n<summary>\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9<\/summary>\n<p data-sourcepos=\"1031:1-1031:57\">\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\u306e\u69cb\u6210\u306f\u4ee5\u4e0b\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"1033:1-1033:122\"><a target=\"_blank\" href=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F26a4410a-eda1-40ce-ae65-bb74df930c67.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=44a94a54ed87b4241ada906673a0bfd0\" target=\"_blank\" rel=\"nofollow noopener\"><img decoding=\"async\" src=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F26a4410a-eda1-40ce-ae65-bb74df930c67.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=44a94a54ed87b4241ada906673a0bfd0\" alt=\"image.png\" srcset=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F26a4410a-eda1-40ce-ae65-bb74df930c67.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;w=1400&amp;fit=max&amp;s=345e79abe6c84fb8df1f08c487337b8a 1x\" data-canonical-src=\"https:\/\/qiita-image-store.s3.ap-northeast-1.amazonaws.com\/0\/1273574\/26a4410a-eda1-40ce-ae65-bb74df930c67.png\" loading=\"lazy\"\/><\/a><\/p>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"1036:1-1239:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"kn\">import<\/span> <span class=\"n\">asyncio<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">dataclasses<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">dataclass<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">typing_extensions<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">Never<\/span>\n\n<span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"p\">(<\/span>\n    <span class=\"n\">WorkflowBuilder<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">WorkflowContext<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">Executor<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">RequestInfoExecutor<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">RequestInfoEvent<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">RequestInfoMessage<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">RequestResponse<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">WorkflowOutputEvent<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">WorkflowStatusEvent<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">WorkflowRunState<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">handler<\/span><span class=\"p\">,<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"c1\"># ---------- \u578b\u5b9a\u7fa9 ----------\n<\/span><span class=\"nd\">@dataclass<\/span>\n<span class=\"k\">class<\/span> <span class=\"nc\">ApprovalRequest<\/span><span class=\"p\">(<\/span><span class=\"n\">RequestInfoMessage<\/span><span class=\"p\">):<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u627f\u8a8d\u30ea\u30af\u30a8\u30b9\u30c8\uff08RequestInfoMessage \u3092\u7d99\u627f\uff09<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"n\">prompt<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span> <span class=\"o\">=<\/span> <span class=\"sh\">\"\"<\/span>\n    <span class=\"n\">attempt_count<\/span><span class=\"p\">:<\/span> <span class=\"nb\">int<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span>\n\n<span class=\"c1\"># ---------- \u627f\u8a8d\u7ba1\u7406 Executor ----------\n<\/span><span class=\"k\">class<\/span> <span class=\"nc\">ApprovalManager<\/span><span class=\"p\">(<\/span><span class=\"n\">Executor<\/span><span class=\"p\">):<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u627f\u8a8d\u30d7\u30ed\u30bb\u30b9\u3092\u7ba1\u7406\u3059\u308bExecutor<\/span><span class=\"sh\">\"\"\"<\/span>\n\n    <span class=\"k\">def<\/span> <span class=\"nf\">__init__<\/span><span class=\"p\">(<\/span><span class=\"n\">self<\/span><span class=\"p\">,<\/span> <span class=\"nb\">id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span> <span class=\"o\">|<\/span> <span class=\"bp\">None<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">None<\/span><span class=\"p\">):<\/span>\n        <span class=\"nf\">super<\/span><span class=\"p\">().<\/span><span class=\"nf\">__init__<\/span><span class=\"p\">(<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"nb\">id<\/span> <span class=\"ow\">or<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">approval_manager<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"nd\">@handler<\/span>\n    <span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">start<\/span><span class=\"p\">(<\/span><span class=\"n\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">_<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">:<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">[<\/span><span class=\"n\">ApprovalRequest<\/span><span class=\"p\">])<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n        <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u6700\u521d\u306e\u627f\u8a8d\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1<\/span><span class=\"sh\">\"\"\"<\/span>\n        <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">[ApprovalManager] \u627f\u8a8d\u30d7\u30ed\u30bb\u30b9\u3092\u958b\u59cb\u3057\u307e\u3059<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">send_message<\/span><span class=\"p\">(<\/span><span class=\"nc\">ApprovalRequest<\/span><span class=\"p\">(<\/span>\n            <span class=\"n\">prompt<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\u30ec\u30dd\u30fc\u30c8\u516c\u958b\u306e\u627f\u8a8d\u3092\u304a\u9858\u3044\u3057\u307e\u3059 (y\/n)<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">attempt_count<\/span><span class=\"o\">=<\/span><span class=\"mi\">1<\/span>\n        <span class=\"p\">))<\/span>\n\n    <span class=\"nd\">@handler<\/span>\n    <span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">handle_response<\/span><span class=\"p\">(<\/span>\n        <span class=\"n\">self<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">feedback<\/span><span class=\"p\">:<\/span> <span class=\"n\">RequestResponse<\/span><span class=\"p\">[<\/span><span class=\"n\">ApprovalRequest<\/span><span class=\"p\">,<\/span> <span class=\"nb\">str<\/span><span class=\"p\">],<\/span>\n        <span class=\"n\">ctx<\/span><span class=\"p\">:<\/span> <span class=\"n\">WorkflowContext<\/span><span class=\"p\">[<\/span><span class=\"n\">ApprovalRequest<\/span><span class=\"p\">,<\/span> <span class=\"nb\">str<\/span><span class=\"p\">],<\/span>\n    <span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"bp\">None<\/span><span class=\"p\">:<\/span>\n        <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u627f\u8a8d\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u51e6\u7406<\/span><span class=\"sh\">\"\"\"<\/span>\n        <span class=\"n\">reply<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"n\">feedback<\/span><span class=\"p\">.<\/span><span class=\"n\">data<\/span> <span class=\"ow\">or<\/span> <span class=\"sh\">\"\"<\/span><span class=\"p\">).<\/span><span class=\"nf\">strip<\/span><span class=\"p\">().<\/span><span class=\"nf\">lower<\/span><span class=\"p\">()<\/span>\n        <span class=\"n\">request_data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">feedback<\/span><span class=\"p\">.<\/span><span class=\"n\">original_request<\/span>\n        \n        <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">[ApprovalManager] \u8a66\u884c <\/span><span class=\"si\">{<\/span><span class=\"n\">request_data<\/span><span class=\"p\">.<\/span><span class=\"n\">attempt_count<\/span><span class=\"si\">}<\/span><span class=\"s\">: \u5fdc\u7b54=<\/span><span class=\"sh\">'<\/span><span class=\"si\">{<\/span><span class=\"n\">reply<\/span><span class=\"si\">}<\/span><span class=\"sh\">'\"<\/span><span class=\"p\">)<\/span>\n        \n        <span class=\"k\">if<\/span> <span class=\"n\">reply<\/span> <span class=\"ow\">in<\/span> <span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">y<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">yes<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">1<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">ok<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">\u627f\u8a8d<\/span><span class=\"sh\">\"<\/span><span class=\"p\">):<\/span>\n            <span class=\"c1\"># \u627f\u8a8d\u3055\u308c\u305f\u5834\u5408\n<\/span>            <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">[ApprovalManager] \u627f\u8a8d\u3055\u308c\u307e\u3057\u305f\uff01(\u8a66\u884c\u56de\u6570: <\/span><span class=\"si\">{<\/span><span class=\"n\">request_data<\/span><span class=\"p\">.<\/span><span class=\"n\">attempt_count<\/span><span class=\"si\">}<\/span><span class=\"s\">)<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n            <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">yield_output<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\u30ec\u30dd\u30fc\u30c8\u304c\u6b63\u5e38\u306b\u516c\u958b\u3055\u308c\u307e\u3057\u305f (\u8a66\u884c\u56de\u6570: <\/span><span class=\"si\">{<\/span><span class=\"n\">request_data<\/span><span class=\"p\">.<\/span><span class=\"n\">attempt_count<\/span><span class=\"si\">}<\/span><span class=\"s\">)<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n            <span class=\"k\">return<\/span>\n        \n        <span class=\"c1\"># \u5374\u4e0b\u3055\u308c\u305f\u5834\u5408\u3001\u518d\u8a66\u884c\n<\/span>        <span class=\"n\">next_attempt<\/span> <span class=\"o\">=<\/span> <span class=\"n\">request_data<\/span><span class=\"p\">.<\/span><span class=\"n\">attempt_count<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span>\n        <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">[ApprovalManager] \u5374\u4e0b\u3055\u308c\u307e\u3057\u305f\u3002<\/span><span class=\"si\">{<\/span><span class=\"n\">next_attempt<\/span><span class=\"si\">}<\/span><span class=\"s\"> \u56de\u76ee\u306e\u627f\u8a8d\u3092\u30ea\u30af\u30a8\u30b9\u30c8\u3057\u307e\u3059...<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n        \n        <span class=\"k\">await<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">send_message<\/span><span class=\"p\">(<\/span><span class=\"nc\">ApprovalRequest<\/span><span class=\"p\">(<\/span>\n            <span class=\"n\">prompt<\/span><span class=\"o\">=<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\u30ec\u30dd\u30fc\u30c8\u516c\u958b\u306e\u627f\u8a8d\u3092\u304a\u9858\u3044\u3057\u307e\u3059 (y\/n) - <\/span><span class=\"si\">{<\/span><span class=\"n\">next_attempt<\/span><span class=\"si\">}<\/span><span class=\"s\"> \u56de\u76ee\u306e\u8a66\u884c<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">attempt_count<\/span><span class=\"o\">=<\/span><span class=\"n\">next_attempt<\/span>\n        <span class=\"p\">))<\/span>\n\n<span class=\"c1\"># ---------- \u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u69cb\u7bc9 ----------\n<\/span><span class=\"k\">def<\/span> <span class=\"nf\">build_workflow<\/span><span class=\"p\">():<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u627f\u8a8d\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u69cb\u7bc9<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"n\">approval_manager<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">ApprovalManager<\/span><span class=\"p\">(<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">approval_manager<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">request_info<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">RequestInfoExecutor<\/span><span class=\"p\">(<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">request_info<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    \n    <span class=\"n\">workflow<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span>\n        <span class=\"nc\">WorkflowBuilder<\/span><span class=\"p\">()<\/span>\n        <span class=\"p\">.<\/span><span class=\"nf\">set_start_executor<\/span><span class=\"p\">(<\/span><span class=\"n\">approval_manager<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">.<\/span><span class=\"nf\">add_edge<\/span><span class=\"p\">(<\/span><span class=\"n\">approval_manager<\/span><span class=\"p\">,<\/span> <span class=\"n\">request_info<\/span><span class=\"p\">)<\/span>  <span class=\"c1\"># \u627f\u8a8d\u30ea\u30af\u30a8\u30b9\u30c8\u9001\u4fe1\n<\/span>        <span class=\"p\">.<\/span><span class=\"nf\">add_edge<\/span><span class=\"p\">(<\/span><span class=\"n\">request_info<\/span><span class=\"p\">,<\/span> <span class=\"n\">approval_manager<\/span><span class=\"p\">)<\/span>  <span class=\"c1\"># \u627f\u8a8d\u30ec\u30b9\u30dd\u30f3\u30b9\u53d7\u4fe1\n<\/span>        <span class=\"p\">.<\/span><span class=\"nf\">build<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">)<\/span>\n    \n    <span class=\"k\">return<\/span> <span class=\"n\">workflow<\/span>\n\n<span class=\"c1\"># ---------- \u30e1\u30a4\u30f3\u5b9f\u884c ----------\n<\/span><span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">main<\/span><span class=\"p\">():<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\">\u30e1\u30a4\u30f3\u5b9f\u884c\u95a2\u6570\uff08\u516c\u5f0f\u30b5\u30f3\u30d7\u30eb\u306e\u30d1\u30bf\u30fc\u30f3\u306b\u57fa\u3065\u304f\uff09<\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"n\">workflow<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">build_workflow<\/span><span class=\"p\">()<\/span>\n    \n    <span class=\"n\">pending_responses<\/span><span class=\"p\">:<\/span> <span class=\"nb\">dict<\/span><span class=\"p\">[<\/span><span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"nb\">str<\/span><span class=\"p\">]<\/span> <span class=\"o\">|<\/span> <span class=\"bp\">None<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">None<\/span>\n    <span class=\"n\">completed<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">False<\/span>\n    <span class=\"n\">workflow_output<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span> <span class=\"o\">|<\/span> <span class=\"bp\">None<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">None<\/span>\n    \n    <span class=\"k\">while<\/span> <span class=\"ow\">not<\/span> <span class=\"n\">completed<\/span><span class=\"p\">:<\/span>\n        <span class=\"c1\"># \u521d\u56de\u306f run_stream\u30012\u56de\u76ee\u4ee5\u964d\u306f send_responses_streaming\n<\/span>        <span class=\"n\">stream<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span>\n            <span class=\"n\">workflow<\/span><span class=\"p\">.<\/span><span class=\"nf\">send_responses_streaming<\/span><span class=\"p\">(<\/span><span class=\"n\">pending_responses<\/span><span class=\"p\">)<\/span> \n            <span class=\"k\">if<\/span> <span class=\"n\">pending_responses<\/span> \n            <span class=\"k\">else<\/span> <span class=\"n\">workflow<\/span><span class=\"p\">.<\/span><span class=\"nf\">run_stream<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">start<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">)<\/span>\n        \n        <span class=\"c1\"># \u30a4\u30d9\u30f3\u30c8\u3092\u53ce\u96c6\n<\/span>        <span class=\"n\">events<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"n\">event<\/span> <span class=\"k\">async<\/span> <span class=\"k\">for<\/span> <span class=\"n\">event<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">stream<\/span><span class=\"p\">]<\/span>\n        <span class=\"n\">pending_responses<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">None<\/span>\n        \n        <span class=\"c1\"># \u30ea\u30af\u30a8\u30b9\u30c8\u3068\u51fa\u529b\u3092\u53ce\u96c6\n<\/span>        <span class=\"n\">requests<\/span><span class=\"p\">:<\/span> <span class=\"nb\">list<\/span><span class=\"p\">[<\/span><span class=\"nb\">tuple<\/span><span class=\"p\">[<\/span><span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"nb\">int<\/span><span class=\"p\">]]<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[]<\/span>  <span class=\"c1\"># (request_id, prompt, attempt_count)\n<\/span>        \n        <span class=\"k\">for<\/span> <span class=\"n\">event<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">events<\/span><span class=\"p\">:<\/span>\n            <span class=\"k\">if<\/span> <span class=\"nf\">isinstance<\/span><span class=\"p\">(<\/span><span class=\"n\">event<\/span><span class=\"p\">,<\/span> <span class=\"n\">RequestInfoEvent<\/span><span class=\"p\">)<\/span> <span class=\"ow\">and<\/span> <span class=\"nf\">isinstance<\/span><span class=\"p\">(<\/span><span class=\"n\">event<\/span><span class=\"p\">.<\/span><span class=\"n\">data<\/span><span class=\"p\">,<\/span> <span class=\"n\">ApprovalRequest<\/span><span class=\"p\">):<\/span>\n                <span class=\"c1\"># \u627f\u8a8d\u30ea\u30af\u30a8\u30b9\u30c8\u30a4\u30d9\u30f3\u30c8\n<\/span>                <span class=\"n\">requests<\/span><span class=\"p\">.<\/span><span class=\"nf\">append<\/span><span class=\"p\">((<\/span>\n                    <span class=\"n\">event<\/span><span class=\"p\">.<\/span><span class=\"n\">request_id<\/span><span class=\"p\">,<\/span> \n                    <span class=\"n\">event<\/span><span class=\"p\">.<\/span><span class=\"n\">data<\/span><span class=\"p\">.<\/span><span class=\"n\">prompt<\/span><span class=\"p\">,<\/span> \n                    <span class=\"n\">event<\/span><span class=\"p\">.<\/span><span class=\"n\">data<\/span><span class=\"p\">.<\/span><span class=\"n\">attempt_count<\/span>\n                <span class=\"p\">))<\/span>\n            <span class=\"k\">elif<\/span> <span class=\"nf\">isinstance<\/span><span class=\"p\">(<\/span><span class=\"n\">event<\/span><span class=\"p\">,<\/span> <span class=\"n\">WorkflowOutputEvent<\/span><span class=\"p\">):<\/span>\n                <span class=\"c1\"># \u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u51fa\u529b\uff08\u5b8c\u4e86\uff09\n<\/span>                <span class=\"n\">workflow_output<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">str<\/span><span class=\"p\">(<\/span><span class=\"n\">event<\/span><span class=\"p\">.<\/span><span class=\"n\">data<\/span><span class=\"p\">)<\/span>\n                <span class=\"n\">completed<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">True<\/span>\n        \n        <span class=\"c1\"># \u72b6\u614b\u5909\u5316\u3092\u8868\u793a\uff08\u30c7\u30d0\u30c3\u30b0\u7528\uff09\n<\/span>        <span class=\"n\">pending_status<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">any<\/span><span class=\"p\">(<\/span>\n            <span class=\"nf\">isinstance<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span><span class=\"p\">,<\/span> <span class=\"n\">WorkflowStatusEvent<\/span><span class=\"p\">)<\/span> <span class=\"ow\">and<\/span> <span class=\"n\">e<\/span><span class=\"p\">.<\/span><span class=\"n\">state<\/span> <span class=\"o\">==<\/span> <span class=\"n\">WorkflowRunState<\/span><span class=\"p\">.<\/span><span class=\"n\">IN_PROGRESS_PENDING_REQUESTS<\/span>\n            <span class=\"k\">for<\/span> <span class=\"n\">e<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">events<\/span>\n        <span class=\"p\">)<\/span>\n        <span class=\"n\">idle_with_requests<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">any<\/span><span class=\"p\">(<\/span>\n            <span class=\"nf\">isinstance<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span><span class=\"p\">,<\/span> <span class=\"n\">WorkflowStatusEvent<\/span><span class=\"p\">)<\/span> <span class=\"ow\">and<\/span> <span class=\"n\">e<\/span><span class=\"p\">.<\/span><span class=\"n\">state<\/span> <span class=\"o\">==<\/span> <span class=\"n\">WorkflowRunState<\/span><span class=\"p\">.<\/span><span class=\"n\">IDLE_WITH_PENDING_REQUESTS<\/span>\n            <span class=\"k\">for<\/span> <span class=\"n\">e<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">events<\/span>\n        <span class=\"p\">)<\/span>\n        \n        <span class=\"k\">if<\/span> <span class=\"n\">pending_status<\/span><span class=\"p\">:<\/span>\n            <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">[\u72b6\u614b] IN_PROGRESS_PENDING_REQUESTS (\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u4e2d)<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">if<\/span> <span class=\"n\">idle_with_requests<\/span><span class=\"p\">:<\/span>\n            <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">[\u72b6\u614b] IDLE_WITH_PENDING_REQUESTS (\u4eba\u9593\u306e\u5165\u529b\u5f85\u3061)<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n        \n        <span class=\"c1\"># \u627f\u8a8d\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u3042\u308b\u5834\u5408\u3001\u30e6\u30fc\u30b6\u30fc\u306b\u5165\u529b\u3092\u6c42\u3081\u308b\n<\/span>        <span class=\"k\">if<\/span> <span class=\"n\">requests<\/span> <span class=\"ow\">and<\/span> <span class=\"ow\">not<\/span> <span class=\"n\">completed<\/span><span class=\"p\">:<\/span>\n            <span class=\"n\">responses<\/span><span class=\"p\">:<\/span> <span class=\"nb\">dict<\/span><span class=\"p\">[<\/span><span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"nb\">str<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{}<\/span>\n            \n            <span class=\"k\">for<\/span> <span class=\"n\">req_id<\/span><span class=\"p\">,<\/span> <span class=\"n\">prompt<\/span><span class=\"p\">,<\/span> <span class=\"n\">attempt_count<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">requests<\/span><span class=\"p\">:<\/span>\n                <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"si\">{<\/span><span class=\"sh\">'<\/span><span class=\"s\">=<\/span><span class=\"sh\">'<\/span><span class=\"o\">*<\/span><span class=\"mi\">60<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n                <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\u627f\u8a8d\u30ea\u30af\u30a8\u30b9\u30c8 (\u8a66\u884c <\/span><span class=\"si\">{<\/span><span class=\"n\">attempt_count<\/span><span class=\"si\">}<\/span><span class=\"s\">)<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n                <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"si\">{<\/span><span class=\"sh\">'<\/span><span class=\"s\">=<\/span><span class=\"sh\">'<\/span><span class=\"o\">*<\/span><span class=\"mi\">60<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n                <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"si\">{<\/span><span class=\"n\">prompt<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n                \n                <span class=\"n\">answer<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">input<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\u627f\u8a8d\u3057\u307e\u3059\u304b\uff1f (y\/n\/exit): <\/span><span class=\"sh\">\"<\/span><span class=\"p\">).<\/span><span class=\"nf\">strip<\/span><span class=\"p\">().<\/span><span class=\"nf\">lower<\/span><span class=\"p\">()<\/span>\n                \n                <span class=\"k\">if<\/span> <span class=\"n\">answer<\/span> <span class=\"o\">==<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">exit<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span>\n                    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\u30e6\u30fc\u30b6\u30fc\u306b\u3088\u3063\u3066\u51e6\u7406\u304c\u4e2d\u65ad\u3055\u308c\u307e\u3057\u305f<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n                    <span class=\"k\">return<\/span>\n                \n                <span class=\"n\">responses<\/span><span class=\"p\">[<\/span><span class=\"n\">req_id<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"n\">answer<\/span>\n                <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\u5165\u529b\u7d50\u679c: <\/span><span class=\"si\">{<\/span><span class=\"sh\">'<\/span><span class=\"s\">\u627f\u8a8d<\/span><span class=\"sh\">'<\/span> <span class=\"k\">if<\/span> <span class=\"n\">answer<\/span> <span class=\"ow\">in<\/span> <span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">y<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">yes<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">1<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">ok<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">\u627f\u8a8d<\/span><span class=\"sh\">'<\/span><span class=\"p\">)<\/span> <span class=\"k\">else<\/span> <span class=\"sh\">'<\/span><span class=\"s\">\u5374\u4e0b<\/span><span class=\"sh\">'<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n            \n            <span class=\"n\">pending_responses<\/span> <span class=\"o\">=<\/span> <span class=\"n\">responses<\/span>\n    \n    <span class=\"c1\"># \u6700\u7d42\u7d50\u679c\u3092\u8868\u793a\n<\/span>    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"si\">{<\/span><span class=\"sh\">'<\/span><span class=\"s\">=<\/span><span class=\"sh\">'<\/span><span class=\"o\">*<\/span><span class=\"mi\">70<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\u6700\u7d42\u7d50\u679c: <\/span><span class=\"si\">{<\/span><span class=\"n\">workflow_output<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"si\">{<\/span><span class=\"sh\">'<\/span><span class=\"s\">=<\/span><span class=\"sh\">'<\/span><span class=\"o\">*<\/span><span class=\"mi\">70<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    \n    <span class=\"c1\"># \u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u56f3\u3092\u8868\u793a\n<\/span>    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"si\">{<\/span><span class=\"sh\">'<\/span><span class=\"s\">=<\/span><span class=\"sh\">'<\/span><span class=\"o\">*<\/span><span class=\"mi\">50<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u56f3 (Mermaid)<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"si\">{<\/span><span class=\"sh\">'<\/span><span class=\"s\">=<\/span><span class=\"sh\">'<\/span><span class=\"o\">*<\/span><span class=\"mi\">50<\/span><span class=\"si\">}<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">WorkflowViz<\/span>\n    <span class=\"n\">viz<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">WorkflowViz<\/span><span class=\"p\">(<\/span><span class=\"n\">workflow<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">viz<\/span><span class=\"p\">.<\/span><span class=\"nf\">to_mermaid<\/span><span class=\"p\">())<\/span>\n\n<span class=\"k\">if<\/span> <span class=\"n\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">__main__<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span>\n    <span class=\"n\">asyncio<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"nf\">main<\/span><span class=\"p\">())<\/span>\n\n\n<span class=\"c1\"># ---------- \u51fa\u529b ----------\n# [ApprovalManager] \u627f\u8a8d\u30d7\u30ed\u30bb\u30b9\u3092\u958b\u59cb\u3057\u307e\u3059\n# [\u72b6\u614b] IN_PROGRESS_PENDING_REQUESTS (\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u4e2d)\n# [\u72b6\u614b] IDLE_WITH_PENDING_REQUESTS (\u4eba\u9593\u306e\u5165\u529b\u5f85\u3061)\n<\/span>\n<span class=\"c1\"># ============================================================\n# \u627f\u8a8d\u30ea\u30af\u30a8\u30b9\u30c8 (\u8a66\u884c 1)\n# ============================================================\n# \u30ec\u30dd\u30fc\u30c8\u516c\u958b\u306e\u627f\u8a8d\u3092\u304a\u9858\u3044\u3057\u307e\u3059 (y\/n)\n# \u627f\u8a8d\u3057\u307e\u3059\u304b\uff1f (y\/n\/exit): n\n# \u5165\u529b\u7d50\u679c: \u5374\u4e0b\n# [ApprovalManager] \u8a66\u884c 1: \u5fdc\u7b54='n'\n# [ApprovalManager] \u5374\u4e0b\u3055\u308c\u307e\u3057\u305f\u30022 \u56de\u76ee\u306e\u627f\u8a8d\u3092\u30ea\u30af\u30a8\u30b9\u30c8\u3057\u307e\u3059...\n# [\u72b6\u614b] IN_PROGRESS_PENDING_REQUESTS (\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u4e2d)\n# [\u72b6\u614b] IDLE_WITH_PENDING_REQUESTS (\u4eba\u9593\u306e\u5165\u529b\u5f85\u3061)\n<\/span>\n<span class=\"c1\"># ============================================================\n# \u627f\u8a8d\u30ea\u30af\u30a8\u30b9\u30c8 (\u8a66\u884c 2)\n# ============================================================\n# \u30ec\u30dd\u30fc\u30c8\u516c\u958b\u306e\u627f\u8a8d\u3092\u304a\u9858\u3044\u3057\u307e\u3059 (y\/n) - 2 \u56de\u76ee\u306e\u8a66\u884c\n# \u627f\u8a8d\u3057\u307e\u3059\u304b\uff1f (y\/n\/exit): y\n# \u5165\u529b\u7d50\u679c: \u627f\u8a8d\n# [ApprovalManager] \u8a66\u884c 2: \u5fdc\u7b54='y'\n# [ApprovalManager] \u627f\u8a8d\u3055\u308c\u307e\u3057\u305f\uff01(\u8a66\u884c\u56de\u6570: 2)\n<\/span>\n<span class=\"c1\"># ======================================================================\n# \u6700\u7d42\u7d50\u679c: \u30ec\u30dd\u30fc\u30c8\u304c\u6b63\u5e38\u306b\u516c\u958b\u3055\u308c\u307e\u3057\u305f (\u8a66\u884c\u56de\u6570: 2)\n# ======================================================================\n<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<\/details>\n<h2 data-sourcepos=\"1245:1-1245:30\">\n<span id=\"\u30aa\u30d6\u30b6\u30fc\u30d0\u30d3\u30ea\u30c6\u30a3\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E3%82%AA%E3%83%96%E3%82%B6%E3%83%BC%E3%83%90%E3%83%93%E3%83%AA%E3%83%86%E3%82%A3\"><i class=\"fa fa-link\"\/><\/a>\u30aa\u30d6\u30b6\u30fc\u30d0\u30d3\u30ea\u30c6\u30a3<\/h2>\n<p data-sourcepos=\"1247:1-1247:179\">Agent Framework \u306b\u306f\u3001<strong>\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u5185\u90e8\u3067\u300c\u4f55\u304c\u8d77\u304d\u3066\u3044\u308b\u304b\u300d\u3092\u53ef\u8996\u5316\u3059\u308b\u305f\u3081\u306e\u6a19\u6e96\u30aa\u30d6\u30b6\u30fc\u30d0\u30d3\u30ea\u30c6\u30a3\u6a5f\u69cb<\/strong>\u304c\u5099\u308f\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"1249:1-1249:181\">\u7d50\u679c\u3060\u3051\u3067\u306a\u304f\u300c<strong>\u306a\u305c\u305d\u306e\u7d4c\u8def\u3092\u901a\u308a\u3001\u3069\u3053\u306b\u6642\u9593\u304c\u304b\u304b\u3063\u305f\u306e\u304b<\/strong>\u300d\u307e\u3067\u8ffd\u8de1\u3067\u304d\u308b\u305f\u3081\u3001\u30c7\u30d0\u30c3\u30b0\u30fb\u5206\u6790\u30fb\u76e3\u67fb\u306a\u3069\u306b\u6709\u7528\u3067\u3059\u3002<\/p>\n<p data-sourcepos=\"1251:1-1251:204\">\u3055\u3089\u306b\u5185\u90e8\u3067\u306f OpenTelemetry (OTel) \u306b\u5bfe\u5fdc\u3057\u305f <code>Span<\/code> \u304c\u751f\u6210\u3055\u308c\u3066\u304a\u308a\u3001\u305d\u306e\u307e\u307e <strong>Application Insights \/ Aspire \/ Datadog<\/strong> \u306a\u3069\u3078\u8ee2\u9001\u3057\u3066\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3067\u304d\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"1253:1-1253:122\"><a target=\"_blank\" href=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F1fe94457-5a30-46d2-9bab-8c66fb9bfd9f.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=3687f1fc19d68fcb84c0b105c9ece67f\" target=\"_blank\" rel=\"nofollow noopener\"><img decoding=\"async\" src=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F1fe94457-5a30-46d2-9bab-8c66fb9bfd9f.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=3687f1fc19d68fcb84c0b105c9ece67f\" alt=\"image.png\" srcset=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F1fe94457-5a30-46d2-9bab-8c66fb9bfd9f.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;w=1400&amp;fit=max&amp;s=6594e5107707edf8bc2a9d0e7850823d 1x\" data-canonical-src=\"https:\/\/qiita-image-store.s3.ap-northeast-1.amazonaws.com\/0\/1273574\/1fe94457-5a30-46d2-9bab-8c66fb9bfd9f.png\" loading=\"lazy\"\/><\/a><\/p>\n<h2 data-sourcepos=\"1259:1-1259:12\">\n<span id=\"\u53ef\u8996\u5316\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E5%8F%AF%E8%A6%96%E5%8C%96\"><i class=\"fa fa-link\"\/><\/a>\u53ef\u8996\u5316<\/h2>\n<p data-sourcepos=\"1260:1-1261:138\">Agent Framework \u306f\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u69cb\u9020\u7684\u306b\u4fdd\u6301\u3057\u3066\u3044\u308b\u305f\u3081\u3001Executor \u306e\u3064\u306a\u304c\u308a\uff08\u30b0\u30e9\u30d5\u69cb\u9020\uff09\u3084\u5b9f\u969b\u306e\u5b9f\u884c\u30eb\u30fc\u30c8\u3092\u53ef\u8996\u5316\u3059\u308b\u3053\u3068\u304c\u5bb9\u6613\u306b\u3067\u304d\u307e\u3059\u3002<br \/>\u8907\u96d1\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u958b\u767a\u30fb\u904b\u7528\u3059\u308b\u969b\u306e\u3001\u69cb\u9020\u306e\u7406\u89e3\u3084\u8a2d\u8a08\u30ec\u30d3\u30e5\u30fc\u304c\u3068\u3066\u3082\u30b9\u30e0\u30fc\u30ba\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<details>\n<summary>\u30b3\u30fc\u30c9\u30a4\u30e1\u30fc\u30b8<\/summary>\n<p data-sourcepos=\"1265:1-1265:118\">Agent Framework \u3067\u306f <code>WorkflowViz<\/code> \u3092\u4f7f\u3046\u3053\u3068\u3067\u3001\u7c21\u5358\u306b Mermaid \u5f62\u5f0f\u306e\u56f3\u3068\u3057\u3066\u51fa\u529b\u3067\u304d\u307e\u3059\u3002<\/p>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"1267:1-1283:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">WorkflowBuilder<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">WorkflowViz<\/span>\n\n<span class=\"c1\"># (\u7701\u7565)\n<\/span>\n<span class=\"c1\"># ---------- \u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u69cb\u7bc9 ----------\n<\/span><span class=\"n\">builder<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">WorkflowBuilder<\/span><span class=\"p\">()<\/span>\n<span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">set_start_executor<\/span><span class=\"p\">(<\/span><span class=\"n\">start<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">add_fan_out_edges<\/span><span class=\"p\">(<\/span><span class=\"n\">start<\/span><span class=\"p\">,<\/span> <span class=\"p\">[<\/span><span class=\"n\">count_words<\/span><span class=\"p\">,<\/span> <span class=\"n\">count_chars<\/span><span class=\"p\">])<\/span>\n<span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">add_fan_in_edges<\/span><span class=\"p\">([<\/span><span class=\"n\">count_words<\/span><span class=\"p\">,<\/span> <span class=\"n\">count_chars<\/span><span class=\"p\">],<\/span> <span class=\"n\">aggregate<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">workflow<\/span> <span class=\"o\">=<\/span> <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">build<\/span><span class=\"p\">()<\/span>\n\n<span class=\"c1\"># ---------- \u53ef\u8996\u5316 ----------\n<\/span><span class=\"n\">viz<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">WorkflowViz<\/span><span class=\"p\">(<\/span><span class=\"n\">workflow<\/span><span class=\"p\">)<\/span>\n<span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">viz<\/span><span class=\"p\">.<\/span><span class=\"nf\">to_mermaid<\/span><span class=\"p\">())<\/span>\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/details>\n<p data-sourcepos=\"1287:1-1287:110\">Mermaid \u3067\u51fa\u529b\u3057\u305f\u969b\u306f\u3001<a target=\"_blank\" href=\"https:\/\/mermaid.live\/\" rel=\"nofollow noopener\" target=\"_blank\">Mermaid Live Editor<\/a> \u306a\u3069\u3067\u53ef\u8996\u5316\u3067\u304d\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"1289:1-1289:122\"><a target=\"_blank\" href=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F9f453841-9627-44e0-a124-f024837cebaa.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=c777932e245813a7f3a81b7f90c50b44\" target=\"_blank\" rel=\"nofollow noopener\"><img decoding=\"async\" src=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F9f453841-9627-44e0-a124-f024837cebaa.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=c777932e245813a7f3a81b7f90c50b44\" alt=\"image.png\" srcset=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F9f453841-9627-44e0-a124-f024837cebaa.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;w=1400&amp;fit=max&amp;s=d7a89d7d3e211be409f292051d9ce634 1x\" data-canonical-src=\"https:\/\/qiita-image-store.s3.ap-northeast-1.amazonaws.com\/0\/1273574\/9f453841-9627-44e0-a124-f024837cebaa.png\" loading=\"lazy\"\/><\/a><\/p>\n<h2 data-sourcepos=\"1295:1-1295:20\">\n<span id=\"workflow-as-agent\" class=\"fragment\"\/><a target=\"_blank\" href=\"#workflow-as-agent\"><i class=\"fa fa-link\"\/><\/a>Workflow as Agent<\/h2>\n<p data-sourcepos=\"1297:1-1299:32\">\u901a\u5e38\u3001\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306f\u300c\u8907\u6570\u306e Executor \u3092\u3064\u306a\u3044\u3060 1 \u3064\u306e\u51e6\u7406\u306e\u304b\u305f\u307e\u308a\u300d\u3067\u3059\u3002<br \/>Agent Framework \u3067\u306f\u3001\u3053\u306e <strong>\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u5168\u4f53\u3092 1 \u3064\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3068\u3057\u3066\u518d\u5229\u7528\u3067\u304d\u308b<\/strong> \u4ed5\u7d44\u307f\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002<br \/>\u305d\u308c\u304c <code>as_agent()<\/code> \u3067\u3059\u3002<\/p>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"1301:1-1309:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"n\">workflow_agent<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span>\n    <span class=\"nc\">WorkflowBuilder<\/span><span class=\"p\">()<\/span>\n        <span class=\"p\">.<\/span><span class=\"nf\">set_start_executor<\/span><span class=\"p\">(<\/span><span class=\"n\">worker<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">.<\/span><span class=\"nf\">add_edge<\/span><span class=\"p\">(<\/span><span class=\"n\">worker<\/span><span class=\"p\">,<\/span> <span class=\"n\">reviewer<\/span><span class=\"p\">)<\/span>   \n        <span class=\"p\">.<\/span><span class=\"nf\">build<\/span><span class=\"p\">()<\/span>\n        <span class=\"p\">.<\/span><span class=\"nf\">as_agent<\/span><span class=\"p\">(<\/span><span class=\"n\">name<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">work_review_pipeline<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>  <span class=\"c1\"># \u2190 \u3053\u3053\u30671\u3064\u306e\u300c\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u300d\u3068\u3057\u3066\u6271\u3048\u308b\n<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre>\n<\/div>\n<\/div>\n<p data-sourcepos=\"1311:1-1311:121\">\u3064\u307e\u308a\u3001\u300c\u8907\u96d1\u306a\u51e6\u7406\u624b\u9806\u300d\u3092<strong>\u3072\u3068\u307e\u3068\u3081\u306b\u3057\u305f\u5c02\u9580\u5bb6\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8<\/strong>\u304c\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002<\/p>\n<h2 data-sourcepos=\"1315:1-1315:57\">\n<span id=\"\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306b\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u7d44\u307f\u8fbc\u3080\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC%E3%81%AB%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%82%92%E7%B5%84%E3%81%BF%E8%BE%BC%E3%82%80\"><i class=\"fa fa-link\"\/><\/a>\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306b\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u7d44\u307f\u8fbc\u3080<\/h2>\n<p data-sourcepos=\"1316:1-1316:263\">\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306b\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u7d44\u307f\u8fbc\u307f\u305f\u3044\u5834\u5408\u3001<code>add_edge()<\/code> \u306b <code>AgentProtocol<\/code> \u3092\u6e80\u305f\u3059\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u305d\u306e\u307e\u307e\u6e21\u3059\u3060\u3051\u3067\u52d5\u3044\u3066\u304f\u308c\u307e\u3059\u3002\u3053\u306e\u6642\u3001\u5185\u90e8\u3067\u81ea\u52d5\u7684\u306b <code>AgentExecutor<\/code> \u306b\u30e9\u30c3\u30d7\u3055\u308c\u307e\u3059\u3002<\/p>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"1318:1-1326:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"n\">writer_agent<\/span> <span class=\"o\">=<\/span> <span class=\"n\">chat_client<\/span><span class=\"p\">.<\/span><span class=\"nf\">create_agent<\/span><span class=\"p\">(...)<\/span>\n<span class=\"n\">reviewer_agent<\/span> <span class=\"o\">=<\/span> <span class=\"n\">chat_client<\/span><span class=\"p\">.<\/span><span class=\"nf\">create_agent<\/span><span class=\"p\">(...)<\/span>\n\n<span class=\"n\">builder<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">WorkflowBuilder<\/span><span class=\"p\">()<\/span>\n<span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">set_start_executor<\/span><span class=\"p\">(<\/span><span class=\"n\">writer_agent<\/span><span class=\"p\">)<\/span>     <span class=\"c1\"># \u2190 \u305d\u306e\u307e\u307e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u7f6e\u3051\u308b\n<\/span><span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">add_edge<\/span><span class=\"p\">(<\/span><span class=\"n\">writer_agent<\/span><span class=\"p\">,<\/span> <span class=\"n\">reviewer_agent<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">workflow<\/span> <span class=\"o\">=<\/span> <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">build<\/span><span class=\"p\">()<\/span>\n<\/code><\/pre>\n<\/div>\n<\/div>\n<p data-sourcepos=\"1328:1-1330:155\"><strong>AgentExecutor \u306e\u5f79\u5272<\/strong><br \/>\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306b\u7d44\u307f\u8fbc\u307e\u308c\u305f\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306f\u3001\u5185\u90e8\u3067\u306f <code>AgentExecutor<\/code> \u3068\u3057\u3066\u6271\u308f\u308c\u307e\u3059\u3002<br \/>\u3053\u306e\u30e9\u30c3\u30d1\u30fc\u304c\u5165\u308b\u3053\u3068\u3067\u3001\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u4e0a\u3067\u3082\u4e00\u8cab\u3057\u305f\u300cExecutor\u300d\u3068\u3057\u3066\u6271\u3048\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<div class=\"s_table\"><table data-sourcepos=\"1332:1-1337:176\">\n<thead>\n<tr data-sourcepos=\"1332:1-1332:142\">\n<th data-sourcepos=\"1332:2-1332:39\">\n<strong>AgentExecutor<\/strong> \u304c\u62c5\u3046\u51e6\u7406<\/th>\n<th data-sourcepos=\"1332:41-1332:141\">\u8aac\u660e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr data-sourcepos=\"1334:1-1334:161\">\n<td data-sourcepos=\"1334:2-1334:17\">\u5165\u529b\u6574\u5f62<\/td>\n<td data-sourcepos=\"1334:19-1334:160\">\n<code>str<\/code> \/ <code>ChatMessage<\/code> \/ <code>list[ChatMessage]<\/code> \u3092\u53d7\u7406\u3057\u3001LLM \u304c\u7406\u89e3\u3067\u304d\u308b\u4f1a\u8a71\u5f62\u5f0f\u3078\u6b63\u898f\u5316<\/td>\n<\/tr>\n<tr data-sourcepos=\"1335:1-1335:159\">\n<td data-sourcepos=\"1335:2-1335:17\">\u51fa\u529b\u7d71\u4e00<\/td>\n<td data-sourcepos=\"1335:19-1335:158\">\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u5fdc\u7b54\u3092 <code>AgentExecutorResponse<\/code> \u306b\u7d71\u4e00\uff08<code>executor_id<\/code> \/ <code>agent_run_response<\/code> \/ <code>full_conversation<\/code> \u3092\u4fdd\u6301\uff09<\/td>\n<\/tr>\n<tr data-sourcepos=\"1336:1-1336:158\">\n<td data-sourcepos=\"1336:2-1336:21\">\u30a4\u30d9\u30f3\u30c8\u751f\u6210<\/td>\n<td data-sourcepos=\"1336:23-1336:157\">\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\uff1a<code>AgentRunUpdateEvent<\/code>\uff08\u9010\u6b21\u30c1\u30e3\u30f3\u30af\uff09<br \/>\u975e\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\uff1a<code>AgentRunEvent<\/code>\uff08\u5b8c\u5168\u5fdc\u7b54\uff09<\/td>\n<\/tr>\n<tr data-sourcepos=\"1337:1-1337:176\">\n<td data-sourcepos=\"1337:2-1337:17\">\u6587\u8108\u7d99\u627f<\/td>\n<td data-sourcepos=\"1337:19-1337:175\">\n<code>full_conversation<\/code> \u3092\u81ea\u52d5\u3067\u5f8c\u7d9a Executor \u306b\u5f15\u304d\u7d99\u304e\u3001\u4f1a\u8a71\u6587\u8108\u3092\u9014\u5207\u308c\u3055\u305b\u305a\u306b\u51e6\u7406<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<blockquote data-sourcepos=\"1339:1-1339:242\">\n<p data-sourcepos=\"1339:3-1339:242\">\u3064\u307e\u308a\u3001\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092<strong>Edge \u306b\u8f09\u305b\u308b\u3060\u3051\u3067\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e Executor \u3068\u3057\u3066\u6271\u3048\u308b<\/strong>\u306e\u306f\u3001\u3053\u306e <code>AgentExecutor<\/code> \u304c\u88cf\u5074\u3067\u5165\u51fa\u529b\u51e6\u7406\u3068\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u7d99\u627f\u3092\u80a9\u4ee3\u308f\u308a\u3057\u3066\u3044\u308b\u305f\u3081\u3067\u3059\u3002<\/p>\n<\/blockquote>\n<p data-sourcepos=\"1341:1-1341:213\">\u3055\u3089\u306b\u8a73\u7d30\u306a\u5236\u5fa1\uff08\u5165\u529b\u5909\u63db\u30ed\u30b8\u30c3\u30af\uff0f\u51fa\u529b\u6574\u5f62\uff0f\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u5236\u5fa1\u306a\u3069\uff09\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001<code>Custom Agent Executor<\/code> \u3092\u72ec\u81ea\u5b9f\u88c5\u3057\u3066\u5dee\u3057\u66ff\u3048\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002<\/p>\n<h2 data-sourcepos=\"1347:1-1347:9\">\n<span id=\"\u6982\u8981-3\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E6%A6%82%E8%A6%81-3\"><i class=\"fa fa-link\"\/><\/a>\u6982\u8981<\/h2>\n<p data-sourcepos=\"1349:1-1349:175\">Agent Framework \u3067\u306f\u3001\u8907\u6570\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u9023\u643a\uff08\u30aa\u30fc\u30b1\u30b9\u30c8\u30ec\u30fc\u30b7\u30e7\u30f3\uff09\u3055\u305b\u308b\u4ed5\u7d44\u307f\u3068\u3057\u3066 <strong>\u30ef\u30fc\u30af\u30d5\u30ed\u30fc<\/strong> \u3092\u63a1\u7528\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"1351:1-1352:171\"><code>WorkflowBuilder().add_edge(...)<\/code> \u3092\u4f7f\u3048\u3070 0 \u304b\u3089\u81ea\u7531\u306b\u69cb\u7bc9\u3067\u304d\u307e\u3059\u304c\u3001<br \/>\u3088\u304f\u3042\u308b\u9023\u643a\u30d1\u30bf\u30fc\u30f3\u306b\u3064\u3044\u3066\u306f <strong>\u300c\u30aa\u30fc\u30b1\u30b9\u30c8\u30ec\u30fc\u30b7\u30e7\u30f3\u30d1\u30bf\u30fc\u30f3\uff08\u30d3\u30eb\u30c7\u30a3\u30f3\u30b0\u30d6\u30ed\u30c3\u30af\uff09\u300d<\/strong> \u3068\u3057\u3066\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"1354:1-1354:198\">\u307e\u305a\u306f\u30aa\u30fc\u30b1\u30b9\u30c8\u30ec\u30fc\u30b7\u30e7\u30f3\u30d1\u30bf\u30fc\u30f3\u3067\u8868\u73fe\u3067\u304d\u308b\u7bc4\u56f2\u3092\u6d3b\u7528\u3057\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u30b9\u30af\u30e9\u30c3\u30c1\u3067\u62e1\u5f35\u3059\u308b\u3053\u3068\u3067\u3001\u8a2d\u8a08\u30fb\u5b9f\u88c5\u30b3\u30b9\u30c8\u3092\u6291\u3048\u3089\u308c\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"1356:1-1356:127\">\u73fe\u5728\uff082025\u5e7410\u6708 \/ Python SDK\uff09\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\u30aa\u30fc\u30b1\u30b9\u30c8\u30ec\u30fc\u30b7\u30e7\u30f3\u30d1\u30bf\u30fc\u30f3\u306f\u4ee5\u4e0b\u306e 3 \u3064\u3067\u3059\u3002<\/p>\n<div class=\"s_table\"><table data-sourcepos=\"1359:1-1363:183\">\n<thead>\n<tr data-sourcepos=\"1359:1-1359:150\">\n<th data-sourcepos=\"1359:2-1359:25\">\u30d1\u30bf\u30fc\u30f3<\/th>\n<th data-sourcepos=\"1359:27-1359:108\">\u8aac\u660e<\/th>\n<th data-sourcepos=\"1359:110-1359:149\">\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr data-sourcepos=\"1361:1-1361:323\">\n<td data-sourcepos=\"1361:2-1361:17\"><strong>Sequential<\/strong><\/td>\n<td data-sourcepos=\"1361:19-1361:138\">\u6c7a\u3081\u3089\u308c\u305f\u9806\u756a\u3067\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u76f4\u5217\u306b\u3064\u306a\u304e\u3001\u7d50\u679c\u3092\u9806\u9001\u308a\u306b\u6e21\u3057\u3066\u3044\u304f\u3002<\/td>\n<td data-sourcepos=\"1361:140-1361:249\">\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u51e6\u7406\u3001ETL\/\u5206\u6790\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3<\/td>\n<\/tr>\n<tr data-sourcepos=\"1362:1-1362:237\">\n<td data-sourcepos=\"1362:2-1362:17\"><strong>Concurrent<\/strong><\/td>\n<td data-sourcepos=\"1362:19-1362:169\">\u540c\u3058\u5165\u529b\u3092\u8907\u6570\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306b\u540c\u6642\u30d6\u30ed\u30fc\u30c9\u30ad\u30e3\u30b9\u30c8\u3057\u3001\u7d50\u679c\u3092\u4e26\u5217\u53ce\u96c6\u3059\u308b\u3002<\/td>\n<td data-sourcepos=\"1362:171-1362:236\">\u4e26\u5217\u5206\u6790\u3001\u6bd4\u8f03\u691c\u8a0e\u3001\u30e2\u30c7\u30eb\u30a2\u30f3\u30b5\u30f3\u30d6\u30eb<\/td>\n<\/tr>\n<tr data-sourcepos=\"1363:1-1363:183\">\n<td data-sourcepos=\"1363:2-1363:17\"><strong>Magentic<\/strong><\/td>\n<td data-sourcepos=\"1363:19-1363:118\">Magentic-One \u30d9\u30fc\u30b9\u3002\u9032\u6357\u72b6\u6cc1\u306b\u5fdc\u3058\u3066\u300c\u6b21\u306b\u8ab0\u3092\u8d77\u7528\u3059\u308b\u304b\u300d\u3092\u52d5\u7684\u5224\u65ad<\/td>\n<td data-sourcepos=\"1363:120-1363:182\">\u63a2\u7d22\u7684\u30bf\u30b9\u30af\u3001R&amp;D\u3001\u9577\u5c3a\u30fb\u8907\u96d1\u306a\u5354\u8abf\u4f5c\u696d<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<h2 data-sourcepos=\"1365:1-1365:13\">\n<span id=\"sequential\" class=\"fragment\"\/><a target=\"_blank\" href=\"#sequential\"><i class=\"fa fa-link\"\/><\/a>Sequential<\/h2>\n<p data-sourcepos=\"1366:1-1366:127\">Sequential \u306f\u3082\u3063\u3068\u3082\u76f4\u611f\u7684\u306a\u69cb\u9020\u3067\u3001<strong>\u300cA \u2192 B \u2192 C\u2026\u300d\u3068\u9806\u756a\u306b\u51e6\u7406\u3092\u6e21\u3057\u3066\u3044\u304f\u65b9\u5f0f<\/strong>\u3067\u3059\u3002<\/p>\n<p data-sourcepos=\"1368:1-1368:122\"><a target=\"_blank\" href=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2Fbbaf9ec5-83bc-4cf4-a3d8-dd4ca065062e.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=c0390836a74a4c7aa645e68f417cbe20\" target=\"_blank\" rel=\"nofollow noopener\"><img decoding=\"async\" src=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2Fbbaf9ec5-83bc-4cf4-a3d8-dd4ca065062e.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=c0390836a74a4c7aa645e68f417cbe20\" alt=\"image.png\" srcset=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2Fbbaf9ec5-83bc-4cf4-a3d8-dd4ca065062e.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;w=1400&amp;fit=max&amp;s=cce7a6abe4d6a800da2ed252e4ee1f88 1x\" data-canonical-src=\"https:\/\/qiita-image-store.s3.ap-northeast-1.amazonaws.com\/0\/1273574\/bbaf9ec5-83bc-4cf4-a3d8-dd4ca065062e.png\" loading=\"lazy\"\/><\/a><\/p>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"1370:1-1381:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">SequentialBuilder<\/span>\n\n<span class=\"n\">workflow<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span>\n    <span class=\"nc\">SequentialBuilder<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">.<\/span><span class=\"nf\">participants<\/span><span class=\"p\">([<\/span><span class=\"n\">summarizer_agent<\/span><span class=\"p\">,<\/span> <span class=\"n\">translator_agent<\/span><span class=\"p\">,<\/span> <span class=\"n\">qa_agent<\/span><span class=\"p\">])<\/span>  <span class=\"c1\"># \u2190 \u8907\u6570\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u76f4\u5217\u63a5\u7d9a\n<\/span>    <span class=\"p\">.<\/span><span class=\"nf\">build<\/span><span class=\"p\">()<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"k\">async<\/span> <span class=\"k\">for<\/span> <span class=\"n\">event<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">workflow<\/span><span class=\"p\">.<\/span><span class=\"nf\">run_streaming<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">...<\/span><span class=\"sh\">\"<\/span><span class=\"p\">):<\/span>\n    <span class=\"bp\">...<\/span>\n<\/code><\/pre>\n<\/div>\n<\/div>\n<h3 data-sourcepos=\"1382:1-1382:25\">\n<span id=\"\u7279\u5fb4\u30e1\u30ea\u30c3\u30c8\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E7%89%B9%E5%BE%B4%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88\"><i class=\"fa fa-link\"\/><\/a>\u7279\u5fb4\u30fb\u30e1\u30ea\u30c3\u30c8<\/h3>\n<div class=\"s_table\"><table data-sourcepos=\"1384:1-1388:110\">\n<thead>\n<tr data-sourcepos=\"1384:1-1384:54\">\n<th data-sourcepos=\"1384:2-1384:14\">\u7279\u5fb4<\/th>\n<th data-sourcepos=\"1384:16-1384:53\">\u8aac\u660e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr data-sourcepos=\"1386:1-1386:74\">\n<td data-sourcepos=\"1386:2-1386:20\">\u69cb\u7bc9\u304c\u7c21\u5358<\/td>\n<td data-sourcepos=\"1386:22-1386:73\">\n<code>.participants([...])<\/code> \u306b\u4e26\u3079\u308b\u3060\u3051\u3067\u6210\u7acb<\/td>\n<\/tr>\n<tr data-sourcepos=\"1387:1-1387:100\">\n<td data-sourcepos=\"1387:2-1387:18\">\u6587\u8108\u5171\u6709<\/td>\n<td data-sourcepos=\"1387:20-1387:99\">\u76f4\u5217\u30c1\u30a7\u30fc\u30f3\u5168\u4f53\u3067\u5171\u901a\u306e\u4f1a\u8a71\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u7dad\u6301<\/td>\n<\/tr>\n<tr data-sourcepos=\"1388:1-1388:110\">\n<td data-sourcepos=\"1388:2-1388:24\">\u51fa\u529b\u304c\u4f1a\u8a71\u5c65\u6b74<\/td>\n<td data-sourcepos=\"1388:26-1388:109\">\u6700\u7d42\u51fa\u529b\u306f\u300c\u6700\u5f8c\u306e\u5fdc\u7b54\u5358\u4f53\u300d\u3067\u306f\u306a\u304f<strong>\u5168\u4f53\u306e\u5bfe\u8a71\u5c65\u6b74<\/strong>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<blockquote data-sourcepos=\"1390:1-1391:193\">\n<p data-sourcepos=\"1390:3-1391:193\">\u203b <code>WorkflowBuilder().add_edge(...)<\/code> \u3067\u3082\u76f4\u5217\u5316\u3067\u304d\u307e\u3059\u304c\u3001\u6700\u7d42\u51fa\u529b\u304c \u201c\u6700\u5f8c\u306e\u5fdc\u7b54\u3060\u3051\u201d \u306b\u306a\u308a\u307e\u3059\u3002<br \/><code>SequentialBuilder<\/code> \u3092\u4f7f\u3046\u3068\u300c\u3069\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u304c\u3069\u3046\u8fd4\u3057\u305f\u304b\u300d\u307e\u3067\u542b\u3080\u5c65\u6b74\u304c\u305d\u306e\u307e\u307e\u7d50\u679c\u306b\u306a\u308b\u305f\u3081\u3001\u5f8c\u7d9a\u5de5\u7a0b\u306b\u3082\u6d3b\u7528\u3057\u3084\u3059\u304f\u306a\u308a\u307e\u3059\u3002<\/p>\n<\/blockquote>\n<h2 data-sourcepos=\"1396:1-1396:13\">\n<span id=\"concurrent\" class=\"fragment\"\/><a target=\"_blank\" href=\"#concurrent\"><i class=\"fa fa-link\"\/><\/a>Concurrent<\/h2>\n<p data-sourcepos=\"1398:1-1398:144\">Concurrent \u306f\u3001<strong>1\u3064\u306e\u5165\u529b\u3092\u8907\u6570\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306b\u540c\u6642\u914d\u4fe1\uff08fan-out\uff09\u3057\u3001\u7d50\u679c\u3092\u307e\u3068\u3081\u308b\uff08fan-in\uff09<\/strong> \u65b9\u5f0f\u3067\u3059\u3002<\/p>\n<p data-sourcepos=\"1400:1-1400:122\"><a target=\"_blank\" href=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F1caf6de1-eac1-43a6-8367-e962768456e3.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=1be65ad995e4b6297267892fda0ea3b2\" target=\"_blank\" rel=\"nofollow noopener\"><img decoding=\"async\" src=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F1caf6de1-eac1-43a6-8367-e962768456e3.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=1be65ad995e4b6297267892fda0ea3b2\" alt=\"image.png\" srcset=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F1caf6de1-eac1-43a6-8367-e962768456e3.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;w=1400&amp;fit=max&amp;s=93e9eda12b423c146a6fcdf3ab9e7169 1x\" data-canonical-src=\"https:\/\/qiita-image-store.s3.ap-northeast-1.amazonaws.com\/0\/1273574\/1caf6de1-eac1-43a6-8367-e962768456e3.png\" loading=\"lazy\"\/><\/a><\/p>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"1403:1-1414:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">ConcurrentBuilder<\/span>\n\n<span class=\"n\">workflow<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span>\n    <span class=\"nc\">ConcurrentBuilder<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">.<\/span><span class=\"nf\">participants<\/span><span class=\"p\">([<\/span><span class=\"n\">agent_a<\/span><span class=\"p\">,<\/span> <span class=\"n\">agent_b<\/span><span class=\"p\">,<\/span> <span class=\"n\">agent_c<\/span><span class=\"p\">])<\/span>\n    <span class=\"p\">.<\/span><span class=\"nf\">build<\/span><span class=\"p\">()<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"k\">async<\/span> <span class=\"k\">for<\/span> <span class=\"n\">event<\/span>  <span class=\"ow\">in<\/span> <span class=\"n\">workflow<\/span><span class=\"p\">.<\/span><span class=\"nf\">run_streaming<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">...<\/span><span class=\"sh\">\"<\/span><span class=\"p\">):<\/span>\n    <span class=\"bp\">...<\/span>\n<\/code><\/pre>\n<\/div>\n<\/div>\n<h3 data-sourcepos=\"1417:1-1417:37\">\n<span id=\"\u5185\u90e8\u3067\u52d5\u3044\u3066\u3044\u308b\u3057\u304f\u307f\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E5%86%85%E9%83%A8%E3%81%A7%E5%8B%95%E3%81%84%E3%81%A6%E3%81%84%E3%82%8B%E3%81%97%E3%81%8F%E3%81%BF\"><i class=\"fa fa-link\"\/><\/a>\u5185\u90e8\u3067\u52d5\u3044\u3066\u3044\u308b\u3057\u304f\u307f<\/h3>\n<p data-sourcepos=\"1419:1-1419:101\"><code>ConcurrentBuilder<\/code> \u306f\u3001\u6b21\u306e 2 \u3064\u306e\u5185\u90e8\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u81ea\u52d5\u3067\u5dee\u3057\u8fbc\u307f\u307e\u3059\u3002<\/p>\n<div class=\"s_table\"><table data-sourcepos=\"1421:1-1424:86\">\n<thead>\n<tr data-sourcepos=\"1421:1-1421:111\">\n<th data-sourcepos=\"1421:2-1421:60\">\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/th>\n<th data-sourcepos=\"1421:62-1421:110\">\u5f79\u5272<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr data-sourcepos=\"1423:1-1423:53\">\n<td data-sourcepos=\"1423:2-1423:14\">Dispatcher<\/td>\n<td data-sourcepos=\"1423:16-1423:52\">fan-out\uff08\u5168\u54e1\u306b\u540c\u3058\u5165\u529b\uff09<\/td>\n<\/tr>\n<tr data-sourcepos=\"1424:1-1424:86\">\n<td data-sourcepos=\"1424:2-1424:13\">Aggregator<\/td>\n<td data-sourcepos=\"1424:15-1424:85\">fan-in\uff08\u5404\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u6700\u7d42\u5fdc\u7b54\u3092\u307e\u3068\u3081\u3066\u8fd4\u3059\uff09<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<p data-sourcepos=\"1426:1-1426:160\">\u30c7\u30d5\u30a9\u30eb\u30c8\u306e Aggregator \u306f <strong>\u300c1\u30e6\u30fc\u30b6\u30fc\u30d7\u30ed\u30f3\u30d7\u30c8 + \u5404\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u6700\u7d42\u51fa\u529b\u300d<\/strong> \u3092 <code>list[ChatMessage]<\/code> \u3068\u3057\u3066\u8fd4\u3057\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"1428:1-1428:105\">\u4f8b\u3048\u3070 3 \u3064\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u4e26\u5217\u5b9f\u884c\u3057\u305f\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u306e\u5fdc\u7b54\u304c\u5f97\u3089\u308c\u307e\u3059\u3002<\/p>\n<div class=\"code-frame\" data-lang=\"text\" data-sourcepos=\"1430:1-1432:3\">\n<div class=\"highlight\">\n<pre><code>[ USER_PROMPT, A\u306e\u5fdc\u7b54, B\u306e\u5fdc\u7b54, C\u306e\u5fdc\u7b54 ]\n<\/code><\/pre>\n<\/div>\n<\/div>\n<h3 data-sourcepos=\"1435:1-1435:54\">\n<span id=\"\u30ab\u30b9\u30bf\u30e0\u96c6\u7d04\u3082\u53ef\u80fdcustom-aggregator\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E9%9B%86%E7%B4%84%E3%82%82%E5%8F%AF%E8%83%BDcustom-aggregator\"><i class=\"fa fa-link\"\/><\/a>\u30ab\u30b9\u30bf\u30e0\u96c6\u7d04\u3082\u53ef\u80fd\uff08Custom Aggregator\uff09<\/h3>\n<p data-sourcepos=\"1437:1-1437:129\">\u3055\u3089\u306b Concurrent \u3067\u306f\u3001<strong>\u96c6\u7d04\uff08fan-in\uff09\u51e6\u7406\u3092\u62c5\u3046 <code>Aggregator<\/code> \u81ea\u7531\u306b\u5dee\u3057\u66ff\u3048\u308b<\/strong>\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002<\/p>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"1439:1-1456:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"k\">def<\/span> <span class=\"nf\">summarize<\/span><span class=\"p\">(<\/span><span class=\"n\">results<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">):<\/span>\n    <span class=\"sh\">\"\"\"<\/span><span class=\"s\"> \u5404\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u5fdc\u7b54\u3092\u307e\u3068\u3081\u308b\u30ab\u30b9\u30bf\u30e0\u96c6\u7d04\u95a2\u6570 <\/span><span class=\"sh\">\"\"\"<\/span>\n    <span class=\"n\">replies<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span>\n        <span class=\"nf\">next<\/span><span class=\"p\">(<\/span><span class=\"n\">m<\/span> <span class=\"k\">for<\/span> <span class=\"n\">m<\/span> <span class=\"ow\">in<\/span> <span class=\"nf\">reversed<\/span><span class=\"p\">(<\/span><span class=\"n\">r<\/span><span class=\"p\">.<\/span><span class=\"n\">agent_run_response<\/span><span class=\"p\">.<\/span><span class=\"n\">messages<\/span><span class=\"p\">)<\/span> <span class=\"k\">if<\/span> <span class=\"n\">m<\/span><span class=\"p\">.<\/span><span class=\"n\">role<\/span> <span class=\"o\">==<\/span> <span class=\"n\">Role<\/span><span class=\"p\">.<\/span><span class=\"n\">ASSISTANT<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">for<\/span> <span class=\"n\">r<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">results<\/span>\n    <span class=\"p\">]<\/span>\n    <span class=\"n\">merged_text<\/span> <span class=\"o\">=<\/span> <span class=\"sh\">\"<\/span><span class=\"s\"> | <\/span><span class=\"sh\">\"<\/span><span class=\"p\">.<\/span><span class=\"nf\">join<\/span><span class=\"p\">(<\/span><span class=\"n\">m<\/span><span class=\"p\">.<\/span><span class=\"n\">text<\/span> <span class=\"k\">for<\/span> <span class=\"n\">m<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">replies<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">return<\/span> <span class=\"p\">[<\/span><span class=\"nc\">ChatMessage<\/span><span class=\"p\">(<\/span><span class=\"n\">Role<\/span><span class=\"p\">.<\/span><span class=\"n\">ASSISTANT<\/span><span class=\"p\">,<\/span> <span class=\"n\">author_name<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">custom_aggregator<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">text<\/span><span class=\"o\">=<\/span><span class=\"n\">merged_text<\/span><span class=\"p\">)]<\/span>\n\n\n<span class=\"n\">workflow<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span>\n    <span class=\"nc\">ConcurrentBuilder<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">.<\/span><span class=\"nf\">participants<\/span><span class=\"p\">([<\/span><span class=\"n\">agent1<\/span><span class=\"p\">,<\/span> <span class=\"n\">agent2<\/span><span class=\"p\">,<\/span> <span class=\"n\">agent3<\/span><span class=\"p\">])<\/span>\n    <span class=\"p\">.<\/span><span class=\"nf\">with_aggregator<\/span><span class=\"p\">(<\/span><span class=\"n\">summarize<\/span><span class=\"p\">)<\/span> <span class=\"c1\"># Custom Aggretator \u3068\u3057\u3066\u8a2d\u5b9a\n<\/span>    <span class=\"p\">.<\/span><span class=\"nf\">build<\/span><span class=\"p\">()<\/span>\n<span class=\"p\">)<\/span>\n<\/code><\/pre>\n<\/div>\n<\/div>\n<p data-sourcepos=\"1458:1-1458:102\">Custom Aggretator \u304c\u8fd4\u308a\u5024\u3092\u8fd4\u305b\u3070\u3001\u305d\u308c\u304c\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u6700\u7d42\u51fa\u529b\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n<div class=\"code-frame\" data-lang=\"text\" data-sourcepos=\"1460:1-1462:3\">\n<div class=\"highlight\">\n<pre><code>[ custom_aggregator \u306e\u5fdc\u7b54 ]\n<\/code><\/pre>\n<\/div>\n<\/div>\n<h2 data-sourcepos=\"1466:1-1466:11\">\n<span id=\"magentic\" class=\"fragment\"\/><a target=\"_blank\" href=\"#magentic\"><i class=\"fa fa-link\"\/><\/a>Magentic<\/h2>\n<p data-sourcepos=\"1468:1-1468:259\"><code>Magentic<\/code> \u306f\u3001AutoGen \u306b\u3088\u3063\u3066\u958b\u767a\u3055\u308c\u305f <a target=\"_blank\" href=\"https:\/\/microsoft.github.io\/autogen\/stable\/user-guide\/agentchat-user-guide\/magentic-one.html\" rel=\"nofollow noopener\" target=\"_blank\">Magentic-One<\/a> \u3092\u30d9\u30fc\u30b9\u306b\u8a2d\u8a08\u3055\u308c\u305f\u300c<strong>\u52d5\u7684\u30aa\u30fc\u30b1\u30b9\u30c8\u30ec\u30fc\u30b7\u30e7\u30f3\u30d1\u30bf\u30fc\u30f3<\/strong>\u300d\u3067\u3059\u3002<\/p>\n<p data-sourcepos=\"1470:1-1470:283\">Sequential \/ Concurrent \u304c\u300c\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u69cb\u9020\u3092\u5148\u306b\u6c7a\u3081\u3066\u304a\u304f\uff08\uff1d\u9759\u7684\u63a5\u7d9a\uff09\u300d\u3067\u3042\u308b\u306e\u306b\u5bfe\u3057\u3066\u3001Magentic \u306f\u300c<strong>\u72b6\u6cc1\u3092\u898b\u306a\u304c\u3089\u8ab0\u3092\u6b21\u306b\u8d77\u7528\u3059\u308b\u304b\u3092\u6bce\u30bf\u30fc\u30f3\u5224\u65ad\u3059\u308b\uff08\uff1d\u52d5\u7684\u63a5\u7d9a\uff09<\/strong>\u300d\u3068\u3044\u3046\u7279\u5fb4\u3092\u6301\u3061\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"1472:1-1472:153\">\u305d\u306e\u305f\u3081\u3001\u5358\u306a\u308b\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u914d\u5217\u5b9f\u884c\u3067\u306f\u306a\u304f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u201c\u30de\u30cd\u30b8\u30e1\u30f3\u30c8\u30fb\u30eb\u30fc\u30d7\u201d\u3092\u5185\u90e8\u306b\u6301\u3061\u307e\u3059\uff1a<\/p>\n<ol data-sourcepos=\"1474:1-1478:0\">\n<li data-sourcepos=\"1474:1-1474:56\">\n<strong>Facts \/ Plan \u3092\u4f5c\u6210<\/strong>\uff08\u30bf\u30b9\u30af\u53f0\u5e33\u751f\u6210\uff09<\/li>\n<li data-sourcepos=\"1475:1-1475:40\">\n<strong>\u9032\u6357\u8a55\u4fa1<\/strong>\uff08Progress Ledger\uff09<\/li>\n<li data-sourcepos=\"1476:1-1476:49\"><strong>\u6b21\u306b\u52d5\u304b\u3059\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u9078\u629c<\/strong><\/li>\n<li data-sourcepos=\"1477:1-1478:0\">\u5fc5\u8981\u306a\u3089 Replan \u2192 1 \u306b\u623b\u308b\uff08\u5b8c\u4e86\u3067\u7d42\u4e86\uff09<\/li>\n<\/ol>\n<p data-sourcepos=\"1479:1-1479:174\">\u3064\u307e\u308a\u3001\u4eba\u9593\u306e\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u304c\u30bf\u30b9\u30af\u306e\u9032\u6357\u306b\u5fdc\u3058\u3066\u300c\u4eca\u3053\u306e\u4eba\u3092\u52d5\u304b\u3059\u3079\u304d\u300d\u3068\u5224\u65ad\u3059\u308b\u69cb\u9020\u306b\u8fd1\u3044\u30e2\u30c7\u30eb\u3092\u5b9f\u73fe\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"1481:1-1481:122\"><a target=\"_blank\" href=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F01d14d8e-a806-45a6-9992-499be672c8bf.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=fc5165fc164016b0f13db0626ff097c1\" target=\"_blank\" rel=\"nofollow noopener\"><img decoding=\"async\" src=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F01d14d8e-a806-45a6-9992-499be672c8bf.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=fc5165fc164016b0f13db0626ff097c1\" alt=\"image.png\" srcset=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F01d14d8e-a806-45a6-9992-499be672c8bf.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;w=1400&amp;fit=max&amp;s=95f65939852869f165880fd8ab71fbe8 1x\" data-canonical-src=\"https:\/\/qiita-image-store.s3.ap-northeast-1.amazonaws.com\/0\/1273574\/01d14d8e-a806-45a6-9992-499be672c8bf.png\" loading=\"lazy\"\/><\/a><\/p>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"1484:1-1505:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"kn\">from<\/span> <span class=\"n\">agent_framework<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">MagenticBuilder<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">agent_framework.azure<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">AzureChatClient<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">azure.identity<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">AzureCliCredential<\/span>\n\n<span class=\"c1\"># \u53c2\u52a0\u8005\uff08\uff1d\u8d77\u7528\u5019\u88dc\u3068\u306a\u308b\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u4e00\u89a7\uff09\n<\/span><span class=\"n\">participants<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n    <span class=\"sh\">\"<\/span><span class=\"s\">researcher<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span> <span class=\"n\">researcher_agent<\/span><span class=\"p\">,<\/span>\n    <span class=\"sh\">\"<\/span><span class=\"s\">writer<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span> <span class=\"n\">writer_agent<\/span><span class=\"p\">,<\/span>\n    <span class=\"sh\">\"<\/span><span class=\"s\">reviewer<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span> <span class=\"n\">reviewer_agent<\/span><span class=\"p\">,<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"n\">workflow<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span>\n    <span class=\"nc\">MagenticBuilder<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">.<\/span><span class=\"nf\">participants<\/span><span class=\"p\">(<\/span><span class=\"o\">**<\/span><span class=\"n\">participants<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">.<\/span><span class=\"nf\">with_standard_manager<\/span><span class=\"p\">(<\/span><span class=\"n\">chat_client<\/span><span class=\"o\">=<\/span><span class=\"nc\">AzureChatClient<\/span><span class=\"p\">(...))<\/span>  <span class=\"c1\"># \u2190 Manager(\u53f8\u4ee4\u5854)\u3092\u6ce8\u5165\n<\/span>    <span class=\"p\">.<\/span><span class=\"nf\">build<\/span><span class=\"p\">()<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"k\">async<\/span> <span class=\"k\">for<\/span> <span class=\"n\">event<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">workflow<\/span><span class=\"p\">.<\/span><span class=\"nf\">run_streaming<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\u6c17\u5019\u5909\u52d5\u3068\u65e5\u672c\u7d4c\u6e08\u3078\u306e\u5f71\u97ff\u3092\u8981\u7d04\u3057\u3066\u30ec\u30dd\u30fc\u30c8\u5316\u3057\u3066<\/span><span class=\"sh\">\"<\/span><span class=\"p\">):<\/span>\n    <span class=\"bp\">...<\/span>\n<\/code><\/pre>\n<\/div>\n<\/div>\n<h3 data-sourcepos=\"1508:1-1508:106\">\n<span id=\"\u6a19\u6e96\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u306e\u6319\u52d5\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d7\u30ed\u30f3\u30d7\u30c8\u5358\u4f4d\u3067\u30ab\u30b9\u30bf\u30e0\u53ef\u80fd\" class=\"fragment\"\/><a target=\"_blank\" href=\"#%E6%A8%99%E6%BA%96%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3%E3%83%BC%E3%81%AE%E6%8C%99%E5%8B%95%E3%82%92%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E5%8D%98%E4%BD%8D%E3%81%A7%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E5%8F%AF%E8%83%BD\"><i class=\"fa fa-link\"\/><\/a>\u6a19\u6e96\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u306e\u6319\u52d5\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\uff08\u30d7\u30ed\u30f3\u30d7\u30c8\u5358\u4f4d\u3067\u30ab\u30b9\u30bf\u30e0\u53ef\u80fd\uff09<\/h3>\n<p data-sourcepos=\"1510:1-1510:251\">\u6a19\u6e96\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\uff08<code>with_standard_manager(...)<\/code> \uff09\u306b\u306f\u3001Magentic \u306e\u5404\u30d5\u30a7\u30fc\u30ba\uff08\u53f0\u5e33\u751f\u6210\u30fb\u9032\u6357\u8a55\u4fa1\u30fb\u6700\u7d42\u56de\u7b54\u306a\u3069\uff09\u306e <strong>\u6319\u52d5\u3092\u5236\u5fa1\u3059\u308b\u305f\u3081\u306e\u30d7\u30ed\u30f3\u30d7\u30c8<\/strong> \u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"1512:1-1512:129\">\u958b\u767a\u8005\u306f\u3053\u308c\u3089\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3059\u308b\u3053\u3068\u3067\u300c\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u306e\u601d\u8003\u300d\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u304d\u307e\u3059\u3002<\/p>\n<div class=\"s_table\"><table data-sourcepos=\"1514:1-1519:91\">\n<thead>\n<tr data-sourcepos=\"1514:1-1514:101\">\n<th data-sourcepos=\"1514:2-1514:37\">\u30d1\u30e9\u30e1\u30fc\u30bf<\/th>\n<th data-sourcepos=\"1514:39-1514:61\">\u5185\u5bb9<\/th>\n<th data-sourcepos=\"1514:63-1514:76\">\u30d5\u30a7\u30fc\u30ba<\/th>\n<th data-sourcepos=\"1514:78-1514:100\">\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u4f8b<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr data-sourcepos=\"1516:1-1516:98\">\n<td data-sourcepos=\"1516:2-1516:27\"><code>instructions<\/code><\/td>\n<td data-sourcepos=\"1516:29-1516:62\">Manager \u3078\u306e\u30b7\u30b9\u30c6\u30e0\u6307\u793a<\/td>\n<td data-sourcepos=\"1516:64-1516:73\">\u5168\u4f53<\/td>\n<td data-sourcepos=\"1516:75-1516:97\">\u54c1\u8cea\u30fb\u7981\u6b62\u4e8b\u9805<\/td>\n<\/tr>\n<tr data-sourcepos=\"1517:1-1517:91\">\n<td data-sourcepos=\"1517:2-1517:27\"><code>task_ledger_*<\/code><\/td>\n<td data-sourcepos=\"1517:29-1517:53\">Facts\uff0fPlan \u7ba1\u7406<\/td>\n<td data-sourcepos=\"1517:55-1517:66\">\u8a08\u753b\u7cfb<\/td>\n<td data-sourcepos=\"1517:68-1517:90\">\u8a3c\u62e0\u30d9\u30fc\u30b9\u5f37\u5316<\/td>\n<\/tr>\n<tr data-sourcepos=\"1518:1-1518:93\">\n<td data-sourcepos=\"1518:2-1518:27\"><code>progress_ledger_prompt<\/code><\/td>\n<td data-sourcepos=\"1518:29-1518:61\">\u8ab0\u3092\u8d77\u7528\u3059\u308b\u304b<\/td>\n<td data-sourcepos=\"1518:63-1518:72\">\u8abf\u6574<\/td>\n<td data-sourcepos=\"1518:74-1518:92\">\u6307\u540d\u30eb\u30fc\u30eb<\/td>\n<\/tr>\n<tr data-sourcepos=\"1519:1-1519:91\">\n<td data-sourcepos=\"1519:2-1519:27\"><code>final_answer_prompt<\/code><\/td>\n<td data-sourcepos=\"1519:29-1519:59\">\u6700\u7d42\u51fa\u529b\u65b9\u91dd<\/td>\n<td data-sourcepos=\"1519:61-1519:70\">\u5b8c\u4e86<\/td>\n<td data-sourcepos=\"1519:72-1519:90\">\u4f53\u88c1\u30fb\u5f62\u5f0f<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<h3 data-sourcepos=\"1522:1-1522:40\">\n<span id=\"human-in-the-loop-\u306b\u3082\u6a19\u6e96\u5bfe\u5fdc\" class=\"fragment\"\/><a target=\"_blank\" href=\"#human-in-the-loop-%E3%81%AB%E3%82%82%E6%A8%99%E6%BA%96%E5%AF%BE%E5%BF%9C\"><i class=\"fa fa-link\"\/><\/a>Human-in-the-Loop \u306b\u3082\u6a19\u6e96\u5bfe\u5fdc<\/h3>\n<p data-sourcepos=\"1524:1-1524:111\">Magentic \u306f\u8a08\u753b\uff08Plan\uff09\u306e\u6bb5\u968e\u306b <strong>\u4eba\u9593\u627f\u8a8d\u30b9\u30c6\u30c3\u30d7\uff08Human-in-the-Loop\uff09<\/strong> \u3092\u631f\u3081\u307e\u3059\u3002<\/p>\n<div class=\"code-frame\" data-lang=\"python\" data-sourcepos=\"1526:1-1534:3\">\n<div class=\"highlight\">\n<pre><code><span class=\"n\">workflow<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span>\n    <span class=\"nc\">MagenticBuilder<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">.<\/span><span class=\"nf\">participants<\/span><span class=\"p\">(<\/span><span class=\"o\">**<\/span><span class=\"n\">participants<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">.<\/span><span class=\"nf\">with_standard_manager<\/span><span class=\"p\">(<\/span><span class=\"n\">chat_client<\/span><span class=\"o\">=<\/span><span class=\"nc\">AzureChatClient<\/span><span class=\"p\">(...))<\/span>\n    <span class=\"p\">.<\/span><span class=\"nf\">with_plan_review<\/span><span class=\"p\">(<\/span><span class=\"bp\">True<\/span><span class=\"p\">)<\/span>  <span class=\"c1\"># \u2190 Human-in-the-Loop \u3092\u6709\u52b9\u5316\n<\/span>    <span class=\"p\">.<\/span><span class=\"nf\">build<\/span><span class=\"p\">()<\/span>\n<span class=\"p\">)<\/span>\n<\/code><\/pre>\n<\/div>\n<\/div>\n<p data-sourcepos=\"1536:1-1536:37\">\u3053\u306e Human-in-the-Loop \u306b\u3088\u3063\u3066<\/p>\n<ul data-sourcepos=\"1538:1-1541:0\">\n<li data-sourcepos=\"1538:1-1538:56\">\u8aa4\u3063\u305f\u524d\u63d0\u3067\u9032\u884c\u3059\u308b\u3053\u3068\u3092\u4e8b\u524d\u306b\u9632\u6b62<\/li>\n<li data-sourcepos=\"1539:1-1539:41\">\u66d6\u6627\u306a\u8981\u4ef6\u3092\u4eba\u9593\u5224\u65ad\u3067\u88dc\u5b8c<\/li>\n<li data-sourcepos=\"1540:1-1541:0\">\u300c\u6700\u7d42\u30d5\u30a7\u30fc\u30ba\u3067\u5d29\u308c\u308b\u300d\u4e8b\u6545\u3092\u4f4e\u6e1b<\/li>\n<\/ul>\n<p data-sourcepos=\"1542:1-1542:94\">\u7d50\u679c\u3068\u3057\u3066\u3001<strong>\u30d7\u30ed\u30bb\u30b9\u5168\u4f53\u306e\u54c1\u8cea\u30fb\u900f\u660e\u6027\u30fb\u6210\u529f\u7387<\/strong>\u304c\u5411\u4e0a\u3057\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"1547:1-1547:174\">Agent Framework \u3067\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u3067\u958b\u767a\u3057\u305f\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\uff0f\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092 \u30d6\u30e9\u30a6\u30b6\u4e0a\u306e\u5c02\u7528 UI\uff08Dev UI\uff09 \u3067\u53ef\u8996\u5316\u30fb\u30c6\u30b9\u30c8\u3067\u304d\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"1549:1-1549:122\"><a target=\"_blank\" href=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2Fe3151e81-d489-4c6c-8683-fd165f8621a9.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=2684f5070396077f4588bddb673dc156\" target=\"_blank\" rel=\"nofollow noopener\"><img decoding=\"async\" src=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2Fe3151e81-d489-4c6c-8683-fd165f8621a9.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=2684f5070396077f4588bddb673dc156\" alt=\"image.png\" srcset=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2Fe3151e81-d489-4c6c-8683-fd165f8621a9.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;w=1400&amp;fit=max&amp;s=b8a88fd769ded4c365bfc0dcbac08aa0 1x\" data-canonical-src=\"https:\/\/qiita-image-store.s3.ap-northeast-1.amazonaws.com\/0\/1273574\/e3151e81-d489-4c6c-8683-fd165f8621a9.png\" loading=\"lazy\"\/><\/a><\/p>\n<p data-sourcepos=\"1551:1-1551:122\"><a target=\"_blank\" href=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F7e83b2b4-0f6f-41ba-b11f-17311dd66cd4.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=d328b0e8631770f43c5361f0dc3da596\" target=\"_blank\" rel=\"nofollow noopener\"><img decoding=\"async\" src=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F7e83b2b4-0f6f-41ba-b11f-17311dd66cd4.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;s=d328b0e8631770f43c5361f0dc3da596\" alt=\"image.png\" srcset=\"https:\/\/qiita-user-contents.imgix.net\/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1273574%2F7e83b2b4-0f6f-41ba-b11f-17311dd66cd4.png?ixlib=rb-4.0.0&amp;auto=format&amp;gif-q=60&amp;q=75&amp;w=1400&amp;fit=max&amp;s=91073621ac0e3d31151cb48b2841c444 1x\" data-canonical-src=\"https:\/\/qiita-image-store.s3.ap-northeast-1.amazonaws.com\/0\/1273574\/7e83b2b4-0f6f-41ba-b11f-17311dd66cd4.png\" loading=\"lazy\"\/><\/a><\/p>\n<p data-sourcepos=\"1556:1-1556:137\">Semantic Kernel \u3084 AutoGen \u3067\u65e2\u5b58\u5b9f\u88c5\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u306e\u516c\u5f0f\u30ac\u30a4\u30c9\u3092\u57fa\u306b<strong>\u79fb\u884c\u8a08\u753b<\/strong>\u3092\u7acb\u3066\u3089\u308c\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"1558:1-1558:234\">\u306a\u304a\u30012025\u5e7410\u6708\u6642\u70b9\u3067 Microsoft Agent Framework \u306f <strong>Preview<\/strong> \u6bb5\u968e\u306e\u305f\u3081\u3001GA\uff08\u4e00\u822c\u63d0\u4f9b\uff09\u306b\u5411\u3051\u3066<strong>\u7834\u58ca\u7684\u5909\u66f4\u306e\u53ef\u80fd\u6027<\/strong>\u304c\u3042\u308a\u307e\u3059\u3002<strong>\u30d7\u30ed\u30c0\u30af\u30b7\u30e7\u30f3\u79fb\u884c\u306f GA \u5f8c\u3092\u63a8\u5968<\/strong>\u3057\u307e\u3059\u3002<\/p>\n<p data-sourcepos=\"1565:1-1565:44\"><iframe id=\"qiita-embed-content__4c0662f0f33320f5844cc415d7e704f2\" src=\"https:\/\/qiita.com\/embed-contents\/link-card#qiita-embed-content__4c0662f0f33320f5844cc415d7e704f2\" data-content=\"https%3A%2F%2Fgithub.com%2Fmicrosoft%2Fagent-framework\" frameborder=\"0\" scrolling=\"no\" loading=\"lazy\" style=\"width:100%;\" height=\"29\"><br \/>\n<\/iframe>\n<\/p>\n<p data-sourcepos=\"1567:1-1567:126\"><iframe id=\"qiita-embed-content__bea779fa98ddc95a574a1471a66b472b\" src=\"https:\/\/qiita.com\/embed-contents\/link-card#qiita-embed-content__bea779fa98ddc95a574a1471a66b472b\" data-content=\"https%3A%2F%2Fqiita.com%2Fnohanaga%2Fitems%2F2ed726f9a0ff092b3f36%23%25E3%2583%25AF%25E3%2583%25BC%25E3%2582%25AF%25E3%2583%2595%25E3%2583%25AD%25E3%2583%25BC%25E5%259F%25BA%25E7%25A4%258E\" frameborder=\"0\" scrolling=\"no\" loading=\"lazy\" style=\"width:100%;\" height=\"29\"><br \/>\n<\/iframe>\n<\/p>\n<p data-sourcepos=\"1569:1-1569:38\"><iframe id=\"qiita-embed-content__2b73f9e24b09717aa49b328cecd8fbe9\" src=\"https:\/\/qiita.com\/embed-contents\/link-card#qiita-embed-content__2b73f9e24b09717aa49b328cecd8fbe9\" data-content=\"https%3A%2F%2Fnote.com%2Fdaka1%2Fn%2Fn2050c131edb3\" frameborder=\"0\" scrolling=\"no\" loading=\"lazy\" style=\"width:100%;\" height=\"29\"><br \/>\n<\/iframe>\n<\/p>\n<\/div>\n<p><script>!function(f,b,e,v,n,t,s)\n{if(f.fbq)return;n=f.fbq=function(){n.callMethod?\nn.callMethod.apply(n,arguments):n.queue.push(arguments)};\nif(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\nn.queue=[];t=b.createElement(e);t.async=!0;\nt.src=v;s=b.getElementsByTagName(e)[0];\ns.parentNode.insertBefore(t,s)}(window, document,'script',\n'https:\/\/connect.facebook.net\/en_US\/fbevents.js');\nfbq('init', '305156090176370');\nfbq('trackSingle', '305156090176370', 'PageView');<\/script><br \/>\n<br \/>\n<br \/><a href=\"https:\/\/qiita.com\/matayuuu\/items\/e028904453dded34d18f\">\u5143\u306e\u8a18\u4e8b\u3092\u78ba\u8a8d\u3059\u308b <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\u6982\u8981 Microsoft Agent Framework \u306f\u3001Microsoft \u304c OSS \u3068\u3057\u3066\u63d0\u4f9b\u3059\u308b AI \u30a8\u30fc\u30b8\u30a7\u30f3\u30c8 &amp; \u30de\u30eb\u30c1\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u958b\u767a\u3059\u308b \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002 Microso [&hellip;]","protected":false},"author":1,"featured_media":20969,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2],"tags":[],"class_list":["post-20968","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hatena-blog"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Microsoft Agent Framework\u958b\u767a\u5165\u9580 #Azure - Qiita - \u30dd\u30b1\u30b3\u30f3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/qiita.com\/matayuuu\/items\/e028904453dded34d18f\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Microsoft Agent Framework\u958b\u767a\u5165\u9580 #Azure - Qiita - \u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"og:description\" content=\"\u6982\u8981 Microsoft Agent Framework \u306f\u3001Microsoft \u304c OSS \u3068\u3057\u3066\u63d0\u4f9b\u3059\u308b AI \u30a8\u30fc\u30b8\u30a7\u30f3\u30c8 &amp; \u30de\u30eb\u30c1\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u958b\u767a\u3059\u308b \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002 Microso [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/qiita.com\/matayuuu\/items\/e028904453dded34d18f\" \/>\n<meta property=\"og:site_name\" content=\"\u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-26T10:51:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/1761475886_https3A2F2Fqiita-user-contents.imgix_.net2Fhttps253A252F252Fcdn.qiita_.com252Fassets252Fpubli.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"info@pokecon.jp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"info@pokecon.jp\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"15\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/qiita.com\\\/matayuuu\\\/items\\\/e028904453dded34d18f#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/20968\\\/\"},\"author\":{\"name\":\"info@pokecon.jp\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"headline\":\"Microsoft Agent Framework\u958b\u767a\u5165\u9580 #Azure &#8211; Qiita\",\"datePublished\":\"2025-10-26T10:51:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/20968\\\/\"},\"wordCount\":287,\"image\":{\"@id\":\"https:\\\/\\\/qiita.com\\\/matayuuu\\\/items\\\/e028904453dded34d18f#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/1761475886_https3A2F2Fqiita-user-contents.imgix_.net2Fhttps253A252F252Fcdn.qiita_.com252Fassets252Fpubli.jpeg\",\"articleSection\":[\"\u306f\u3066\u306a\u30d6\u30ed\u30b0\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/20968\\\/\",\"url\":\"https:\\\/\\\/qiita.com\\\/matayuuu\\\/items\\\/e028904453dded34d18f\",\"name\":\"Microsoft Agent Framework\u958b\u767a\u5165\u9580 #Azure - Qiita - \u30dd\u30b1\u30b3\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/qiita.com\\\/matayuuu\\\/items\\\/e028904453dded34d18f#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/qiita.com\\\/matayuuu\\\/items\\\/e028904453dded34d18f#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/1761475886_https3A2F2Fqiita-user-contents.imgix_.net2Fhttps253A252F252Fcdn.qiita_.com252Fassets252Fpubli.jpeg\",\"datePublished\":\"2025-10-26T10:51:26+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/qiita.com\\\/matayuuu\\\/items\\\/e028904453dded34d18f#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/qiita.com\\\/matayuuu\\\/items\\\/e028904453dded34d18f\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/qiita.com\\\/matayuuu\\\/items\\\/e028904453dded34d18f#primaryimage\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/1761475886_https3A2F2Fqiita-user-contents.imgix_.net2Fhttps253A252F252Fcdn.qiita_.com252Fassets252Fpubli.jpeg\",\"contentUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/1761475886_https3A2F2Fqiita-user-contents.imgix_.net2Fhttps253A252F252Fcdn.qiita_.com252Fassets252Fpubli.jpeg\",\"width\":1200,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/qiita.com\\\/matayuuu\\\/items\\\/e028904453dded34d18f#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u30db\u30fc\u30e0\",\"item\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Microsoft Agent Framework\u958b\u767a\u5165\u9580 #Azure &#8211; Qiita\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\",\"name\":\"\u30dd\u30b1\u30b3\u30f3\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\",\"name\":\"info@pokecon.jp\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"caption\":\"info@pokecon.jp\"},\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/author\\\/infopokecon-jp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Microsoft Agent Framework\u958b\u767a\u5165\u9580 #Azure - Qiita - \u30dd\u30b1\u30b3\u30f3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/qiita.com\/matayuuu\/items\/e028904453dded34d18f","og_locale":"ja_JP","og_type":"article","og_title":"Microsoft Agent Framework\u958b\u767a\u5165\u9580 #Azure - Qiita - \u30dd\u30b1\u30b3\u30f3","og_description":"\u6982\u8981 Microsoft Agent Framework \u306f\u3001Microsoft \u304c OSS \u3068\u3057\u3066\u63d0\u4f9b\u3059\u308b AI \u30a8\u30fc\u30b8\u30a7\u30f3\u30c8 &amp; \u30de\u30eb\u30c1\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u958b\u767a\u3059\u308b \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002 Microso [&hellip;]","og_url":"https:\/\/qiita.com\/matayuuu\/items\/e028904453dded34d18f","og_site_name":"\u30dd\u30b1\u30b3\u30f3","article_published_time":"2025-10-26T10:51:26+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/1761475886_https3A2F2Fqiita-user-contents.imgix_.net2Fhttps253A252F252Fcdn.qiita_.com252Fassets252Fpubli.jpeg","type":"image\/jpeg"}],"author":"info@pokecon.jp","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"info@pokecon.jp","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"15\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/qiita.com\/matayuuu\/items\/e028904453dded34d18f#article","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/20968\/"},"author":{"name":"info@pokecon.jp","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"headline":"Microsoft Agent Framework\u958b\u767a\u5165\u9580 #Azure &#8211; Qiita","datePublished":"2025-10-26T10:51:26+00:00","mainEntityOfPage":{"@id":"https:\/\/pokecon.jp\/job\/20968\/"},"wordCount":287,"image":{"@id":"https:\/\/qiita.com\/matayuuu\/items\/e028904453dded34d18f#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/1761475886_https3A2F2Fqiita-user-contents.imgix_.net2Fhttps253A252F252Fcdn.qiita_.com252Fassets252Fpubli.jpeg","articleSection":["\u306f\u3066\u306a\u30d6\u30ed\u30b0"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/pokecon.jp\/job\/20968\/","url":"https:\/\/qiita.com\/matayuuu\/items\/e028904453dded34d18f","name":"Microsoft Agent Framework\u958b\u767a\u5165\u9580 #Azure - Qiita - \u30dd\u30b1\u30b3\u30f3","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/#website"},"primaryImageOfPage":{"@id":"https:\/\/qiita.com\/matayuuu\/items\/e028904453dded34d18f#primaryimage"},"image":{"@id":"https:\/\/qiita.com\/matayuuu\/items\/e028904453dded34d18f#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/1761475886_https3A2F2Fqiita-user-contents.imgix_.net2Fhttps253A252F252Fcdn.qiita_.com252Fassets252Fpubli.jpeg","datePublished":"2025-10-26T10:51:26+00:00","author":{"@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"breadcrumb":{"@id":"https:\/\/qiita.com\/matayuuu\/items\/e028904453dded34d18f#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/qiita.com\/matayuuu\/items\/e028904453dded34d18f"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/qiita.com\/matayuuu\/items\/e028904453dded34d18f#primaryimage","url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/1761475886_https3A2F2Fqiita-user-contents.imgix_.net2Fhttps253A252F252Fcdn.qiita_.com252Fassets252Fpubli.jpeg","contentUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/1761475886_https3A2F2Fqiita-user-contents.imgix_.net2Fhttps253A252F252Fcdn.qiita_.com252Fassets252Fpubli.jpeg","width":1200,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/qiita.com\/matayuuu\/items\/e028904453dded34d18f#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/pokecon.jp\/job\/"},{"@type":"ListItem","position":2,"name":"Microsoft Agent Framework\u958b\u767a\u5165\u9580 #Azure &#8211; Qiita"}]},{"@type":"WebSite","@id":"https:\/\/pokecon.jp\/job\/#website","url":"https:\/\/pokecon.jp\/job\/","name":"\u30dd\u30b1\u30b3\u30f3","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pokecon.jp\/job\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997","name":"info@pokecon.jp","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","caption":"info@pokecon.jp"},"url":"https:\/\/pokecon.jp\/job\/author\/infopokecon-jp\/"}]}},"_links":{"self":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/20968","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/comments?post=20968"}],"version-history":[{"count":1,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/20968\/revisions"}],"predecessor-version":[{"id":20970,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/20968\/revisions\/20970"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media\/20969"}],"wp:attachment":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media?parent=20968"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/categories?post=20968"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/tags?post=20968"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}