{"id":361,"date":"2025-01-29T22:47:00","date_gmt":"2025-01-29T22:47:00","guid":{"rendered":"http:\/\/blog.firatyasar.com\/?p=361"},"modified":"2025-03-29T22:54:11","modified_gmt":"2025-03-29T22:54:11","slug":"ai-agents-function-kullanimi","status":"publish","type":"post","link":"https:\/\/blog.firatyasar.com\/?p=361","title":{"rendered":"AI Agents: Function Kullan\u0131m\u0131"},"content":{"rendered":"\n<p>Agent sistemlerinde g\u00f6revleri daha mod\u00fcler ve y\u00f6netilebilir hale getirmek i\u00e7in kullan\u0131lan y\u00f6ntemlerden biri de <strong>Function Calling<\/strong>\u2019dir. Bu yakla\u015f\u0131m, klasik yaz\u0131l\u0131m geli\u015ftirme mant\u0131\u011f\u0131ndaki fonksiyon kullan\u0131m\u0131na olduk\u00e7a benzer, ancak burada fonksiyonlar\u0131 \u00e7a\u011f\u0131ran bir yaz\u0131l\u0131m geli\u015ftirici de\u011fil, bir dil modelidir.<\/p>\n\n\n\n<h3>Fonksiyonlar Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"310\" src=\"\/wp-content\/uploads\/2025\/03\/image-17-1024x310.png\" alt=\"\" class=\"wp-image-362\" srcset=\"\/wp-content\/uploads\/2025\/03\/image-17-1024x310.png 1024w, \/wp-content\/uploads\/2025\/03\/image-17-300x91.png 300w, \/wp-content\/uploads\/2025\/03\/image-17-768x232.png 768w, \/wp-content\/uploads\/2025\/03\/image-17-1536x464.png 1536w, \/wp-content\/uploads\/2025\/03\/image-17-660x200.png 660w, \/wp-content\/uploads\/2025\/03\/image-17.png 1912w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>T\u0131pk\u0131 bir yaz\u0131l\u0131mc\u0131n\u0131n program i\u00e7erisinde \u00e7e\u015fitli g\u00f6revleri yerine getirmek i\u00e7in fonksiyonlar yazmas\u0131 gibi, bir model de tan\u0131ml\u0131 fonksiyonlar setine eri\u015febilir ve:<\/p>\n\n\n\n<ul><li>Hangi fonksiyonun ne zaman \u00e7a\u011fr\u0131laca\u011f\u0131na karar verir,<\/li><li>Her fonksiyon i\u00e7in gerekli parametreleri belirler,<\/li><li>Ancak do\u011frudan \u00e7al\u0131\u015ft\u0131rma (execute) i\u015flemini ger\u00e7ekle\u015ftirmez.<\/li><\/ul>\n\n\n\n<p>Fonksiyonlar ile Extensions aras\u0131ndaki en temel farklar \u015funlard\u0131r:<\/p>\n\n\n\n<ol><li><strong>Model, fonksiyon ad\u0131n\u0131 ve arg\u00fcmanlar\u0131n\u0131 \u00fcretir<\/strong>, ancak bu \u00e7a\u011fr\u0131y\u0131 kendisi ger\u00e7ekle\u015ftirmez.<\/li><li><strong>Fonksiyonlar client-side<\/strong> yani istemci taraf\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131l\u0131rken, <strong>Extensions agent-side<\/strong> yani agent taraf\u0131nda y\u00fcr\u00fct\u00fcl\u00fcr.<\/li><\/ol>\n\n\n\n<h3>Functions Ne Zaman Tercih Edilir?<\/h3>\n\n\n\n<p>Bir geli\u015ftirici, a\u015fa\u011f\u0131daki nedenlerden dolay\u0131 Extensions yerine Functions kullanmay\u0131 tercih edebilir:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"374\" src=\"\/wp-content\/uploads\/2025\/03\/image-18-1024x374.png\" alt=\"\" class=\"wp-image-363\" srcset=\"\/wp-content\/uploads\/2025\/03\/image-18-1024x374.png 1024w, \/wp-content\/uploads\/2025\/03\/image-18-300x109.png 300w, \/wp-content\/uploads\/2025\/03\/image-18-768x280.png 768w, \/wp-content\/uploads\/2025\/03\/image-18-1536x560.png 1536w, \/wp-content\/uploads\/2025\/03\/image-18-660x241.png 660w, \/wp-content\/uploads\/2025\/03\/image-18.png 1754w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul><li><strong>API \u00e7a\u011fr\u0131s\u0131n\u0131n do\u011frudan agent mimarisi d\u0131\u015f\u0131nda bir katmanda yap\u0131lmas\u0131 gerekiyordur.<\/strong><br>(\u00d6rne\u011fin, middleware, frontend framework gibi bile\u015fenlerde.)<\/li><li><strong>G\u00fcvenlik veya kimlik do\u011frulama k\u0131s\u0131tlar\u0131 vard\u0131r.<\/strong><br>(API internete a\u00e7\u0131k de\u011fildir ya da agent altyap\u0131s\u0131ndan eri\u015filemiyordur.)<\/li><li><strong>Zamanlama veya i\u015flem s\u0131ras\u0131 ile ilgili k\u0131s\u0131tlar vard\u0131r.<\/strong><br>(\u00d6rne\u011fin: batch i\u015flemler, insan onay\u0131 gerektiren ak\u0131\u015flar.)<\/li><li><strong>API yan\u0131t\u0131 \u00fczerinde ilave veri i\u015fleme veya filtreleme gerekiyordur.<\/strong><br>\u00d6rne\u011fin, API sonu\u00e7lar\u0131 filtrelenemiyor ancak istemci taraf\u0131nda filtrelenmesi m\u00fcmk\u00fcn.<\/li><li><strong>Geli\u015ftirici, API altyap\u0131s\u0131 da\u011f\u0131tmadan agent \u00fczerinde iteratif geli\u015ftirme yapmak istiyordur.<\/strong><br>Bu durumda Function Calling, ger\u00e7ek API yerine bir \u00e7e\u015fit \u201cstub\u201d g\u00f6revi g\u00f6rerek geli\u015ftirme s\u00fcrecini h\u0131zland\u0131rabilir.<\/li><li><\/li><\/ul>\n\n\n\n<h3>Function Calling: Farkl\u0131 Kullan\u0131m Senaryolar\u0131<\/h3>\n\n\n\n<p>Function Calling, yaln\u0131zca agent mimarisi i\u00e7inde de\u011fil, \u00e7e\u015fitli yaz\u0131l\u0131m mimarilerinde de fayda sa\u011flayabilecek esnek bir \u00e7\u00f6z\u00fcmd\u00fcr. \u0130\u015fte baz\u0131 senaryolar:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"703\" src=\"\/wp-content\/uploads\/2025\/03\/image-19-1024x703.png\" alt=\"\" class=\"wp-image-364\" srcset=\"\/wp-content\/uploads\/2025\/03\/image-19-1024x703.png 1024w, \/wp-content\/uploads\/2025\/03\/image-19-300x206.png 300w, \/wp-content\/uploads\/2025\/03\/image-19-768x528.png 768w, \/wp-content\/uploads\/2025\/03\/image-19-1536x1055.png 1536w, \/wp-content\/uploads\/2025\/03\/image-19-660x453.png 660w, \/wp-content\/uploads\/2025\/03\/image-19.png 1846w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul><li>Bir dil modeli, size kodunuzda kullanabilece\u011finiz bir fonksiyonu \u00f6nerebilir, ancak bu fonksiyonun \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 gerekmez.<br>\u2192 B\u00f6ylece fonksiyon bilgisi i\u00e7inde API kimlik bilgileri yer almak zorunda kalmaz.<\/li><li>Asenkron i\u015flemler y\u00fcr\u00fct\u00fcl\u00fcyorsa ve bu i\u015flemler birka\u00e7 saniyeden uzun s\u00fcr\u00fcyorsa, bu yap\u0131 <strong>asynchronous execution<\/strong> i\u00e7in idealdir.<\/li><li>Fonksiyonlar, modelin \u00e7al\u0131\u015ft\u0131\u011f\u0131 ortamdan farkl\u0131 bir cihazda ya da sistemde \u00e7al\u0131\u015ft\u0131r\u0131lmak isteniyorsa, Function Calling bu ayr\u0131m\u0131 y\u00f6netmek i\u00e7in kullan\u0131labilir.<\/li><\/ul>\n\n\n\n<p>\u00d6rne\u011fin;<\/p>\n\n\n\n<ul><li>Bir dil modeli (yapay zeka modeli) kullanarak bir fonksiyon \u00f6nerisi almak istiyorsunuz.<\/li><li>Ancak fonksiyon i\u00e7inde kimlik bilgilerini (credentials) koymak istemiyorsunuz.<\/li><li>Dil modeli, \u00f6nerdi\u011fi fonksiyonu \u00e7al\u0131\u015ft\u0131rmad\u0131\u011f\u0131 i\u00e7in fonksiyon i\u00e7inde kimlik bilgilerine ihtiyac\u0131n\u0131z yoktur.<\/li><\/ul>\n\n\n\n<p>Bunu bir \u00f6rnekle a\u00e7\u0131klayal\u0131m:Diyelim ki, OpenAI&#8217;nin API&#8217;sini \u00e7a\u011f\u0131ran bir Python fonksiyonu yazmak istiyorsunuz. E\u011fer bu fonksiyonu ger\u00e7ekten \u00e7al\u0131\u015ft\u0131racak olsayd\u0131n\u0131z, API anahtar\u0131n\u0131z\u0131 (API Key) eklemeniz gerekirdi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import openai\n\ndef call_openai(prompt):\n    response = openai.ChatCompletion.create(\n        model=\"gpt-4\",\n        messages=&#91;{\"role\": \"user\", \"content\": prompt}],\n        api_key=\"SENIN-API-ANAHTARIN\"\n    )\n    return response<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>Ancak, dil modelinden sadece bu fonksiyonun yap\u0131s\u0131n\u0131 \u00f6nermesini istiyorsan\u0131z, API anahtar\u0131n\u0131 koyman\u0131za gerek yoktur. \u00c7\u00fcnk\u00fc model, fonksiyonu sadece \u00f6nerir ama \u00e7al\u0131\u015ft\u0131rmaz:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import openai\n\ndef call_openai(prompt):\n    response = openai.ChatCompletion.create(\n        model=\"gpt-4\",\n        messages=&#91;{\"role\": \"user\", \"content\": prompt}]\n    )\n    return response<\/code><\/pre>\n\n\n\n<p>Buradaki temel nokta: <strong>Yapay zeka modeli, \u00f6nerdi\u011fi fonksiyonu \u00e7al\u0131\u015ft\u0131rmayaca\u011f\u0131 i\u00e7in i\u00e7ine kimlik bilgilerini eklemenize gerek yoktur.<\/strong> Model sadece kod yap\u0131s\u0131n\u0131 verir, ancak siz bunu kullan\u0131rken kendi kimlik bilgilerinizi manuel olarak eklemelisiniz.<\/p>\n\n\n\n<h2>Sonu\u00e7<\/h2>\n\n\n\n<p>Functions, agent\u2019lar\u0131n daha esnek, g\u00fcvenli ve kontroll\u00fc bir \u015fekilde g\u00f6revleri y\u00fcr\u00fctmesini sa\u011flayan \u00f6nemli bir bile\u015fendir. Ger\u00e7ek zamanl\u0131 API \u00e7a\u011fr\u0131lar\u0131n\u0131n m\u00fcmk\u00fcn olmad\u0131\u011f\u0131 ya da istenmedi\u011fi durumlarda, modelin yaln\u0131zca ne yap\u0131laca\u011f\u0131n\u0131 tarif etmesi, i\u015flemin ise farkl\u0131 bir sistemde y\u00fcr\u00fct\u00fclmesi gereken senaryolarda b\u00fcy\u00fck avantaj sunar. Bu yap\u0131, agent sistemlerinin yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerine entegre edilmesini kolayla\u015ft\u0131r\u0131rken, mod\u00fcler ve g\u00fcvenli bir mimari olu\u015fturulmas\u0131na da katk\u0131 sa\u011flar.<\/p>\n\n\n\n<p><strong>Kaynak<\/strong>: AI Agent Books \u2013 Authors: Julia Wiesinger, Patrick Marlow and Vladimir Vuskovic<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Agent sistemlerinde g\u00f6revleri daha mod\u00fcler ve y\u00f6netilebilir hale getirmek i\u00e7in kullan\u0131lan y\u00f6ntemlerden biri de Function Calling\u2019dir. Bu yakla\u015f\u0131m, klasik yaz\u0131l\u0131m geli\u015ftirme mant\u0131\u011f\u0131ndaki fonksiyon kullan\u0131m\u0131na olduk\u00e7a benzer, ancak burada fonksiyonlar\u0131 \u00e7a\u011f\u0131ran bir yaz\u0131l\u0131m geli\u015ftirici de\u011fil, bir dil modelidir. Fonksiyonlar Nas\u0131l \u00c7al\u0131\u015f\u0131r? T\u0131pk\u0131 bir yaz\u0131l\u0131mc\u0131n\u0131n program i\u00e7erisinde \u00e7e\u015fitli g\u00f6revleri yerine getirmek i\u00e7in fonksiyonlar yazmas\u0131 gibi, bir model\u2026 <span class=\"read-more\"><a href=\"https:\/\/blog.firatyasar.com\/?p=361\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":348,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[149,157,158,151,85,150,133],"_links":{"self":[{"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/posts\/361"}],"collection":[{"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=361"}],"version-history":[{"count":2,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/posts\/361\/revisions"}],"predecessor-version":[{"id":366,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/posts\/361\/revisions\/366"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/media\/348"}],"wp:attachment":[{"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=361"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=361"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=361"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}