{"id":2020,"date":"2025-08-07T08:48:49","date_gmt":"2025-08-07T06:48:49","guid":{"rendered":"https:\/\/techlance.ddns.net\/?p=2020"},"modified":"2025-08-07T08:49:48","modified_gmt":"2025-08-07T06:49:48","slug":"agentin-kehittaminen-ja-liittaminen-microsoft-365-copilot-chatiin-azure-alustalla","status":"publish","type":"post","link":"https:\/\/techlance.ddns.net\/en\/agentin-kehittaminen-ja-liittaminen-microsoft-365-copilot-chatiin-azure-alustalla\/","title":{"rendered":"Agentin kehitt\u00e4minen ja liitt\u00e4minen Microsoft 365 Copilot Chatiin Azure-alustalla"},"content":{"rendered":"<h3 class=\"wp-block-heading\">Miksi kehitt\u00e4\u00e4 oma agentti?<\/h3>\n\n\n\n<p>Blogikirjoituksen kirjoittaja kohtasi seuraavia rajoitteita valmiissa Copilot Studio -ty\u00f6kaluissa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Agentin testaaminen onnistuu vain Copilot Studion kautta, ei kehitt\u00e4jille tutuilla ty\u00f6kaluilla.<\/li>\n\n\n\n<li>LLM-mallia (kuten GPT-4o) ei voi vapaasti valita orkestroijaksi.<\/li>\n\n\n\n<li>Agentin vastausk\u00e4ytt\u00e4ytyminen eroaa siit\u00e4, mit\u00e4 saataisiin suoraan LLM:\u00e4\u00e4 k\u00e4ytt\u00e4m\u00e4ll\u00e4.<\/li>\n<\/ul>\n\n\n\n<p>N\u00e4ist\u00e4 syist\u00e4 kehitt\u00e4j\u00e4 p\u00e4\u00e4tti rakentaa oman agentin alusta asti, mutta s\u00e4ilytt\u00e4\u00e4 Copilotin k\u00e4ytt\u00f6liittym\u00e4n loppuk\u00e4ytt\u00e4j\u00e4n n\u00e4k\u00f6kulmasta.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Kehitysprosessi: Yleiskatsaus vaiheisiin<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Kehitysymp\u00e4rist\u00f6n asennus<\/h3>\n\n\n\n<p>Projektin kehityksess\u00e4 k\u00e4ytet\u00e4\u00e4n <strong>Visual Studioa<\/strong>, C#-kielt\u00e4 ja <strong>Agent Toolkitia<\/strong>, joka on osa M365 Copilot SDK:ta. Uusi projekti luodaan k\u00e4ytt\u00e4m\u00e4ll\u00e4 <strong>Teams-sovelluksen agenttipohjaa<\/strong>, esimerkiksi <em>Weather Agent<\/em> -mallia. Kehitt\u00e4j\u00e4 m\u00e4\u00e4rittelee t\u00e4ss\u00e4 vaiheessa Azure OpenAI -yhteydet (esim. GPT-4o).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Projektipohjan muokkaus<\/h3>\n\n\n\n<p>Luotu projekti sis\u00e4lt\u00e4\u00e4 kaksi osaa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>M365Agent<\/strong>: Teams-sovelluksen metatiedot ja debug-m\u00e4\u00e4rittelyt.<\/li>\n\n\n\n<li><strong>ASP.NET Core Web API<\/strong> -projekti: itse agenttilogiikka ja yhteys Azure Bot Serviceen.<\/li>\n<\/ul>\n\n\n\n<p>Projektissa hy\u00f6dynnet\u00e4\u00e4n <strong>Semantic Kernel<\/strong> -kirjastoja, joilla hallitaan LLM-pohjaisia keskusteluja.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Agentin paikallinen testaaminen<\/h3>\n\n\n\n<p>Kehityksess\u00e4 k\u00e4ytet\u00e4\u00e4n <strong>Visual Studion debug-ymp\u00e4rist\u00f6\u00e4<\/strong> ja <strong>Development Tunnelia<\/strong>, jonka kautta Azure Bot Service voi kommunikoida paikallisesti ajettuun agenttiin.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Azure Bot Servicen luominen ja yhdist\u00e4minen<\/h3>\n\n\n\n<p>Agentti liitet\u00e4\u00e4n <strong>Azure Bot Serviceen<\/strong>, joka toimii v\u00e4litt\u00e4j\u00e4n\u00e4 Copilotin ja agentin v\u00e4lill\u00e4. T\u00e4m\u00e4 edellytt\u00e4\u00e4:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Entra ID -sovelluksen luomista<\/li>\n\n\n\n<li>Valtakirjojen (Client ID, Tenant ID, Secret) konfigurointia<\/li>\n\n\n\n<li>Messaging Endpointin m\u00e4\u00e4ritt\u00e4mist\u00e4<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">5. Julkaisu Copilot Agent Storeen<\/h3>\n\n\n\n<p>Lopuksi agentti paketoidaan <strong>Teams-sovelluksena<\/strong> ja julkaistaan <strong>Microsoft 365 Copilot Agent Storeen<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>P\u00e4ivit\u00e4 <code>manifest.json<\/code> ja liit\u00e4 Entra ID -tunnukset.<\/li>\n\n\n\n<li>Pakkaa sovellus ZIP-muotoon ja lataa se Teams Admin Centeriin.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Arkkitehtuuri ja tekninen rakenne<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Agentin ytimen\u00e4 toimii Semantic Kernel<\/h3>\n\n\n\n<p>Agentti perustuu <strong>Semantic Kernelin ChatCompletionAgent-luokkaan<\/strong>, joka vastaa keskustelun kontekstista ja LLM-kutsujen hallinnasta. K\u00e4ytt\u00e4j\u00e4n kysymykset ohjataan t\u00e4m\u00e4n ytimen kautta OpenAI-mallille, ja vastaus muotoillaan Adaptive Cardiksi tai tekstiksi.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Azure Bot Service toimii v\u00e4litt\u00e4j\u00e4n\u00e4<\/h3>\n\n\n\n<p>T\u00e4rke\u00e4 huomio on, ett\u00e4 agentti <strong>ei &#8221;asu&#8221; Copilotissa tai Teamsissa<\/strong>, vaan toimii taustapalveluna Azure Bot Servicen kautta. T\u00e4m\u00e4 mahdollistaa agentin p\u00e4ivitt\u00e4misen ilman muutoksia k\u00e4ytt\u00f6liittym\u00e4\u00e4n.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Lopuksi: AgentOps \u2013 DevOps agenttikehitykselle<\/h2>\n\n\n\n<p>Kun agentti on julkaistu, kehityst\u00e4 voidaan jatkaa iteratiivisesti:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ker\u00e4\u00e4m\u00e4ll\u00e4 k\u00e4ytt\u00f6dataa ja telemetriaa<\/li>\n\n\n\n<li>Parantamalla promptteja ja LLM-asetuksia<\/li>\n\n\n\n<li>Laajentamalla toiminnallisuuksia uusilla kyvyill\u00e4<\/li>\n<\/ul>\n\n\n\n<p>T\u00e4t\u00e4 jatkuvaa kehitysprosessia voidaan kutsua <strong>AgentOpsiksi<\/strong>, joka viittaa DevOpsin kaltaiseen k\u00e4yt\u00e4nt\u00f6\u00f6n teko\u00e4lyagenttien hallinnassa ja optimoinnissa.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-techlance wp-block-embed-techlance\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"wisnUMV8SM\"><a href=\"https:\/\/techlance.ddns.net\/en\/keinoaly\/\">Keino\u00e4ly<\/a><\/blockquote><iframe class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8221;Keino\u00e4ly&#8221; &#8212; Techlance\" src=\"https:\/\/techlance.ddns.net\/keinoaly\/embed\/#?secret=enzPvTFZYZ#?secret=wisnUMV8SM\" data-secret=\"wisnUMV8SM\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>","protected":false},"excerpt":{"rendered":"<p>Miksi kehitt\u00e4\u00e4 oma agentti? Blogikirjoituksen kirjoittaja kohtasi seuraavia rajoitteita valmiissa Copilot Studio -ty\u00f6kaluissa: N\u00e4ist\u00e4 syist\u00e4 kehitt\u00e4j\u00e4 p\u00e4\u00e4tti rakentaa oman agentin [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[19,24,20,32],"tags":[35,14,26,25,12,33],"class_list":["post-2020","post","type-post","status-publish","format-standard","hentry","category-azure","category-keinoaly","category-powerplatform","category-tekoaly","tag-agentops","tag-azure","tag-copilot","tag-ai","tag-m365","tag-tekoaly"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/techlance.ddns.net\/en\/wp-json\/wp\/v2\/posts\/2020","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/techlance.ddns.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techlance.ddns.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techlance.ddns.net\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/techlance.ddns.net\/en\/wp-json\/wp\/v2\/comments?post=2020"}],"version-history":[{"count":0,"href":"https:\/\/techlance.ddns.net\/en\/wp-json\/wp\/v2\/posts\/2020\/revisions"}],"wp:attachment":[{"href":"https:\/\/techlance.ddns.net\/en\/wp-json\/wp\/v2\/media?parent=2020"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techlance.ddns.net\/en\/wp-json\/wp\/v2\/categories?post=2020"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techlance.ddns.net\/en\/wp-json\/wp\/v2\/tags?post=2020"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}