﻿
{"id":28510,"date":"2026-03-15T22:10:25","date_gmt":"2026-03-15T22:10:25","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=28510"},"modified":"2026-03-15T22:10:25","modified_gmt":"2026-03-15T22:10:25","slug":"microsoft-agent-framework-agent-skills-ile-ai-agentin-yeteneklerini-genisletelim","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/microsoft-agent-framework-agent-skills-ile-ai-agentin-yeteneklerini-genisletelim\/","title":{"rendered":"Microsoft Agent Framework &#8211; Agent Skills \u0130le AI Agent&#8217;\u0131n Yeteneklerini Geni\u015fletelim"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<br \/>\n<br \/>\nBu i\u00e7eri\u011fimizde <em>Microsoft Agent Framework<\/em>&#8216;de, AI Agent&#8217;\u0131n yeteneklerini ta\u015f\u0131nabilir bir \u015fekilde geni\u015fletebilmemizi sa\u011flayan Agent Skills \u00f6zelli\u011fini inceliyor olaca\u011f\u0131z.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_88 counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Ba\u015fl\u0131klar<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"\u0130\u00e7indekiler Tablosunu A\u00e7\/Kapat\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.gencayyildiz.com\/blog\/microsoft-agent-framework-agent-skills-ile-ai-agentin-yeteneklerini-genisletelim\/#Agent_Skills_Nedir\" >Agent Skills Nedir?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.gencayyildiz.com\/blog\/microsoft-agent-framework-agent-skills-ile-ai-agentin-yeteneklerini-genisletelim\/#Nasil_Calismaktadir\" >Nas\u0131l \u00c7al\u0131\u015fmaktad\u0131r?<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.gencayyildiz.com\/blog\/microsoft-agent-framework-agent-skills-ile-ai-agentin-yeteneklerini-genisletelim\/#SKILLmd_dosyasinin_formati_nasildir\" >SKILL.md dosyas\u0131n\u0131n format\u0131 nas\u0131ld\u0131r?<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.gencayyildiz.com\/blog\/microsoft-agent-framework-agent-skills-ile-ai-agentin-yeteneklerini-genisletelim\/#Guvenlik_Acisindan_Dikkat_edilmesi_Gerekenler\" >G\u00fcvenlik A\u00e7\u0131s\u0131ndan Dikkat edilmesi Gerekenler<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.gencayyildiz.com\/blog\/microsoft-agent-framework-agent-skills-ile-ai-agentin-yeteneklerini-genisletelim\/#Skills_vs_Workflows_Hangisi_Ne_Zaman_Kullanilmali\" >Skills vs. Workflows | Hangisi Ne Zaman Kullan\u0131lmal\u0131?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.gencayyildiz.com\/blog\/microsoft-agent-framework-agent-skills-ile-ai-agentin-yeteneklerini-genisletelim\/#FileAgentSkillsProvider_Nedir\" >FileAgentSkillsProvider Nedir?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.gencayyildiz.com\/blog\/microsoft-agent-framework-agent-skills-ile-ai-agentin-yeteneklerini-genisletelim\/#Ornek_Uygulama\" >\u00d6rnek Uygulama<\/a><\/li><\/ul><\/nav><\/div>\n<h4><span class=\"ez-toc-section\" id=\"Agent_Skills_Nedir\"><\/span>Agent Skills Nedir?<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<blockquote style=\"font-size:12px;\"><p><em>Agent Skills, agent&#8217;lara alan uzmanl\u0131\u011f\u0131 kazand\u0131rabilmek i\u00e7in tasarlanm\u0131\u015f basit ve a\u00e7\u0131k bir formatt\u0131r.<\/em><\/p><\/blockquote>\n<p>Agent Skills, agent&#8217;lara \u00f6zel yetenekler ve alan uzmanl\u0131\u011f\u0131 kazand\u0131rmak i\u00e7in tasarlanm\u0131\u015f ta\u015f\u0131nabilir talimat (instructions) ve kaynak (resources) paketleridir. Bu paketler, a\u00e7\u0131k bir spesifikasyonu takip etmekte ve <em>Progressive Disclosure Pattern<\/em>&#8216;\u0131 sayesinde agent&#8217;lar\u0131n yaln\u0131zca ihtiya\u00e7 duyduklar\u0131 ba\u011flam\u0131 (context), <u>ihtiya\u00e7 duyduklar\u0131 anda<\/u> y\u00fcklemelerini sa\u011flamaktad\u0131r.<\/p>\n<p>Agent Skills, AI Agent&#8217;lar\u0131n g\u00f6revlerinde tutarl\u0131, esnek ve uzmanla\u015fm\u0131\u015f bir \u015fekilde i\u015flevsellik g\u00f6sterebilmesi i\u00e7in \u00f6zellikle belirli bir alan\u0131n uzman bilgisini paketlemek, agent&#8217;lar\u0131n yeteneklerini \u00e7ekirdek talimatlar\u0131n\u0131 de\u011fi\u015ftirmeden geni\u015fletmek, \u00e7ok ad\u0131ml\u0131 g\u00f6revleri (multi-step tasks) tekrar edilebilir ve denetlenebilir i\u015f ak\u0131\u015flar\u0131na (<a href=\"https:\/\/www.gencayyildiz.com\/blog\/tag\/workflow\/\" target=\"_blank\">workflows<\/a>) d\u00f6n\u00fc\u015ft\u00fcrmek ve ayn\u0131 beceriyi farkl\u0131 Agent Skills uyumlu \u00fcr\u00fcnlerde yeniden kullanabilmek i\u00e7in olduk\u00e7a ideal bir yap\u0131lanmad\u0131r.<\/p>\n<div style=\"background-color: #f4f4f4; padding: 15px; border-left: 5px solid #3498db; margin: 20px 0; font-style: italic; color: #333; font-size: 14px; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1); border-radius: 8px; width: 40%; float: right; box-sizing: border-box;\">\n  <strong><em>Markdown Belgesi nedir?<\/em><\/strong><br \/>\nD\u00fcz metin kullan\u0131larak yaz\u0131lan ve basit i\u015faretlerle bi\u00e7imlendirme yap\u0131lan yaz\u0131 bi\u00e7imlendirme dosyas\u0131d\u0131r. En yayg\u0131n kullan\u0131m yeri GitHub README dosyalar\u0131d\u0131r&#8230;\n<\/div>\n<h4><span class=\"ez-toc-section\" id=\"Nasil_Calismaktadir\"><\/span>Nas\u0131l \u00c7al\u0131\u015fmaktad\u0131r?<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Her skill&#8217;in temelinde bir <code style=\"color:#f87171\">SKILL.md<\/code> dosyas\u0131 mevcuttur. Bu dosya, ilgili skill&#8217;in ne yapt\u0131\u011f\u0131n\u0131 a\u00e7\u0131klayan ve nas\u0131l yap\u0131laca\u011f\u0131n\u0131 ad\u0131m ad\u0131m tarif eden bir markdown belgesidir. Skill&#8217;ler iste\u011fe ba\u011fl\u0131 olarak script&#8217;ler, referans dok\u00fcmanlar ve di\u011fer kaynaklar\u0131 da i\u00e7erebilmektedir.<\/p>\n<blockquote><p><em>Agent Skills, agent&#8217;\u0131n &#8216;ne bilece\u011fini&#8217; ve &#8216;nas\u0131l davranaca\u011f\u0131n\u0131&#8217; d\u0131\u015far\u0131dan mod\u00fcler bir paket olarak tan\u0131mlanmas\u0131n\u0131 sa\u011flayan ve agent&#8217;a core instruction&#8217;lara dokunmaks\u0131z\u0131n yeni yetenekler kazand\u0131rmam\u0131za imkan tan\u0131yan bir \u00f6zelliktir.<\/em><\/p><\/blockquote>\n<p>Agent Skills, context window&#8217;u \u015fi\u015firmemek i\u00e7in yukar\u0131daki sat\u0131rlarda da bahsedildi\u011fi \u00fczere <em>advertise<\/em>, <em>load<\/em> ve <em>read resources<\/em> a\u015famalar\u0131ndan olu\u015fan <em>Progressive Disclosure Pattern<\/em> modelini kullanmaktad\u0131r. Tabi burada \u00f6ncelikle \u015funu bilmek gerekmektedir; bir agent&#8217;\u0131n yapabildi\u011fi t\u00fcm yeteneklere bizler terminolojik olarak ingilizce kar\u015f\u0131l\u0131\u011f\u0131 olan <em>capability<\/em> demekteyiz. Haliyle temel mant\u0131k \u015f\u00f6yledir; bir agent t\u00fcm capability&#8217;leri en ba\u015ftan bodoslama y\u00fcklememekte, \u00f6nce advertise etmektedir. Yani varl\u0131\u011f\u0131n\u0131 duyurmaktad\u0131r. Ard\u0131ndan gerekirse y\u00fcklemekte (load) ve son olarak da kaynaklar\u0131 kullanmaktad\u0131r (read resources)<\/p>\n<p>Bu \u00fc\u00e7 ad\u0131m Progressive Disclosure&#8217;\u0131n teknik implementasyonudur.<\/p>\n<ol style=\"font-size:14px;\">\n<li><em><strong>Advertise (Capability Duyurma)<\/strong><\/em><br \/>\nBu a\u015famada skill \u00e7al\u0131\u015fmaz ve y\u00fcklenmez! Yaln\u0131zca agent&#8217;\u0131n bu yetene\u011fe sahip oldu\u011fu duyurulur.<\/p>\n<p>Yani LLM&#8217;e \u015fu mesaj verilir:<\/p>\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:12px;white-space:pre;line-height:0.8;padding:12px;width:410px;\">Bu ajan a\u015fa\u011f\u0131daki yeteneklere sahip olabilir:<br \/>\n&#8211; Weather skill<br \/>\n&#8211; Web search skill<br \/>\n&#8211; Email skill\n<\/div>\n<p>Ama burada dikkat edilmesi gereken bir durum vard\u0131r. O da, ba\u015flang\u0131\u00e7ta sadece capability\/skill metadata&#8217;s\u0131n\u0131n g\u00f6sterilmesi yani advertise edilmesidir. Detayl\u0131 tool tan\u0131m\u0131 ve execution bilgisi ancak skill ger\u00e7ekten kullan\u0131lacaksa LLM context&#8217;ine eklenecektir.\n<\/li>\n<li><em><strong>Load (Skill Y\u00fckleme)<\/strong><\/em><br \/>\nKullanc\u0131dan prompt geldikten sonra bu a\u015fama devreye girer.<\/p>\n<p>Burada agent ak\u0131l y\u00fcr\u00fctme (reasoning) yapar.<\/p>\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:12px;white-space:pre;line-height:0.8;padding:12px;width:410px;\">User: Ankara&#8217;da hava durumuyla ilgili bilgi ver!<\/div>\n<p>LLM bu noktada d\u00fc\u015f\u00fcn\u00fcr.<\/p>\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:12px;white-space:pre;line-height:0.8;padding:12px;width:410px;\">LLM: WeatherSkill kullan\u0131labilir!<\/div>\n<p>\u0130\u015fte o anda skill load edilir. Yani runtime&#8217;da bir WeatherSkill instance&#8217;\u0131 olu\u015fturulur.<\/p>\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:12px;white-space:pre;line-height:0.8;padding:12px;width:410px;\">Skill registry \u2192 WeatherSkill instance olu\u015ftur!<\/div>\n<\/li>\n<li><em><strong>Read resources<\/strong><\/em><br \/>\nBu a\u015famada ise skill y\u00fcklendikten sonra agent art\u0131k ger\u00e7ek i\u015fi yapabilmektedir. Misal olarak, <code>WeatherSkill.GetWeather(\"Ankara\")<\/code> \u015feklinde bir fonksiyon \u00e7a\u011fr\u0131m\u0131 ger\u00e7ekle\u015ftirebilir. Bu fonksiyon ard\u0131nda da herhangi bir API \u00e7a\u011fr\u0131labilir, database&#8217;den veri elde edilebilir, bir dosya okunabilir veya web search ger\u00e7ekle\u015ftirilebilir.<\/p>\n<p>Bu a\u015famaya execution layer denmektedir.\n<\/li>\n<\/ol>\n<p>Bu model, Microsoft Agent Framework i\u00e7inde Agent Skills ve resource discovery mant\u0131\u011f\u0131n\u0131 a\u00e7\u0131klamak i\u00e7in olduk\u00e7a yerindedir. Ayr\u0131ca bu modelin advertise a\u015famas\u0131 sayesinde token maliyeti olduk\u00e7a d\u00fc\u015f\u00fcr\u00fclmekte ve g\u00fcvenli bir skill \u00e7a\u011fr\u0131m s\u00fcreci ger\u00e7ekle\u015ftirilmektedir.<\/p>\n<div style=\"display:flex;gap:20px;align-items:flex-start;\">\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:10px;white-space:pre;line-height:0.8;padding:12px;width:160px;\">\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502        Agent Start       \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n              \u2502<br \/>\n              \u25bc<br \/>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502 1. Advertise Capabilities\u2502<br \/>\n\u2502                          \u2502<br \/>\n\u2502 Agent hangi yeteneklere  \u2502<br \/>\n\u2502 sahip oldu\u011funu duyurur   \u2502<br \/>\n\u2502                          \u2502<br \/>\n\u2502 &#8211; Weather                \u2502<br \/>\n\u2502 &#8211; Email                  \u2502<br \/>\n\u2502 &#8211; WebSearch              \u2502<br \/>\n\u2502 &#8211; FileSystem             \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n              \u2502<br \/>\n              \u25bc<br \/>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502 2. User Prompt           \u2502<br \/>\n\u2502                          \u2502<br \/>\n\u2502 &#8220;Ankara&#8217;da hava durumu?&#8221; \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n              \u2502<br \/>\n              \u25bc<br \/>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502 3. Agent Reasoning       \u2502<br \/>\n\u2502                          \u2502<br \/>\n\u2502 LLM d\u00fc\u015f\u00fcn\u00fcr:             \u2502<br \/>\n\u2502 &#8220;Weather capability      \u2502<br \/>\n\u2502 gerekli.&#8221;                \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n              \u2502<br \/>\n              \u25bc<br \/>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502 4. Load Skill            \u2502<br \/>\n\u2502                          \u2502<br \/>\n\u2502 WeatherSkill runtime&#8217;da  \u2502<br \/>\n\u2502 y\u00fcklenir                 \u2502<br \/>\n\u2502                          \u2502<br \/>\n\u2502 Tool schema art\u0131k        \u2502<br \/>\n\u2502 LLM contextinde          \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n              \u2502<br \/>\n              \u25bc<br \/>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502 5. Read Resources        \u2502<br \/>\n\u2502 (Skill Execution)        \u2502<br \/>\n\u2502                          \u2502<br \/>\n\u2502 Weather API \u00e7a\u011fr\u0131l\u0131r     \u2502<br \/>\n\u2502 Veri al\u0131n\u0131r              \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n              \u2502<br \/>\n              \u25bc<br \/>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502 6. Agent Response        \u2502<br \/>\n\u2502                          \u2502<br \/>\n\u2502 &#8220;Ankara&#8217;da s\u0131cakl\u0131k      \u2502<br \/>\n\u2502 25\u00b0C ve g\u00fcne\u015fli.&#8221;        \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n  <\/div>\n<div style=\"flex:1;\">\n\u015eimdi buradaki ak\u0131\u015ftan ve yap\u0131lan \u00e7al\u0131\u015fman\u0131n mahiyetinden akla (hakl\u0131 olarak) <a href=\"https:\/\/www.gencayyildiz.com\/blog\/tag\/mcp\/\" target=\"_blank\">Model Context Protocol<\/a> yahut <a href=\"https:\/\/www.gencayyildiz.com\/blog\/tag\/semantic-kernel\/\" target=\"_blank\">Semantic Kernel<\/a>&#8216;daki Plugin yap\u0131lanmas\u0131 geliyor olabilir&#8230; Ki evet, esas\u0131nda i\u015flevsel olarak ayn\u0131 kategoriye sahip ili\u015fkisel teknikler olsalar da ayn\u0131 \u015feyler de\u011fildirler!<\/p>\n<blockquote style=\"font-size:12px;\"><p><em>MCP, Agent Skill ve Semantic Kernel&#8217;daki Plugin mant\u0131\u011f\u0131 ayn\u0131 problemin farkl\u0131 katmanlardaki \u00e7\u00f6z\u00fcmleridir&#8230;<\/em><\/p><\/blockquote>\n<p>Malumunuz MCP, ad\u0131 \u00fczerinde bir protokold\u00fcr ve esas amac\u0131 AI modellerinin d\u0131\u015f sistemlerle standart bir \u015fekilde konu\u015fmas\u0131n\u0131 sa\u011flamakt\u0131r.<\/p>\n<p>Semantic Kernel&#8217;daki Plugin yap\u0131lanmas\u0131 ise AI&#8217;a kod fonksiyonlar\u0131n\u0131 tool olarak tan\u0131tma mekanizmas\u0131d\u0131r. Yani Plugin&#8217;i bir fonksiyonlar koleksiyonu olarak d\u00fc\u015f\u00fcnebiliriz.<\/p>\n<p>Agent Skills ise agent i\u00e7in bir capability paketidir. \u0130\u00e7inde sadece fonksiyon de\u011fil; prompt, workflow logic, resource ba\u011flant\u0131lar\u0131 ve farkl\u0131 agent \u00e7a\u011fr\u0131lar\u0131 gibi ba\u015fka \u015feyler de olabilir.<\/p>\n<blockquote style=\"font-size:12px;\"><p><em>Skill, Plugin&#8217;den daha kapsaml\u0131 bir capability paketidir.<\/em><\/p><\/blockquote>\n<p>Ve kritik bir ger\u00e7ek vard\u0131r ki, art\u0131k modern agent mimarileri \u015fu seyre do\u011fru meyletmektedirler:<\/p>\n<div style=\"display:flex;gap:20px;align-items:flex-start;\">\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:12px;white-space:pre;line-height:0.8;padding:12px;width:110px;\">\nLLM<br \/>\n  \u2502<br \/>\n  \u25bc<br \/>\nAgent Runtime<br \/>\n  \u2502<br \/>\n  \u25bc<br \/>\nSkills<br \/>\n  \u2502<br \/>\n  \u25bc<br \/>\nMCP Tools\n<\/div>\n<div style=\"flex:1;\">\nVe hatta yak\u0131n gelecekte beklenen \u00f6zelliklerin aras\u0131nda, programmatic skill olu\u015fturma (API \u00fczerinden runtime&#8217;da skill kaydetme) ve skill i\u00e7indeki script&#8217;lerin do\u011frudan \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 da s\u00f6z konusu olacakt\u0131r.\n  <\/div>\n<\/p><\/div>\n<p>Bunlardan kaynakl\u0131, yar\u0131n Agent Skill ile MCP tool yap\u0131lar\u0131n\u0131n daha bask\u0131n olaca\u011f\u0131n\u0131 \u015fimdiden s\u00f6ylemekte fayda vard\u0131r.\n  <\/p><\/div>\n<\/div>\n<h5><span class=\"ez-toc-section\" id=\"SKILLmd_dosyasinin_formati_nasildir\"><\/span><code style=\"color:#f87171\">SKILL.md<\/code> dosyas\u0131n\u0131n format\u0131 nas\u0131ld\u0131r?<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p><code style=\"color:#f87171\">SKILL.md<\/code>, bir Agent Skill&#8217;in tan\u0131m dosyas\u0131d\u0131r. En basit haliyle i\u00e7eri\u011fi a\u015fa\u011f\u0131daki gibidir:<\/p>\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:12px;white-space:pre;line-height:0.8;padding:12px;width:410px;\">\n# Weather Skill<\/p>\n<p>## Description<br \/>\nProvides weather information for a given city.<\/p>\n<p>## When to Use<br \/>\nUse this skill when the user asks about:<br \/>\n&#8211; current weather<br \/>\n&#8211; temperature<br \/>\n&#8211; forecast<\/p>\n<p>## Inputs<br \/>\n&#8211; city: Name of the city<\/p>\n<p>## Outputs<br \/>\n&#8211; weather summary<br \/>\n&#8211; temperature<\/p>\n<p>## Resources<br \/>\n&#8211; weather_api.md\n<\/p><\/div>\n<p>Bu dosya agent&#8217;a \u015funu anlat\u0131r: &#8220;bu skill ne i\u015fe yarar, ne zaman kullan\u0131lmal\u0131d\u0131r ve hangi kaynaklar\u0131 kullanmaktad\u0131r&#8230;&#8221;<\/p>\n<p>Burada Progressive Disclosure i\u00e7in \u00f6nemli k\u0131s\u0131m genelde <code>## Resources<\/code> b\u00f6l\u00fcm\u00fcd\u00fcr. Buradan anlayaca\u011f\u0131m\u0131z \u015fudur ki, Microsoft Agent Framework&#8217;te bir skill kendisine ait di\u011fer markdown dosyalar\u0131n\u0131 resources b\u00f6l\u00fcm\u00fc \u00fczerinden referans g\u00f6sterebilmektedir. Zaten agent ilk ba\u015flad\u0131\u011f\u0131nda advertise a\u015famas\u0131nda sadece SKILL.md&#8217;i g\u00f6recektir. Ard\u0131ndan kullan\u0131c\u0131 prompt&#8217;u geldi\u011finde ve skill y\u00fcklenmesi gerekti\u011finde, resources alt\u0131nda listelenen md dosyalar\u0131 load edilecek ve okunacakt\u0131r.<\/p>\n<p>Daha ger\u00e7ek\u00e7i bir SKILL.md i\u00e7in a\u015fa\u011f\u0131daki yap\u0131lanmay\u0131 inceleyiniz;<\/p>\n<table>\n<thead>\n<tr>\n<th>SKILL.md<\/th>\n<th>email_api.md<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"width:50%;text-align:left;vertical-align: top;\">\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:12px;white-space:pre;line-height:0.8;padding:12px;width:90%;\">\n# Email Sender Skill<\/p>\n<p>## Description<br \/>\nAllows the agent to send emails to recipients.<\/p>\n<p>## Capabilities<br \/>\n&#8211; send email<br \/>\n&#8211; attach files<\/p>\n<p>## When to Use<br \/>\nUse this skill when:<br \/>\n&#8211; the user asks to send an email<br \/>\n&#8211; the user asks to share information via email<\/p>\n<p>## Inputs<br \/>\n&#8211; recipient<br \/>\n&#8211; subject<br \/>\n&#8211; body<\/p>\n<p>## Outputs<br \/>\n&#8211; confirmation message<\/p>\n<p>## Resources<br \/>\n&#8211; email_api.md<br \/>\n&#8211; email_examples.md\n<\/p><\/div>\n<\/td>\n<td style=\"width:50%;text-align:left;vertical-align: top;\">\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:12px;white-space:pre;line-height:0.8;padding:12px;width:90%;\">\n# Email API<\/p>\n<p>POST \/send-email<\/p>\n<p>Parameters:<br \/>\n&#8211; recipient<br \/>\n&#8211; subject<br \/>\n&#8211; body<\/p>\n<p>Example:<\/p>\n<p>{<br \/>\n  &#8220;recipient&#8221;: &#8220;user@example.com&#8221;,<br \/>\n  &#8220;subject&#8221;: &#8220;Report&#8221;,<br \/>\n  &#8220;body&#8221;: &#8220;Here is the report&#8221;<br \/>\n}\n<\/p><\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4><span class=\"ez-toc-section\" id=\"Guvenlik_Acisindan_Dikkat_edilmesi_Gerekenler\"><\/span>G\u00fcvenlik A\u00e7\u0131s\u0131ndan Dikkat edilmesi Gerekenler<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Agent Skill&#8217;leri, projelerimize ekledi\u011fimiz \u00fc\u00e7\u00fcnc\u00fc parti kodlar gibi d\u00fc\u015f\u00fcnmeli ve ayn\u0131 g\u00fcvenlik disiplini uygulanmal\u0131d\u0131r. \u00c7\u00fcnk\u00fc, skill&#8217;lerin i\u00e7eri\u011fi agent&#8217;\u0131n context&#8217;ine enjekte edilmektedir ve baz\u0131 skill&#8217;ler script \u00e7al\u0131\u015ft\u0131rabilmektedir. Bu y\u00fczden g\u00fcvenlik a\u00e7\u0131s\u0131ndan dikkatli olmak gerekmektedir. Bunun i\u00e7in a\u015fa\u011f\u0131daki bir ka\u00e7 maddeyi g\u00f6z \u00f6n\u00fcne almakta fayda g\u00f6rmekteyim;<\/p>\n<ul style=\"font-size:14px;\">\n<li><strong><em>Bir Skill&#8217;i kullanmadan \u00f6nce incelenmelidir!<\/em><\/strong><br \/>\nBir skill&#8217;i projeye eklemeden \u00f6nce i\u00e7eri\u011fi(SKILL.md, script dosyalar\u0131, resource .md dosyalar\u0131) mutlaka kontrol edilmelidir.<\/p>\n<div style=\"background-color: #f4f4f4; padding: 15px; border-left: 5px solid #3498db; margin: 20px 0; font-style: italic; color: #333; font-size: 14px; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1); border-radius: 8px; width: 40%; float: right; box-sizing: border-box;\">\n  <strong><em>Typosquatting sald\u0131r\u0131s\u0131 nedir?<\/em><\/strong><br \/>\nPop\u00fcler bir paket\/skill ad\u0131n\u0131n yaz\u0131m\u0131na \u00e7ok benzeyen sahte bir isim kullan\u0131larak insanlar\u0131 kand\u0131rma sald\u0131r\u0131s\u0131d\u0131r.<\/p>\n<p>Misal olarak;<br \/>\n<code>weather-skill<\/code> ad\u0131nda ger\u00e7ek bir paketin<\/p>\n<ul style=\"font-size:12px;\">\n<li>wether-skill<\/li>\n<li>weather-sk1ll<\/li>\n<li>weather_skill<\/li>\n<li>weatherr-skill<\/li>\n<\/ul>\n<p>\u015feklinde sahte paketleri olmas\u0131 bir Typosquatting tuza\u011f\u0131d\u0131r!<\/p>\n<p>Bu tuzakla hedef yaz\u0131l\u0131mda zararl\u0131 kodlar \u00e7al\u0131\u015ft\u0131r\u0131labilece\u011fi gibi daha da tehlikelisi agent d\u00fcnyas\u0131nda <em>prompt injection<\/em> durumu s\u00f6z konusu olabilir!\n<\/div>\n<p>\u00d6zellikle;<\/p>\n<ul>\n<li><em>Script ger\u00e7ekten s\u00f6yledi\u011fi i\u015fi yap\u0131yor mu?<\/em><\/li>\n<li><em>G\u00fcvenli\u011fi a\u015fmaya \u00e7al\u0131\u015fan talimatlar var m\u0131?<\/em><\/li>\n<li><em>Veri s\u0131zd\u0131rmaya \u00e7al\u0131\u015fan \u015feyler s\u00f6z konusu mu?<\/em><\/li>\n<li><em>Agent config dosyalar\u0131n\u0131 de\u011fi\u015ftirmeye \u00e7al\u0131\u015f\u0131yor mu?<\/em><\/li>\n<\/ul>\n<p>g\u00f6zden ge\u00e7irilmelidir&#8230;<\/p>\n<blockquote><p><em>Unutmay\u0131n, skill i\u00e7eri\u011fi zararl\u0131 prompt veya kod i\u00e7erebilmektedir!<\/em><\/p><\/blockquote>\n<\/li>\n<li><strong><em>Kaynak g\u00fcvenilir olmal\u0131d\u0131r!<\/em><\/strong><br \/>\nSkill&#8217;leri g\u00fcvenilir kaynaklardan y\u00fcklemeye \u00f6zen g\u00f6sterilmelidir. \u00d6zellikle bilinen geli\u015ftiricilerin olu\u015fturdu\u011fu skill&#8217;ler ya da kurum i\u00e7inde kullan\u0131lanlar tercih edilmelidir.<\/p>\n<p><em><u>Ki \u00f6zellikle Typosquatting sald\u0131r\u0131lar\u0131na dikkat edilmelidir!<\/u><\/em><\/p>\n<\/li>\n<li><strong><em>\u0130zolasyon \u00f6nemlidir!<\/em><\/strong><br \/>\nScript \u00e7al\u0131\u015ft\u0131ran skill&#8217;lerin izole ortam da \u00e7al\u0131\u015fmas\u0131 \u00f6nem arz etmektedir. \u00d6zellikle dosya sistemine eri\u015fimin s\u0131n\u0131rl\u0131 oldu\u011fu, network eri\u015fiminin ve sistem komutlar\u0131n\u0131n k\u0131s\u0131tl\u0131 oldu\u011fu ortam olmas\u0131na \u00f6zen g\u00f6sterilmelidir.<\/p>\n<p>Hatta; dosya silme, veri g\u00f6nderme veyahut sistem komutu i\u015fleme gibi hassas i\u015flemler \u00e7al\u0131\u015ft\u0131r\u0131lmadan \u00f6nce kullan\u0131c\u0131 onay\u0131 al\u0131nmas\u0131 en do\u011fru yakla\u015f\u0131md\u0131r.\n<\/li>\n<li><strong><em>T\u00fcm s\u00fcre\u00e7 kay\u0131t alt\u0131na al\u0131nmal\u0131d\u0131r!<\/em><\/strong><br \/>\nAgent&#8217;\u0131n ne yapt\u0131\u011f\u0131 kay\u0131t alt\u0131na al\u0131nmal\u0131d\u0131r! \u00d6zellikle hangi skill y\u00fcklenmi\u015f, hangi resource okunmu\u015f ve hangi script \u00e7al\u0131\u015ft\u0131r\u0131lm\u0131\u015f t\u00fcm bunlar loglanmal\u0131d\u0131r!<\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Skills_vs_Workflows_Hangisi_Ne_Zaman_Kullanilmali\"><\/span>Skills vs. Workflows | Hangisi Ne Zaman Kullan\u0131lmal\u0131?<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Skills yahut workflows&#8230; \u0130kisi de agent&#8217;\u0131n yapabileceklerini geni\u015fletmektedir amma velakin \u00e7al\u0131\u015fma \u015fekiller tamamen farkl\u0131l\u0131k g\u00f6stermektedir.<\/p>\n<p>Skill&#8217;de, hangi agent&#8217;\u0131n hangi yetene\u011fe sahip oldu\u011fu taraf\u0131m\u0131zca tan\u0131mlan\u0131rken, nas\u0131l kullan\u0131laca\u011f\u0131n\u0131n karar\u0131 AI taraf\u0131ndan verilmektedir. Haliyle ak\u0131\u015f\u0131n kontrol\u00fc AI&#8217;dad\u0131r.<\/p>\n<p>Workflow&#8217;da ise ak\u0131\u015f, agent&#8217;\u0131n m\u00fcdahale edemeyece\u011fi \u015fekilde ve t\u00fcm kontrol bizde olacak bi\u00e7imde taraf\u0131m\u0131zca tasarlanmaktad\u0131r. Dolay\u0131s\u0131yla \u00f6ng\u00f6r\u00fclebilir bir davran\u0131\u015f durumu s\u00f6z konusudur ve t\u00fcm s\u00fcre\u00e7 deterministiktir.<\/p>\n<p>Bundan kaynakl\u0131 skill; <em>hava durumunu getirme<\/em>, <em>metni \u00f6zetleme<\/em>, <em>kod analizi ger\u00e7ekle\u015ftirme<\/em> vs. gibi k\u00fc\u00e7\u00fck ve tek odakl\u0131 i\u015fler i\u00e7in ideal&#8217;ken, workflow ise <em>bir sipari\u015f s\u00fcreci<\/em> yahut <em>kredi ba\u015fvuru s\u00fcreci<\/em> gibi \u00e7ok ad\u0131ml\u0131 <u>s\u00fcre\u00e7ler<\/u> i\u00e7in daha kullan\u0131\u015fl\u0131d\u0131r. \u00c7\u00fcnk\u00fc bir s\u00fcre\u00e7, tek bir skill ile \u00e7\u00f6z\u00fclemeyece\u011fi i\u00e7in workflow daha uygun bir yakla\u015f\u0131m olacakt\u0131r.<\/p>\n<blockquote><p><em style=\"font-size:12px;\">Skill, AI&#8217;\u0131n istedi\u011fi gibi kullanabildi\u011fi k\u00fc\u00e7\u00fck bir yetenekken, workflow ise bir i\u015flev i\u00e7in ad\u0131m ad\u0131m tasarlanm\u0131\u015f bir s\u00fcre\u00e7tir.<\/em><\/p><\/blockquote>\n<h4><span class=\"ez-toc-section\" id=\"FileAgentSkillsProvider_Nedir\"><\/span>FileAgentSkillsProvider Nedir?<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><code>FileAgentSkillsProvider<\/code>, dosya sistemindeki skill klas\u00f6rlerini taray\u0131p <code style=\"color:#f87171\">SKILL.md<\/code> dosyalar\u0131n\u0131 agent&#8217;a y\u00fckleyen bir provider&#8217;d\u0131r.<\/p>\n<p><em>\u00c7al\u0131\u015fma mant\u0131\u011f\u0131 nas\u0131ld\u0131r?<\/em><br \/>\nAgent Framework&#8217;te skill&#8217;ler genelde a\u015fa\u011f\u0131dakine benzer dosya sisteminde tutulmaktad\u0131rlar;<\/p>\n<div style=\"display:flex;gap:20px;align-items:flex-start;\">\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:12px;white-space:pre;line-height:0.8;padding:12px;width:210px;\">\nskills\/<br \/>\n\u2514\u2500\u2500 user-skills\/<br \/>\n    \u251c\u2500\u2500 SKILL.md<br \/>\n    \u2514\u2500\u2500 resources\/<br \/>\n        \u251c\u2500\u2500 API_REFERENCE.md<br \/>\n        \u251c\u2500\u2500 ERROR_CODES.md<br \/>\n        \u2514\u2500\u2500 OUTPUT_FORMATS.md\n<\/div>\n<div style=\"flex:1;\">\n<code>FileAgentSkillsProvider<\/code>, bu dosya yap\u0131s\u0131n\u0131 tarar ve i\u00e7erisindeki <code style=\"color:#f87171\">SKILL.md<\/code> dosyalar\u0131n\u0131 bulur. Ard\u0131ndan bir skill manifest olu\u015fturup, agent&#8217;a advertise eder ve b\u00f6ylece agent art\u0131k bu yeteneklerden haberdar olmu\u015f olur.\n  <\/div>\n<\/p><\/div>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nvar skillsProvider = new FileAgentSkillsProvider(skillPath: Path.Combine(AppContext.BaseDirectory, &quot;skills&quot;));\r\n<\/pre>\n<\/div>\n<p>Normal \u015fartlarda <code>FileAgentSkillsProvider<\/code>, skill&#8217;leri LLM&#8217;e otomatik bir system prompt ile tan\u0131tmaktad\u0131r. Bizler istendi\u011fi taktirde bu skill&#8217;lerin agent&#8217;a nas\u0131l tan\u0131t\u0131laca\u011f\u0131n\u0131 belirleyen system propt \u015fablonuna da m\u00fcdahale edebilir ve nas\u0131l kullan\u0131lacaklar\u0131na dair bir y\u00f6nlendirmede bulunabiliriz.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nvar skillsProvider = new FileAgentSkillsProvider(\r\n    skillPath: Path.Combine(AppContext.BaseDirectory, &quot;skills&quot;),\r\n    options: new FileAgentSkillsProviderOptions\r\n    {\r\n        SkillsInstructionPrompt = &quot;&quot;&quot;\r\n            A\u015fa\u011f\u0131daki yeteneklere sahip bir yapay zek\u00e2 ajan\u0131s\u0131n:\r\n\r\n            {{skills}}\r\n\r\n            Bu yetenekleri yaln\u0131zca kullan\u0131c\u0131n\u0131n iste\u011fi onlarla \u00f6rt\u00fc\u015ft\u00fc\u011f\u00fcnde kullan.\r\n            Bir yetene\u011fi kullanmadan \u00f6nce her zaman ilgili kaynak dok\u00fcmantasyonunu takip et.\r\n        &quot;&quot;&quot;\r\n    });\r\n<\/pre>\n<\/div>\n<blockquote><p><em style=\"font-size:12px;\">Dikkat ederseniz Agent Skills, esas\u0131nda tamamen prompt tabanl\u0131 \u00e7al\u0131\u015fan bir \u00f6zelliktir.<\/em><\/p><\/blockquote>\n<blockquote><p><em style=\"font-size:12px;color:purple;\">Bir LLM&#8217;in Agent Skill \u00f6zelli\u011fini kullanabilmesi i\u00e7in tool \u00f6zelli\u011fini destekliyor olmas\u0131 gerekmektedir!<\/em><\/p><\/blockquote>\n<h4><span class=\"ez-toc-section\" id=\"Ornek_Uygulama\"><\/span>\u00d6rnek Uygulama<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Evet, \u015fimdi s\u0131ra bu \u00f6zelli\u011fi deneyimlemeye geldi diyebiliriz. Burada <a href=\"https:\/\/openrouter.ai\/\" target=\"_blank\">OpenRouter<\/a> platformu \u00fczerinden <a href=\"https:\/\/openrouter.ai\/google\/gemini-2.5-flash-lite-preview-09-2025\" target=\"_blank\">Google: Gemini 2.5 Flash Lite Preview 09-2025<\/a> modelini kullanarak <a href=\"https:\/\/jsonplaceholder.typicode.com\/\" target=\"_blank\">JSONPlaceholder<\/a>&#8216;a \u00f6zel geli\u015ftirece\u011fimiz skill&#8217;leri s\u00fcrece dahil eden bir AI Agent \u00e7al\u0131\u015fmas\u0131 ger\u00e7ekle\u015ftiriyor olaca\u011f\u0131z. Bu skill&#8217;ler ile AI Agent&#8217;a, JSONPlaceholder&#8217;\u0131n bizlere sa\u011flad\u0131\u011f\u0131 verilere has sorular y\u00f6neltebilecek ve agent&#8217;\u0131n yeteneklerini b\u00f6ylece zenginle\u015ftirmi\u015f olaca\u011f\u0131z. Bunun  i\u00e7in a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 s\u0131ras\u0131yla takip etmeniz yeterli olacakt\u0131r:<\/p>\n<ul style=\"font-size:14px;\">\n<li><em><strong>Ad\u0131m 1<\/strong> <span style=\"color:green;\">(SKILL.md Dosyas\u0131n\u0131n Olu\u015fturulmas\u0131)<\/span><\/em><br \/>\n\u0130lk olarak, AI Agent&#8217;lara yetenek kazand\u0131raca\u011f\u0131m\u0131z dosya olan <code style=\"color:#f87171\">SKILL.md<\/code> dosyas\u0131n\u0131 ve kaynaklar\u0131n\u0131 tasarlayarak ba\u015flayal\u0131m.<\/p>\n<details>\n<summary style=\"color:#316069\">SKILL.md i\u00e7eri\u011fini g\u00f6rmek i\u00e7in t\u0131klay\u0131n\u0131z&#8230;<\/summary>\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:12px;white-space:pre;line-height:0.8;padding:12px;width:100%;\">&#8212;<br \/>\nname: user-skills<br \/>\ndescription: JSONPlaceholder API \u00fczerinden kullan\u0131c\u0131 bilgilerini sorgular, listeler ve detay getirir.<br \/>\n  Kullan\u0131c\u0131 arama, listeleme veya profil sorgulama istendi\u011finde kullan.<br \/>\n&#8212;<\/p>\n<p>## Description<\/p>\n<p>Bu skill, harici REST API&#8217;den kullan\u0131c\u0131 verilerini \u00e7ekerek anlaml\u0131 bir \u015fekilde sunar.<br \/>\nDetayl\u0131 API referans\u0131, hata kodlar\u0131 ve \u00e7\u0131kt\u0131 formatlar\u0131 i\u00e7in resources\/ klas\u00f6r\u00fcne bak\u0131l\u0131r.<\/p>\n<p>## Capabilities<\/p>\n<p>&#8211; T\u00fcm kullan\u0131c\u0131lar\u0131 listele<br \/>\n&#8211; ID&#8217;ye g\u00f6re tekil kullan\u0131c\u0131 getir<br \/>\n&#8211; Kullan\u0131c\u0131y\u0131 isme veya e-postaya g\u00f6re filtrele<br \/>\n&#8211; Kullan\u0131c\u0131n\u0131n \u015firket ve adres bilgilerini g\u00f6ster<\/p>\n<p>## When to Use<\/p>\n<p>&#8211; &#8220;T\u00fcm kullan\u0131c\u0131lar\u0131 listele&#8221; veya &#8220;kullan\u0131c\u0131lar\u0131 g\u00f6ster&#8221; istendi\u011finde<br \/>\n&#8211; &#8220;X isimli kullan\u0131c\u0131y\u0131 bul&#8221; gibi tekil sorgularda<br \/>\n&#8211; &#8220;ID&#8217;si 3 olan kullan\u0131c\u0131n\u0131n bilgileri nedir?&#8221; sorusunda<br \/>\n&#8211; Kullan\u0131c\u0131 e-postas\u0131 veya \u015firket bilgisi soruldu\u011funda<\/p>\n<p>## Inputs<\/p>\n<p>&#8211; `user_id` (opsiyonel): Tekil kullan\u0131c\u0131 i\u00e7in numerik ID (1-10)<br \/>\n&#8211; `name_filter` (opsiyonel): \u0130sme g\u00f6re filtreleme i\u00e7in metin<br \/>\n&#8211; `email_filter` (opsiyonel): E-postaya g\u00f6re filtreleme i\u00e7in metin<br \/>\n&#8211; Hi\u00e7biri verilmezse t\u00fcm kullan\u0131c\u0131lar listelenir<\/p>\n<p>## Outputs<\/p>\n<p>\u00c7\u0131kt\u0131 formatlar\u0131n\u0131n tamam\u0131 i\u00e7in `resources\/OUTPUT_FORMATS.md` dosyas\u0131na bak.<\/p>\n<p>## Resources<\/p>\n<p>&#8211; `resources\/API_REFERENCE.md` \u2014 Endpoint listesi, request\/response \u00f6rnekleri<br \/>\n&#8211; `resources\/ERROR_CODES.md` \u2014 Olas\u0131 hata kodlar\u0131 ve \u00e7\u00f6z\u00fcm \u00f6nerileri<br \/>\n&#8211; `resources\/OUTPUT_FORMATS.md` \u2014 Ba\u015far\u0131l\u0131 ve hatal\u0131 yan\u0131t formatlar\u0131<\/p>\n<p>## Instructions<\/p>\n<p>1. Kullan\u0131c\u0131n\u0131n ne istedi\u011fini belirle: listeleme mi, tekil sorgu mu, filtreleme mi?<br \/>\n2. API detaylar\u0131 i\u00e7in `resources\/API_REFERENCE.md` dosyas\u0131n\u0131 oku.<br \/>\n3. \u0130ste\u011fe uygun endpoint&#8217;i \u00e7a\u011f\u0131r:<br \/>\n   &#8211; Listeleme \u2192 GET \/users<br \/>\n   &#8211; Tekil \u2192 GET \/users\/{id}<br \/>\n   &#8211; Filtre \u2192 GET \/users sonras\u0131 client-side filtrele<br \/>\n4. Hata al\u0131rsan `resources\/ERROR_CODES.md` dosyas\u0131na bak ve kullan\u0131c\u0131y\u0131 bilgilendir.<br \/>\n5. Yan\u0131t\u0131 `resources\/OUTPUT_FORMATS.md` format\u0131na g\u00f6re d\u00fczenle ve T\u00fcrk\u00e7e sun.<\/p><\/div>\n<\/details>\n<details>\n<summary style=\"color:#316069\">API_REFERENCE.md i\u00e7eri\u011fini g\u00f6rmek i\u00e7in t\u0131klay\u0131n\u0131z&#8230;<\/summary>\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:12px;white-space:pre;line-height:0.8;padding:12px;width:410px;\">## API Referans\u0131<\/p>\n<p>Base URL: `https:\/\/jsonplaceholder.typicode.com`<\/p>\n<p>### T\u00fcm Kullan\u0131c\u0131lar\u0131 Listele<br \/>\n&#8220;`<br \/>\nGET \/users<br \/>\n&#8220;`<\/p>\n<p>Response \u00f6rne\u011fi:<br \/>\n&#8220;`json<br \/>\n[<br \/>\n  {<br \/>\n    &#8220;id&#8221;: 1,<br \/>\n    &#8220;name&#8221;: &#8220;Leanne Graham&#8221;,<br \/>\n    &#8220;username&#8221;: &#8220;Bret&#8221;,<br \/>\n    &#8220;email&#8221;: &#8220;Sincere@april.biz&#8221;,<br \/>\n    &#8220;phone&#8221;: &#8220;1-770-736-0988&#8221;,<br \/>\n    &#8220;address&#8221;: { &#8220;city&#8221;: &#8220;Gwenborough&#8221; },<br \/>\n    &#8220;company&#8221;: { &#8220;name&#8221;: &#8220;Romaguera-Crona&#8221; }<br \/>\n  }<br \/>\n]<br \/>\n&#8220;`<\/p>\n<p>### Tekil Kullan\u0131c\u0131 Getir<br \/>\n&#8220;`<br \/>\nGET \/users\/{id}<br \/>\n&#8220;`<\/p>\n<p>&#8211; `id`: 1 ile 10 aras\u0131nda integer<br \/>\n&#8211; Ge\u00e7ersiz ID i\u00e7in HTTP 404 d\u00f6ner<\/p>\n<p>### Notlar<\/p>\n<p>&#8211; Authentication gerektirmez<br \/>\n&#8211; Rate limit yoktur (test API)<br \/>\n&#8211; T\u00fcm yan\u0131tlar JSON format\u0131ndad\u0131r<\/p><\/div>\n<\/details>\n<details>\n<summary style=\"color:#316069\">ERROR_CODES.md i\u00e7eri\u011fini g\u00f6rmek i\u00e7in t\u0131klay\u0131n\u0131z&#8230;<\/summary>\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:12px;white-space:pre;line-height:0.8;padding:12px;width:410px;\">## Hata Kodlar\u0131 ve \u00c7\u00f6z\u00fcmler<\/p>\n<p>### HTTP 404 \u2014 Kullan\u0131c\u0131 Bulunamad\u0131<br \/>\n&#8211; Sebep: Ge\u00e7ersiz veya mevcut olmayan user_id<br \/>\n&#8211; Ge\u00e7erli ID aral\u0131\u011f\u0131: 1-10<br \/>\n&#8211; \u00c7\u00f6z\u00fcm: Kullan\u0131c\u0131ya ge\u00e7erli aral\u0131\u011f\u0131 hat\u0131rlat<\/p>\n<p>### HTTP 500 \u2014 Sunucu Hatas\u0131<br \/>\n&#8211; Sebep: API ge\u00e7ici olarak eri\u015filemez<br \/>\n&#8211; \u00c7\u00f6z\u00fcm: Birka\u00e7 saniye bekleyip tekrar dene<\/p>\n<p>### Ba\u011flant\u0131 Hatas\u0131 \u2014 Network Error<br \/>\n&#8211; Sebep: \u0130nternet ba\u011flant\u0131s\u0131 yok veya API adresi de\u011fi\u015fmi\u015f<br \/>\n&#8211; \u00c7\u00f6z\u00fcm: Ba\u011flant\u0131y\u0131 kontrol et, base URL&#8217;i do\u011frula<\/p>\n<p>### Bo\u015f Sonu\u00e7 \u2014 Filtre E\u015fle\u015fmedi<br \/>\n&#8211; Sebep: Verilen isim veya e-posta hi\u00e7bir kay\u0131tla e\u015fle\u015fmedi<br \/>\n&#8211; \u00c7\u00f6z\u00fcm: Daha k\u0131sa veya farkl\u0131 bir arama terimi dene<\/p><\/div>\n<\/details>\n<details>\n<summary style=\"color:#316069\">OUTPUT_FORMATS.md i\u00e7eri\u011fini g\u00f6rmek i\u00e7in t\u0131klay\u0131n\u0131z&#8230;<\/summary>\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:12px;white-space:pre;line-height:0.8;padding:12px;width:410px;\">## \u00c7\u0131kt\u0131 Formatlar\u0131<\/p>\n<p>### Tekil Kullan\u0131c\u0131 (Ba\u015far\u0131l\u0131)<br \/>\n&#8220;`json<br \/>\n{<br \/>\n  &#8220;id&#8221;: 1,<br \/>\n  &#8220;name&#8221;: &#8220;Leanne Graham&#8221;,<br \/>\n  &#8220;email&#8221;: &#8220;Sincere@april.biz&#8221;,<br \/>\n  &#8220;phone&#8221;: &#8220;1-770-736-0988&#8221;,<br \/>\n  &#8220;company&#8221;: &#8220;Romaguera-Crona&#8221;,<br \/>\n  &#8220;city&#8221;: &#8220;Gwenborough&#8221;<br \/>\n}<br \/>\n&#8220;`<\/p>\n<p>### Kullan\u0131c\u0131 Listesi (Ba\u015far\u0131l\u0131)<br \/>\n&#8220;`json<br \/>\n[<br \/>\n  {<br \/>\n    &#8220;id&#8221;: 1,<br \/>\n    &#8220;name&#8221;: &#8220;Leanne Graham&#8221;,<br \/>\n    &#8220;email&#8221;: &#8220;Sincere@april.biz&#8221;,<br \/>\n    &#8220;company&#8221;: &#8220;Romaguera-Crona&#8221;<br \/>\n  }<br \/>\n]<br \/>\n&#8220;`<\/p>\n<p>### Hata Durumu<br \/>\n&#8220;`json<br \/>\n{<br \/>\n  &#8220;error&#8221;: &#8220;Kullan\u0131c\u0131 bulunamad\u0131&#8221;,<br \/>\n  &#8220;user_id&#8221;: 99<br \/>\n}<br \/>\n&#8220;`<\/p>\n<p>### Bo\u015f Sonu\u00e7<br \/>\n&#8220;`json<br \/>\n{<br \/>\n  &#8220;result&#8221;: [],<br \/>\n  &#8220;message&#8221;: &#8220;Arama kriterinizle e\u015fle\u015fen kullan\u0131c\u0131 bulunamad\u0131.&#8221;<br \/>\n}<br \/>\n&#8220;`<\/p><\/div>\n<\/details>\n<p>Dikkat ederseniz, <code style=\"color:#f87171\">SKILL.md<\/code> ve resources dosyalar\u0131 ifade ettikleri yetenekler a\u00e7\u0131s\u0131ndan t\u00fcm detaylar\u0131yla tasarlanm\u0131\u015ft\u0131r. \u00d6zellikle kullan\u0131c\u0131larla ilgili prompt&#8217;ta istekler geldi\u011fi taktirde JSONPlaceholder&#8217;a hangi endpoint \u00fczerinden, nas\u0131l istekte bulunulaca\u011f\u0131 <code style=\"color:#f87171\">API_REFERENCE.md<\/code> dosyas\u0131nda detayl\u0131ca ifade edilmektedir. Ve hatta ilgili dosyaya g\u00f6z atarsan\u0131z hedef kayna\u011f\u0131n; authentication gerektirmedi\u011fi, rate limiting kontrol\u00fcn\u00fcn olmad\u0131\u011f\u0131 ve t\u00fcm yan\u0131tlara kar\u015f\u0131n JSON format\u0131nda netice verdi\u011fi \u015feklinde bir seviyede detaylara kadar temas edildi\u011fini g\u00f6receksiniz. Bunlar\u0131n d\u0131\u015f\u0131nda <code style=\"color:#f87171\">ERROR_CODES.md<\/code> dosyas\u0131nda olas\u0131 hatalar\u0131n tan\u0131mlar\u0131 ve <code style=\"color:#f87171\">OUTPUT_FORMATS.md<\/code> dosyas\u0131nda da kaynakta gelecek cevaplar\u0131n formatlar\u0131 bildirilmi\u015ftir.<\/p>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2026\/03\/Microsoft-Agent-Framework-Agent-Skills-Ile-AI-Agentin-Yeteneklerini-Genisletelim.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2026\/03\/Microsoft-Agent-Framework-Agent-Skills-Ile-AI-Agentin-Yeteneklerini-Genisletelim.png\" alt=\"Microsoft Agent Framework - Agent Skills \u0130le AI Agent&#039;\u0131n Yeteneklerini Geni\u015fletelim\" width=\"335\" height=\"243\" class=\"alignleft size-full wp-image-28534\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2026\/03\/Microsoft-Agent-Framework-Agent-Skills-Ile-AI-Agentin-Yeteneklerini-Genisletelim.png 335w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2026\/03\/Microsoft-Agent-Framework-Agent-Skills-Ile-AI-Agentin-Yeteneklerini-Genisletelim-300x218.png 300w\" sizes=\"auto, (max-width: 335px) 100vw, 335px\" \/><\/a>Devam etmeden bir noktaya tekrar dikkatinizi \u00e7ekmek istiyorum. O da, yukar\u0131daki sat\u0131rlarda ifade edildi\u011fi \u00fczere, Agent Skills \u00f6zelli\u011finin burada da g\u00f6r\u00fcld\u00fc\u011f\u00fc gibi prompt tabanl\u0131 \u00e7al\u0131\u015ft\u0131\u011f\u0131na \u015fahit olmaktay\u0131z. Evet, format\u0131 her ne kadar markdown belgesi olsa da, geri kalan esas\u0131nda g\u00fczel ve izah edici bir prompt&#8217;tan ibaret olan dosyalardan bahsediyoruz.<\/p>\n<p>Velhas\u0131l&#8230; Uygulamada skill dosyalar\u0131n\u0131 yandaki g\u00f6rseldeki gibi bir klas\u00f6r yap\u0131s\u0131nda tuttu\u011fumuzu da s\u00f6ylemekte fayda g\u00f6rmekteyim.\n<\/li>\n<li><em><strong>Ad\u0131m 2<\/strong> <span style=\"color:green;\">(AI Agent&#8217;\u0131n Tasarlanmas\u0131)<\/span><\/em><br \/>\n\u015eimdi de a\u015fa\u011f\u0131daki gibi AI Agent&#8217;\u0131 tasarlayal\u0131m.<\/p>\n<p>\u00d6ncelikle konfig\u00fcrasyon de\u011ferlerimizi olu\u015ftural\u0131m:<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nvar configurations = (\r\n    model: &quot;google\/gemini-2.5-flash-lite-preview-09-2025&quot;,\r\n    endpoint: &quot;https:\/\/openrouter.ai\/api\/v1&quot;,\r\n    key: &quot;sk-or-v1-beb*****4e2b02897c8161&quot;\r\n    );\r\n<\/pre>\n<\/div>\n<p>Ard\u0131ndan <em>assistantAgent<\/em> ad\u0131ndan bir agent&#8217;\u0131 yap\u0131land\u0131ral\u0131m:<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nbuilder.Services.AddKeyedSingleton&lt;AIAgent&gt;(&quot;assistantAgent&quot;, (IServiceProvider serviceProvider, object o) =&gt;\r\n{\r\n    var chatClient = new ChatClient(\r\n        model: configurations.model,\r\n        credential: new ApiKeyCredential(configurations.key),\r\n        options: new OpenAIClientOptions\r\n        {\r\n            Endpoint = new Uri(configurations.endpoint)\r\n        });\r\n\r\n    return chatClient.AsAIAgent(new ChatClientAgentOptions\r\n    {\r\n        Name = &quot;assistantAgent&quot;,\r\n        ChatOptions = new()\r\n        {\r\n            Instructions = @&quot;\r\n                - Sen yard\u0131msever ve T\u00fcrk\u00e7e konu\u015fan bir asistans\u0131n. K\u0131sa ve \u00f6z cevaplar ver!\r\n                - G\u00f6revleri uygun skill'leri kullanarak yerine getir!\r\n            &quot;\r\n        }\r\n    });\r\n});\r\n<\/pre>\n<\/div>\n<p>Evet&#8230; G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere AI modeli kullanan bir AI Agent yap\u0131land\u0131rmas\u0131nda bulunmu\u015f vaziyetteyiz.\n<\/li>\n<li><em><strong>Ad\u0131m 3<\/strong> <span style=\"color:green;\">(Prompt Endpoint&#8217;inin Geli\u015ftirilmesi)<\/span><\/em><br \/>\n\u015eimdi de bu AI Agent&#8217;a kullan\u0131c\u0131 prompt&#8217;lar\u0131n\u0131 eri\u015ftirecek ve LLM&#8217;i \u00e7al\u0131\u015ft\u0131r\u0131p sonucu bizlere getirecek endpoint&#8217;i tasarlayal\u0131m:<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\napp.MapPost(&quot;\/&quot;, async (&#x5B;FromBody] PromptRequest propmtVM, &#x5B;FromKeyedServices(&quot;assistantAgent&quot;)] AIAgent assistantAgent) =&gt;\r\n{\r\n    if (propmtVM is null)\r\n        return Results.BadRequest();\r\n\r\n    var response = await assistantAgent.RunAsync(propmtVM.Prompt);\r\n\r\n    return TypedResults.Ok(response.Text);\r\n});\r\n<\/pre>\n<\/div>\n<p>Evet, art\u0131k bu a\u015famadan sonra yapt\u0131\u011f\u0131m\u0131z \u00e7al\u0131\u015fmadaki eksiklikleri tamamlamaya ba\u015flayabiliriz&#8230;\n<\/li>\n<li><em><strong>Ad\u0131m 4<\/strong> <span style=\"color:green;\">(FileAgentSkillsProvider \u0130le Skill Dosyalar\u0131n\u0131 AI Agent&#8217;a Aktaral\u0131m)<\/span><\/em><br \/>\nOlu\u015fturdu\u011fumuz &#8216;skills&#8217; klas\u00f6r\u00fcndeki <code style=\"color:#f87171\">SKILL.md<\/code> dosyas\u0131n\u0131 (ya da dosyalar\u0131n\u0131) <code>FileAgentSkillsProvider<\/code> ile AI Agent&#8217;a aktaral\u0131m:<\/p>\n<p>Bunun i\u00e7in \u00f6nce dosyalar\u0131 bulal\u0131m ve ard\u0131ndan a\u015fa\u011f\u0131daki gibi IoC container&#8217;a ekleyelim:<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nvar skillsProvider = new FileAgentSkillsProvider(skillPath: Path.Combine(AppContext.BaseDirectory, &quot;skills&quot;));\r\nbuilder.Services.AddSingleton(skillsProvider);\r\n<\/pre>\n<\/div>\n<p>Devam\u0131nda ise bu skill&#8217;leri 2. ad\u0131mda yap\u0131land\u0131rd\u0131\u011f\u0131m\u0131z AI Agent&#8217;a <code>AIContextProviders<\/code> property&#8217;si \u00fczerinden a\u015fa\u011f\u0131daki gibi aktaral\u0131m:<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nbuilder.Services.AddKeyedSingleton&lt;AIAgent&gt;(&quot;assistantAgent&quot;, (IServiceProvider serviceProvider, object o) =&gt;\r\n{\r\n    var chatClient = new ChatClient(\r\n        model: configurations.model,\r\n        credential: new ApiKeyCredential(configurations.key),\r\n        options: new OpenAIClientOptions\r\n        {\r\n            Endpoint = new Uri(configurations.endpoint)\r\n        });\r\n\r\n    return chatClient.AsAIAgent(new ChatClientAgentOptions\r\n    {\r\n        Name = &quot;assistantAgent&quot;,\r\n        ChatOptions = new()\r\n        {\r\n            Instructions = @&quot;\r\n                - Sen yard\u0131msever ve T\u00fcrk\u00e7e konu\u015fan bir asistans\u0131n. K\u0131sa ve \u00f6z cevaplar ver!\r\n                - G\u00f6revleri uygun skill'leri kullanarak yerine getir!\r\n            &quot;\r\n        },\r\n        AIContextProviders = &#x5B;\r\n            serviceProvider.GetRequiredService&lt;FileAgentSkillsProvider&gt;()\r\n            ]\r\n    });\r\n<\/pre>\n<\/div>\n<\/li>\n<li><em><strong>Ad\u0131m 5<\/strong> <span style=\"color:green;\">(AI Model&#8217;e HTTP Request Tool&#8217;u Kazand\u0131rma)<\/span><\/em><br \/>\n\u015eimdi, bu noktaya kadar yapt\u0131\u011f\u0131m\u0131z \u00e7al\u0131\u015fmalar\u0131 derleyip \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda, \u015f\u00f6yle bir eksiklikle kar\u015f\u0131la\u015faca\u011f\u0131z. Diyelim ki, a\u015fa\u011f\u0131daki prompt ile bir istekte bulunduk:<\/p>\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:12px;white-space:pre;line-height:0.8;padding:12px;width:510px;\">&#8220;Prompt&#8221;: &#8220;bana t\u00fcm kullan\u0131c\u0131 bilgilerini &#8216;ad &#8211; soyad&#8217; olarak getir.&#8221;<\/div>\n<p>Bize verece\u011fi cevap:<\/p>\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:12px;white-space:pre;line-height:0.8;padding:12px;width:450px;\">&#8220;Cevap&#8221;: API \u00e7a\u011fr\u0131s\u0131n\u0131 yapamad\u0131\u011f\u0131m i\u00e7in size verileri getiremiyorum.<br \/>\nL\u00fctfen do\u011frudan bir API \u00e7a\u011fr\u0131s\u0131 yapmam\u0131 sa\u011flayacak bir komut verin <\/div>\n<p>olacakt\u0131r. <em>Neden mi?<\/em> \u00c7\u00fcnk\u00fc, model prompt&#8217;tan <code style=\"color:#f87171\">SKILL.md<\/code>&#8216;deki yetenekleri kullanmas\u0131 ve belirtilen API&#8217;a istek g\u00f6ndermesi gerekti\u011fini anlamaktad\u0131r. Ancak HTTP iste\u011fini fiziksel olarak ger\u00e7ekle\u015ftirememektedir. \u00c7\u00fcnk\u00fc modelin internete eri\u015fimi yoktur! B\u00f6yle bir duruma kar\u015f\u0131n bizler modele HTTP isteklerini y\u00fcr\u00fctebilece\u011fi bir tool kazand\u0131rabiliriz!<\/p>\n<p>Bunun i\u00e7in a\u015fa\u011f\u0131daki gibi i\u00e7erisinde gerekli davran\u0131\u015flar\u0131 sergileyen \u00e7al\u0131\u015fmalar\u0131 bar\u0131nd\u0131ran UserTools ad\u0131nda bir s\u0131n\u0131f olu\u015ftural\u0131m.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public static class UserTools\r\n    {\r\n        static public Func&lt;string, Task&lt;dynamic?&gt;&gt; GetRequest =&gt;\r\n             &#x5B;Description(&quot;Verilen URL'e GET iste\u011fi atar ve JSON olarak sonucu d\u00f6nd\u00fcr\u00fcr.&quot;)] static async (&#x5B;Description(&quot;GET iste\u011finde bulunulacak URL&quot;)] string url) =&gt;\r\n             {\r\n                 using var httpClient = new HttpClient();\r\n                 return await httpClient.GetFromJsonAsync&lt;dynamic?&gt;(url);\r\n             };\r\n    }\r\n<\/pre>\n<\/div>\n<p>Ve ard\u0131ndan bu tool&#8217;u yine 2. ad\u0131mda yap\u0131land\u0131rd\u0131\u011f\u0131m\u0131z AI Agent&#8217;a a\u015fa\u011f\u0131daki gibi ekleyelim:<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nbuilder.Services.AddKeyedSingleton&lt;AIAgent&gt;(&quot;assistantAgent&quot;, (IServiceProvider serviceProvider, object o) =&gt;\r\n{\r\n    var chatClient = new ChatClient(\r\n        model: configurations.model,\r\n        credential: new ApiKeyCredential(configurations.key),\r\n        options: new OpenAIClientOptions\r\n        {\r\n            Endpoint = new Uri(configurations.endpoint)\r\n        })\r\n    .AsIChatClient()\r\n    .AsBuilder()\r\n    .UseFunctionInvocation() \/\/ \u2190 bu olmazsa tool \u00e7a\u011fr\u0131s\u0131 execute edilmez\r\n    .Build();\r\n\r\n    return chatClient.AsAIAgent(new ChatClientAgentOptions\r\n    {\r\n        Name = &quot;assistantAgent&quot;,\r\n        ChatOptions = new()\r\n        {\r\n            Instructions = @&quot;\r\n                - Sen yard\u0131msever ve T\u00fcrk\u00e7e konu\u015fan bir asistans\u0131n. K\u0131sa ve \u00f6z cevaplar ver!\r\n                - G\u00f6revleri uygun skill'leri kullanarak yerine getir!\r\n            &quot;,\r\n            Tools = &#x5B;\r\n                AIFunctionFactory.Create(UserTools.GetRequest)\r\n            ]\r\n        },\r\n        AIContextProviders = &#x5B;\r\n            serviceProvider.GetRequiredService&lt;FileAgentSkillsProvider&gt;()\r\n            ]\r\n    });\r\n});\r\n<\/pre>\n<\/div>\n<p>Dikkat ederseniz tool 25. sat\u0131rda eklenmektedir. Ancak 10 ila 13. sat\u0131r aral\u0131\u011f\u0131na da g\u00f6z atarsan\u0131z ekstradan eklenmi\u015f baz\u0131 yap\u0131land\u0131rmalar\u0131 da g\u00f6receksiniz. Burada, \u00f6zellikle LLM&#8217;in verdi\u011fi tool \u00e7a\u011fr\u0131lar\u0131n\u0131 ger\u00e7ekten \u00e7al\u0131\u015ft\u0131ran bir middleware eklenmektedir. Yani bir nevi AI Agent&#8217;\u0131n pipeline&#8217;\u0131n\u0131 geni\u015fletti\u011fimizi s\u00f6yleyebiliriz.<\/p>\n<p><strong>Peki burada ne yap\u0131yoruz?<\/strong><\/p>\n<p><code>.AsBuilder()<\/code> metodu ile AI Agent&#8217;\u0131n pipeline&#8217;\u0131n\u0131 middleware eklenebilecek hale getiriyoruz.<\/p>\n<p><code>.UseFunctionInvocation()<\/code> metoduyla da LLM&#8217;in \u00fcretti\u011fi function call \/ tool call \u00e7\u0131kt\u0131lar\u0131 yakalanmakta ve ger\u00e7ekten \u00e7al\u0131\u015ft\u0131r\u0131lmaktad\u0131r. Bu metot olduk\u00e7a kritiktik! Nedeni ise LLM&#8217;in sadece niyet bildirmesi, her hangi bir tool&#8217;u execute etmemesidir. E\u011fer bu metot \u00e7a\u011fr\u0131lmasayd\u0131 LLM&#8217;in hangi tool&#8217;un execute edilmesi gerekti\u011fine dair murad\u0131 yine s\u00f6z konusu olacakt\u0131, ancak tool \u00e7al\u0131\u015ft\u0131r\u0131lmayacakt\u0131!<\/p>\n<p>Ve son olarak da <code>.Build()<\/code> metodu ile de  yeni yap\u0131land\u0131r\u0131lan pipeline finalize edilmekte ve art\u0131k bu AI Agent taraf\u0131ndan tool&#8217;lar nihai olarak kullan\u0131labilir hale getirilmektedir.\n<\/li>\n<li><em><strong>Ad\u0131m 6<\/strong> <span style=\"color:green;\">(Test Etme)<\/span><\/em><br \/>\nEn son olarak art\u0131k yapt\u0131\u011f\u0131m\u0131z bu \u00e7al\u0131\u015fmay\u0131 test edelim. Misal olarak; bir \u00f6nceki ad\u0131mda sordu\u011fumuz soruya kar\u015f\u0131l\u0131k:<\/p>\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:12px;white-space:pre;line-height:1.4;padding:12px;width:100%;\">&#8220;Cevap&#8221;: &#8220;Leanne Graham\\nErvin Howell\\nClementine Bauch\\nPatricia Lebsack\\nChelsey Dietrich\\n<br \/>\nMrs. Dennis Schulist\\nKurtis Weissnat\\nNicholas Runolfsdottir V\\nGlenna Reichert\\nClementina DuBuque&#8221;<\/div>\n<p>cevab\u0131n\u0131 alabiliriz. \u00c7\u00fcnk\u00fc art\u0131k AI modelimiz, bir API iste\u011finde bulunmas\u0131 gerekti\u011fini anlad\u0131\u011f\u0131nda mevcut tool&#8217;lar\u0131ndan bunu yapabilecek <code>UserTools.GetRequest<\/code> tool&#8217;unu kullanabiliyor. Hatta sizler prompt i\u015flenmesi s\u00fcrecinde bu tool&#8217;a break-point koyarak LLM taraf\u0131ndan bu kodlar\u0131n tetiklenip tetiklenmedi\u011fini test edebilirsiniz&#8230; Bu da size \u00f6dev olsun \ud83d\ude09<br \/>\nSon olarak a\u015fa\u011f\u0131daki gibi bir prompt ile testi hafif kompleksle\u015ftirelim:<\/p>\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:12px;white-space:pre;line-height:1.4;padding:12px;width:100%;\">&#8220;Prompt&#8221;: &#8220;kullan\u0131c\u0131lardan birbirlerine geometrik olarak en yak\u0131n olan ikisini bana getir!&#8221;<\/div>\n<p>El cevap:<\/p>\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:12px;white-space:pre;line-height:1.4;padding:12px;width:100%;\">&#8220;Cevap&#8221;: &#8220;\u00d6ncelikle `user-skills` becerisi i\u00e7in talimatlar\u0131 y\u00fcklemem gerekiyor.\\n\\r\\nKullan\u0131c\u0131lar\u0131n<br \/>\nco\u011frafi olarak en yak\u0131n ikisini bulmak i\u00e7in koordinatlara (enlem\/boylam) ihtiyac\u0131m var. Bu bilgi, API&#8217;de<br \/>\nnas\u0131l al\u0131n\u0131r, \u00f6\u011frenmek i\u00e7in `user-skills` kayna\u011f\u0131n\u0131 okumal\u0131y\u0131m.\\n\\r\\nKoordinat bilgisi i\u00e7in gerekli kaynak<br \/>\ndosyas\u0131 okunamad\u0131. T\u00fcm kullan\u0131c\u0131lar\u0131 \u00e7ekip, koordinatlar\u0131 inceleyeyim.\\n\\r\\nKullan\u0131c\u0131 koordinatlar\u0131:<br \/>\n\\n\\n1. Leanne Graham (1): lat: -37.3159, lng: 81.1496\\n2. Ervin Howell (2): lat: -43.9509, lng: -34.4618\\n3.<br \/>\nClementine Bauch (3): lat: -68.6102, lng: -47.0653\\n4. Patricia Lebsack (4): lat: 29.4572, lng: -164.2990\\n5.<br \/>\nChelsey Dietrich (5): lat: -31.8129, lng: 62.5342\\n6. Mrs. Dennis Schulist (6): lat: -71.4197, lng: 71.7478\\n7.<br \/>\nKurtis Weissnat (7): lat: 24.8918, lng: 21.8984\\n8. Nicholas Runolfsdottir V (8): lat: -14.3990,<br \/>\nlng: -120.7677\\n9. Glenna Reichert (9): lat: 24.6463, lng: -168.8889\\n10. Clementina DuBuque (10):<br \/>\nlat: -38.2386, lng: 57.2232\\n\\n\u00d6klid mesafesini kullanarak en yak\u0131n \u00e7ifti buldum: **Ervin Howell (2)**<br \/>\nve **Clementine Bauch (3)** birbirine en yak\u0131nd\u0131r.&#8221;<\/div>\n<p>Bak\u0131n, g\u00f6r\u00fcld\u00fc\u011f\u00fc  \u00fczere kullan\u0131c\u0131lar\u0131n verileri \u00fczerinden birbirlerine geometrik olarak en yak\u0131n olan ikisini getirtmek gibi kompleks bir i\u015fi ger\u00e7ekle\u015ftirtmi\u015f bulunuyoruz \ud83d\ude42 Ne kadar da g\u00fczel de\u011fil mi?<\/p>\n<\/li>\n<\/ul>\n<p>\u00d6rnek \u00e7al\u0131\u015fmam\u0131z i\u015fte bu kadar \ud83d\ude09<\/p>\n<p>Nihai olarak;<br \/>\nMicrosoft Agent Framework&#8217;\u00fcn Agent Skills \u00f6zelli\u011fi sayesinde AI Agent&#8217;lar\u0131m\u0131z\u0131 \u00e7ekirdek yap\u0131lar\u0131na dokunmadan, mod\u00fcler ve ta\u015f\u0131nabilir yetenek paketleriyle zenginle\u015ftirme imkan\u0131na kavu\u015fuyor, Progressive Disclosure Pattern ile de token maliyetlerini optimize ederken, <code style=\"color:#f87171\">SKILL.md<\/code> tabanl\u0131 a\u00e7\u0131k spesifikasyon sayesinde de hem geli\u015ftirici hem de g\u00fcvenlik odakl\u0131 geni\u015fletilebilir bir zeminde \u00e7al\u0131\u015fma imkan\u0131 edinmi\u015f oluyoruz.<\/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<div style=\"max-width:720px;margin:24px auto;padding:18px 20px;border-radius:12px;background:linear-gradient(135deg,#0d1117,#161b22);border:1px solid #30363d;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Arial,sans-serif;color:#e6edf3;box-shadow:0 10px 30px rgba(0,0,0,.35);\">\n<div style=\"display:flex;align-items:center;gap:14px;margin-bottom:12px;\">\n    <svg style=\"width:34px;height:34px;fill:#58a6ff;flex-shrink:0;\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n      <path d=\"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82a7.65 7.65 0 012-.27c.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z\"><\/path>\n    <\/svg><\/p>\n<div>\n<div style=\"font-size:18px;font-weight:600;line-height:1.2;\">\u00d6rnek \u00e7al\u0131\u015fmaya a\u015fa\u011f\u0131daki GitHub reposundan eri\u015febilirsiniz.<\/div>\n<div style=\"font-size:13px;color:#8b949e;\">https:\/\/github.com\/gncyyldz\/Microsoft.Agent.Framework.Agent.Skills.Example<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div style=\"font-size:14px;line-height:1.6;color:#c9d1d9;margin-bottom:14px;\">\n    Bu repository, ilgili konuya dair \u00f6rnek \u00e7al\u0131\u015fman\u0131n kaynak kodlar\u0131n\u0131 ve mimari yap\u0131s\u0131n\u0131 i\u00e7ermektedir. Detaylar i\u00e7in GitHub \u00fczerinden incelemede bulunabilirsiniz.\n  <\/div>\n<p>  <a href=\"https:\/\/github.com\/gncyyldz\/Microsoft.Agent.Framework.Agent.Skills.Example\" target=\"_blank\" rel=\"noopener noreferrer\"\n     style=\"display:inline-block;padding:10px 16px;border-radius:8px;background:#238636;color:#ffffff;text-decoration:none;font-size:14px;font-weight:600;transition:all .2s ease;\"><br \/>\n    GitHub\u2019da G\u00f6r\u00fcnt\u00fcle \u2192<br \/>\n  <\/a><\/p>\n<\/div>\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 Microsoft Agent Framework&#8216;de, AI Agent&#8217;\u0131n yeteneklerini ta\u015f\u0131nabilir bir \u015fekilde geni\u015fletebilmemizi sa\u011flayan Agent Skills \u00f6zelli\u011fini inceliyor olaca\u011f\u0131z. Agent Skills Nedir? Agent Skills, agent&#8217;lara alan uzmanl\u0131\u011f\u0131 kazand\u0131rabilmek i\u00e7in tasarlanm\u0131\u015f basit ve a\u00e7\u0131k bir&#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":28535,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5222,5220],"tags":[5673,5306,5681,5499,5674,5675,5679,5680],"class_list":["post-28510","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-llm","category-yapay-zeka-ai","tag-agent-skills","tag-ai-agent","tag-fileagentskillsprovider","tag-microsoft-agent-framework","tag-progressive-disclosure-pattern","tag-skill-md","tag-typosquatting","tag-typosquatting-saldirisi"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/28510","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=28510"}],"version-history":[{"count":16,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/28510\/revisions"}],"predecessor-version":[{"id":28536,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/28510\/revisions\/28536"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/28535"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=28510"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=28510"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=28510"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}