{"id":4191,"date":"2025-02-20T11:50:27","date_gmt":"2025-02-20T19:50:27","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/semantic-kernel\/?p=4191"},"modified":"2025-02-20T11:50:27","modified_gmt":"2025-02-20T19:50:27","slug":"guest-blog-revolutionizing-ai-workflows-multi-agent-group-chat-with-copilot-agent-plugins-in-microsoft-semantic-kernel","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/agent-framework\/guest-blog-revolutionizing-ai-workflows-multi-agent-group-chat-with-copilot-agent-plugins-in-microsoft-semantic-kernel\/","title":{"rendered":"Guest Blog: Revolutionizing AI Workflows: Multi-Agent Group Chat with Copilot Agent Plugins in Microsoft Semantic Kernel"},"content":{"rendered":"<h3><span class=\"TextRun SCXW87138197 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW87138197 BCX8\">Revolutionizing AI Workflows: Multi-Agent Group Chat with Copilot Agent Plugins in Microsoft Semantic Kernel<\/span><\/span><span class=\"EOP SCXW87138197 BCX8\" data-ccp-props=\"{}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">Copilot Agent Plugins (CAPs) are revolutionizing how developers interact with Microsoft 365 data. By transforming natural language into seamless CRUD actions using Microsoft Graph and Semantic Kernel, CAPs enable the creation of intelligent, AI-driven solutions. This sample demonstrates a multi-agent group chat system where AI-powered agents collaborate across Contacts, Calendar, and Email\u2014 with a standout Legal Secretary Agent ensuring compliance and multilingual support.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\ud83d\udcfa<\/span> <b><span data-contrast=\"auto\">Watch the full video<\/span><\/b><span data-contrast=\"auto\">: <\/span><a href=\"https:\/\/go.fabswill.com\/capsagents\"><span data-contrast=\"none\">https:\/\/go.fabswill.com\/capsagents<\/span><\/a><span data-contrast=\"auto\">\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"1\"><span data-contrast=\"none\">Why Multi-Agent Systems Matter<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:360,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">In the rapidly evolving AI landscape, a single assistant isn&#8217;t enough. Multi-agent systems provide a specialized, structured approach, leading to more accurate and efficient workflows. Here&#8217;s how each agent contributes:.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li><span data-contrast=\"auto\">\u2705<\/span> <b><span data-contrast=\"auto\">Chief of Staff Agent<\/span><\/b><span data-contrast=\"auto\"> \u2013 Orchestrates interactions, intelligently routing queries to specialized agents.<\/span><\/li>\n<li><span data-contrast=\"auto\">\u2705<\/span> <b><span data-contrast=\"auto\">Contacts Agent<\/span><\/b><span data-contrast=\"auto\"> \u2013 Retrieves and manages contact information.<\/span><\/li>\n<li><span data-contrast=\"auto\">\u2705<\/span> <b><span data-contrast=\"auto\">Calendar Agent<\/span><\/b><span data-contrast=\"auto\"> \u2013 Handles scheduling and event retrieval.<\/span><\/li>\n<li><span data-contrast=\"auto\">\u2705<\/span> <b><span data-contrast=\"auto\">Email Agent<\/span><\/b><span data-contrast=\"auto\"> \u2013 Fetches and composes emails with AI-powered context.<\/span><\/li>\n<li><span data-contrast=\"auto\">\u2705<\/span> <b><span data-contrast=\"auto\">Legal Secretary Agent<\/span><\/b><span data-contrast=\"auto\"> \u2013 Ensures responses adhere to compliance guidelines and provides translations.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">Each agent has a <\/span><b><span data-contrast=\"auto\">specific role<\/span><\/b><span data-contrast=\"auto\">, ensuring that requests are processed with precision and accountability. The Chief of Staff Agent intelligently routes queries and ensures appropriate execution.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"1\"><span data-contrast=\"none\">Technical Breakdown<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:360,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">This .NET console application leverages Microsoft Semantic Kernel Plugins to execute OpenAPI-based workflows. Using a structured conversation flow, agents dynamically refine and evaluate prompts. Here\u2019s how it works:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Kernel Setup and Configuration<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Plugin Integration<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Agent-Orchestrated Flow<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Compliance and Multilingual Support<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><b><span data-contrast=\"auto\">Architecture Overview<\/span><\/b><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{}\">\u00a0<a href=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2025\/02\/ArchitectureOverview_MermaidDiagram.png\"><img decoding=\"async\" class=\"alignnone wp-image-4212 size-large\" src=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2025\/02\/ArchitectureOverview_MermaidDiagram-1024x714.png\" alt=\"Image ArchitectureOverview MermaidDiagram\" width=\"1024\" height=\"714\" srcset=\"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/ArchitectureOverview_MermaidDiagram-1024x714.png 1024w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/ArchitectureOverview_MermaidDiagram-300x209.png 300w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/ArchitectureOverview_MermaidDiagram-768x536.png 768w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/ArchitectureOverview_MermaidDiagram.png 1316w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/span><\/p>\n<h3 aria-level=\"1\"><span data-contrast=\"none\">Technical Break down with Screenshots<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:360,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">We want to ensure that these assemblies are in your project and because we are using the Agents framework which is experimental, we will need to set some \u201cNoWarn\u201ds which you an do in the Program.cs and any class files but you can add them to your .csproj to cover all the files.<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2025\/02\/CSProjFile.png\"><img decoding=\"async\" class=\"alignnone wp-image-4213 size-full\" src=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2025\/02\/CSProjFile.png\" alt=\"Image CSProjFile\" width=\"917\" height=\"634\" srcset=\"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/CSProjFile.png 917w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/CSProjFile-300x207.png 300w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/CSProjFile-768x531.png 768w\" sizes=\"(max-width: 917px) 100vw, 917px\" \/><\/a><\/p>\n<p><span class=\"TextRun SCXW49077656 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW49077656 BCX8\">In our sample on the Semantic Kernel <\/span><span class=\"NormalTextRun SCXW49077656 BCX8\">repository,<\/span><span class=\"NormalTextRun SCXW49077656 BCX8\"> we avoided creating a separate copy of the plugins and we used relative paths in the code to point to the original plugin locations, but for folks building a sample themselves, you can clone the repo, or copy the plugins we have hand rolled for you to your project explorer as we have below.\u00a0<\/span><\/span><span class=\"EOP SCXW49077656 BCX8\" data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2025\/02\/ProjectExplorer.png\"><img decoding=\"async\" class=\"alignnone wp-image-4214 size-full\" src=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2025\/02\/ProjectExplorer.png\" alt=\"Image ProjectExplorer\" width=\"507\" height=\"654\" srcset=\"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/ProjectExplorer.png 507w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/ProjectExplorer-233x300.png 233w\" sizes=\"(max-width: 507px) 100vw, 507px\" \/><\/a><\/p>\n<p><span class=\"TextRun SCXW7822141 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW7822141 BCX8\">The <\/span><span class=\"NormalTextRun SCXW7822141 BCX8\">key to <\/span><span class=\"NormalTextRun SCXW7822141 BCX8\">CAPs is an extension method <\/span><span class=\"NormalTextRun SCXW7822141 BCX8\">that is available to you <\/span><span class=\"NormalTextRun SCXW7822141 BCX8\">from the kernel object <\/span><span class=\"NormalTextRun SCXW7822141 BCX8\">as seen on line 304 in the screenshot below. <\/span><span class=\"NormalTextRun SCXW7822141 BCX8\">The <\/span><span class=\"NormalTextRun SCXW7822141 BCX8\">method takes as a parameters the name(s) of your plugins you have created or have in the directory, <\/span><span class=\"NormalTextRun SCXW7822141 BCX8\">the location of the manifest file (.<\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW7822141 BCX8\">json<\/span><span class=\"NormalTextRun SCXW7822141 BCX8\">) within those directories, and <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW7822141 BCX8\">copilotAgentPluginParameters<\/span><span class=\"NormalTextRun SCXW7822141 BCX8\"> which is basically tuning we have to ensure consistent and proper results, you will see that at the end of the sample in the #regions section. <\/span><span class=\"NormalTextRun SCXW7822141 BCX8\">This tuning <\/span><span class=\"NormalTextRun SCXW7822141 BCX8\">helps<\/span><span class=\"NormalTextRun SCXW7822141 BCX8\"> the LLM to understand the complexity of the <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW7822141 BCX8\">OpenAPI<\/span><span class=\"NormalTextRun SCXW7822141 BCX8\"> file for Microsoft Graph. <\/span><span class=\"NormalTextRun SCXW7822141 BCX8\">If you are creating your own plugins to use with CAPs, and the <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW7822141 BCX8\">OpenAPI<\/span><span class=\"NormalTextRun SCXW7822141 BCX8\"> spec is complex <\/span><span class=\"NormalTextRun SCXW7822141 BCX8\">i.e.,<\/span><span class=\"NormalTextRun SCXW7822141 BCX8\"> nested properties<\/span><span class=\"NormalTextRun SCXW7822141 BCX8\">, filters, <\/span><span class=\"NormalTextRun SCXW7822141 BCX8\">etc. then you <\/span><span class=\"NormalTextRun SCXW7822141 BCX8\">\u2018may\u2019 need to also provide clarity to the LLM to reason over them.\u00a0<\/span><\/span><span class=\"EOP SCXW7822141 BCX8\" data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2025\/02\/LoadPluginAsync.png\"><img decoding=\"async\" class=\"alignnone wp-image-4215 size-large\" src=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2025\/02\/LoadPluginAsync-1024x711.png\" alt=\"Image LoadPluginAsync\" width=\"1024\" height=\"711\" srcset=\"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/LoadPluginAsync-1024x711.png 1024w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/LoadPluginAsync-300x208.png 300w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/LoadPluginAsync-768x533.png 768w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/LoadPluginAsync.png 1317w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p><span class=\"TextRun SCXW160568009 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW160568009 BCX8\">Once that is completed, the rest is your standard <\/span><span class=\"NormalTextRun SCXW160568009 BCX8\">configuration and kernel creation <\/span><span class=\"NormalTextRun SCXW160568009 BCX8\">as well as setting up your Agents.<\/span><\/span><span class=\"EOP SCXW160568009 BCX8\" data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2025\/02\/InitializeKernelAsync.png\"><img decoding=\"async\" class=\"alignnone wp-image-4216 size-full\" src=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2025\/02\/InitializeKernelAsync.png\" alt=\"Image InitializeKernelAsync\" width=\"642\" height=\"313\" srcset=\"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/InitializeKernelAsync.png 642w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/InitializeKernelAsync-300x146.png 300w\" sizes=\"(max-width: 642px) 100vw, 642px\" \/><\/a><\/p>\n<p><span class=\"TextRun SCXW244134513 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW244134513 BCX8\">In our sample we have 1 agent that can <\/span><span class=\"NormalTextRun SCXW244134513 BCX8\">call the <\/span><span class=\"NormalTextRun SCXW244134513 BCX8\">plugins,<\/span><span class=\"NormalTextRun SCXW244134513 BCX8\"> and the other agents are there in a support capacity. <\/span><span class=\"NormalTextRun SCXW244134513 BCX8\">Below you see the <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW244134513 BCX8\">ChiefOfStaff<\/span><span class=\"NormalTextRun SCXW244134513 BCX8\"> agent is <\/span><span class=\"NormalTextRun SCXW244134513 BCX8\">designated<\/span><span class=\"NormalTextRun SCXW244134513 BCX8\"> as the one in charge thus <\/span><span class=\"NormalTextRun SCXW244134513 BCX8\">have Kernel Arguments for access to the Plugins.<\/span><\/span><span class=\"EOP SCXW244134513 BCX8\" data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2025\/02\/ChiefOfStaff.png\"><img decoding=\"async\" class=\"alignnone wp-image-4217 size-large\" src=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2025\/02\/ChiefOfStaff-1024x521.png\" alt=\"Image ChiefOfStaff\" width=\"1024\" height=\"521\" srcset=\"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/ChiefOfStaff-1024x521.png 1024w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/ChiefOfStaff-300x153.png 300w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/ChiefOfStaff-768x391.png 768w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/ChiefOfStaff.png 1067w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p><span class=\"TextRun SCXW39908273 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW39908273 BCX8\">For our supporting agents you will see that they take on the same set of properties except the Kernel Arguments, notice <\/span><span class=\"NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW39908273 BCX8\">as well the Legal Secretary agent<\/span><span class=\"NormalTextRun SCXW39908273 BCX8\"> is more involved as <\/span><span class=\"NormalTextRun SCXW39908273 BCX8\">it is not interacting with the Microsoft Graph but more for *compliance*, *safety*, and <\/span><span class=\"NormalTextRun SCXW39908273 BCX8\">regional language.<\/span><\/span><span class=\"EOP SCXW39908273 BCX8\" data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2025\/02\/RestOfAgents.png\"><img decoding=\"async\" class=\"alignnone wp-image-4218 size-large\" src=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2025\/02\/RestOfAgents-1024x761.png\" alt=\"Image RestOfAgents\" width=\"1024\" height=\"761\" srcset=\"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/RestOfAgents-1024x761.png 1024w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/RestOfAgents-300x223.png 300w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/RestOfAgents-768x571.png 768w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/RestOfAgents.png 1154w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p><span data-contrast=\"auto\">Finally, we can issue a prompt such as you see here and get these amazing responses from our sample that not only provides important timely feedback to the user but can also act autonomously on behalf of the user as well.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"1\"><span data-contrast=\"none\">Pay Dirt!\u00a0<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:360,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">Let\u2019s do 2 prompts here in the interest of time. One will be a benign prompt, just to demonstrate how the Agents will make decisions whether to invoke a plugin or not? You will see it does not, even though it did interact with the agents in the loop. You will also notice that the Agents get invoked and finally the Legal Secretary gave a response in both English and French<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2025\/02\/PayDirt_1of3.png\"><img decoding=\"async\" class=\"alignnone wp-image-4219 size-large\" src=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2025\/02\/PayDirt_1of3-1024x685.png\" alt=\"Image PayDirt 1of3\" width=\"1024\" height=\"685\" srcset=\"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/PayDirt_1of3-1024x685.png 1024w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/PayDirt_1of3-300x201.png 300w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/PayDirt_1of3-768x514.png 768w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/PayDirt_1of3.png 1220w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p><span class=\"TextRun SCXW46051817 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW46051817 BCX8\">In the next step, <\/span><span class=\"NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW46051817 BCX8\">lets<\/span> <span class=\"NormalTextRun SCXW46051817 BCX8\">ask a <\/span><span class=\"NormalTextRun AdvancedProofingIssueV2Themed SCXW46051817 BCX8\">really nebulous<\/span><span class=\"NormalTextRun SCXW46051817 BCX8\"> statement, pay attention that we have*not* provided <\/span><span class=\"NormalTextRun SCXW46051817 BCX8\">many<\/span><span class=\"NormalTextRun SCXW46051817 BCX8\"> details about the individual [Keyser], nor have we framed <\/span><span class=\"NormalTextRun SCXW46051817 BCX8\">specificity around the ask, we just said we wanted <\/span><span class=\"NormalTextRun SCXW46051817 BCX8\">*Emails*. <\/span><span class=\"NormalTextRun SCXW46051817 BCX8\">Note this time the 1<\/span><\/span><span class=\"TextRun SCXW46051817 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun Superscript SCXW46051817 BCX8\" data-fontsize=\"12\">st<\/span><\/span><span class=\"TextRun SCXW46051817 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW46051817 BCX8\"> agent engaged is the Email Agent<\/span><span class=\"NormalTextRun SCXW46051817 BCX8\">, if you recall its job is to make sure the prompt is tuned for <\/span><span class=\"NormalTextRun SCXW46051817 BCX8\">the <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW46051817 BCX8\">OpenAPI<\/span><span class=\"NormalTextRun SCXW46051817 BCX8\"> spec<\/span><span class=\"NormalTextRun SCXW46051817 BCX8\">, then we get an <\/span><span class=\"NormalTextRun SCXW46051817 BCX8\">authentication<\/span><span class=\"NormalTextRun SCXW46051817 BCX8\"> request as <\/span><span class=\"NormalTextRun SCXW46051817 BCX8\">this one need<\/span><span class=\"NormalTextRun SCXW46051817 BCX8\"> permissions to the Microsoft Graph<\/span><\/span><span class=\"EOP SCXW46051817 BCX8\" data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2025\/02\/PayDirt_2of3.png\"><img decoding=\"async\" class=\"alignnone wp-image-4220 size-large\" src=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2025\/02\/PayDirt_2of3-1024x656.png\" alt=\"Image PayDirt 2of3\" width=\"1024\" height=\"656\" srcset=\"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/PayDirt_2of3-1024x656.png 1024w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/PayDirt_2of3-300x192.png 300w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/PayDirt_2of3-768x492.png 768w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/PayDirt_2of3.png 1100w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p><span class=\"TextRun SCXW238116787 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW238116787 BCX8\">And now we can see <\/span><span class=\"NormalTextRun SCXW238116787 BCX8\">results coming back using the same Agentic Flow <\/span><span class=\"NormalTextRun SCXW238116787 BCX8\">in both English and French<\/span><\/span><span class=\"EOP SCXW238116787 BCX8\" data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"1\"><a href=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2025\/02\/PayDirt_3of3.png\"><img decoding=\"async\" class=\"alignnone wp-image-4221 size-large\" src=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2025\/02\/PayDirt_3of3-1024x563.png\" alt=\"Image PayDirt 3of3\" width=\"1024\" height=\"563\" srcset=\"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/PayDirt_3of3-1024x563.png 1024w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/PayDirt_3of3-300x165.png 300w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/PayDirt_3of3-768x422.png 768w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2025\/02\/PayDirt_3of3.png 1110w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/h3>\n<h3 aria-level=\"1\"><span data-contrast=\"none\">Next Steps &amp; Resources \u2013 Build with CAPs Today!<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:360,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">Copilot Agent Plugins (CAPs) empower developers to seamlessly integrate AI-driven workflows into Microsoft 365, transforming natural language into powerful CRUD actions using Microsoft Graph and Semantic Kernel. Now, it&#8217;s your turn to explore and build!<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h5 aria-level=\"2\"><span data-contrast=\"none\">This blog post Video<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h5>\n<p aria-level=\"2\"><span data-contrast=\"auto\">\ud83e\udd16 <\/span><b><span data-contrast=\"auto\">Go Autonomous<\/span><\/b><span data-contrast=\"auto\"> \u2013 Discover how multi-agent systems collaborate in Semantic Kernel &amp; CAPs: <\/span><a href=\"https:\/\/go.fabswill.com\/capsagents\"><span data-contrast=\"none\">https:\/\/go.fabswill.com\/capsagents<\/span><\/a><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}\">\u00a0<\/span><\/p>\n<h5 aria-level=\"2\"><span data-contrast=\"none\">Others you may be interested in too to get you along your journey<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h5>\n<p><span data-contrast=\"auto\">\ud83d\udd39 <\/span><b><span data-contrast=\"auto\">Get Started Quickly<\/span><\/b><span data-contrast=\"auto\"> \u2013 Follow our <\/span><b><span data-contrast=\"auto\">QuickStart Guide<\/span><\/b><span data-contrast=\"auto\"> with GitHub ReadMe &amp; Videos:<\/span>\n<a href=\"https:\/\/aka.ms\/m365caps-quickstartdemo\"><span data-contrast=\"auto\">https:\/\/aka.ms\/m365caps-quickstartdemo<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/a><\/p>\n<p><span data-contrast=\"auto\">\ud83d\udcda <\/span><b><span data-contrast=\"auto\">Learn the Basics<\/span><\/b><span data-contrast=\"auto\"> \u2013 New to Semantic Kernel and CAPs? Start here:<\/span>\n<a href=\"https:\/\/go.fabswill.com\/sk101\"><span data-contrast=\"auto\">https:\/\/go.fabswill.com\/sk101<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/a><\/p>\n<p><span data-contrast=\"auto\">\ud83d\udee0 <\/span><b><span data-contrast=\"auto\">Build End-to-End<\/span><\/b><span data-contrast=\"auto\"> \u2013 Develop a full Semantic Kernel solution with CAPs:<\/span>\n<a href=\"https:\/\/go.fabswill.com\/capse2e\"><span data-contrast=\"auto\">https:\/\/go.fabswill.com\/capse2e<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/a><\/p>\n<p><span data-contrast=\"auto\">\ud83d\udcbe <\/span><b><span data-contrast=\"auto\">Grab the Code!<\/span><\/b><span data-contrast=\"auto\"> \u2013 Find the plugins and source code on GitHub:<\/span>\n<a href=\"https:\/\/aka.ms\/m365caps\"><span data-contrast=\"auto\">https:\/\/aka.ms\/m365caps<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/a><\/p>\n<p><span data-contrast=\"auto\">\ud83d\ude80 <\/span><b><span data-contrast=\"auto\">Join the Conversation!<\/span><\/b>\n<span data-contrast=\"auto\">Have questions or want to share your builds? Connect with us on GitHub, Twitter, or LinkedIn and show us what you&#8217;re creating with CAPs!<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Revolutionizing AI Workflows: Multi-Agent Group Chat with Copilot Agent Plugins in Microsoft Semantic Kernel\u00a0 Copilot Agent Plugins (CAPs) are revolutionizing how developers interact with Microsoft 365 data. By transforming natural language into seamless CRUD actions using Microsoft Graph and Semantic Kernel, CAPs enable the creation of intelligent, AI-driven solutions. This sample demonstrates a multi-agent group [&hellip;]<\/p>\n","protected":false},"author":149071,"featured_media":2302,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[117,1],"tags":[48,63,9],"class_list":["post-4191","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guest-blog","category-semantic-kernel","tag-ai","tag-microsoft-semantic-kernel","tag-semantic-kernel"],"acf":[],"blog_post_summary":"<p>Revolutionizing AI Workflows: Multi-Agent Group Chat with Copilot Agent Plugins in Microsoft Semantic Kernel\u00a0 Copilot Agent Plugins (CAPs) are revolutionizing how developers interact with Microsoft 365 data. By transforming natural language into seamless CRUD actions using Microsoft Graph and Semantic Kernel, CAPs enable the creation of intelligent, AI-driven solutions. This sample demonstrates a multi-agent group [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/posts\/4191","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/users\/149071"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/comments?post=4191"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/posts\/4191\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/media\/2302"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/media?parent=4191"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/categories?post=4191"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/tags?post=4191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}