{"id":41640,"date":"2023-12-18T00:28:53","date_gmt":"2023-12-18T07:28:53","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/premier-developer\/?p=41640"},"modified":"2023-12-14T07:37:47","modified_gmt":"2023-12-14T14:37:47","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-4-local-development-deployme","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-4-local-development-deployme\/","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 4 (local development &#038; deployment details)"},"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-3-demo-app\/\">previous post<\/a>, I detailed how the demo app runs. In this post, let\u2019s talk about some of the techniques &amp; technologies I used to make the demo easy to deploy &amp; run.<\/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\">Project Tye<\/h2>\n<p><a href=\"https:\/\/github.com\/dotnet\/tye\">Project Tye<\/a>\u00a0is an open-source project that makes it easy to stand up a microservice-based application locally.<\/p>\n<p>It is easy to run any individual API or web app, such as running\u00a0<code>dotnet run<\/code>\u00a0or\u00a0<code>npm start<\/code>.<\/p>\n<p>However, when you have a bunch of services, sidecars, etc, it becomes a pain to do this. You could write a shell script to stand them all up, but that is tedious and error-prone.<\/p>\n<p>Instead, Project Tye can be used. With a single command, it can build &amp; run your application locally.<\/p>\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-disabled cbp-has-line-numbers cbp-hl-loaded cbp-ff-loaded\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\">\n<ol>\n<li class=\"shiki light-plus\" tabindex=\"0\"><code><span class=\"line\">tye run<\/span><\/code><\/li>\n<\/ol>\n<\/div>\n<p>It uses a\u00a0<a href=\"https:\/\/github.com\/dotnet\/tye\/blob\/main\/docs\/reference\/schema.md\">YAML config file<\/a>\u00a0(<code>tye.yaml<\/code>\u00a0in the root directory) to describe the relevant services and how to start them, what ports to use etc (Tye can also just assign ports itself).<\/p>\n<p>This is especially useful when you are using sidecar patterns like\u00a0<a href=\"https:\/\/docs.dapr.io\/concepts\/overview\/\">Dapr<\/a>\u00a0to abstract services from each other. You would have to individually run each\u00a0<code>dapr run<\/code>\u00a0command for each service to stand up each sidecar. Instead, Tye will do that for you.<\/p>\n<p>Tye can try and figure out the health &amp; liveness probes itself, but it is better to explicitly specify them.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-2310 lazyloaded\" src=\"https:\/\/jordanbeandev.com\/wp-content\/uploads\/2023\/11\/image-34.png\" alt=\"\" data-src=\"https:\/\/jordanbeandev.com\/wp-content\/uploads\/2023\/11\/image-34.png\" \/><\/figure>\n<p>Tye also provides a convenient dashboard so you can see all the microservices, their status, restart count &amp; logs.<\/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-4-local-development-deployment-details\/\" 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, I detailed how the demo app runs. In this post, let\u2019s talk about some of the techniques &amp; technologies I used to make [&hellip;]<\/p>\n","protected":false},"author":582,"featured_media":41642,"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-41640","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, I detailed how the demo app runs. In this post, let\u2019s talk about some of the techniques &amp; technologies I used to make [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/posts\/41640","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=41640"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/posts\/41640\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/media\/41642"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/media?parent=41640"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/categories?post=41640"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/tags?post=41640"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}