﻿
{"id":28048,"date":"2025-10-14T22:44:27","date_gmt":"2025-10-14T22:44:27","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=28048"},"modified":"2025-10-14T22:44:27","modified_gmt":"2025-10-14T22:44:27","slug":"semantic-kernel-ile-multi-agent-orchestration","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/semantic-kernel-ile-multi-agent-orchestration\/","title":{"rendered":"Semantic Kernel \u0130le Multi-agent Orchestration"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde, Semantic Kernel&#8217;da Multi-agent Orchestration yakla\u015f\u0131m\u0131 ile tek bir yapay zek\u00e2 agent&#8217;\u0131n\u0131n \u00f6tesine ge\u00e7ip, birden fazla agent&#8217;\u0131n g\u00f6rev payla\u015f\u0131m\u0131 yaparak nas\u0131l birlikte \u00e7al\u0131\u015fma yapabileceklerini teorik olarak de\u011ferlendiriyor olaca\u011f\u0131z.<\/p>\n<h4>Multi-agent Orchestration Nedir?<\/h4>\n<p>Multi-agent Orchestration, birden fazla yapay zek\u00e2 agent&#8217;\u0131n\u0131n veya yaz\u0131l\u0131m bile\u015feninin koordineli bir bi\u00e7imde \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 ve y\u00f6netilmesi s\u00fcrecidir. <\/p>\n<p><em>Neden \u00f6nemlidir?<\/em><\/p>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn karma\u015f\u0131k ve \u00e7ok y\u00f6nl\u00fc ihtiya\u00e7lar\u0131, i\u015f s\u00fcre\u00e7leri ve senaryolar\u0131nda geleneksel tek agent&#8217;l\u0131 sistemler t\u00fcm g\u00f6revlere yetenekleri a\u00e7\u0131s\u0131ndan s\u0131n\u0131rl\u0131 kald\u0131klar\u0131ndan dolay\u0131 yeti\u015fememektedirler. Her biri, \u00f6zel becerilere ve rollere sahip olan ve tek bir alana odaklanm\u0131\u015f ve o alanda uzmanla\u015fm\u0131\u015f birden fazla agent&#8217;\u0131n bir araya gelip \u00e7al\u0131\u015fmas\u0131, \u00e7ok y\u00f6nl\u00fc ihtiya\u00e7lar\u0131n giderilmesi a\u00e7\u0131s\u0131ndan daha verimli ve g\u00fcvenilir olmaktad\u0131r. \u00d6zellikle finans analizleri, t\u0131bbi te\u015fhisler, strateji planlamalar\u0131 vs. gibi karma\u015f\u0131k ve hassas s\u00fcre\u00e7lerde farkl\u0131 perspektifler ve g\u00f6rev b\u00f6l\u00fc\u015f\u00fcmleri kritik arz etmektedir. Bu tarz durumlarda \u00f6zellikle alan\u0131nda uzman ve sadece alan\u0131n\u0131n bilin\u00e7 ve sorumlulu\u011fuyla hareket eden agent&#8217;lar\u0131n bir araya getirilip, gerekirse isti\u015fare ortam\u0131n\u0131n kurulmas\u0131 ihtiyac\u0131na kar\u015f\u0131 ger\u00e7ek bir \u00e7\u00f6z\u00fcm sunmaktad\u0131r. \u0130\u015fte, orkestrasyon sayesinde birden fazla agent \u00e7at\u0131\u015fmaks\u0131z\u0131n ve bilgi kaybetmeksizin birlikte \u00e7al\u0131\u015fabilmekte ve s\u00fcreci t\u0131pk\u0131 insanlar gibi (ve insan ekipleri gibi) y\u00fcr\u00fcterek, \u00e7al\u0131\u015fma sergileyebilmektedirler.<\/p>\n<h4>Temel \u00d6zellikleri Nelerdir?<\/h4>\n<p>Multi-agent Orchestration yakla\u015f\u0131m\u0131, agent&#8217;lar aras\u0131nda \u015fu temel \u00f6zelliklere dayanmaktad\u0131r;<\/p>\n<ul>\n<li><strong><em><u>Rol Tabanl\u0131 Agent&#8217;lar<\/u><\/em><\/strong><br \/>\nHer bir agent; veri analizi, planlama, i\u00e7erik \u00fcretimi vs. gibi belirli bir uzmanl\u0131k alan\u0131na odakl\u0131d\u0131r.\n<\/li>\n<li><strong><em><u>Koordinasyon Katman\u0131<\/u><\/em><\/strong><br \/>\nSemantic Kernel yahut <a href=\"https:\/\/www.gencayyildiz.com\/blog\/autogen-nedir-derinlemesine-teorik-inceleyelim\/\" target=\"_blank\">AutoGen<\/a> gibi ara\u00e7lar, bu agent&#8217;lar\u0131n g\u00f6rev s\u0131ras\u0131n\u0131, bilgi ak\u0131\u015f\u0131n\u0131 ve \u00f6nceliklerini y\u00f6netmekten sorumludurlar.\n<\/li>\n<li><strong><em><u>Context Payla\u015f\u0131m\u0131<\/u><\/em><\/strong><br \/>\nAgent&#8217;lar aras\u0131nda payla\u015f\u0131lan context sayesinde bilgi kayb\u0131 olmadan ileti\u015fim kurulmaktad\u0131r.\n<\/li>\n<li><strong><em><u>Esneklik<\/u><\/em><\/strong><br \/>\nAgent&#8217;lar gerekti\u011finde dinamik olarak eklenip, \u00e7\u0131kar\u0131labilmektedirler.\n<\/li>\n<\/ul>\n<h4>Orchestration Desenleri<\/h4>\n<p>Multi-agent Orchestration i\u00e7in farkl\u0131 i\u015fbirli\u011fi senaryolar\u0131na \u00f6zel d\u00fc\u015f\u00fcn\u00fclm\u00fc\u015f ve tasarlanm\u0131\u015f \u00e7e\u015fitli pattern&#8217;lar mevcuttur. Bu pattern&#8217;lar\u0131n davran\u0131\u015flar\u0131, Semantic Kernel&#8217;\u0131n bir par\u00e7as\u0131 olarak varl\u0131k g\u00f6stermekte ve kolayca extend edilip, \u00f6zelle\u015ftirilebilir bir vaziyette bizlere sunulmaktad\u0131r. \u015eimdi gelin bu pattern&#8217;lar\u0131n davran\u0131\u015flar\u0131n\u0131 tek tek hem teorik hem de pratik a\u00e7\u0131lardan de\u011ferlendirmeye ba\u015flayal\u0131m.<\/p>\n<blockquote style=\"font-size:12px;line-height: 1.6;color:#3b8dbd;\"><p><em>Tabi, orchestration desenlerini .NET \u00fczerinde deneyimleyebilmek i\u00e7in \u00f6ncelikle a\u015fa\u011f\u0131da bahsedilen birka\u00e7 k\u00fct\u00fcphanenin y\u00fcklenmesi gerekmektedir.<\/p>\n<ul>\n<li><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.SemanticKernel\" target=\"_blank\">Microsoft.SemanticKernel<\/a><\/li>\n<li><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.SemanticKernel.Agents.Core\" target=\"_blank\">Microsoft.SemanticKernel.Agents.Core<\/a><br \/>\n<span style=\"font-size:11px;color:black;\">Semantic Kernel i\u00e7inde agent tabanl\u0131 sistemler olu\u015fturmak i\u00e7in temel s\u0131n\u0131flar\u0131 ve i\u015flevleri sa\u011flayan bir k\u00fct\u00fcphanedir.<\/span>\n<\/li>\n<li><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.SemanticKernel.Agents.Orchestration\" target=\"_blank\">Microsoft.SemanticKernel.Agents.Orchestration<\/a><br \/>\n<span style=\"font-size:11px;color:black;\">Birden fazla agent&#8217;\u0131n koordinasyonunu ve i\u015f ak\u0131\u015f\u0131n\u0131 y\u00f6netmek i\u00e7in kullan\u0131lan k\u00fct\u00fcphanedir. Agent&#8217;lar aras\u0131 ileti\u015fim ve g\u00f6rev s\u0131ralamas\u0131n\u0131 d\u00fczenlemektedir.<\/span>\n<\/li>\n<li><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.SemanticKernel.Agents.Runtime.InProcess\" target=\"_blank\">Microsoft.SemanticKernel.Agents.Runtime.InProcess<\/a><br \/>\n<span style=\"font-size:11px;color:black;\">Agent&#8217;lar\u0131n ayn\u0131 s\u00fcre\u00e7 (process) i\u00e7inde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayan bir runtime ortam\u0131 sunmaktad\u0131r. Hafif ve yerel uygulamalar i\u00e7in optimize edilmi\u015ftir.<\/span>\n<\/li>\n<\/ul>\n<p><\/em><\/p><\/blockquote>\n<ul style=\"font-size:14px;\">\n<li>\n<h5>Sequential Orchestration<\/h5>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration.png\" alt=\"Semantic Kernel \u0130le Multi-agent Orchestration\" width=\"339\" height=\"594\" class=\"alignleft size-full wp-image-28054\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration.png 339w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-171x300.png 171w\" sizes=\"auto, (max-width: 339px) 100vw, 339px\" \/><\/a>\u0130lk de\u011ferlendirece\u011fimiz davran\u0131\u015f pattern&#8217;lar aras\u0131ndaki en basit ve anla\u015f\u0131l\u0131r olan Sequential Orchestration&#8217;d\u0131r. Bu pattern&#8217;da, agent&#8217;lar aras\u0131nda s\u0131ral\u0131 bir i\u015flem hatt\u0131 olu\u015fturmam\u0131z sa\u011flanmaktad\u0131r.<\/p>\n<p>B\u00f6ylece;<br \/>\n&#8211; Agent&#8217;lar s\u0131rayla (sequential) \u00e7al\u0131\u015f\u0131rlar.<br \/>\n&#8211; Bir agent&#8217;\u0131n \u00e7\u0131kt\u0131s\u0131, bir sonraki agent&#8217;\u0131n girdisi olur.<br \/>\n&#8211; S\u00fcre\u00e7, zincirleme bir ak\u0131\u015f (pipeline) gibi ilerler.<\/p>\n<p>Sequential Orchestration, basit ve deterministik bir ak\u0131\u015f sa\u011flar. Yani bir i\u015flem, s\u00fcrekli ayn\u0131 y\u00f6nde ayn\u0131 servisler \u00fczerinden ger\u00e7ekle\u015ftirilir. Genellikle metin i\u015fleme, veri haz\u0131rlama ve i\u00e7erik \u00fcretimi gibi ak\u0131\u015flarda bu davran\u0131\u015f tercih edilmektedir.<\/p>\n<p><strong><em>Nas\u0131l \u00e7al\u0131\u015fmaktad\u0131r?<\/em><\/strong><br \/>\nKullan\u0131c\u0131 veya sistem bir hedef belirler.<br \/>\n&#8211; 1. Ad\u0131m : Agent 1, ilk g\u00f6revi i\u015fler ve \u00e7\u0131kt\u0131y\u0131 \u00fcretir.<br \/>\n&#8211; 2. Ad\u0131m : Agent 2, Agent 1&#8217;in \u00fcretti\u011fi \u00e7\u0131kt\u0131y\u0131 al\u0131r ve g\u00f6revi do\u011frultusunda i\u015fler.<br \/>\n&#8211; 3. Ad\u0131m : Agent 3, Agent 2&#8217;nin \u00fcretti\u011fi \u00e7\u0131kt\u0131y\u0131 al\u0131r ve g\u00f6revi do\u011frultusunda i\u015fler.<br \/>\n&#8211; Sonu\u00e7 : T\u00fcm  ad\u0131mlar tamamland\u0131\u011f\u0131nda, finalde \u00e7\u0131kt\u0131 kullan\u0131c\u0131ya sunulur.<\/p>\n<p>Misal olarak yukar\u0131daki \u015femaya g\u00f6z atarsak e\u011fer; bir belge \u00f6zetleme, \u00e7evirme ve neticeyi kalite ama\u00e7l\u0131 kontrol etme s\u00fcrecinin \u00f6rneklendirildi\u011fini g\u00f6rmekteyiz. T\u00fcm bu s\u00fcre\u00e7 alan\u0131nda uzman, sadece o alana odaklanm\u0131\u015f agent&#8217;lar taraf\u0131ndan, s\u0131ral\u0131 bir \u015fekilde ve s\u00fcrekli ayn\u0131 s\u0131rada olacak \u015fekilde Sequential Orchestration yakla\u015f\u0131m\u0131yla y\u00fcr\u00fct\u00fclmektedir.<\/p>\n<details>\n<summary style=\"color:red;\">\u00d6rnek kullan\u0131m\u0131 g\u00f6rmek i\u00e7in t\u0131klay\u0131n\u0131z<\/summary>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing Microsoft.SemanticKernel;\r\nusing Microsoft.SemanticKernel.Agents;\r\nusing Microsoft.SemanticKernel.Agents.Orchestration;\r\nusing Microsoft.SemanticKernel.Agents.Orchestration.Sequential;\r\nusing Microsoft.SemanticKernel.Agents.Runtime.InProcess;\r\nusing Microsoft.SemanticKernel.ChatCompletion;\r\nusing OpenAI;\r\nusing System.ClientModel;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddKernel();\r\nbuilder.Services.AddOpenAIChatCompletion(\r\n    modelId: &quot;qwen\/qwen3-next-80b-a3b-instruct&quot;,\r\n    openAIClient: new OpenAIClient(\r\n            credential: new ApiKeyCredential(key: &quot;sk-or-v1-5c09ffdba5961*******7547123d0be39&quot;),\r\n            options: new OpenAIClientOptions()\r\n            {\r\n                Endpoint = new Uri(&quot;https:\/\/openrouter.ai\/api\/v1&quot;)\r\n            }\r\n        )\r\n    );\r\nvar app = builder.Build();\r\n\r\napp.MapGet(&quot;\/run&quot;, async (Kernel kernel) =&gt;\r\n{\r\n    ChatCompletionAgent coder = new ChatCompletionAgent\r\n    {\r\n        Name = &quot;coderAgent&quot;,\r\n        Instructions = &quot;Sen kod yaz\u0131yorsun.&quot;,\r\n        Kernel = kernel,\r\n        Description = &quot;Kod yazan agent.&quot;\r\n    };\r\n\r\n    ChatCompletionAgent analyst = new ChatCompletionAgent\r\n    {\r\n        Name = &quot;analyst&quot;,\r\n        Instructions = &quot;Sen yaz\u0131lan kodu analiz ediyorsun.&quot;,\r\n        Kernel = kernel,\r\n        Description = &quot;Kod analiz eden agent.&quot;\r\n    };\r\n\r\n\r\n    SequentialOrchestration orchestration = new(coder, analyst)\r\n    {\r\n        LoggerFactory = LoggerFactory.Create(builder =&gt; builder.AddConsole()),\r\n        StreamingResponseCallback = async (response, final) =&gt;\r\n        {\r\n            if (response.AuthorName != null)\r\n            {\r\n                Console.WriteLine($&quot;\\n&#x5B;{response.AuthorName}]: {response.Content}&quot;);\r\n            }\r\n            else\r\n            {\r\n                Console.WriteLine($&quot;&#x5B;System]: {response.Content}&quot;);\r\n            }\r\n        }\r\n    };\r\n\r\n    InProcessRuntime runtime = new();\r\n    await runtime.StartAsync();\r\n\r\n    OrchestrationResult&lt;string&gt; result = await orchestration.InvokeAsync(\r\n        &quot;1'den 100'e kadar olan t\u00fcm say\u0131lar\u0131 ekrana yazan C# kodunu yaz ve analiz ederek de\u011ferlendir.&quot;,\r\n        runtime);\r\n\r\n    string text = await result.GetValueAsync(TimeSpan.FromSeconds(120));\r\n    await runtime.RunUntilIdleAsync();\r\n\r\n    return text;\r\n});\r\n\r\napp.Run();\r\n<\/pre>\n<\/div>\n<\/details>\n<\/li>\n<li>\n<h5>Concurrent Orchestration<\/h5>\n<p>Concurrent Orchestration, birden fazla agent&#8217;\u0131n e\u015fzamanl\u0131 (concurrent) olarak ayn\u0131 g\u00f6rev \u00fczerinde \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131n\u0131 ve g\u00f6revlerin paralel bi\u00e7imde y\u00fcr\u00fct\u00fclmesini sa\u011flayan bir davran\u0131\u015f sa\u011flamaktad\u0131r. Her agent, girdiyi ba\u011f\u0131ms\u0131z olarak i\u015fleyecek ve sonu\u00e7lar\u0131 toplayarak bir araya getirecektir.<\/p>\n<p>Bu yakla\u015f\u0131m t\u0131pk\u0131 insanlar aras\u0131nda yap\u0131lan beyin f\u0131rt\u0131nas\u0131, topluluk muhakemesi yahut oylama sistemi gibi farkl\u0131 bak\u0131\u015f a\u00e7\u0131lar\u0131n\u0131n veya \u00e7\u00f6z\u00fcmlerinin de\u011ferli oldu\u011fu senaryolar i\u00e7in olduk\u00e7a uygundur.<\/p>\n<p>Sequential pattern&#8217;da i\u015fler s\u0131rayla yap\u0131l\u0131rken, concurrent yakla\u015f\u0131m\u0131nda ise agent&#8217;lar ayn\u0131 anda farkl\u0131 i\u015fleri \u00fcstlenebilmektedirler.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-1.png\" alt=\"Semantic Kernel \u0130le Multi-agent Orchestration\" width=\"744\" height=\"350\" class=\"aligncenter size-full wp-image-28056\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-1.png 744w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-1-300x141.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-1-520x245.png 520w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-1-720x340.png 720w\" sizes=\"auto, (max-width: 744px) 100vw, 744px\" \/><\/a>Yukar\u0131daki \u015femay\u0131 incelersek, birden fazla agent ile mevcut bir soruna kar\u015f\u0131 farkl\u0131 \u00e7\u00f6z\u00fcmler \u00fcretildi\u011fini ve nihai olarak da \u00fcretilen sonu\u00e7lar\u0131n toplanarak analiz edildi\u011fini g\u00f6rmekteyiz. Bunun d\u0131\u015f\u0131nda, agent&#8217;lar\u0131n ayn\u0131 anda birden fazla i\u015fi de payla\u015fabilecekleri bir senaryo \u00fczerinden davran\u0131\u015f da sergilenebilece\u011finin bilincinde olunmal\u0131d\u0131r.<\/p>\n<p><strong><em>\u00c7al\u0131\u015fma mant\u0131\u011f\u0131 :<\/em><\/strong><br \/>\n&#8211; <em>G\u00f6rev Da\u011f\u0131t\u0131m\u0131 :<\/em> Orkestrat\u00f6r, farkl\u0131 agent&#8217;lara ayn\u0131 anda g\u00f6revler atar.<br \/>\n&#8211; <em>E\u015fzamanl\u0131 \u00c7al\u0131\u015fma :<\/em> Agent&#8217;lar birbirlerinden ba\u011f\u0131ms\u0131z \u015fekilde kendi g\u00f6revlerini yerine getirirler.<br \/>\n&#8211; <em>Sonu\u00e7 Toplama :<\/em> Orkestrat\u00f6r, bu agent&#8217;lar\u0131n \u00fcretti\u011fi \u00e7\u0131kt\u0131lar\u0131 birle\u015ftirir veya en iyisini ge\u00e7er.<br \/>\n&#8211; <em>Final \u00c7\u0131kt\u0131 :<\/em> Kullan\u0131c\u0131ya b\u00fct\u00fcnle\u015fik nihai sonu\u00e7 sunulur.<\/p>\n<details>\n<summary style=\"color:red;\">\u00d6rnek kullan\u0131m\u0131 g\u00f6rmek i\u00e7in t\u0131klay\u0131n\u0131z<\/summary>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing Microsoft.SemanticKernel;\r\nusing Microsoft.SemanticKernel.Agents;\r\nusing Microsoft.SemanticKernel.Agents.Orchestration;\r\nusing Microsoft.SemanticKernel.Agents.Orchestration.Concurrent;\r\nusing Microsoft.SemanticKernel.Agents.Runtime.InProcess;\r\nusing OpenAI;\r\nusing System.ClientModel;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddKernel();\r\nbuilder.Services.AddOpenAIChatCompletion(\r\n    modelId: &quot;qwen\/qwen3-next-80b-a3b-instruct&quot;,\r\n    openAIClient: new OpenAIClient(\r\n            credential: new ApiKeyCredential(key: &quot;sk-or-v1-5c09ff***7547123d0be39&quot;),\r\n            options: new OpenAIClientOptions()\r\n            {\r\n                Endpoint = new Uri(&quot;https:\/\/openrouter.ai\/api\/v1&quot;)\r\n            }\r\n        )\r\n    );\r\nvar app = builder.Build();\r\n\r\napp.MapGet(&quot;\/run&quot;, async (Kernel kernel) =&gt;\r\n{\r\n    ChatCompletionAgent physicist = new ChatCompletionAgent\r\n    {\r\n        Name = &quot;physicist&quot;,\r\n        Instructions = &quot;Fizik konusunda uzmans\u0131n. Sorulara fizik perspektifinden cevap veriyorsun.&quot;,\r\n        Kernel = kernel,\r\n        Description = &quot;Fizik konusunda uzman agent.&quot;\r\n    };\r\n\r\n    ChatCompletionAgent chemist = new ChatCompletionAgent\r\n    {\r\n        Name = &quot;chemist&quot;,\r\n        Instructions = &quot;Kimya konusunda uzmans\u0131n. Sorulara kimya perspektifinden cevap veriyorsun.&quot;,\r\n        Kernel = kernel,\r\n        Description = &quot;Kimya konusunda uzman agent.&quot;\r\n    };\r\n\r\n\r\n    ConcurrentOrchestration orchestration = new(physicist, chemist)\r\n    {\r\n        LoggerFactory = LoggerFactory.Create(builder =&gt; builder.AddConsole()),\r\n        StreamingResponseCallback = async (response, final) =&gt;\r\n        {\r\n            if (response.AuthorName != null)\r\n            {\r\n                Console.WriteLine($&quot;\\n&#x5B;{response.AuthorName}]: {response.Content}&quot;);\r\n            }\r\n            else\r\n            {\r\n                Console.WriteLine($&quot;&#x5B;System]: {response.Content}&quot;);\r\n            }\r\n        }\r\n    };\r\n\r\n    InProcessRuntime runtime = new();\r\n    await runtime.StartAsync();\r\n\r\n    OrchestrationResult&lt;string&#x5B;]&gt; result = await orchestration.InvokeAsync(\r\n        &quot;S\u0131cakl\u0131k nedir?&quot;,\r\n        runtime);\r\n\r\n    string&#x5B;] texts = await result.GetValueAsync(TimeSpan.FromSeconds(120));\r\n    await runtime.RunUntilIdleAsync();\r\n\r\n    return string.Join(&quot; | &quot;, texts);\r\n});\r\n\r\napp.Run();\r\n<\/pre>\n<\/div>\n<\/details>\n<\/li>\n<li>\n<h5>Group Chat Orchestration<\/h5>\n<p>Bu davran\u0131\u015fta ise iste\u011fe ba\u011fl\u0131 olarak bir insan kat\u0131l\u0131mc\u0131s\u0131n\u0131 da i\u00e7erebilecek \u015fekilde agent&#8217;lar aras\u0131nda i\u015fbirli\u011fine dayal\u0131 bir konu\u015fma ve isti\u015fare modeli ortaya koyulmaktad\u0131r. Bu modelde, t\u00fcm sohbet ak\u0131\u015f\u0131n\u0131 koordine edecek olan bir grup sohbet y\u00f6neticisi bulunmaktad\u0131r. Bu y\u00f6netici, hangi agent&#8217;\u0131n bir sonraki ad\u0131mda yan\u0131t vermesi gerekti\u011fini ve ne zaman insan girdisi istenebilece\u011fini belirlemektedir. Klasik toplant\u0131lar\u0131, tart\u0131\u015fmalar\u0131 ve i\u015fbirli\u011fine dayal\u0131 problem \u00e7\u00f6zme s\u00fcre\u00e7lerini sim\u00fcle etmek i\u00e7in olduk\u00e7a g\u00fc\u00e7l\u00fc bir pattern&#8217;d\u0131r.<\/p>\n<p>Group Chat&#8217;te, agent&#8217;lar e\u015fit kat\u0131l\u0131mc\u0131lar gibi davranmaktad\u0131rlar. Agent&#8217;lar aras\u0131ndaki sohbet ve isti\u015fare s\u00fcreci ad\u0131 \u00fczerinde bir &#8216;sohbet odas\u0131&#8217; havas\u0131nda cereyan etmektedir. Esas\u0131nda bu bir ortak ileti\u015fim kanal\u0131d\u0131r desek yanl\u0131\u015f olmaz. Bu kanal\/sohbet odas\u0131 \u00fczerinde agent&#8217;lar fikir \u00fcretebilir, birbirlerinin \u00e7\u0131kt\u0131s\u0131na tepki verebilir, aralar\u0131nda tart\u0131\u015fabilir ve m\u00fczakere de bulunabilirler. Orkestrat\u00f6r <span style=\"font-size:12px;\">(bu da bir nevi moderat\u00f6r olan agent&#8217;t\u0131r)<\/span>, gerekti\u011finde s\u00fcreci y\u00f6nlendirir ve nihai \u00e7\u0131kt\u0131y\u0131 derler.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-2.png\" alt=\"Semantic Kernel \u0130le Multi-agent Orchestration\" width=\"743\" height=\"379\" class=\"aligncenter size-full wp-image-28058\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-2.png 743w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-2-300x153.png 300w\" sizes=\"auto, (max-width: 743px) 100vw, 743px\" \/><\/a><strong><em>\u00c7al\u0131\u015fma mant\u0131\u011f\u0131 :<\/em><\/strong><br \/>\n&#8211; <em>Girdi Payla\u015f\u0131m\u0131 :<\/em> Kullan\u0131c\u0131dan gelen g\u00f6rev\/mesaj t\u00fcm agent&#8217;larla payla\u015f\u0131l\u0131r.<br \/>\n&#8211; <em>Sohbet A\u015famas\u0131 :<\/em> Agent&#8217;lar sanki bir &#8216;grup sohbetinde&#8217; imi\u015f gibi birbirlerine yan\u0131t \u00fcretir, fikirlerini s\u00f6yler veya ele\u015ftiride bulunurlar.<br \/>\n&#8211; <em>Moderasyon :<\/em> Bir orkestrat\u00f6r sorumlulu\u011funu \u00fcstlenmi\u015f olan agent tart\u0131\u015fmay\u0131 d\u00fczenler. Olas\u0131 \u00e7at\u0131\u015fmalar\u0131 \u00e7\u00f6zmek ve konuyu odakta tutmak i\u00e7in \u00e7aba sarf eder.<br \/>\n&#8211; <em>Sonu\u00e7 Toplama :<\/em> En iyi fikirler, \u00e7\u00f6z\u00fcmler veya \u00f6zetler derlenerek kullan\u0131c\u0131ya sunulur.<\/p>\n<p>Bu davran\u0131\u015f, \u00f6zellikle yarat\u0131c\u0131 i\u00e7erik \u00fcretimi ve stratejik planlama s\u00fcre\u00e7leri gibi beyin f\u0131rt\u0131nas\u0131 etkinliklerini yapay zek\u00e2 destekli uygulamak i\u00e7in olduk\u00e7a elveri\u015flidir. Bunlar\u0131n d\u0131\u015f\u0131nda bir konunun farkl\u0131 y\u00f6nlerini analiz etmek, farkl\u0131 \u00e7\u00f6z\u00fcmleri tart\u0131\u015f\u0131p en iyisini se\u00e7mek ve farkl\u0131 uzmanl\u0131klara g\u00f6re agent&#8217;lar aras\u0131nda tart\u0131\u015fma yaratmak i\u00e7in idealdir.<\/p>\n<details>\n<summary style=\"color:red;\">\u00d6rnek kullan\u0131m\u0131 g\u00f6rmek i\u00e7in t\u0131klay\u0131n\u0131z<\/summary>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing Microsoft.SemanticKernel;\r\nusing Microsoft.SemanticKernel.Agents;\r\nusing Microsoft.SemanticKernel.Agents.Orchestration;\r\nusing Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;\r\nusing Microsoft.SemanticKernel.Agents.Runtime.InProcess;\r\nusing OpenAI;\r\nusing System.ClientModel;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddKernel();\r\nbuilder.Services.AddOpenAIChatCompletion(\r\n    modelId: &quot;qwen\/qwen3-next-80b-a3b-instruct&quot;,\r\n    openAIClient: new OpenAIClient(\r\n            credential: new ApiKeyCredential(key: &quot;sk-or-v1-5c09***547123d0be39&quot;),\r\n            options: new OpenAIClientOptions()\r\n            {\r\n                Endpoint = new Uri(&quot;https:\/\/openrouter.ai\/api\/v1&quot;)\r\n            }\r\n        )\r\n    );\r\nvar app = builder.Build();\r\n\r\napp.MapGet(&quot;\/run&quot;, async (Kernel kernel) =&gt;\r\n{\r\n    ChatCompletionAgent writer = new ChatCompletionAgent\r\n    {\r\n        Name = &quot;writer&quot;,\r\n        Instructions =\r\n            &quot;&quot;&quot;\r\n                Uzun y\u0131llara dayanan deneyime sahip bir metin yazar\u0131s\u0131n. \u00d6zl\u00fc anlat\u0131m\u0131n ve mizah anlay\u0131\u015f\u0131n\u0131zla tan\u0131n\u0131yorsunuz.\r\n                Amac\u0131n, alan\u0131nda uzman biri olarak metni geli\u015ftirmek ve en iyi metne karar vermektir.\r\n                Her yan\u0131t i\u00e7in yaln\u0131zca tek bir \u00f6neri sunmal\u0131s\u0131n.\r\n                Elindeki hedefe odaklan\u0131n.\r\n                \u00c7\u0131lg\u0131n ve bo\u015f sohbetlerle zaman kaybetme!\r\n                Bir fikri geli\u015ftirirken \u00f6nerileri g\u00f6z \u00f6n\u00fcnde bulundur.\r\n            &quot;&quot;&quot;,\r\n        Kernel = kernel,\r\n        Description = &quot;Bir metin yazar\u0131 agent.&quot;\r\n    };\r\n\r\n    ChatCompletionAgent editor = new ChatCompletionAgent\r\n    {\r\n        Name = &quot;editor&quot;,\r\n        Instructions =\r\n            &quot;&quot;&quot;\r\n                Metin yazarl\u0131\u011f\u0131 konusunda fikirleri olan bir sanat y\u00f6netmenisin.\r\n                Amac\u0131n, verilen metnin bas\u0131lmaya uygun olup olmad\u0131\u011f\u0131n\u0131 belirlemektir.\r\n                E\u011fer uygunsa, &quot;Onayl\u0131yorum&quot; dersin. Uygun de\u011filse, \u00f6rnek vermeden \u00f6nerilen metnin nas\u0131l iyile\u015ftirilebilece\u011fine dair fikir verirsin.\r\n            &quot;&quot;&quot;,\r\n        Kernel = kernel,\r\n        Description = &quot;Edit\u00f6r agent.&quot;\r\n    };\r\n\r\n\r\n    GroupChatOrchestration orchestration = new(new RoundRobinGroupChatManager\r\n    {\r\n        MaximumInvocationCount = 5\r\n    }, writer, editor)\r\n    {\r\n        LoggerFactory = LoggerFactory.Create(builder =&gt; builder.AddConsole()),\r\n        StreamingResponseCallback = async (response, final) =&gt;\r\n        {\r\n            if (response.AuthorName != null)\r\n            {\r\n                Console.WriteLine($&quot;\\n&#x5B;{response.AuthorName}]: {response.Content}&quot;);\r\n            }\r\n            else\r\n            {\r\n                Console.WriteLine($&quot;&#x5B;System]: {response.Content}&quot;);\r\n            }\r\n        }\r\n    };\r\n\r\n    InProcessRuntime runtime = new();\r\n    await runtime.StartAsync();\r\n\r\n    OrchestrationResult&lt;string&gt; result = await orchestration.InvokeAsync(\r\n        &quot;Uygun fiyatl\u0131 ve s\u00fcr\u00fc\u015f\u00fc keyifli TOGG otomobili i\u00e7in slogan yarat\u0131n!&quot;,\r\n        runtime);\r\n\r\n    string texts = await result.GetValueAsync(TimeSpan.FromSeconds(120));\r\n    await runtime.RunUntilIdleAsync();\r\n\r\n    return string.Join(&quot; | &quot;, texts);\r\n});\r\n\r\napp.Run();\r\n<\/pre>\n<\/div>\n<\/details>\n<\/li>\n<li>\n<h5>Handoff Orchestration<\/h5>\n<p>Handoff Orchestration, multi-agent sistemlerinde bir agent&#8217;\u0131n g\u00f6revini tamamlad\u0131ktan sonra, \u00e7\u0131kt\u0131s\u0131n\u0131 ba\u015fka bir agent&#8217;a &#8216;devretmesi&#8217; (handoff) prensibine dayal\u0131 bir orkestrasyon desenidir.<\/p>\n<p>Burada dikkat edilmesi gereken nokta \u015fudur ki; Sequential Orchestration&#8217;da \u00f6nceden belirlenmi\u015f s\u0131raya g\u00f6re ilerleme s\u00f6z konusuyken, Handoff Orchestration&#8217;da ise agent&#8217;lar s\u0131ras\u0131yla de\u011fil, ihtiyaca g\u00f6re devreye girerek ilerleme katedilmektedir. G\u00f6rev ak\u0131\u015f\u0131 \u00f6nceden sabitlenmi\u015f de\u011fildir, dinamik olarak belirlenmektedir! Haliyle bu davran\u0131\u015f i\u00e7in bir deterministik tutumun olmad\u0131\u011f\u0131n\u0131 s\u00f6yleyebiliriz.<\/p>\n<p>Bu yakla\u015f\u0131mda her agent, konu\u015fmay\u0131 uygun uzmanl\u0131\u011fa sahip ba\u015fka bir agent&#8217;a devredece\u011fi i\u00e7in g\u00f6revin do\u011fru agent&#8217;lar taraf\u0131ndan ele al\u0131nmas\u0131 sa\u011flanm\u0131\u015f olacakt\u0131r. Haliyle konunun ba\u011flam\u0131na g\u00f6re y\u00f6nlendirmede bulunulmas\u0131 gereken m\u00fc\u015fteri deste\u011fi gibi dinamik y\u00f6nlendirmenin gerekti\u011fi senaryolarda bu pattern olduk\u00e7a elveri\u015flidir. Ayr\u0131ca, sorunun t\u00fcr\u00fcne g\u00f6re ilgili uzman agent&#8217;a aktar\u0131m gereken durumlarda, farkl\u0131 departman\/i\u015flevler aras\u0131nda s\u00fcre\u00e7 devirlerinde veya hastal\u0131k bulgular\u0131na g\u00f6re do\u011fru uzman hekime (agent&#8217;a) y\u00f6nlendirmede bu davran\u0131\u015f tercih edilebilir.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-3.png\" alt=\"Semantic Kernel \u0130le Multi-agent Orchestration\" width=\"825\" height=\"649\" class=\"aligncenter size-full wp-image-28060\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-3.png 825w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-3-300x236.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-3-768x604.png 768w\" sizes=\"auto, (max-width: 825px) 100vw, 825px\" \/><\/a><\/p>\n<details>\n<summary style=\"color:red;\">\u00d6rnek kullan\u0131m\u0131 g\u00f6rmek i\u00e7in t\u0131klay\u0131n\u0131z<\/summary>\n<p>Bu modelin \u00f6rne\u011finde Plugin&#8217;lerden istifade edece\u011fimizden dolay\u0131 \u00f6ncelikle a\u015fa\u011f\u0131daki gibi plugin&#8217;leri tan\u0131mlayal\u0131m;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public sealed class OrderRefundPlugin\r\n    {\r\n        &#x5B;KernelFunction]\r\n        public string ProcessReturn(string orderId, string reason) =&gt; $&quot;'{orderId}' numaral\u0131 sipari\u015fin para iadesi ba\u015far\u0131yla sa\u011flanm\u0131\u015ft\u0131r.&quot;;\r\n    }\r\n<\/pre>\n<\/div>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public sealed class OrderReturnPlugin\r\n    {\r\n        &#x5B;KernelFunction]\r\n        public string ProcessReturn(string orderId, string reason) =&gt; $&quot;'{orderId}' numaral\u0131 sipari\u015finizin iadesi ba\u015far\u0131yla sa\u011flanm\u0131\u015ft\u0131r.&quot;;\r\n    }\r\n<\/pre>\n<\/div>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public sealed class OrderStatusPlugin\r\n    {\r\n        &#x5B;KernelFunction]\r\n        public string CheckOrderStatus(string orderId) =&gt; $&quot;'{orderId}' numaral\u0131 sipari\u015finiz kargoya verilmi\u015ftir. 2-3 g\u00fcn i\u00e7erisinde taraf\u0131n\u0131za ula\u015facakt\u0131r.&quot;;\r\n    }\r\n<\/pre>\n<\/div>\n<p>Ard\u0131ndan bu plugin&#8217;ler e\u015fli\u011finde \u00e7al\u0131\u015fmay\u0131 a\u015fa\u011f\u0131daki gibi ger\u00e7ekle\u015ftirelim;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing _4_Handoff_Orchestration.Plugins;\r\nusing Microsoft.SemanticKernel;\r\nusing Microsoft.SemanticKernel.Agents;\r\nusing Microsoft.SemanticKernel.Agents.Orchestration;\r\nusing Microsoft.SemanticKernel.Agents.Orchestration.Handoff;\r\nusing Microsoft.SemanticKernel.Agents.Runtime.InProcess;\r\nusing OpenAI;\r\nusing System.ClientModel;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddKernel();\r\nbuilder.Services.AddOpenAIChatCompletion(\r\n    modelId: &quot;qwen\/qwen3-next-80b-a3b-instruct&quot;,\r\n    openAIClient: new OpenAIClient(\r\n            credential: new ApiKeyCredential(key: &quot;sk-or-v1-5c09***47123d0be39&quot;),\r\n            options: new OpenAIClientOptions()\r\n            {\r\n                Endpoint = new Uri(&quot;https:\/\/openrouter.ai\/api\/v1&quot;)\r\n            }\r\n        )\r\n    );\r\nvar app = builder.Build();\r\n\r\napp.MapGet(&quot;\/run&quot;, async (Kernel kernel) =&gt;\r\n{\r\n    ChatCompletionAgent triageAgent = new ChatCompletionAgent\r\n    {\r\n        Name = &quot;triageAgent&quot;,\r\n        Instructions = &quot;Sorunlar\u0131 s\u0131n\u0131fland\u0131ran m\u00fc\u015fteri destek agent'\u0131s\u0131n.&quot;,\r\n        Kernel = kernel,\r\n        Description = &quot;M\u00fc\u015fteri taleplerini kar\u015f\u0131layan agent.&quot;\r\n    };\r\n\r\n    ChatCompletionAgent statusAgent = new ChatCompletionAgent\r\n    {\r\n        Name = &quot;statusAgent&quot;,\r\n        Instructions = &quot;Sipari\u015f durumu s\u00fcre\u00e7lerini i\u015fleyen bir agent's\u0131n.&quot;,\r\n        Kernel = kernel,\r\n        Description = &quot;Sipari\u015f durumunu kontrol eden m\u00fc\u015fteri destek agent'\u0131.&quot;\r\n    };\r\n    statusAgent.Kernel.Plugins.AddFromObject(new OrderStatusPlugin(), nameof(OrderStatusPlugin));\r\n\r\n    ChatCompletionAgent returnAgent = new ChatCompletionAgent\r\n    {\r\n        Name = &quot;returnAgent&quot;,\r\n        Instructions = &quot;Sipari\u015f iade taleplerini y\u00f6neten agent's\u0131n.&quot;,\r\n        Kernel = kernel,\r\n        Description = &quot;Sipari\u015f iadelerini y\u00f6neten m\u00fc\u015fteri destek agent'\u0131.&quot;\r\n    };\r\n    returnAgent.Kernel.Plugins.AddFromObject(new OrderReturnPlugin(), nameof(OrderReturnPlugin));\r\n\r\n    ChatCompletionAgent refundAgent = new ChatCompletionAgent\r\n    {\r\n        Name = &quot;refundAgent&quot;,\r\n        Instructions = &quot;Sipari\u015f i\u00e7in geri \u00f6deme iade taleplerini y\u00f6neten agent's\u0131n.&quot;,\r\n        Kernel = kernel,\r\n        Description = &quot;Sipari\u015f i\u00e7in geri \u00f6demeleri y\u00f6neten m\u00fc\u015fteri destek agent'\u0131.&quot;\r\n    };\r\n    refundAgent.Kernel.Plugins.AddFromObject(new OrderRefundPlugin(), nameof(OrderRefundPlugin));\r\n\r\n\r\n    HandoffOrchestration orchestration = new(OrchestrationHandoffs\r\n                                                .StartWith(triageAgent)\r\n                                                .Add(triageAgent, statusAgent, returnAgent, refundAgent)\r\n                                                .Add(statusAgent, triageAgent, &quot;Sorun sipari\u015f durumuyla ilgili de\u011filse bu agent'a y\u00f6nlendir.&quot;)\r\n                                                .Add(returnAgent, triageAgent, &quot;Sorun iade ile ilgili de\u011filse bu agent'a y\u00f6nlendir.&quot;)\r\n                                                .Add(refundAgent, triageAgent, &quot;Sorun geri \u00f6deme ile ilgili de\u011filse bu agent'a y\u00f6nlendir.&quot;),\r\n                                                triageAgent,\r\n                                                statusAgent,\r\n                                                returnAgent,\r\n                                                refundAgent)\r\n    {\r\n        LoggerFactory = LoggerFactory.Create(builder =&gt; builder.AddConsole()),\r\n        StreamingResponseCallback = async (response, final) =&gt;\r\n        {\r\n            if (response.AuthorName != null)\r\n            {\r\n                Console.WriteLine($&quot;\\n&#x5B;{response.AuthorName}]: {response.Content}&quot;);\r\n            }\r\n            else\r\n            {\r\n                Console.WriteLine($&quot;&#x5B;System]: {response.Content}&quot;);\r\n            }\r\n        }\r\n    };\r\n\r\n    InProcessRuntime runtime = new();\r\n    await runtime.StartAsync();\r\n\r\n    OrchestrationResult&lt;string&gt; result = await orchestration.InvokeAsync(\r\n        &quot;'123' numaral\u0131 sipari\u015fimle ilgili bilgi istiyorum.&quot;,\r\n        runtime);\r\n\r\n    string texts = await result.GetValueAsync(TimeSpan.FromSeconds(120));\r\n\r\n    result = await orchestration.InvokeAsync(\r\n            &quot;'123' numaral\u0131 sipari\u015fimin geri \u00f6deme durumunu \u00f6\u011frenmek istiyorum!&quot;,\r\n            runtime);\r\n\r\n    texts += $&quot;\\n{(await result.GetValueAsync(TimeSpan.FromSeconds(120)))}&quot;;\r\n    await runtime.RunUntilIdleAsync();\r\n\r\n    return string.Join(&quot; | &quot;, texts);\r\n});\r\n\r\napp.Run();\r\n<\/pre>\n<\/div>\n<\/details>\n<\/li>\n<li>\n<h5>Magentic Orchestration<\/h5>\n<p>Magentic Orchestration, multi-agent sistemlerde orkestrasyonun &#8216;\u00e7ekim g\u00fcc\u00fc&#8217; (magnetic) mant\u0131\u011f\u0131yla y\u00fcr\u00fct\u00fcld\u00fc\u011f\u00fc bir yakla\u015f\u0131md\u0131r. Burada kastedilen \u015fey, birden fazla hedefin\/g\u00f6revin oldu\u011fu ve bu hedefleri\/g\u00f6revleri \u00e7\u00f6zmeye aday birden fazla agent&#8217;\u0131n bulundu\u011fu durumlarda orkestrat\u00f6r\u00fcn, g\u00f6revin do\u011fas\u0131na en uygun agent&#8217;a veya agent grubuna &#8216;\u00e7ekim&#8217; esas\u0131na g\u00f6re y\u00f6nlendirme yapmas\u0131d\u0131r. Yani agent&#8217;lar\u0131n uzmanl\u0131k alanlar\u0131 ile g\u00f6revlerin gereksinimleri aras\u0131nda bir &#8216;manyetik e\u015fle\u015fme&#8217; sa\u011flan\u0131r.<\/p>\n<p>Magentic Orchestration, <a href=\"https:\/\/www.gencayyildiz.com\/blog\/autogen-nedir-derinlemesine-teorik-inceleyelim\/\" target=\"_blank\">AutoGen<\/a> taraf\u0131ndan icat edilen MagenticOne modeline g\u00f6re tasarlanm\u0131\u015f bir davran\u0131\u015fa sahiptir.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-4.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-4.png\" alt=\"Semantic Kernel \u0130le Multi-agent Orchestration\" width=\"2263\" height=\"1493\" class=\"aligncenter size-full wp-image-28062\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-4.png 2263w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-4-300x198.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-4-1024x676.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-4-768x507.png 768w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-4-1536x1013.png 1536w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/10\/Semantic-Kernel-Ile-Multi-agent-Orchestration-4-2048x1351.png 2048w\" sizes=\"auto, (max-width: 2263px) 100vw, 2263px\" \/><\/a>Yukar\u0131daki \u015femada; kullan\u0131c\u0131 veya sistemden gelen bir g\u00f6revin, orkestrat\u00f6r taraf\u0131ndan al\u0131n\u0131p nas\u0131l \u00e7\u00f6z\u00fcld\u00fc\u011f\u00fc planlanmaktad\u0131r. Task Ledger (G\u00f6rev Defteri), g\u00f6revle ilgili bilgileri kaydetmekte ve b\u00f6ylece hangi g\u00f6rev hangi agent&#8217;a verilecek sorusunun temel bilgi zeminini haz\u0131rlamaktad\u0131r. Progress Ledger (\u0130lerleme Defteri) ise g\u00f6revin ilerlemesini takip etmekte ve &#8216;g\u00f6rev tamam m\u0131?&#8217;, &#8216;verimsiz d\u00f6ng\u00fc var m\u0131?&#8217;, &#8216;ilerleme sa\u011flan\u0131yor mu?&#8217; vs. \u015feklinde sorular e\u015fli\u011finde g\u00f6revin o anki ihtiya\u00e7lara g\u00f6re do\u011fru agent&#8217;a y\u00f6nlendirilebilmesi i\u00e7in agent se\u00e7im s\u00fcrecini y\u00fcr\u00fctmektedir. Ve \u015femada geriye kalan ifadeler &#8216;e\u011fer ilerleme yoksa, ba\u015fka agent&#8217;a &#8216;handoff&#8217; yap&#8217;, &#8216;e\u011fer \u00e7ok fazla t\u0131kan\u0131kl\u0131k (stall) durumu meydana gelirse, yeni karar mekanizmas\u0131n\u0131 devreye sok&#8217;, &#8216;e\u011fer g\u00f6rev tamamlan\u0131rsa, sonucu rapor et&#8217; vs. \u015feklinde kontrol ak\u0131\u015flar\u0131na kar\u015f\u0131l\u0131k gelmektedir.<\/p>\n<p><em>Kullan\u0131m \u00f6rne\u011fi :<\/em> Bir kullan\u0131c\u0131 taraf\u0131ndan farkl\u0131 makine \u00f6\u011frenimi modellerinin enerji verimlili\u011fi ile CO\u2082 emisyonlar\u0131n\u0131 kar\u015f\u0131la\u015ft\u0131ran kapsaml\u0131 bir raporu talep etti\u011fini varsayal\u0131m. Magentic manager, \u00f6nce ilgili verileri toplamas\u0131 i\u00e7in bir ara\u015ft\u0131rma agent&#8217;\u0131n\u0131 g\u00f6revlendirmekte, ard\u0131ndan analiz ve hesaplama i\u015flerini bir kodlay\u0131c\u0131 agent&#8217;a devretmektedir. Y\u00f6netici, ara\u015ft\u0131rma ve hesaplamalar\u0131n birden fazla turunu koordine etmekte ve bulgular\u0131 bir araya getirerek, nihai \u00e7\u0131kt\u0131y\u0131 ayr\u0131nt\u0131l\u0131, yap\u0131land\u0131r\u0131lm\u0131\u015f bir rapor olarak sunmaktad\u0131r.<\/p>\n<details>\n<summary style=\"color:red;\">\u00d6rnek kullan\u0131m\u0131 g\u00f6rmek i\u00e7in t\u0131klay\u0131n\u0131z<\/summary>\n<blockquote><p><em><u>Not!<\/u><br \/>\n.NET&#8217;te bu yakla\u015f\u0131m\u0131 sergileyebilmek i\u00e7in ilgili projeye <a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.SemanticKernel.Agents.Magentic\" target=\"_blank\">Microsoft.SemanticKernel.Agents.Magentic<\/a> k\u00fct\u00fcphanesinin y\u00fcklenmesi gerekmektedir.<br \/>\n<\/em><\/p><\/blockquote>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing Microsoft.SemanticKernel;\r\nusing Microsoft.SemanticKernel.Agents;\r\nusing Microsoft.SemanticKernel.Agents.Magentic;\r\nusing Microsoft.SemanticKernel.Agents.Orchestration;\r\nusing Microsoft.SemanticKernel.Agents.Runtime.InProcess;\r\nusing Microsoft.SemanticKernel.ChatCompletion;\r\nusing Microsoft.SemanticKernel.Connectors.OpenAI;\r\nusing OpenAI;\r\nusing System.ClientModel;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddKernel();\r\nbuilder.Services.AddOpenAIChatCompletion(\r\n    modelId: &quot;qwen\/qwen3-next-80b-a3b-instruct&quot;,\r\n    openAIClient: new OpenAIClient(\r\n            credential: new ApiKeyCredential(key: &quot;sk-or-v1-5c0****47123d0be39&quot;),\r\n            options: new OpenAIClientOptions()\r\n            {\r\n                Endpoint = new Uri(&quot;https:\/\/openrouter.ai\/api\/v1&quot;)\r\n            }\r\n        )\r\n    );\r\nvar app = builder.Build();\r\n\r\napp.MapGet(&quot;\/run&quot;, async (Kernel kernel) =&gt;\r\n{\r\n    ChatCompletionAgent researchAgent = new ChatCompletionAgent\r\n    {\r\n        Name = &quot;researchAgent&quot;,\r\n        Instructions = &quot;Bir ara\u015ft\u0131rmac\u0131s\u0131n. Ek hesaplama ve nicel analize gerek kalmadan bilgiye ula\u015fabilmektesin.&quot;,\r\n        Kernel = kernel,\r\n        Description = &quot;Web aramalar\u0131na eri\u015fimi olan yard\u0131mc\u0131 bir agent.&quot;\r\n    };\r\n\r\n\r\n    ChatCompletionAgent coderAgent = new ChatCompletionAgent\r\n    {\r\n        Name = &quot;coderAgent&quot;,\r\n        Instructions = &quot;Sorular\u0131 kod kullanarak \u00e7\u00f6zmektesin. Detayl\u0131 analiz ve hesaplama s\u00fcre\u00e7leri sa\u011fl\u0131yorsun.&quot;,\r\n        Kernel = kernel,\r\n        Description = &quot;Verileri i\u015flemek ve analiz etmek i\u00e7in kod yazan ve \u00e7al\u0131\u015ft\u0131ran agent.&quot;\r\n    };\r\n\r\n    StandardMagenticManager manager =\r\n            new(kernel.GetRequiredService&lt;IChatCompletionService&gt;(), new OpenAIPromptExecutionSettings())\r\n            {\r\n                MaximumInvocationCount = 5,\r\n            };\r\n\r\n    MagenticOrchestration orchestration = new(manager, researchAgent, coderAgent)\r\n    {\r\n        LoggerFactory = LoggerFactory.Create(builder =&gt; builder.AddConsole()),\r\n        StreamingResponseCallback = async (response, final) =&gt;\r\n        {\r\n            if (response.AuthorName != null)\r\n            {\r\n                Console.WriteLine($&quot;\\n&#x5B;{response.AuthorName}]: {response.Content}&quot;);\r\n            }\r\n            else\r\n            {\r\n                Console.WriteLine($&quot;&#x5B;System]: {response.Content}&quot;);\r\n            }\r\n        }\r\n    };\r\n\r\n    InProcessRuntime runtime = new();\r\n    await runtime.StartAsync();\r\n\r\n    OrchestrationResult&lt;string&gt; result = await orchestration.InvokeAsync(\r\n        &quot;&quot;&quot;\r\n            Farkl\u0131 makine \u00f6\u011frenimi model mimarilerinin enerji verimlili\u011fi \u00fczerine bir rapor haz\u0131rl\u0131yorum. \r\n            ResNet-50, BERT-base ve GPT-2 modellerinin standart veri k\u00fcmeleri \u00fczerinde (\u00f6rne\u011fin; ResNet i\u00e7in ImageNet, BERT i\u00e7in GLUE, GPT-2 i\u00e7in WikiText) tahmini e\u011fitim ve \u00e7\u0131kar\u0131m (inference) enerji t\u00fcketimlerini kar\u015f\u0131la\u015ft\u0131r!\r\n            Daha sonra, her biri i\u00e7in CO\u2082 emisyonlar\u0131n\u0131 tahmin et. Her modelin Azure Standard_NC6s_v3 sanal makinesi \u00fczerinde 24 saay boyunca e\u011fitildi\u011fini varsay.\r\n        &quot;&quot;&quot;,\r\n        runtime);\r\n\r\n    string texts = await result.GetValueAsync(TimeSpan.FromSeconds(120));\r\n\r\n    await runtime.RunUntilIdleAsync();\r\n\r\n    return string.Join(&quot; | &quot;, texts);\r\n});\r\n\r\napp.Run();\r\n<\/pre>\n<\/div>\n<\/details>\n<\/li>\n<\/ul>\n<h5>Magentic &#038; Group Chat &#038; Handoff Orchestration Kar\u015f\u0131la\u015ft\u0131rmas\u0131<\/h5>\n<p>\u015eimdi burada Magentic Orchestration&#8217;\u0131n Group Chat ve Handoff Orchestration yakla\u015f\u0131mlar\u0131ndan fak\u0131n\u0131n ne oldu\u011funu sorabilirsiniz. Bunun i\u00e7in bu \u00fc\u00e7\u00fcn\u00fc a\u015fa\u011f\u0131daki tabloda mukayese etmek yerinde olacakt\u0131r;<\/p>\n<table style=\"font-size:12px;\">\n<thead>\n<tr>\n<th><\/th>\n<th style=\"width:28%;\">Group Chat Orchestration<\/th>\n<th style=\"width:28%;\">Handoff Orchestration<\/th>\n<th style=\"width:28%;\">Magentic Orchestration<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align:left;\"><strong><em>\u0130\u015fleyi\u015f<\/em><\/strong><\/td>\n<td>Agent&#8217;lar ayn\u0131 &#8216;oda&#8217;da tart\u0131\u015f\u0131r, fikir \u00fcretir, birbirlerine yan\u0131t verirler.<\/td>\n<td>G\u00f6rev bir agent taraf\u0131ndan ba\u015flat\u0131l\u0131r, sonra dinamik olarak en uygun agent&#8217;a devredili.<\/td>\n<td>G\u00f6rev, \u00f6zelliklerine g\u00f6re do\u011fal olarak en uygun agent(lar)a y\u00f6nlendirilir. Sanki bir \u00e7ekim kuvveti varm\u0131\u015f gibi&#8230;<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align:left;\"><strong><em>Odak Noktas\u0131<\/em><\/strong><\/td>\n<td>Kolektif akl\u0131 ama\u00e7 edinir. Farkl\u0131 bak\u0131\u015f a\u00e7\u0131lar\u0131 etkile\u015ferek zengin sonu\u00e7 \u00e7\u0131kar\u0131r.<\/td>\n<td>Dinamik ve seri g\u00f6rev ak\u0131\u015f\u0131n\u0131 ama\u00e7 edinir.<\/td>\n<td>G\u00f6rev &#8211; agent uyumunu g\u00f6zetir. Do\u011fru i\u015fi do\u011fru agent&#8217;a vermeye odaklan\u0131r.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align:left;\"><strong><em>Kontrol<\/em><\/strong><\/td>\n<td>Genellikle bir moderat\u00f6r agent&#8217;\u0131 taraf\u0131ndan tart\u0131\u015fma d\u00fczenlenir.<\/td>\n<td>G\u00f6revin hangi agent&#8217;a devredilece\u011fine ya agent&#8217;lar\u0131n i\u00e7 mant\u0131\u011f\u0131 ya da bir orkestrat\u00f6r karar verir.<\/td>\n<td>Orkestrat\u00f6r, g\u00f6rev ile agent yetkinliklerini e\u015fle\u015ftiren bir &#8216;e\u015fle\u015fme algoritmas\u0131&#8217; gibi davran\u0131r.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align:left;\"><strong><em>\u00d6rnek<\/em><\/strong><\/td>\n<td>Beyin f\u0131rt\u0131nas\u0131; herkes ayn\u0131 konuda fikir sunar. Nihai olarak ortak sonu\u00e7 toplan\u0131r.<\/td>\n<td>M\u00fc\u015fteri destek hatt\u0131; \u00e7a\u011fr\u0131 konusuna g\u00f6re m\u00fc\u015fteri teknik, finansal ya da hukuksal meselelerle ile ilgili agent&#8217;a aktar\u0131l\u0131r.<\/td>\n<td>Ara\u015ft\u0131rma platformu; istatiksel sorular analiz agent&#8217;\u0131na, g\u00f6rsel talepler grafik agent&#8217;\u0131na y\u00f6nlendirilir.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table style=\"font-size:12px;background-color:#E8D5D1;border:1px;border-style: dashed;\">\n<thead>\n<tr>\n<th colspan=\"4\" style=\"border:1px;border-style: dashed;\">K\u0131sa Kar\u015f\u0131la\u015ft\u0131rma Tablosu<\/th>\n<\/tr>\n<tr>\n<th>\u00d6zellik<\/th>\n<th style=\"width:28%;\">Group Chat Orchestration<\/th>\n<th style=\"width:28%;\">Handoff Orchestration<\/th>\n<th style=\"width:28%;\">Magentic Orchestration<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align:left;\"><strong><em>Ak\u0131\u015f Tipi<\/em><\/strong><\/td>\n<td>E\u015fzamanl\u0131 sohbet<\/td>\n<td>Dinamik g\u00f6rev devri<\/td>\n<td>G\u00f6rev-agent e\u015fle\u015ftirmesi<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align:left;\"><strong><em>Kontrol Mekanizmas\u0131<\/em><\/strong><\/td>\n<td>Moderat\u00f6r\/grup dinami\u011fi<\/td>\n<td>Dinamik karar (agent veya orkestrat\u00f6r)<\/td>\n<td>E\u015fle\u015fme algoritmas\u0131 veya orkestrat\u00f6r<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align:left;\"><strong><em>Odak<\/em><\/strong><\/td>\n<td>Kolektif tart\u0131\u015fma<\/td>\n<td>G\u00f6revin el de\u011fi\u015ftirmesi<\/td>\n<td>G\u00f6revin do\u011fru uzmana \u00e7ekilmesi<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align:left;\"><strong><em>Avantaj<\/em><\/strong><\/td>\n<td>Zengin, yarat\u0131c\u0131 sonu\u00e7<\/td>\n<td>Esnek g\u00f6rev y\u00f6lendirme<\/td>\n<td>Ak\u0131ll\u0131, verimli g\u00f6rev da\u011f\u0131t\u0131m\u0131<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align:left;border-bottom-style: dashed;\"><strong><em>Risk<\/em><\/strong><\/td>\n<td style=\"border:1px;border-bottom-style: dashed;\">G\u00fcr\u00fclt\u00fc, konu da\u011f\u0131lmas\u0131<\/td>\n<td style=\"border:1px;border-bottom-style: dashed;\">Fazla el de\u011fi\u015ftirme, gecikme<\/td>\n<td style=\"border:1px;border-bottom-style: dashed;\">Yanl\u0131\u015f e\u015fle\u015fme, uzman hatas\u0131<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Nihai olarak,<\/p>\n<p>\u0130\u00e7erik s\u00fcrecinde, Semantic Kernel ile multi-agent davran\u0131\u015flar\u0131n\u0131 ortak altyap\u0131lar sayesinde rahatl\u0131kla ger\u00e7ekle\u015ftirebildi\u011fimizi ve g\u00f6zlemledi\u011fimiz bu yakla\u015f\u0131mlar e\u015fli\u011finde, hem gereksinimlere g\u00f6re gerekli i\u015flevsellikleri devreye sokabildi\u011fimizi hem de gerekti\u011fi taktirde i\u015f mant\u0131\u011f\u0131n\u0131 ba\u015ftan sona yeniden yazmak gibi zahmetlere katlanmaks\u0131z\u0131n desenler aras\u0131nda kolayca ge\u00e7i\u015fler yapabildi\u011fimizi g\u00f6rm\u00fc\u015f bulunuyor, ayr\u0131ca Semantic Kernel&#8217;\u0131n, agent&#8217;lar aras\u0131ndaki ileti\u015fim s\u00fcre\u00e7lerinde hangi davran\u0131\u015f olursa olsun koordinasyon ve sonu\u00e7lar\u0131n toplanmas\u0131na dair karma\u015f\u0131kl\u0131\u011f\u0131 ortadan kald\u0131rarak yaln\u0131z hedeflere odaklanmaya olanak tan\u0131d\u0131\u011f\u0131n\u0131 g\u00f6zlemlemi\u015f bulunuyoruz.<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<p>Not : \u00d6rnek \u00e7al\u0131\u015fmaya a\u015fa\u011f\u0131daki GitHub adresinden eri\u015febilirsiniz.<br \/>\n<a href=\"https:\/\/github.com\/gncyyldz\/SK_Multi_Agent_Orchestration_Example\" target=\"_blank\">https:\/\/github.com\/gncyyldz\/SK_Multi_Agent_Orchestration_Example<\/a><\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde, Semantic Kernel&#8217;da Multi-agent Orchestration yakla\u015f\u0131m\u0131 ile tek bir yapay zek\u00e2 agent&#8217;\u0131n\u0131n \u00f6tesine ge\u00e7ip, birden fazla agent&#8217;\u0131n g\u00f6rev payla\u015f\u0131m\u0131 yaparak nas\u0131l birlikte \u00e7al\u0131\u015fma yapabileceklerini teorik olarak de\u011ferlendiriyor olaca\u011f\u0131z. Multi-agent Orchestration Nedir? Multi-agent&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":28062,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3102,5222,5220],"tags":[5449,5448,5450,5451,5453,5452,5455,5454,5445,5187,5446,5221,5447],"class_list":["post-28048","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-asp-net-core","category-llm","category-yapay-zeka-ai","tag-concurrent","tag-concurrent-orchestration","tag-group-chat","tag-group-chat-orchestration","tag-handoff","tag-handoff-orchestration","tag-magentic","tag-magentic-orchestration","tag-multi-agent-orchestration","tag-orchestration","tag-orchestration-desenleri","tag-semantic-kernel","tag-sequential-orchestration"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/28048","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=28048"}],"version-history":[{"count":12,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/28048\/revisions"}],"predecessor-version":[{"id":28065,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/28048\/revisions\/28065"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/28062"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=28048"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=28048"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=28048"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}