{"id":41636,"date":"2023-12-18T00:15:00","date_gmt":"2023-12-18T07:15:00","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/premier-developer\/?p=41636"},"modified":"2023-12-14T07:23:09","modified_gmt":"2023-12-14T14:23:09","slug":"how-to-enhance-your-chatbot-so-it-can-retrieve-data-from-multiple-data-sources-orchestrate-its-own-plan-with-c-semantic-kernel-planner-azure-openai-part-3-demo-app","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/premier-developer\/how-to-enhance-your-chatbot-so-it-can-retrieve-data-from-multiple-data-sources-orchestrate-its-own-plan-with-c-semantic-kernel-planner-azure-openai-part-3-demo-app\/","title":{"rendered":"How to enhance your chatbot so it can retrieve data from multiple data sources &#038; orchestrate its own plan with C# Semantic Kernel, planner &#038; Azure OpenAI \u2013 part 3 (demo app)"},"content":{"rendered":"<p>In this multi-part series,\u00a0<a href=\"https:\/\/www.linkedin.com\/in\/jordan-bean\/\" target=\"_blank\" rel=\"noopener\">Jordan Bean<\/a>\u00a0shares how to enhance a chatbot to retrieve data from multiple data sources and orchestrate plans with C# Semantic Kernel, planner, and Azure Open AI.<\/p>\n<hr \/>\n<p>In the\u00a0<a href=\"https:\/\/jordanbeandev.com\/how-to-build-your-own-chatbot-using-c-semantic-kernel-azure-openai-part-2\/\">previous post<\/a>, we talked about the implementation details of how the demo app works &amp; how to set up\u00a0<a href=\"https:\/\/learn.microsoft.com\/en-us\/semantic-kernel\/overview\/\">Semantic Kernel<\/a>, with the\u00a0<code><a href=\"https:\/\/learn.microsoft.com\/en-us\/semantic-kernel\/ai-orchestration\/planners\/?tabs=Csharp#what-is-planner\">StepwisePlanner<\/a><\/code>\u00a0and\u00a0<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/ai-services\/openai\/overview\">Azure OpenAI<\/a>. Now that you understand the code, let\u2019s look at the demo application.<\/p>\n<p>Here is the link to the\u00a0<a href=\"https:\/\/github.com\/jordanbean-msft\/semantic-kernel-sleeping-bag\">GitHub repo<\/a>.<\/p>\n<h2 class=\"wp-block-heading\">Use case<\/h2>\n<p>As a reminder, we are building a customer support chatbot for our fictional outdoor sporting equipment company. We want to be able to answer common customer support questions by utilizing our internal data sources.<\/p>\n<h3 class=\"wp-block-heading\">Example query<\/h3>\n<blockquote class=\"wp-block-quote\"><p>Will my sleeping bag work for my trip to Patagonia next month?<\/p><\/blockquote>\n<h3 class=\"wp-block-heading\">Fictional data sources<\/h3>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" class=\"wp-image-2249 lazyloaded\" src=\"https:\/\/jordanbeandev.com\/wp-content\/uploads\/2023\/11\/image-1-1024x164.png\" alt=\"\" data-src=\"https:\/\/jordanbeandev.com\/wp-content\/uploads\/2023\/11\/image-1-1024x164.png\" \/><\/figure>\n<h2 class=\"wp-block-heading\">Demo app<\/h2>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" class=\"wp-image-2283 ls-is-cached lazyloaded\" src=\"https:\/\/jordanbeandev.com\/wp-content\/uploads\/2023\/11\/image-22-1024x537.png\" alt=\"\" data-src=\"https:\/\/jordanbeandev.com\/wp-content\/uploads\/2023\/11\/image-22-1024x537.png\" \/><figcaption class=\"wp-element-caption\">Demo app<\/figcaption><\/figure>\n<p>This demo app allows the user to make a request. That request is then run through the Sematic Kernel StepwisePlanner. The plan that is generated is then executed and the response is sent back to the user.<\/p>\n<p>In this example, we are explicitly showing the planner steps to demonstrate the execution plan. In the real world, you wouldn\u2019t show the execution plan (since this reveals internal implementation details such as the data sources used, their inputs &amp; responses, errors, etc).<\/p>\n<p>We can see that the planner made a plan with 6 steps. Let\u2019s go through each one in detail.<\/p>\n<p>Continue reading this post, as well as the full series on\u00a0<a href=\"https:\/\/jordanbeandev.com\/how-to-build-your-own-chatbot-using-c-semantic-kernel-azure-openai-part-3-demo-app\/\" target=\"_blank\" rel=\"noopener\">Jordan\u2019s dev blog<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this multi-part series,\u00a0Jordan Bean\u00a0shares how to enhance a chatbot to retrieve data from multiple data sources and orchestrate plans with C# Semantic Kernel, planner, and Azure Open AI. In the\u00a0previous post, we talked about the implementation details of how the demo app works &amp; how to set up\u00a0Semantic Kernel, with the\u00a0StepwisePlanner\u00a0and\u00a0Azure OpenAI. Now that [&hellip;]<\/p>\n","protected":false},"author":582,"featured_media":41638,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[14,1],"tags":[10650,56,10651],"class_list":["post-41636","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai","category-permierdev","tag-azure-openai","tag-bots","tag-semantic-kernel"],"acf":[],"blog_post_summary":"<p>In this multi-part series,\u00a0Jordan Bean\u00a0shares how to enhance a chatbot to retrieve data from multiple data sources and orchestrate plans with C# Semantic Kernel, planner, and Azure Open AI. In the\u00a0previous post, we talked about the implementation details of how the demo app works &amp; how to set up\u00a0Semantic Kernel, with the\u00a0StepwisePlanner\u00a0and\u00a0Azure OpenAI. Now that [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/posts\/41636","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/users\/582"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/comments?post=41636"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/posts\/41636\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/media\/41638"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/media?parent=41636"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/categories?post=41636"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/tags?post=41636"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}