{"id":3965,"date":"2025-01-09T14:43:35","date_gmt":"2025-01-09T22:43:35","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/semantic-kernel\/?p=3965"},"modified":"2025-02-10T10:18:17","modified_gmt":"2025-02-10T18:18:17","slug":"empowering-ai-agents-with-tools-via-openapi-a-hands-on-guide-with-microsoft-semantic-kernel-agents","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/agent-framework\/empowering-ai-agents-with-tools-via-openapi-a-hands-on-guide-with-microsoft-semantic-kernel-agents\/","title":{"rendered":"Empowering AI Agents with Tools via OpenAPI: A Hands-On Guide with Microsoft Semantic Kernel Agents"},"content":{"rendered":"<p>Today the Semantic Kernel team is happy to welcome back our guest author, <a href=\"https:\/\/medium.com\/@akshaykokane09\">Akshay Kokane<\/a>. We will turn it over to him to dive into his recent Medium article on Semantic Kernel.<\/p>\n<p><span data-contrast=\"none\">As we advance towards an Agentic Approach in the AI world, I would like to share my insights on how Semantic Kernel can assist in building AI agents and leveraging existing APIs to create intelligent agents.<\/span><span data-ccp-props=\"{&quot;335551550&quot;:1,&quot;335551620&quot;:1}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">In a previous <\/span><a href=\"https:\/\/medium.com\/@akshaykokane09\/step-by-step-guide-to-develop-ai-multi-agent-system-using-microsoft-semantic-kernel-and-gpt-4o-f5991af40ea6\"><span data-contrast=\"none\">article<\/span><\/a><span data-contrast=\"none\">, I discussed how Semantic Kernel can develop a multi-agent system that fosters a collaborative environment for these agents to interact and deliver results. In this new blog post, I am pleased to share that by using the OpenAPI specification, we can utilize existing APIs to integrate with agents. These are referred to as tools or plugins, which AI agents can call upon to obtain contextual data.<\/span><span data-ccp-props=\"{&quot;335551550&quot;:1,&quot;335551620&quot;:1}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Using Semantic Kernel, adding plugins via the OpenAPI specification is simplified. Furthermore, these plugins are automatically triggered as and when required using the OpenAI Tool Calling. Semantic Kernel eliminates the complexities associated with tool invocation, streamlining the development of AI agents by removing the need to focus on these intricacies.\u00a0<\/span><span data-ccp-props=\"{&quot;335551550&quot;:1,&quot;335551620&quot;:1}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">In this blog post, I will showcase how to create a chat-based application for an e-commerce platform that manages customer payments through the integration of their existing Payment Service APIs. Here are high level steps to import plugin through OpenApi:<\/span><span data-ccp-props=\"{&quot;335551550&quot;:1,&quot;335551620&quot;:1}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">To add a plugin to your kernel:<\/span><\/p>\n<p><span data-contrast=\"none\">1. Add the following NuGet Reference:<\/span><span data-ccp-props=\"{&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559795&quot;:300}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-xml\"><code class=\"language-xml\">&lt;PackageReference Include=\"Microsoft.SemanticKernel.Plugins.OpenApi\" Version=\"1.32.0-preview\" \/&gt;<\/code><\/pre>\n<p><span style=\"font-size: 12pt;\">2. Import the Plugin to the Kernel:<\/span><\/p>\n<pre class=\"prettyprint language-cs language-csharp\"><code class=\"language-cs language-csharp\">await kernel.ImportPluginFromOpenApiAsync( \r\n\r\n   pluginName: \"paymentProcessor\", \r\n\r\n   uri: new Uri(\"localhost:8080\/swagger\/v1\/swagger.json\"), \r\n\r\n   executionParameters: new OpenApiFunctionExecutionParameters() { \r\n\r\n       EnablePayloadNamespacing = true \r\n\r\n   } \r\n\r\n); <\/code><\/pre>\n<p><span data-contrast=\"none\">This approach is transformative for enterprises aiming to leverage their existing APIs without reinventing the wheel. Additionally, the OpenAPI spec enables microservice architecture for your AI agents, facilitating easy scalability and resource management at the plugin level.<\/span><span data-ccp-props=\"{&quot;335551550&quot;:1,&quot;335551620&quot;:1}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">Semantic Kernel offers several methods for calling APIs. The blog includes a simple example of non-Auth APIs, but it is also possible to call Auth-based APIs. For more information, refer to the documentation on <\/span><a href=\"https:\/\/learn.microsoft.com\/en-us\/semantic-kernel\/concepts\/plugins\/adding-openapi-plugins?pivots=programming-language-csharp\"><span data-contrast=\"none\">Give agents access to OpenAPI APIs | Microsoft Learn<\/span><\/a><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559685&quot;:0,&quot;335559737&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:279}\">\u00a0<\/span><span data-contrast=\"none\">For more details, please read the full <a href=\"http:\/\/Empowering AI Agents with Tools via OpenAPI: A Hands-On Guide with Microsoft Semantic Kernel Agents\">article<\/a> below.\u00a0\u00a0<\/span><\/p>\n<h3 id=\"f9ce\" class=\"pw-post-title hh hi hj bf hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij bk\" data-testid=\"storyTitle\"><span style=\"font-size: 24pt;\">Empowering AI Agents with Tools via OpenAPI: A Hands-On Guide with Microsoft Semantic Kernel Agents<\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*1gbWscwDuEyR2nbFGvUMfQ.png\" \/><\/p>\n<p id=\"53e1\" class=\"pw-post-body-paragraph mu mv hj mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk\" data-selectable-paragraph=\"\">I recently explored how the OpenAPI Specification can be utilized to give actionable capabilities to AI agents. In this blog, I aim to share my insights and demonstrate the process.<\/p>\n<h1 id=\"3ec5\" class=\"ns nt hj bf nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op bk\" data-selectable-paragraph=\"\">Understanding the OpenAPI Specification<\/h1>\n<p id=\"0a8d\" class=\"pw-post-body-paragraph mu mv hj mw b mx oq mz na nb or nd ne nf os nh ni nj ot nl nm nn ou np nq nr gn bk\" data-selectable-paragraph=\"\">TThe\u00a0<strong class=\"mw hk\">OpenAPI Specification<\/strong>\u00a0(formerly known as Swagger) is a standardized, language-agnostic framework for defining HTTP APIs. It allows both humans and machines t discover a service\u2019s capabilities without needing access to its source code or documentation. Properly defined OpenAPI specs enable consumers to interact with services using minimal implementation logic..\u00a0<a class=\"af ov\" href=\"https:\/\/swagger.io\/specification\/\" target=\"_blank\" rel=\"noopener ugc nofollow\">Learn more here<\/a>.<\/p>\n<h1 id=\"f132\" class=\"ns nt hj bf nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op bk\" data-selectable-paragraph=\"\">Why Use OpenAPI with AI Agents?<\/h1>\n<p id=\"8173\" class=\"pw-post-body-paragraph mu mv hj mw b mx oq mz na nb or nd ne nf os nh ni nj ot nl nm nn ou np nq nr gn bk\" data-selectable-paragraph=\"\">Many enterprises already have robust APIs in place. With the growing demand for AI-enabled applications, using OpenAPI-based plugins simplifies the process of empowering AI agents with existing APIs. Semantic Kernel, when integrated with OpenAPI, provides AI agents with detailed API semantics, including endpoint descriptions, data types, and expected responses.<\/p>\n<p id=\"7633\" class=\"pw-post-body-paragraph mu mv hj mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk\" data-selectable-paragraph=\"\">For instance, imagine an e-commerce platform launching a new feature called\u00a0<strong class=\"mw hk\">ShopChat.AI<\/strong>, where customers can interact with an AI agent to find and purchase products. The AI agent can handle payments and check order statuses by leveraging the existing\u00a0<strong class=\"mw hk\">Payment Service APIs<\/strong>\u00a0through OpenAPI specs.<\/p>\n<h1 id=\"3e8b\" class=\"ns nt hj bf nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op bk\" data-selectable-paragraph=\"\">Key Benefits of Combining OpenAPI with Semantic Kernel<\/h1>\n<p id=\"4709\" class=\"pw-post-body-paragraph mu mv hj mw b mx oq mz na nb or nd ne nf os nh ni nj ot nl nm nn ou np nq nr gn bk\" data-selectable-paragraph=\"\">Integrating OpenAPI specs with Semantic Kernel and Azure OpenAI provides numerous advantages:<\/p>\n<h2 id=\"5ea4\" class=\"ow nt hj bf nu ox oy dy ny oz pa ea oc nf pb pc pd nj pe pf pg nn ph pi pj pk bk\" data-selectable-paragraph=\"\">1. Simplified AI Integration<\/h2>\n<p id=\"d774\" class=\"pw-post-body-paragraph mu mv hj mw b mx oq mz na nb or nd ne nf os nh ni nj ot nl nm nn ou np nq nr gn bk\" data-selectable-paragraph=\"\">OpenAPI specs offer a standardized method for AI agents to understand and interact with existing APIs, eliminating the need for complex custom integrations.<\/p>\n<h2 id=\"947c\" class=\"ow nt hj bf nu ox oy dy ny oz pa ea oc nf pb pc pd nj pe pf pg nn ph pi pj pk bk\" data-selectable-paragraph=\"\">2. Enhanced Agent Functionality<\/h2>\n<p id=\"89f0\" class=\"pw-post-body-paragraph mu mv hj mw b mx oq mz na nb or nd ne nf os nh ni nj ot nl nm nn ou np nq nr gn bk\" data-selectable-paragraph=\"\">By leveraging existing APIs, AI agents can handle a wide range of tasks, such as inventory management and payment processing, resulting in more versatile applications.<\/p>\n<h2 id=\"d848\" class=\"ow nt hj bf nu ox oy dy ny oz pa ea oc nf pb pc pd nj pe pf pg nn ph pi pj pk bk\" data-selectable-paragraph=\"\">3. Improved Scalability<\/h2>\n<p id=\"edf2\" class=\"pw-post-body-paragraph mu mv hj mw b mx oq mz na nb or nd ne nf os nh ni nj ot nl nm nn ou np nq nr gn bk\" data-selectable-paragraph=\"\">As your application grows, integrating new APIs becomes easier with OpenAPI. This ensures that your AI agents can evolve alongside your platform.<\/p>\n<h1 id=\"ba29\" class=\"ns nt hj bf nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op bk\" data-selectable-paragraph=\"\">Building an AI-Powered Application with OpenAPI and Semantic Kernel<\/h1>\n<figure class=\"pl pm pn po pp ha gs gt paragraph-image\">\n<div class=\"hb hc fj hd bh he\" tabindex=\"0\" role=\"button\">\n<div class=\"gs gt gu\"><picture><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/format:webp\/1*1gbWscwDuEyR2nbFGvUMfQ.png 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/format:webp\/1*1gbWscwDuEyR2nbFGvUMfQ.png 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/format:webp\/1*1gbWscwDuEyR2nbFGvUMfQ.png 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/format:webp\/1*1gbWscwDuEyR2nbFGvUMfQ.png 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/format:webp\/1*1gbWscwDuEyR2nbFGvUMfQ.png 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/format:webp\/1*1gbWscwDuEyR2nbFGvUMfQ.png 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/format:webp\/1*1gbWscwDuEyR2nbFGvUMfQ.png 1400w\" type=\"image\/webp\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" \/><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/1*1gbWscwDuEyR2nbFGvUMfQ.png 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/1*1gbWscwDuEyR2nbFGvUMfQ.png 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/1*1gbWscwDuEyR2nbFGvUMfQ.png 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/1*1gbWscwDuEyR2nbFGvUMfQ.png 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/1*1gbWscwDuEyR2nbFGvUMfQ.png 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/1*1gbWscwDuEyR2nbFGvUMfQ.png 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*1gbWscwDuEyR2nbFGvUMfQ.png 1400w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" data-testid=\"og\" \/><img decoding=\"async\" class=\"bh hf hg c\" role=\"presentation\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*1gbWscwDuEyR2nbFGvUMfQ.png\" alt=\"\" width=\"700\" height=\"474\" \/><\/picture><\/div>\n<\/div><figcaption class=\"pq ff pr gs gt ps pt bf b bg z du\" data-selectable-paragraph=\"\">Example Agent based Application<\/figcaption><\/figure>\n<p id=\"9ddf\" class=\"pw-post-body-paragraph mu mv hj mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk\" data-selectable-paragraph=\"\">Let\u2019s consider an example: Suppose you have a payment service for your e-commerce platform already in use. The service exposes two APIs:<\/p>\n<ol class=\"\">\n<li id=\"891d\" class=\"mu mv hj mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr pu pv pw bk\" data-selectable-paragraph=\"\"><code class=\"cx px py pz qa b\"><strong class=\"mw hk\">payment\/accept<\/strong><\/code>: This API accepts credit card information, processes the payment, and returns a\u00a0<code class=\"cx px py pz qa b\">transactionId<\/code>.<\/li>\n<li id=\"46cb\" class=\"mu mv hj mw b mx qb mz na nb qc nd ne nf qd nh ni nj qe nl nm nn qf np nq nr pu pv pw bk\" data-selectable-paragraph=\"\"><code class=\"cx px py pz qa b\"><strong class=\"mw hk\">payment\/status<\/strong><\/code>: This API uses the\u00a0<code class=\"cx px py pz qa b\">transactionId<\/code>\u00a0to retrieve the payment status.<\/li>\n<\/ol>\n<p id=\"7c07\" class=\"pw-post-body-paragraph mu mv hj mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk\" data-selectable-paragraph=\"\">Now the e-commerce website is planning to launch new feature \u201cShopeChat.AI\u201d where you can interact with AI agent like you interact with actual shopkeeper to find best product and buy that product.<\/p>\n<h2 id=\"f363\" class=\"ow nt hj bf nu ox oy dy ny oz pa ea oc nf pb pc pd nj pe pf pg nn ph pi pj pk bk\" data-selectable-paragraph=\"\">Step 1: Exposing OpenAPI Specs for Your Service<\/h2>\n<p id=\"7f89\" class=\"pw-post-body-paragraph mu mv hj mw b mx oq mz na nb or nd ne nf os nh ni nj ot nl nm nn ou np nq nr gn bk\" data-selectable-paragraph=\"\">Make sure your Payment Service is exposing the OpenAPI Spec. I am doing it in .net, so in .net you can expose the OpenAPI Spech by using Swagger. Complete guide can be found here\u00a0<a class=\"af ov\" href=\"https:\/\/learn.microsoft.com\/en-us\/aspnet\/core\/tutorials\/web-api-help-pages-using-swagger?view=aspnetcore-8.0\" target=\"_blank\" rel=\"noopener ugc nofollow\">https:\/\/learn.microsoft.com\/en-us\/aspnet\/core\/tutorials\/web-api-help-pages-using-swagger?view=aspnetcore-8.0<\/a><\/p>\n<p id=\"0cd1\" class=\"pw-post-body-paragraph mu mv hj mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk\" data-selectable-paragraph=\"\">This is using SwagsBuckler package, I will add this service<\/p>\n<pre class=\"pl pm pn po pp qg qa qh bp qi bb bk\"><span id=\"828a\" class=\"qj nt hj qa b bg qk ql l qm qn\" data-selectable-paragraph=\"\">builder.Services.AddSwaggerGen(options =&gt;\r\n{\r\n    <span class=\"hljs-keyword\">var<\/span> xmlFile = <span class=\"hljs-string\">$\"<span class=\"hljs-subst\">{System.Reflection.Assembly.GetExecutingAssembly().GetName().Name}<\/span>.xml\"<\/span>;\r\n    <span class=\"hljs-keyword\">var<\/span> xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);\r\n    options.IncludeXmlComments(xmlPath);\r\n});<\/span><\/pre>\n<p class=\"pw-post-body-paragraph mu mv hj mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk\" data-selectable-paragraph=\"\">Learn more about configuring Swagger\/OpenAPI at <a class=\"af ov\" href=\"https:\/\/aka.ms\/aspnetcore\/swashbuckle\" target=\"_blank\" rel=\"noopener ugc nofollow\">https:\/\/aka.ms\/aspnetcore\/swashbuckle<\/a><\/p>\n<p id=\"a013\" class=\"pw-post-body-paragraph mu mv hj mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk\" data-selectable-paragraph=\"\">This should create output\u00a0<a class=\"af ov\" href=\"http:\/\/localhost:5272\/swagger\/v1\/swagger.json\" target=\"_blank\" rel=\"noopener ugc nofollow\">http:\/\/localhost:5272\/swagger\/v1\/swagger.json<\/a>.<\/p>\n<pre class=\"prettyprint language-json\"><code class=\"language-json\">{\r\n\"openapi\": \"3.0.1\",\r\n\"info\": {\r\n\"title\": \"PaymentProcessor\",\r\n\"version\": \"1.0\"\r\n},\r\n\"paths\": {\r\n\"\/api\/Payments\/status\": {\r\n\"get\": {\r\n\"tags\": [\r\n\"Payments\"\r\n],\r\n\"summary\": \"Retrieves the status of a specific payment.\",\r\n\"responses\": {\r\n\"200\": {\r\n\"description\": \"Success\"\r\n}\r\n}\r\n}\r\n},\r\n\"\/api\/Payments\/process\": {\r\n\"post\": {\r\n\"tags\": [\r\n\"Payments\"\r\n],\r\n\"summary\": \"Processes a payment request.\",\r\n\"requestBody\": {\r\n\"description\": \"The payment request details.\",\r\n\"content\": {\r\n\"application\/json\": {\r\n\"schema\": {\r\n\"$ref\": \"#\/components\/schemas\/PaymentRequest\"\r\n}\r\n},\r\n\"text\/json\": {\r\n\"schema\": {\r\n\"$ref\": \"#\/components\/schemas\/PaymentRequest\"\r\n}\r\n},\r\n\"application\/*+json\": {\r\n\"schema\": {\r\n\"$ref\": \"#\/components\/schemas\/PaymentRequest\"\r\n}\r\n}\r\n}\r\n},\r\n\"responses\": {\r\n\"200\": {\r\n\"description\": \"Success\"\r\n}\r\n}\r\n}\r\n}\r\n},\r\n\"components\": {\r\n\"schemas\": {\r\n\"PaymentRequest\": {\r\n\"required\": [\r\n\"transactionId\"\r\n],\r\n\"type\": \"object\",\r\n\"properties\": {\r\n\"transactionId\": {\r\n\"minLength\": 1,\r\n\"type\": \"string\"\r\n},\r\n\"amount\": {\r\n\"minimum\": 0.01,\r\n\"type\": \"number\",\r\n\"format\": \"double\"\r\n}\r\n},\r\n\"additionalProperties\": false\r\n}\r\n}\r\n}\r\n}<\/code><\/pre>\n<h1 id=\"86bd\" class=\"ns nt hj bf nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op bk\" data-selectable-paragraph=\"\">To ensure the Payment Service APIs are invoked correctly, I\u2019ve added a constant static transaction ID for verification purposes:<\/h1>\n<p id=\"2cd0\" class=\"pw-post-body-paragraph mu mv hj mw b mx oq mz na nb or nd ne nf os nh ni nj ot nl nm nn ou np nq nr gn bk\" data-selectable-paragraph=\"\"><strong class=\"mw hk\">TransactionId = \u201cTestService123\u201d<\/strong><\/p>\n<figure class=\"pl pm pn po pp ha gs gt paragraph-image\">\n<div class=\"hb hc fj hd bh he\" tabindex=\"0\" role=\"button\">\n<div class=\"gs gt qo\"><picture><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/format:webp\/1*q0Hp2AIPPnQHc5fPDBX_lQ.png 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/format:webp\/1*q0Hp2AIPPnQHc5fPDBX_lQ.png 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/format:webp\/1*q0Hp2AIPPnQHc5fPDBX_lQ.png 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/format:webp\/1*q0Hp2AIPPnQHc5fPDBX_lQ.png 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/format:webp\/1*q0Hp2AIPPnQHc5fPDBX_lQ.png 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/format:webp\/1*q0Hp2AIPPnQHc5fPDBX_lQ.png 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/format:webp\/1*q0Hp2AIPPnQHc5fPDBX_lQ.png 1400w\" type=\"image\/webp\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" \/><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/1*q0Hp2AIPPnQHc5fPDBX_lQ.png 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/1*q0Hp2AIPPnQHc5fPDBX_lQ.png 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/1*q0Hp2AIPPnQHc5fPDBX_lQ.png 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/1*q0Hp2AIPPnQHc5fPDBX_lQ.png 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/1*q0Hp2AIPPnQHc5fPDBX_lQ.png 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/1*q0Hp2AIPPnQHc5fPDBX_lQ.png 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*q0Hp2AIPPnQHc5fPDBX_lQ.png 1400w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" data-testid=\"og\" \/><img decoding=\"async\" class=\"bh hf hg c\" role=\"presentation\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*q0Hp2AIPPnQHc5fPDBX_lQ.png\" alt=\"\" width=\"700\" height=\"103\" \/><\/picture><\/div>\n<\/div>\n<\/figure>\n<h2 id=\"9a6f\" class=\"ow nt hj bf nu ox oy dy ny oz pa ea oc nf pb pc pd nj pe pf pg nn ph pi pj pk bk\" data-selectable-paragraph=\"\">Step 2: Optional Deployment to Azure<\/h2>\n<p id=\"c883\" class=\"pw-post-body-paragraph mu mv hj mw b mx oq mz na nb or nd ne nf os nh ni nj ot nl nm nn ou np nq nr gn bk\" data-selectable-paragraph=\"\">While optional, deploying your service to Azure ensures accessibility and scalability. You can follow Microsoft\u2019s official guide on deploying ASP.NET Core apps to Azure App Services for a smooth cloud integration.If you plan to host your application in the cloud, deploy it to Azure for accessibility and scalability. While optional, this step ensures seamless integration and availability for testing and deployment.<\/p>\n<figure class=\"pl pm pn po pp ha gs gt paragraph-image\">\n<div class=\"hb hc fj hd bh he\" tabindex=\"0\" role=\"button\">\n<div class=\"gs gt qp\"><picture><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/format:webp\/1*1mMnKyLE3AAenZ-q-uiz8Q.png 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/format:webp\/1*1mMnKyLE3AAenZ-q-uiz8Q.png 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/format:webp\/1*1mMnKyLE3AAenZ-q-uiz8Q.png 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/format:webp\/1*1mMnKyLE3AAenZ-q-uiz8Q.png 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/format:webp\/1*1mMnKyLE3AAenZ-q-uiz8Q.png 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/format:webp\/1*1mMnKyLE3AAenZ-q-uiz8Q.png 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/format:webp\/1*1mMnKyLE3AAenZ-q-uiz8Q.png 1400w\" type=\"image\/webp\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" \/><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/1*1mMnKyLE3AAenZ-q-uiz8Q.png 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/1*1mMnKyLE3AAenZ-q-uiz8Q.png 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/1*1mMnKyLE3AAenZ-q-uiz8Q.png 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/1*1mMnKyLE3AAenZ-q-uiz8Q.png 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/1*1mMnKyLE3AAenZ-q-uiz8Q.png 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/1*1mMnKyLE3AAenZ-q-uiz8Q.png 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*1mMnKyLE3AAenZ-q-uiz8Q.png 1400w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" data-testid=\"og\" \/><img decoding=\"async\" class=\"bh hf hg c\" role=\"presentation\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*1mMnKyLE3AAenZ-q-uiz8Q.png\" alt=\"\" width=\"700\" height=\"280\" \/><\/picture><\/div>\n<\/div>\n<\/figure>\n<h2 id=\"96cc\" class=\"ow nt hj bf nu ox oy dy ny oz pa ea oc nf pb pc pd nj pe pf pg nn ph pi pj pk bk\" data-selectable-paragraph=\"\"><strong class=\"al\">Step 3:\u00a0<\/strong>Configuring a Semantic Kernel Agent.<strong class=\"al\">\u00a0We will call this agent as \u201cSalesAgent\u201d.<\/strong><\/h2>\n<p id=\"39fa\" class=\"pw-post-body-paragraph mu mv hj mw b mx oq mz na nb or nd ne nf os nh ni nj ot nl nm nn ou np nq nr gn bk\" data-selectable-paragraph=\"\">We\u2019ll set up a Semantic Kernel agent, which we\u2019ll refer to as\u00a0<strong class=\"mw hk\">\u201cSalesAgent\u201d<\/strong>\u00a0Here\u2019s how to configure it:<\/p>\n<ol class=\"\">\n<li id=\"c391\" class=\"mu mv hj mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr pu pv pw bk\" data-selectable-paragraph=\"\">Add the required package reference in your project<\/li>\n<li id=\"b8ab\" class=\"mu mv hj mw b mx qb mz na nb qc nd ne nf qd nh ni nj qe nl nm nn qf np nq nr pu pv pw bk\" data-selectable-paragraph=\"\">Import the paymentProcessor plugin from your OpenAPI specification:<\/li>\n<\/ol>\n<pre class=\"pl pm pn po pp qg qa qh bp qi bb bk\"><span id=\"d5c5\" class=\"qj nt hj qa b bg qk ql l qm qn\" data-selectable-paragraph=\"\">&lt;PackageReference Include=\"Microsoft.SemanticKernel.Plugins.OpenApi\" Version=\"1.32.0-preview\" \/&gt;<\/span><\/pre>\n<pre class=\"qq qg qa qh bp qi bb bk\"><span id=\"af49\" class=\"qj nt hj qa b bg qk ql l qm qn\" data-selectable-paragraph=\"\"><span class=\"hljs-keyword\">await<\/span> kernel.ImportPluginFromOpenApiAsync(\r\n               pluginName: <span class=\"hljs-string\">\"paymentProcessor\"<\/span>,\r\n               uri: <span class=\"hljs-keyword\">new<\/span> Uri(<span class=\"hljs-string\">\"http:\/\/payment-backend-f4bjgseugsdhddb4.eastus-01.azurewebsites.net\/swagger\/v1\/swagger.json.\"<\/span>),\r\n               executionParameters: <span class=\"hljs-keyword\">new<\/span> OpenApiFunctionExecutionParameters()\r\n                {\r\n                      EnablePayloadNamespacing = <span class=\"hljs-literal\">true<\/span>\r\n                }\r\n            );<\/span><\/pre>\n<p id=\"47ff\" class=\"pw-post-body-paragraph mu mv hj mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk\" data-selectable-paragraph=\"\">Once your application is launched, the\u00a0<code class=\"cx px py pz qa b\">Kernel<\/code>\u00a0object should display the\u00a0<strong class=\"mw hk\">paymentProcessor<\/strong>\u00a0plugin. This confirms the successful integration of the APIs.<\/p>\n<p id=\"5e32\" class=\"pw-post-body-paragraph mu mv hj mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk\" data-selectable-paragraph=\"\"><em class=\"qr\">If you want to learn how to define kernel, checkout my previous\u00a0<\/em><a class=\"af ov\" href=\"https:\/\/medium.com\/@akshaykokane09\/step-by-step-guide-to-develop-ai-multi-agent-system-using-microsoft-semantic-kernel-and-gpt-4o-f5991af40ea6\" rel=\"noopener\"><em class=\"qr\">blogs<\/em><\/a><\/p>\n<figure class=\"pl pm pn po pp ha gs gt paragraph-image\">\n<div class=\"hb hc fj hd bh he\" tabindex=\"0\" role=\"button\">\n<div class=\"gs gt qs\"><picture><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/format:webp\/1*dFWA7plUqPBKWxMtYVTNsQ.png 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/format:webp\/1*dFWA7plUqPBKWxMtYVTNsQ.png 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/format:webp\/1*dFWA7plUqPBKWxMtYVTNsQ.png 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/format:webp\/1*dFWA7plUqPBKWxMtYVTNsQ.png 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/format:webp\/1*dFWA7plUqPBKWxMtYVTNsQ.png 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/format:webp\/1*dFWA7plUqPBKWxMtYVTNsQ.png 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/format:webp\/1*dFWA7plUqPBKWxMtYVTNsQ.png 1400w\" type=\"image\/webp\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" \/><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/1*dFWA7plUqPBKWxMtYVTNsQ.png 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/1*dFWA7plUqPBKWxMtYVTNsQ.png 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/1*dFWA7plUqPBKWxMtYVTNsQ.png 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/1*dFWA7plUqPBKWxMtYVTNsQ.png 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/1*dFWA7plUqPBKWxMtYVTNsQ.png 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/1*dFWA7plUqPBKWxMtYVTNsQ.png 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*dFWA7plUqPBKWxMtYVTNsQ.png 1400w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" data-testid=\"og\" \/><img decoding=\"async\" class=\"bh hf hg c\" role=\"presentation\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*dFWA7plUqPBKWxMtYVTNsQ.png\" alt=\"\" width=\"700\" height=\"541\" \/><\/picture><\/div>\n<\/div>\n<\/figure>\n<p id=\"be57\" class=\"pw-post-body-paragraph mu mv hj mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk\" data-selectable-paragraph=\"\"><strong class=\"mw hk\">Step 4: Run the app<\/strong><\/p>\n<p id=\"de92\" class=\"pw-post-body-paragraph mu mv hj mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk\" data-selectable-paragraph=\"\">Now that everything is set up, deploy your application and begin interacting with the Semantic Kernel agent. The system is designed to handle various tasks seamlessly.<\/p>\n<h1 id=\"35d0\" class=\"ns nt hj bf nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op bk\" data-selectable-paragraph=\"\">Sample Application Overview<\/h1>\n<p id=\"dcba\" class=\"pw-post-body-paragraph mu mv hj mw b mx oq mz na nb or nd ne nf os nh ni nj ot nl nm nn ou np nq nr gn bk\" data-selectable-paragraph=\"\">Here\u2019s a quick summary of the sample application I\u2019ve created. It includes two key plugins:<\/p>\n<ol class=\"\">\n<li id=\"0a25\" class=\"mu mv hj mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr pu pv pw bk\" data-selectable-paragraph=\"\"><strong class=\"mw hk\">Inventory Plugin<\/strong>\nRetrieves the latest inventory details. This plugin resides inside SalesAgent service<\/li>\n<li id=\"ad53\" class=\"mu mv hj mw b mx qb mz na nb qc nd ne nf qd nh ni nj qe nl nm nn qf np nq nr pu pv pw bk\" data-selectable-paragraph=\"\"><strong class=\"mw hk\">PaymentProcessor Plugin<\/strong>\nThis plugin is hosted on another service. Makes API calls hosted on the PaymentProcessor service for handling transactions.<\/li>\n<\/ol>\n<figure class=\"pl pm pn po pp ha gs gt paragraph-image\">\n<div class=\"hb hc fj hd bh he\" tabindex=\"0\" role=\"button\">\n<div class=\"gs gt qp\"><picture><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/format:webp\/1*O9WnocdDWnIStfgFooltlw.png 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/format:webp\/1*O9WnocdDWnIStfgFooltlw.png 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/format:webp\/1*O9WnocdDWnIStfgFooltlw.png 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/format:webp\/1*O9WnocdDWnIStfgFooltlw.png 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/format:webp\/1*O9WnocdDWnIStfgFooltlw.png 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/format:webp\/1*O9WnocdDWnIStfgFooltlw.png 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/format:webp\/1*O9WnocdDWnIStfgFooltlw.png 1400w\" type=\"image\/webp\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" \/><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/1*O9WnocdDWnIStfgFooltlw.png 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/1*O9WnocdDWnIStfgFooltlw.png 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/1*O9WnocdDWnIStfgFooltlw.png 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/1*O9WnocdDWnIStfgFooltlw.png 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/1*O9WnocdDWnIStfgFooltlw.png 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/1*O9WnocdDWnIStfgFooltlw.png 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*O9WnocdDWnIStfgFooltlw.png 1400w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" data-testid=\"og\" \/><img decoding=\"async\" class=\"bh hf hg c\" role=\"presentation\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*O9WnocdDWnIStfgFooltlw.png\" alt=\"\" width=\"700\" height=\"330\" \/><\/picture><\/div>\n<\/div>\n<\/figure>\n<figure class=\"pl pm pn po pp ha gs gt paragraph-image\">\n<div class=\"hb hc fj hd bh he\" tabindex=\"0\" role=\"button\">\n<div class=\"gs gt qt\"><picture><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/format:webp\/1*319qO8R1aeeAQmwRAqeOCA.png 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/format:webp\/1*319qO8R1aeeAQmwRAqeOCA.png 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/format:webp\/1*319qO8R1aeeAQmwRAqeOCA.png 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/format:webp\/1*319qO8R1aeeAQmwRAqeOCA.png 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/format:webp\/1*319qO8R1aeeAQmwRAqeOCA.png 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/format:webp\/1*319qO8R1aeeAQmwRAqeOCA.png 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/format:webp\/1*319qO8R1aeeAQmwRAqeOCA.png 1400w\" type=\"image\/webp\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" \/><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/1*319qO8R1aeeAQmwRAqeOCA.png 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/1*319qO8R1aeeAQmwRAqeOCA.png 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/1*319qO8R1aeeAQmwRAqeOCA.png 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/1*319qO8R1aeeAQmwRAqeOCA.png 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/1*319qO8R1aeeAQmwRAqeOCA.png 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/1*319qO8R1aeeAQmwRAqeOCA.png 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*319qO8R1aeeAQmwRAqeOCA.png 1400w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" data-testid=\"og\" \/><img decoding=\"async\" class=\"bh hf hg c\" role=\"presentation\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*319qO8R1aeeAQmwRAqeOCA.png\" alt=\"\" width=\"700\" height=\"526\" \/><\/picture><\/div>\n<\/div>\n<\/figure>\n<figure class=\"pl pm pn po pp ha gs gt paragraph-image\">\n<div class=\"hb hc fj hd bh he\" tabindex=\"0\" role=\"button\">\n<div class=\"gs gt qu\"><picture><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/format:webp\/1*8QpJnI1hKVNH0Lao1DkEgg.png 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/format:webp\/1*8QpJnI1hKVNH0Lao1DkEgg.png 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/format:webp\/1*8QpJnI1hKVNH0Lao1DkEgg.png 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/format:webp\/1*8QpJnI1hKVNH0Lao1DkEgg.png 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/format:webp\/1*8QpJnI1hKVNH0Lao1DkEgg.png 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/format:webp\/1*8QpJnI1hKVNH0Lao1DkEgg.png 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/format:webp\/1*8QpJnI1hKVNH0Lao1DkEgg.png 1400w\" type=\"image\/webp\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" \/><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/1*8QpJnI1hKVNH0Lao1DkEgg.png 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/1*8QpJnI1hKVNH0Lao1DkEgg.png 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/1*8QpJnI1hKVNH0Lao1DkEgg.png 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/1*8QpJnI1hKVNH0Lao1DkEgg.png 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/1*8QpJnI1hKVNH0Lao1DkEgg.png 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/1*8QpJnI1hKVNH0Lao1DkEgg.png 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*8QpJnI1hKVNH0Lao1DkEgg.png 1400w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" data-testid=\"og\" \/><img decoding=\"async\" class=\"bh hf hg c\" role=\"presentation\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*8QpJnI1hKVNH0Lao1DkEgg.png\" alt=\"\" width=\"700\" height=\"543\" \/><\/picture><\/div>\n<\/div>\n<\/figure>\n<h2 id=\"5053\" class=\"ow nt hj bf nu ox oy dy ny oz pa ea oc nf pb pc pd nj pe pf pg nn ph pi pj pk bk\" data-selectable-paragraph=\"\"><strong class=\"al\">Transaction id confirms that InventoryService\u2019s both APIs were called successfully by our AI Agent!!<\/strong><\/h2>\n<h1 id=\"71c9\" class=\"ns nt hj bf nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op bk\" data-selectable-paragraph=\"\">Conclusion: A Powerful Combination for Streamlined AI Integration<\/h1>\n<p id=\"cd65\" class=\"pw-post-body-paragraph mu mv hj mw b mx oq mz na nb or nd ne nf os nh ni nj ot nl nm nn ou np nq nr gn bk\" data-selectable-paragraph=\"\">The OpenAPI Specification, along with Semantic Kernel and Azure OpenAI, presents a compelling solution for empowering AI agents with real-world capabilities. This combination offers several key benefits:<\/p>\n<ul class=\"\">\n<li id=\"3c1e\" class=\"mu mv hj mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr qv pv pw bk\" data-selectable-paragraph=\"\"><strong class=\"mw hk\">Simplified AI Integration:<\/strong>\u00a0OpenAPI specs provide a standardized way for AI agents to understand and interact with existing APIs, eliminating the need for complex custom integrations.<\/li>\n<li id=\"90f9\" class=\"mu mv hj mw b mx qb mz na nb qc nd ne nf qd nh ni nj qe nl nm nn qf np nq nr qv pv pw bk\" data-selectable-paragraph=\"\"><strong class=\"mw hk\">Enhanced Agent Functionality:<\/strong>\u00a0By leveraging existing APIs, AI agents can perform a wider range of tasks, such as processing payments or managing inventory. This leads to more versatile and helpful AI experiences.<\/li>\n<li id=\"2df2\" class=\"mu mv hj mw b mx qb mz na nb qc nd ne nf qd nh ni nj qe nl nm nn qf np nq nr qv pv pw bk\" data-selectable-paragraph=\"\"><strong class=\"mw hk\">Improved Scalability:<\/strong>\u00a0As your application grows, you can easily integrate new APIs using the OpenAPI, allowing your AI agents to keep pace with evolving functionalities.<\/li>\n<\/ul>\n<p id=\"0120\" class=\"pw-post-body-paragraph mu mv hj mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk\" data-selectable-paragraph=\"\">This blog has provided a step-by-step guide on utilizing OpenAPI specs with Semantic Kernel Agents and Azure OpenAI. By following these steps and embracing this powerful combination, you can empower your AI agents to deliver a more comprehensive and valuable user experience.<\/p>\n<figure class=\"pl pm pn po pp ha\">\n<div class=\"qw qx l fj\">\n<div class=\"qy qz l\"><iframe class=\"fs n gi dw bh\" title=\"Empowering AI Agents with Tools via OpenAPI Specification: Semantic Kernel Agents Framework\" src=\"https:\/\/cdn.embedly.com\/widgets\/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FQr48Cnx75wg%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DQr48Cnx75wg&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FQr48Cnx75wg%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube\" width=\"854\" height=\"480\" frameborder=\"0\" scrolling=\"no\" allowfullscreen=\"allowfullscreen\" data-mce-fragment=\"1\"><\/iframe><\/div>\n<\/div>\n<\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Today the Semantic Kernel team is happy to welcome back our guest author, Akshay Kokane. We will turn it over to him to dive into his recent Medium article on Semantic Kernel. As we advance towards an Agentic Approach in the AI world, I would like to share my insights on how Semantic Kernel can [&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],"tags":[48,63,9],"class_list":["post-3965","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guest-blog","tag-ai","tag-microsoft-semantic-kernel","tag-semantic-kernel"],"acf":[],"blog_post_summary":"<p>Today the Semantic Kernel team is happy to welcome back our guest author, Akshay Kokane. We will turn it over to him to dive into his recent Medium article on Semantic Kernel. As we advance towards an Agentic Approach in the AI world, I would like to share my insights on how Semantic Kernel can [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/posts\/3965","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=3965"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/posts\/3965\/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=3965"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/categories?post=3965"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/tags?post=3965"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}