{"id":31957,"date":"2025-10-16T02:01:36","date_gmt":"2025-10-15T23:01:36","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/"},"modified":"2025-10-16T02:01:36","modified_gmt":"2025-10-15T23:01:36","slug":"strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/","title":{"rendered":"Strands Agentlar\u0131 ile AI Ajanlar\u0131 Olu\u015fturma: Basit K\u0131lavuz"},"content":{"rendered":"<p><body><\/p>\n<style>\n    \/* Temel Stil Ayarlar\u0131 *\/\n    body {\n        font-family: Arial, sans-serif;\n        line-height: 1.6;\n        color: #333;\n        margin: 0 auto;\n        padding: 20px;\n        max-width: 900px;\n        background-color: #f9f9f9;\n    }\n    h2, h3 {\n        color: #2c3e50;\n        margin-top: 30px;\n        margin-bottom: 15px;\n    }\n    h2 {\n        border-bottom: 2px solid #3498db;\n        padding-bottom: 10px;\n    }\n    h3 {\n        color: #34495e;\n    }\n    p {\n        margin-bottom: 15px;\n    }\n    ul, ol {\n        margin-bottom: 15px;\n        padding-left: 25px;\n    }\n    li {\n        margin-bottom: 8px;\n    }\n    pre {\n        background-color: #ecf0f1;\n        border: 1px solid #ddd;\n        padding: 15px;\n        border-radius: 5px;\n        overflow-x: auto;\n        margin-bottom: 20px;\n    }\n    code {\n        font-family: 'Courier New', Courier, monospace;\n        font-size: 0.9em;\n        color: #c0392b; \/* K\u0131rm\u0131z\u0131ms\u0131 ton *\/\n    }\n    pre code {\n        color: #2c3e50; \/* Koyu gri *\/\n    }\n    table {\n        width: 100%;\n        border-collapse: collapse;\n        margin-bottom: 20px;\n    }\n    th, td {\n        border: 1px solid #ddd;\n        padding: 10px;\n        text-align: left;\n    }\n    th {\n        background-color: #3498db;\n        color: white;\n    }\n    .expert-tip {\n        background-color: #e8f6f3;\n        border-left: 5px solid #1abc9c;\n        padding: 15px;\n        margin: 20px 0;\n        border-radius: 4px;\n        font-style: italic;\n        color: #2c3e50;\n    }\n    .faq-question {\n        font-weight: bold;\n        color: #2c3e50;\n        margin-top: 15px;\n    }\n    .faq-answer {\n        margin-bottom: 10px;\n        padding-left: 20px;\n        border-left: 3px solid #bdc3c7;\n        background-color: #f5f5f5;\n        padding-top: 5px;\n        padding-bottom: 5px;\n    }<\/p>\n<p>    \/* Mobil Uyumlu Tasar\u0131m (Media Queries) *\/\n    @media (max-width: 768px) {\n        body {\n            padding: 15px;\n        }\n        h2 {\n            font-size: 1.8em;\n        }\n        h3 {\n            font-size: 1.4em;\n        }\n        table, thead, tbody, th, td, tr {\n            display: block;\n        }\n        thead tr {\n            position: absolute;\n            top: -9999px;\n            left: -9999px;\n        }\n        tr {\n            border: 1px solid #ccc;\n            margin-bottom: 10px;\n            display: flex;\n            flex-direction: column;\n        }\n        td {\n            border: none;\n            border-bottom: 1px solid #eee;\n            position: relative;\n            padding-left: 50%;\n            text-align: right;\n        }\n        td::before {\n            position: absolute;\n            left: 6px;\n            content: attr(data-label);\n            font-weight: bold;\n            text-align: left;\n        }\n        pre {\n            white-space: pre-wrap; \/* Uzun kod sat\u0131rlar\u0131n\u0131 sarar *\/\n            word-wrap: break-word;\n        }\n    }\n    @media (max-width: 480px) {\n        h2 {\n            font-size: 1.5em;\n        }\n        h3 {\n            font-size: 1.2em;\n        }\n        td {\n            padding-left: 35%;\n        }\n    }\n<\/style>\n<p>Strands Agents framework&#8217;\u00fcn\u00fc kullanarak yapay zeka ajanlar\u0131 geli\u015ftirmeye ba\u015flamak ister misiniz? Bu rehber, ba\u015flang\u0131\u00e7tan ileri seviyeye, Strands Agents ile ak\u0131ll\u0131 sistemleri kolayca in\u015fa etmenin temel ad\u0131mlar\u0131n\u0131 ve pratik ipu\u00e7lar\u0131n\u0131 sunuyor. Gelin, otomasyon ve ak\u0131ll\u0131 karar alma yeteneklerini projelerinize nas\u0131l dahil edece\u011finizi birlikte ke\u015ffedelim.<\/p>\n<p>G\u00fcn\u00fcm\u00fczde teknolojinin h\u0131zla ilerlemesiyle birlikte, tekrarlayan g\u00f6revleri otomatikle\u015ftirmek, karma\u015f\u0131k verileri analiz etmek ve hatta otonom kararlar almak, i\u015fletmeler ve bireyler i\u00e7in kritik bir hale gelmi\u015ftir. Peki, bu noktada yapay zeka ajanlar\u0131 devreye girerek hayat\u0131m\u0131z\u0131 nas\u0131l kolayla\u015ft\u0131rabilir? G\u00fcndelik i\u015flerimizden kurumsal s\u00fcre\u00e7lere kadar pek \u00e7ok alanda, insan m\u00fcdahalesini azaltarak verimlili\u011fi art\u0131ran ve hata oran\u0131n\u0131 d\u00fc\u015f\u00fcren ak\u0131ll\u0131 sistemlere ihtiya\u00e7 duyuyoruz. \u0130\u015fte tam da bu noktada, Strands Agents gibi framework&#8217;ler, yapay zeka (AI) ajanlar\u0131 geli\u015ftirmeyi daha eri\u015filebilir ve y\u00f6netilebilir k\u0131l\u0131yor.<\/p>\n<p>Yapay zeka ajanlar\u0131, belirli bir ortamda sens\u00f6rler arac\u0131l\u0131\u011f\u0131yla alg\u0131lay\u0131p, eyleyiciler arac\u0131l\u0131\u011f\u0131yla hareket eden, hedeflerine ula\u015fmak i\u00e7in ak\u0131l y\u00fcr\u00fctme ve \u00f6\u011frenme yetene\u011fine sahip yaz\u0131l\u0131m varl\u0131klar\u0131d\u0131r. Bu ajanlar, en basit haliyle bir bilgisayar program\u0131ndan \u00e7ok daha fazlas\u0131d\u0131r; onlar, t\u0131pk\u0131 insan gibi \u00e7evresini g\u00f6zlemleyebilir, bu g\u00f6zlemlerden anlam \u00e7\u0131karabilir ve belirli bir ama\u00e7 do\u011frultusunda ad\u0131mlar atabilirler. \u00d6rne\u011fin, bir sanal asistan, kullan\u0131c\u0131 komutlar\u0131n\u0131 alg\u0131layan bir ajand\u0131r; bir ak\u0131ll\u0131 termostat, ortam s\u0131cakl\u0131\u011f\u0131n\u0131 alg\u0131lay\u0131p \u0131s\u0131tma\/so\u011futma sistemini kontrol eden bir ajand\u0131r. Bu t\u00fcr ajanlar, modern d\u00fcnyada otomasyonun ve ak\u0131ll\u0131 sistemlerin temel ta\u015flar\u0131n\u0131 olu\u015fturmaktad\u0131r.<\/p>\n<p>Strands Agents, bu karma\u015f\u0131k yapay zeka ajanlar\u0131n\u0131 olu\u015fturma s\u00fcrecini basitle\u015ftirmeyi hedefleyen a\u00e7\u0131k kaynakl\u0131 bir Python framework&#8217;\u00fcd\u00fcr. Geleneksel AI geli\u015ftirme s\u00fcre\u00e7leri genellikle y\u00fcksek d\u00fczeyde programlama bilgisi ve karma\u015f\u0131k algoritmalar gerektirirken, Strands Agents, mod\u00fcler yap\u0131s\u0131 ve kullan\u0131c\u0131 dostu aray\u00fcz\u00fc ile bu bariyerleri ortadan kald\u0131r\u0131r. Bu sayede, hem deneyimli geli\u015ftiriciler hem de AI alan\u0131na yeni ad\u0131m atanlar, h\u0131zla prototip olu\u015fturabilir ve i\u015flevsel ajanlar geli\u015ftirebilir. Framework, ajan\u0131n \u00e7evresini alg\u0131lamas\u0131n\u0131 sa\u011flayan &#8220;sens\u00f6rler&#8221; ve ajan\u0131n \u00e7evresinde de\u011fi\u015fiklik yapmas\u0131n\u0131 sa\u011flayan &#8220;eyleyiciler&#8221; gibi temel bile\u015fenler \u00fczerine kurulmu\u015ftur. Bu mimari, ajanlar\u0131n davran\u0131\u015flar\u0131n\u0131 net bir \u015fekilde tan\u0131mlaman\u0131za ve y\u00f6netmenize olanak tan\u0131r.<\/p>\n<p>Di\u011fer AI framework&#8217;lerinden farkl\u0131 olarak Strands Agents, genellikle daha \u00e7ok &#8220;low-code&#8221; veya &#8220;no-code&#8221; yakla\u015f\u0131m\u0131na yak\u0131n bir esneklik sunar. Bu, \u00f6zellikle h\u0131zl\u0131 geli\u015ftirme (rapid prototyping) gerektiren projelerde b\u00fcy\u00fck bir avantajd\u0131r. Mod\u00fcler yap\u0131s\u0131 sayesinde, farkl\u0131 g\u00f6revler i\u00e7in tasarlanm\u0131\u015f sens\u00f6r ve eyleyicileri kolayca bir araya getirebilir, ajan\u0131n davran\u0131\u015f d\u00f6ng\u00fcs\u00fcn\u00fc sezgisel bir \u015fekilde kurgulayabilirsiniz. Bu sayede, &#8220;bir web sitesindeki fiyatlar\u0131 takip et&#8221;, &#8220;belirli anahtar kelimeler i\u00e7eren e-postalar\u0131 filtrele&#8221; veya &#8220;hava durumu verilerine g\u00f6re ak\u0131ll\u0131 ev sistemini ayarla&#8221; gibi \u00e7ok \u00e7e\u015fitli g\u00f6revleri yerine getirecek ajanlar olu\u015fturmak m\u00fcmk\u00fcn hale gelir. Strands Agents, yapay zeka d\u00fcnyas\u0131na ad\u0131m atmak isteyen herkes i\u00e7in g\u00fc\u00e7l\u00fc ve eri\u015filebilir bir ba\u015flang\u0131\u00e7 noktas\u0131 sunar. \u00d6zellikle k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli otomasyon projelerinde sa\u011flad\u0131\u011f\u0131 h\u0131z ve esneklik ile dikkat \u00e7ekmektedir. Bu framework ile geli\u015ftirilen ajanlar, veri toplama, i\u015f ak\u0131\u015f\u0131 otomasyonu, proaktif uyar\u0131 sistemleri ve daha bir\u00e7ok alanda somut faydalar sa\u011flayabilir.<\/p>\n<h2 id=\"strands-agents-ile-ilk-yapay-zeka-ajaninizi-nasil-olusturursunuz\">Strands Agents ile \u0130lk Yapay Zeka Ajan\u0131n\u0131z\u0131 Nas\u0131l Olu\u015fturursunuz?<\/h2>\n<p>Yapay zeka ajanlar\u0131n\u0131 in\u015fa etme s\u00fcreci kula\u011fa karma\u015f\u0131k gelse de, Strands Agents framework&#8217;\u00fc ile bu s\u00fcre\u00e7 olduk\u00e7a basitle\u015fir. Bu b\u00f6l\u00fcmde, ilk ajan\u0131n\u0131z\u0131 ad\u0131m ad\u0131m nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ve temel bile\u015fenlerini nas\u0131l anlayaca\u011f\u0131n\u0131z\u0131 \u00f6\u011frenece\u011fiz. Ba\u015flamadan \u00f6nce, ajan\u0131n ne oldu\u011funu ve nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 temel d\u00fczeyde kavramak \u00f6nemlidir. Bir ajan, temel olarak bir d\u00f6ng\u00fc i\u00e7inde \u00e7al\u0131\u015f\u0131r: \u00e7evresini alg\u0131lar (sens\u00f6rler arac\u0131l\u0131\u011f\u0131yla), bu alg\u0131lara g\u00f6re bir karar verir (mant\u0131k), ve ard\u0131ndan bir eylemde bulunur (eyleyiciler arac\u0131l\u0131\u011f\u0131yla). Bu d\u00f6ng\u00fc s\u00fcrekli tekrarlan\u0131r ve ajan\u0131n ak\u0131ll\u0131 davran\u0131\u015f\u0131n\u0131 olu\u015fturur.<\/p>\n<h3>Strands Agents Ortam\u0131n\u0131n Kurulumu<\/h3>\n<p>Strands Agents ile \u00e7al\u0131\u015fmaya ba\u015flamak i\u00e7in \u00f6ncelikle bilgisayar\u0131n\u0131zda Python kurulu olmas\u0131 gerekmektedir. Python 3.7 veya \u00fczeri bir s\u00fcr\u00fcm \u00f6nerilir. Kurulumdan sonra, Strands Agents k\u00fct\u00fcphanesini <code>pip<\/code> paket y\u00f6neticisi arac\u0131l\u0131\u011f\u0131yla kolayca y\u00fckleyebilirsiniz.<\/p>\n<pre><code>\npip install strands-agents\n<\/pre>\n<p><\/code><\/p>\n<p>Bu komut, Strands Agents k\u00fct\u00fcphanesini ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 sisteminize kuracakt\u0131r. Kurulum tamamland\u0131ktan sonra, ilk basit \"Merhaba D\u00fcnya\" ajan\u0131 \u00f6rne\u011fimizi olu\u015fturmaya haz\u0131r\u0131z.<\/p>\n<p><strong>Basit Bir \"Merhaba D\u00fcnya\" Ajan\u0131 \u00d6rne\u011fi:<\/strong><\/p>\n<p>A\u015fa\u011f\u0131daki kod blo\u011fu, belirli aral\u0131klarla konsola \"Merhaba, ben bir Strands Ajan\u0131y\u0131m!\" mesaj\u0131n\u0131 yazd\u0131ran basit bir ajan olu\u015fturur.<\/p>\n<pre><code>\nfrom strands_agents import Agent, Sensor, Action\nimport time\n\n# Bir sens\u00f6r tan\u0131mlayal\u0131m: Her zaman True d\u00f6nd\u00fcren basit bir sens\u00f6r\nclass AlwaysTrueSensor(Sensor):\n    def sense(self):\n        # Bu sens\u00f6r her \u00e7al\u0131\u015ft\u0131\u011f\u0131nda konsola bir mesaj yazar ve True d\u00f6nd\u00fcr\u00fcr.\n        print(\"Sens\u00f6r alg\u0131l\u0131yor...\")\n        return True\n\n# Bir eylem tan\u0131mlayal\u0131m: Konsola mesaj yazan bir eylem\nclass GreetingAction(Action):\n    def execute(self, data):\n        if data: # Sens\u00f6rden True geldiyse\n            print(\"Merhaba, ben bir Strands Ajan\u0131y\u0131m!\")\n        else:\n            print(\"Hi\u00e7bir \u015fey alg\u0131lanmad\u0131, eylem tetiklenmedi.\")\n\n# Ajan\u0131m\u0131z\u0131 olu\u015ftural\u0131m\ndef create_greeting_agent():\n    agent = Agent(name=\"GreetingAgent\")\n    \n    # Sens\u00f6r\u00fc ajana ekleyelim\n    agent.add_sensor(\"always_true\", AlwaysTrueSensor())\n    \n    # Eylemi ajana ekleyelim\n    agent.add_action(\"greet\", GreetingAction())\n    \n    # Ajan\u0131n davran\u0131\u015f d\u00f6ng\u00fcs\u00fcn\u00fc tan\u0131mlayal\u0131m\n    # Sens\u00f6r \"always_true\" True d\u00f6nd\u00fcrd\u00fc\u011f\u00fcnde \"greet\" eylemini tetikle\n    agent.add_behavior(\"always_true\", \"greet\")\n    \n    return agent\n\n# Ajan\u0131 \u00e7al\u0131\u015ft\u0131ral\u0131m\nif __name__ == \"__main__\":\n    my_agent = create_greeting_agent()\n    print(\"GreetingAgent ba\u015flat\u0131l\u0131yor. \u00c7\u0131kmak i\u00e7in Ctrl+C tu\u015flar\u0131na bas\u0131n.\")\n    try:\n        my_agent.run(interval=3) # Ajan\u0131 3 saniyede bir \u00e7al\u0131\u015ft\u0131r\n    except KeyboardInterrupt:\n        print(\"\\nGreetingAgent durduruldu.\")\n\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, bir ajan; sens\u00f6rler, eylemler ve davran\u0131\u015flar olmak \u00fczere \u00fc\u00e7 ana bile\u015fenden olu\u015fur. <code>AlwaysTrueSensor<\/code> her zaman <code>True<\/code> de\u011feri d\u00f6nd\u00fcren bir sens\u00f6rken, <code>GreetingAction<\/code> bu <code>True<\/code> de\u011feri ald\u0131\u011f\u0131nda belirli bir mesaj\u0131 yazd\u0131ran bir eylemdir. <code>agent.add_behavior(\"always_true\", \"greet\")<\/code> sat\u0131r\u0131 ise sens\u00f6r ile eylem aras\u0131ndaki ili\u015fkiyi, yani ajan\u0131n \"davran\u0131\u015f\u0131n\u0131\" tan\u0131mlar. Bu sayede, ajan\u0131m\u0131z basit bir d\u00f6ng\u00fc i\u00e7inde s\u00fcrekli olarak merhaba mesaj\u0131n\u0131 vermeye devam eder.<\/p>\n<h3>Ajan\u0131n Anatomisi: Sens\u00f6rler ve Eyleyiciler<\/h3>\n<p>Strands Agents'\u0131n g\u00fcc\u00fc, ajanlar\u0131n ortamlar\u0131yla etkile\u015fim kurmas\u0131n\u0131 sa\u011flayan mod\u00fcler sens\u00f6r ve eyleyici yap\u0131s\u0131nda yatar. Bu bile\u015fenler, ajan\u0131n g\u00f6zleri ve elleri gibidir.<\/p>\n<p><strong>Sens\u00f6rler (Sensors):<\/strong> Ajan\u0131n \u00e7evreden veri toplamas\u0131n\u0131 sa\u011flayan birimlerdir. Bir sens\u00f6r, belirli bir kaynaktan bilgi al\u0131r ve bu bilgiyi ajan\u0131n i\u015fleyebilece\u011fi bir formata d\u00f6n\u00fc\u015ft\u00fcr\u00fcr. <code>sense()<\/code> metodu, sens\u00f6r\u00fcn veri toplama mant\u0131\u011f\u0131n\u0131 i\u00e7erir.<br \/>\n\u00d6rnek sens\u00f6r t\u00fcrleri:<br \/>\n*   <strong>Zaman Sens\u00f6r\u00fc:<\/strong> Belirli zaman aral\u0131klar\u0131nda tetiklenir veya g\u00fcn\u00fcn saatini kontrol eder.<br \/>\n*   <strong>Dosya Sistemi Sens\u00f6r\u00fc:<\/strong> Bir dosyadaki de\u011fi\u015fiklikleri veya yeni dosyalar\u0131 alg\u0131lar.<br \/>\n*   <strong>API Sens\u00f6r\u00fc:<\/strong> Harici bir web servisine (API) istek g\u00f6nderip yan\u0131t\u0131n\u0131 i\u015fler.<br \/>\n*   <strong>Veritaban\u0131 Sens\u00f6r\u00fc:<\/strong> Bir veritaban\u0131ndaki kay\u0131tlar\u0131 sorgular ve sonu\u00e7lar\u0131 d\u00f6nd\u00fcr\u00fcr.<\/p>\n<div class=\"expert-tip\">Uzman \u0130pucu: Kendi \u00f6zel sens\u00f6rlerinizi yazarken, <code>sense()<\/code> metodunun veriyi m\u00fcmk\u00fcn oldu\u011funca ham ve i\u015flenebilir bir formatta d\u00f6nd\u00fcrmesine \u00f6zen g\u00f6sterin. Ajan\u0131n karar alma mant\u0131\u011f\u0131 bu veriyi daha sonra i\u015fleyebilir. Ayr\u0131ca, sens\u00f6r\u00fcn gereksiz yere kaynak t\u00fcketmesini engellemek i\u00e7in sadece gerekli oldu\u011funda \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flay\u0131n.<\/div>\n<p><strong>Eyleyiciler (Actions):<\/strong> Ajan\u0131n \u00e7evrede bir de\u011fi\u015fiklik yapmas\u0131n\u0131 veya belirli bir g\u00f6revi yerine getirmesini sa\u011flayan birimlerdir. <code>execute()<\/code> metodu, eyleyicinin ger\u00e7ekle\u015ftirece\u011fi i\u015f mant\u0131\u011f\u0131n\u0131 i\u00e7erir. Bu metot, genellikle sens\u00f6rden gelen veriyi (veya ajan\u0131n karar mekanizmas\u0131ndan gelen \u00e7\u0131kt\u0131y\u0131) girdi olarak al\u0131r.<br \/>\n\u00d6rnek eyleyici t\u00fcrleri:<br \/>\n*   <strong>Dosya Yazma Eyleyicisi:<\/strong> Toplanan veriyi bir dosyaya kaydeder.<br \/>\n*   <strong>E-posta G\u00f6nderme Eyleyicisi:<\/strong> Belirli ko\u015fullar alt\u0131nda bir e-posta g\u00f6nderir.<br \/>\n*   <strong>API \u00c7a\u011f\u0131rma Eyleyicisi:<\/strong> Ba\u015fka bir servise (\u00f6rne\u011fin, bir SMS a\u011f ge\u00e7idine) istek g\u00f6ndererek bir i\u015flemi tetikler.<br \/>\n*   <strong>Veritaban\u0131 Eyleyicisi:<\/strong> Veritaban\u0131na veri ekler, g\u00fcnceller veya siler.<\/p>\n<p>A\u015fa\u011f\u0131daki \u00f6rnekte, bir dosya i\u00e7eri\u011fini okuyan bir sens\u00f6r ve bu i\u00e7eri\u011fi ba\u015fka bir dosyaya yazan bir eyleyici g\u00f6rebilirsiniz:<\/p>\n<pre><code>\nfrom strands_agents import Agent, Sensor, Action\nimport os\n\nclass FileContentSensor(Sensor):\n    def __init__(self, filepath):\n        self.filepath = filepath\n        self.last_content = None\n\n    def sense(self):\n        if not os.path.exists(self.filepath):\n            print(f\"Uyar\u0131: Dosya '{self.filepath}' bulunamad\u0131.\")\n            return None\n        with open(self.filepath, 'r', encoding='utf-8') as f:\n            current_content = f.read()\n            if current_content != self.last_content:\n                self.last_content = current_content\n                print(f\"Yeni dosya i\u00e7eri\u011fi alg\u0131land\u0131: {current_content[:50]}...\")\n                return current_content\n            else:\n                return None # \u0130\u00e7erik de\u011fi\u015fmediyse None d\u00f6nd\u00fcr\n\nclass FileWriterAction(Action):\n    def __init__(self, output_filepath):\n        self.output_filepath = output_filepath\n\n    def execute(self, data):\n        if data:\n            with open(self.output_filepath, 'a', encoding='utf-8') as f:\n                f.write(f\"\\n--- Yeni \u0130\u00e7erik ({time.strftime('%Y-%m-%d %H:%M:%S')}) ---\\n\")\n                f.write(data)\n            print(f\"\u0130\u00e7erik '{self.output_filepath}' dosyas\u0131na yaz\u0131ld\u0131.\")\n        else:\n            print(\"Yaz\u0131lacak veri bulunamad\u0131.\")\n\ndef create_file_agent(input_file, output_file):\n    agent = Agent(name=\"FileMonitorAgent\")\n    agent.add_sensor(\"file_monitor\", FileContentSensor(input_file))\n    agent.add_action(\"file_writer\", FileWriterAction(output_file))\n    \n    # E\u011fer sens\u00f6r bir veri d\u00f6nd\u00fcr\u00fcrse (None de\u011filse), eylemi tetikle\n    agent.add_behavior(\"file_monitor\", \"file_writer\", lambda data: data is not None)\n    \n    return agent\n\nif __name__ == \"__main__\":\n    input_filename = \"input.txt\"\n    output_filename = \"output.log\"\n    \n    # Test i\u00e7in input.txt dosyas\u0131n\u0131 olu\u015ftural\u0131m\n    with open(input_filename, 'w', encoding='utf-8') as f:\n        f.write(\"\u0130lk sat\u0131r.\\n\")\n\n    my_file_agent = create_file_agent(input_filename, output_filename)\n    print(f\"FileMonitorAgent ba\u015flat\u0131l\u0131yor. '{input_filename}' dosyas\u0131n\u0131 izleyecek.\")\n    print(\"\u00c7\u0131kmak i\u00e7in Ctrl+C tu\u015flar\u0131na bas\u0131n.\")\n    \n    try:\n        # Ajan\u0131 5 saniyede bir \u00e7al\u0131\u015ft\u0131r\n        # Bu s\u0131rada input.txt dosyas\u0131n\u0131 manuel olarak de\u011fi\u015ftirerek ajan\u0131n tepkisini g\u00f6zlemleyebilirsiniz.\n        my_file_agent.run(interval=5) \n    except KeyboardInterrupt:\n        print(\"\\nFileMonitorAgent durduruldu.\")\n    finally:\n        # Test dosyalar\u0131n\u0131 temizleyelim\n        if os.path.exists(input_filename):\n            os.remove(input_filename)\n        if os.path.exists(output_filename):\n            os.remove(output_filename)\n\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnek, Strands Agents'\u0131n ne kadar esnek oldu\u011funu g\u00f6stermektedir. Ajan, <code>input.txt<\/code> dosyas\u0131ndaki de\u011fi\u015fiklikleri alg\u0131lar ve yeni i\u00e7eri\u011fi <code>output.log<\/code> dosyas\u0131na ekler. <code>add_behavior<\/code> metodunda kullan\u0131lan <code>lambda data: data is not None<\/code> ifadesi, sens\u00f6rden gelen verinin <code>None<\/code> olmamas\u0131 durumunda eylemin tetiklenmesini sa\u011flayan basit bir ko\u015fuldur. Bu t\u00fcr ko\u015fullarla ajan\u0131n karar alma mant\u0131\u011f\u0131n\u0131 \u015fekillendirebiliriz.<\/p>\n<h2 id=\"gercek-dunya-senaryolarinda-strands-ajanlari-vaka-analizleri\">Ger\u00e7ek D\u00fcnya Senaryolar\u0131nda Strands Ajanlar\u0131: Vaka Analizleri<\/h2>\n<p>Strands Agents'\u0131n esnek yap\u0131s\u0131, onu bir\u00e7ok ger\u00e7ek d\u00fcnya problemini \u00e7\u00f6zmek i\u00e7in ideal bir ara\u00e7 haline getirir. \u0130\u015fletmelerin s\u00fcre\u00e7lerini otomatikle\u015ftirmekten ki\u015fisel asistanlara kadar geni\u015f bir yelpazede uygulama alan\u0131 bulabilir. Bu b\u00f6l\u00fcmde, Strands Agents ile geli\u015ftirilebilecek iki pratik senaryoyu ve bunlar\u0131n nas\u0131l yap\u0131land\u0131r\u0131labilece\u011fini inceleyece\u011fiz. Bu vaka analizleri, Strands Agents'\u0131n sadece basit g\u00f6revler i\u00e7in de\u011fil, ayn\u0131 zamanda daha karma\u015f\u0131k i\u015f ak\u0131\u015flar\u0131n\u0131 y\u00f6netmek i\u00e7in de kullan\u0131labilece\u011fini g\u00f6sterecektir.<\/p>\n<h3>E-ticaret \u0130\u00e7in Ak\u0131ll\u0131 Fiyat Takip Ajan\u0131<\/h3>\n<p>E-ticaret sekt\u00f6r\u00fc, dinamik fiyatland\u0131rma stratejileri ve yo\u011fun rekabet nedeniyle s\u00fcrekli takibin gerekli oldu\u011fu bir aland\u0131r. Rakiplerin \u00fcr\u00fcn fiyatlar\u0131n\u0131 izlemek, kendi fiyatland\u0131rma stratejinizi optimize etmek i\u00e7in kritik \u00f6neme sahiptir. Strands Agents ile basit ama etkili bir fiyat takip ajan\u0131 olu\u015fturabiliriz.<\/p>\n<p><strong>Senaryo:<\/strong> Bir e-ticaret \u015firketi, anahtar \u00fcr\u00fcnlerinin rakiplerindeki fiyat de\u011fi\u015fikliklerini otomatik olarak takip etmek ve bu bilgiyi bir veritaban\u0131na kaydetmek istiyor. Fiyat d\u00fc\u015f\u00fc\u015flerinde y\u00f6neticilere bildirim g\u00f6nderilmesi hedefleniyor.<\/p>\n<p><strong>Ajan\u0131n \u0130\u015fleyi\u015fi:<\/strong><\/p>\n<p>1.  <strong>Web Scraping Sens\u00f6r\u00fc:<\/strong> Belirli rakip e-ticaret sitelerindeki \u00fcr\u00fcn sayfalar\u0131n\u0131 d\u00fczenli aral\u0131klarla ziyaret eder. \u00dcr\u00fcn\u00fcn ad\u0131n\u0131, mevcut fiyat\u0131n\u0131 ve stok durumunu (g\u00f6rsel betimleme: bir botun web sitesini ziyaret edip, \u00fcr\u00fcn kartlar\u0131ndaki fiyat etiketlerini okudu\u011funu hayal edin) <code>BeautifulSoup<\/code> veya <code>Scrapy<\/code> gibi k\u00fct\u00fcphaneler kullanarak ayr\u0131\u015ft\u0131r\u0131r. Bu sens\u00f6r, yeni fiyat veya stok de\u011fi\u015fikli\u011fi alg\u0131lad\u0131\u011f\u0131nda ilgili veriyi d\u00f6nd\u00fcr\u00fcr.<br \/>\n2.  <strong>Veritaban\u0131 Eyleyicisi:<\/strong> Sens\u00f6rden gelen fiyat ve stok bilgilerini (\u00fcr\u00fcn ID, rakip ad\u0131, tarih, fiyat, stok durumu gibi) bir SQL veritaban\u0131na (\u00f6rne\u011fin PostgreSQL veya SQLite) kaydeder.<br \/>\n3.  <strong>Fiyat Kar\u015f\u0131la\u015ft\u0131rma ve Bildirim Davran\u0131\u015f\u0131:<\/strong> Yeni alg\u0131lanan fiyat, ajan\u0131n haf\u0131zas\u0131nda tuttu\u011fu son fiyatla kar\u015f\u0131la\u015ft\u0131r\u0131l\u0131r. E\u011fer fiyatta belirli bir d\u00fc\u015f\u00fc\u015f (\u00f6rne\u011fin %5 veya daha fazla) tespit edilirse, ajan\u0131n bir <code>EmailSenderAction<\/code> eyleyicisini tetiklemesi sa\u011flan\u0131r.<br \/>\n4.  <strong>E-posta G\u00f6nderme Eyleyicisi:<\/strong> \u00d6nceden tan\u0131mlanm\u0131\u015f bir e-posta adresine, fiyat d\u00fc\u015f\u00fc\u015f\u00fcn\u00fc ve ilgili \u00fcr\u00fcn detaylar\u0131n\u0131 i\u00e7eren bir bildirim e-postas\u0131 g\u00f6nderir.<\/p>\n<p><strong>Basitle\u015ftirilmi\u015f Kod Ak\u0131\u015f\u0131 (Pseudocode):<\/strong><\/p>\n<pre><code>\n# ... imports ...\nfrom strands_agents import Agent, Sensor, Action\nimport requests\nfrom bs4 import BeautifulSoup\nimport sqlite3\nimport smtplib\nfrom email.mime.text import MIMEText\nfrom email.mime.multipart import MIMEMultipart\n\n# 1. Web Scraping Sens\u00f6r\u00fc\nclass PriceScraperSensor(Sensor):\n    def __init__(self, product_url, product_name):\n        self.product_url = product_url\n        self.product_name = product_name\n        self.last_price = None # Ajan\u0131n haf\u0131zas\u0131 i\u00e7in son fiyat\u0131 tutar\n        print(f\"Sens\u00f6r olu\u015fturuldu: {self.product_name} i\u00e7in {self.product_url}\")\n\n    def sense(self):\n        try:\n            response = requests.get(self.product_url)\n            soup = BeautifulSoup(response.content, 'html.parser')\n            \n            # Bu k\u0131s\u0131m web sitesinin HTML yap\u0131s\u0131na g\u00f6re \u00f6zelle\u015ftirilmelidir!\n            # \u00d6rnek: Fiyat\u0131 i\u00e7eren bir div veya span etiketi bulal\u0131m\n            price_tag = soup.find('span', class_='price-value') \n            if not price_tag:\n                price_tag = soup.find('div', class_='product-price') # Ba\u015fka bir olas\u0131 etiket\n            \n            if price_tag:\n                current_price_str = price_tag.text.strip().replace(',', '.').replace('TL', '').strip()\n                current_price = float(current_price_str)\n                \n                if self.last_price is None or current_price != self.last_price:\n                    old_price = self.last_price\n                    self.last_price = current_price\n                    print(f\"Fiyat de\u011fi\u015fimi alg\u0131land\u0131: {self.product_name} - \u00d6nceki: {old_price if old_price else 'N\/A'}, Yeni: {current_price}\")\n                    return {\"product_name\": self.product_name, \"price\": current_price, \"old_price\": old_price}\n            \n            print(f\"Fiyat de\u011fi\u015fmedi veya bulunamad\u0131: {self.product_name}\")\n            return None # Fiyat de\u011fi\u015fmediyse veya bulunamad\u0131ysa None d\u00f6nd\u00fcr\n\n        except Exception as e:\n            print(f\"Hata olu\u015ftu ({self.product_name}): {e}\")\n            return None\n\n# 2. Veritaban\u0131 Eyleyicisi\nclass DatabaseLoggerAction(Action):\n    def __init__(self, db_name=\"price_tracking.db\"):\n        self.conn = sqlite3.connect(db_name)\n        self.cursor = self.conn.cursor()\n        self.cursor.execute('''\n            CREATE TABLE IF NOT EXISTS prices (\n                id INTEGER PRIMARY KEY,\n                product_name TEXT,\n                price REAL,\n                old_price REAL,\n                timestamp TEXT\n            )\n        ''')\n        self.conn.commit()\n        print(f\"Veritaban\u0131 eyleyicisi ba\u015flat\u0131ld\u0131: {db_name}\")\n\n    def execute(self, data):\n        if data:\n            product_name = data.get(\"product_name\")\n            price = data.get(\"price\")\n            old_price = data.get(\"old_price\")\n            timestamp = time.strftime('%Y-%m-%d %H:%M:%S')\n            self.cursor.execute(\"INSERT INTO prices (product_name, price, old_price, timestamp) VALUES (?, ?, ?, ?)\",\n                                (product_name, price, old_price, timestamp))\n            self.conn.commit()\n            print(f\"Fiyat {product_name} ({price} TL) veritaban\u0131na kaydedildi.\")\n        else:\n            print(\"Veritaban\u0131na kaydedilecek veri yok.\")\n\n# 3. E-posta G\u00f6nderme Eyleyicisi\nclass EmailSenderAction(Action):\n    def __init__(self, sender_email, sender_password, receiver_email):\n        self.sender_email = sender_email\n        self.sender_password = sender_password\n        self.receiver_email = receiver_email\n        print(f\"E-posta eyleyicisi ba\u015flat\u0131ld\u0131: G\u00f6nderen {sender_email}, Al\u0131c\u0131 {receiver_email}\")\n\n    def execute(self, data):\n        if data and data.get(\"price_drop\"):\n            product_name = data.get(\"product_name\")\n            current_price = data.get(\"price\")\n            old_price = data.get(\"old_price\")\n            drop_percentage = data.get(\"drop_percentage\")\n\n            msg = MIMEMultipart()\n            msg['From'] = self.sender_email\n            msg['To'] = self.receiver_email\n            msg['Subject'] = f\"Fiyat D\u00fc\u015f\u00fc\u015f\u00fc: {product_name}!\"\n\n            body = f\"\"\"\n            Merhaba,\n            \n            {product_name} \u00fcr\u00fcn\u00fcn\u00fcn fiyat\u0131nda \u00f6nemli bir d\u00fc\u015f\u00fc\u015f tespit edildi:\n            \n            \u00d6nceki Fiyat: {old_price} TL\n            Yeni Fiyat: {current_price} TL\n            D\u00fc\u015f\u00fc\u015f Oran\u0131: %{drop_percentage:.2f}\n            \n            \u00dcr\u00fcn\u00fc kontrol etmek i\u00e7in: {data.get(\"product_url\")}\n            \n            Sayg\u0131lar\u0131m\u0131zla,\n            Fiyat Takip Ajan\u0131n\u0131z\n            \"\"\"\n            msg.attach(MIMEText(body, 'plain'))\n\n            try:\n                # SSL\/TLS \u015fifrelemesi ile SMTP sunucusuna ba\u011flan\u0131n\n                server = smtplib.SMTP_SSL('smtp.gmail.com', 465) \n                server.login(self.sender_email, self.sender_password)\n                server.send_message(msg)\n                server.quit()\n                print(f\"Fiyat d\u00fc\u015f\u00fc\u015f\u00fc bildirimi '{self.receiver_email}' adresine g\u00f6nderildi.\")\n            except Exception as e:\n                print(f\"E-posta g\u00f6nderme hatas\u0131: {e}\")\n        else:\n            print(\"E-posta g\u00f6nderilecek veri bulunamad\u0131 veya fiyat d\u00fc\u015f\u00fc\u015f\u00fc yok.\")\n\n# Ajan\u0131 Olu\u015fturma Fonksiyonu\ndef create_price_tracker_agent(product_url, product_name, sender_email, sender_password, receiver_email):\n    agent = Agent(name=f\"PriceTracker_{product_name.replace(' ', '')}\")\n\n    # Sens\u00f6rleri ve Eyleyicileri ekle\n    price_scraper = PriceScraperSensor(product_url, product_name)\n    db_logger = DatabaseLoggerAction()\n    email_sender = EmailSenderAction(sender_email, sender_password, receiver_email)\n    \n    agent.add_sensor(\"price_scraper\", price_scraper)\n    agent.add_action(\"db_logger\", db_logger)\n    agent.add_action(\"email_sender\", email_sender)\n\n    # Davran\u0131\u015flar\u0131 tan\u0131mla\n    def price_change_logic(data):\n        if data:\n            # Veritaban\u0131na kaydetme eylemini her fiyat de\u011fi\u015fikli\u011finde tetikle\n            agent.trigger_action(\"db_logger\", data) \n\n            # Fiyat d\u00fc\u015f\u00fc\u015f\u00fc kontrol\u00fc\n            current_price = data.get(\"price\")\n            old_price = data.get(\"old_price\")\n            \n            if old_price and current_price < old_price:\n                drop_percentage = ((old_price - current_price) \/ old_price) * 100\n                if drop_percentage >= 5: # %5 veya \u00fczeri d\u00fc\u015f\u00fc\u015fte bildirim g\u00f6nder\n                    print(f\"\u00d6nemli fiyat d\u00fc\u015f\u00fc\u015f\u00fc alg\u0131land\u0131: {product_name} - %{drop_percentage:.2f}\")\n                    email_data = {\n                        \"price_drop\": True,\n                        \"product_name\": product_name,\n                        \"price\": current_price,\n                        \"old_price\": old_price,\n                        \"drop_percentage\": drop_percentage,\n                        \"product_url\": product_url\n                    }\n                    agent.trigger_action(\"email_sender\", email_data)\n        return False # Sens\u00f6r\u00fcn \u00e7\u0131kt\u0131s\u0131 direkt eylemi tetiklemesin, i\u00e7erideki mant\u0131k tetiklesin\n\n    # Sens\u00f6r tetiklendi\u011finde price_change_logic fonksiyonunu \u00e7al\u0131\u015ft\u0131r\n    agent.add_behavior(\"price_scraper\", \"price_change_logic\", price_change_logic)\n    \n    return agent\n\n# --- Ajan\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in \u00f6rnek main blo\u011fu ---\nif __name__ == \"__main__\":\n    # Ger\u00e7ek URL ve e-posta bilgilerinizi buraya girmeniz gerekmektedir!\n    # Bu \u00f6rnek sadece pseudocode olup, \u00e7al\u0131\u015ft\u0131r\u0131lmadan \u00f6nce detayl\u0131 uyarlama gerektirir.\n    # Dummy verilerle test edilebilir.\n    \n    # Not: E-posta g\u00f6ndermek i\u00e7in Gmail kullan\u0131yorsan\u0131z, uygulama \u015fifresi olu\u015fturman\u0131z gerekebilir.\n    # https:\/\/support.google.com\/accounts\/answer\/185833?hl=tr\n    SENDER_EMAIL = \"your_email@gmail.com\"\n    SENDER_PASSWORD = \"your_app_password\" # Uygulama \u015fifresi\n    RECEIVER_EMAIL = \"recipient_email@example.com\"\n    TARGET_PRODUCT_URL = \"https:\/\/www.example.com\/product\/123\" # Ger\u00e7ek bir \u00fcr\u00fcn URL'si\n    TARGET_PRODUCT_NAME = \"Ak\u0131ll\u0131 Telefon X\"\n\n    print(\"L\u00fctfen ger\u00e7ek e-posta ve \u00fcr\u00fcn URL'si bilgilerini g\u00fcncelleyin.\")\n\n    # my_price_agent = create_price_tracker_agent(\n    #     TARGET_PRODUCT_URL, \n    #     TARGET_PRODUCT_NAME,\n    #     SENDER_EMAIL, \n    #     SENDER_PASSWORD, \n    #     RECEIVER_EMAIL\n    # )\n    # try:\n    #     my_price_agent.run(interval=60 * 60) # Her saat ba\u015f\u0131 \u00e7al\u0131\u015ft\u0131r\n    # except KeyboardInterrupt:\n    #     print(\"\\nPriceTrackerAgent durduruldu.\")\n    # finally:\n    #     # Veritaban\u0131 ba\u011flant\u0131s\u0131n\u0131 kapat\n    #     if hasattr(my_price_agent.actions.get(\"db_logger\"), 'conn'):\n    #         my_price_agent.actions.get(\"db_logger\").conn.close()\n    \n    # Basit bir \u00f6rnek i\u00e7in:\n    print(\"Web scraping sens\u00f6r\u00fcn\u00fcn \u00e7al\u0131\u015fmas\u0131 i\u00e7in ger\u00e7ek bir web sitesine ihtiyac\u0131m\u0131z var.\")\n    print(\"\u00d6rnek olarak, bir test sens\u00f6r\u00fc ve loglama eyleyicisi ile ajan\u0131 yap\u0131land\u0131ral\u0131m.\")\n    \n    # TEST SENARYOSU: Web scraping ve e-posta g\u00f6nderme ad\u0131mlar\u0131 atlanarak sadece veri ak\u0131\u015f\u0131n\u0131 g\u00f6steren bir ajan\n    class MockPriceSensor(Sensor):\n        def __init__(self):\n            self.prices = [100.0, 95.0, 92.0, 92.0, 85.0, 80.0]\n            self.index = 0\n            self.last_price = None\n\n        def sense(self):\n            if self.index < len(self.prices):\n                current_price = self.prices[self.index]\n                self.index += 1\n                \n                if self.last_price is None or current_price != self.last_price:\n                    old_price = self.last_price\n                    self.last_price = current_price\n                    return {\"product_name\": \"Test \u00dcr\u00fcn\u00fc\", \"price\": current_price, \"old_price\": old_price, \"product_url\": \"http:\/\/test.com\/urun\"}\n                return None\n            return None\n\n    mock_agent = Agent(name=\"MockPriceAgent\")\n    mock_agent.add_sensor(\"mock_price_sensor\", MockPriceSensor())\n    mock_agent.add_action(\"mock_db_logger\", DatabaseLoggerAction(db_name=\"mock_price_tracking.db\"))\n    # mock_agent.add_action(\"mock_email_sender\", EmailSenderAction(SENDER_EMAIL, SENDER_PASSWORD, RECEIVER_EMAIL)) # E-posta g\u00f6nderme kapat\u0131ld\u0131\n    \n    def mock_price_change_logic(data):\n        if data:\n            mock_agent.trigger_action(\"mock_db_logger\", data)\n            current_price = data.get(\"price\")\n            old_price = data.get(\"old_price\")\n            \n            if old_price and current_price < old_price:\n                drop_percentage = ((old_price - current_price) \/ old_price) * 100\n                if drop_percentage >= 5:\n                    print(f\"MOCK: \u00d6nemli fiyat d\u00fc\u015f\u00fc\u015f\u00fc (%{drop_percentage:.2f}) alg\u0131land\u0131! {data.get('product_name')}: {current_price} TL (\u00d6nceki: {old_price} TL)\")\n                    # mock_agent.trigger_action(\"mock_email_sender\", {**data, \"price_drop\": True, \"drop_percentage\": drop_percentage})\n        return False\n\n    mock_agent.add_behavior(\"mock_price_sensor\", \"mock_price_change_logic\", mock_price_change_logic)\n    \n    print(\"\\nMock Price Agent ba\u015flat\u0131l\u0131yor. Test verileri ile \u00e7al\u0131\u015facak.\")\n    print(\"\u00c7\u0131kmak i\u00e7in Ctrl+C tu\u015flar\u0131na bas\u0131n.\")\n    try:\n        mock_agent.run(interval=2) # Her 2 saniyede bir \u00e7al\u0131\u015ft\u0131r\n    except KeyboardInterrupt:\n        print(\"\\nMock Price Agent durduruldu.\")\n    finally:\n        if hasattr(mock_agent.actions.get(\"mock_db_logger\"), 'conn'):\n            mock_agent.actions.get(\"mock_db_logger\").conn.close()\n        # Test i\u00e7in olu\u015fturulan db dosyas\u0131n\u0131 sil\n        if os.path.exists(\"mock_price_tracking.db\"):\n            os.remove(\"mock_price_tracking.db\")\n<\/pre>\n<p><\/code><\/p>\n<p>Bu senaryoda, Strands Agents'\u0131n mod\u00fclerli\u011fi ve davran\u0131\u015f tan\u0131mlama yetene\u011fi sayesinde, karma\u015f\u0131k bir i\u015f ak\u0131\u015f\u0131 otomatize edilmi\u015f olur. Web scraping, veritaban\u0131 i\u015flemleri ve bildirim g\u00f6nderme gibi farkl\u0131 g\u00f6revler ayr\u0131 ayr\u0131 sens\u00f6r ve eyleyicilerle y\u00f6netilerek, ajan\u0131n bak\u0131m\u0131 ve geni\u015fletilmesi kolayla\u015f\u0131r.<\/p>\n<h3>M\u00fc\u015fteri Deste\u011fi Otomasyon Ajan\u0131<\/h3>\n<p>M\u00fc\u015fteri deste\u011fi departmanlar\u0131 genellikle tekrarlayan sorularla bo\u011fu\u015fur ve bu durum hem m\u00fc\u015fteri memnuniyetini d\u00fc\u015f\u00fcrebilir hem de operasyonel maliyetleri art\u0131rabilir. Strands Agents, bu t\u00fcr s\u00fcre\u00e7leri otomatikle\u015ftirerek ekiplerin daha karma\u015f\u0131k sorunlara odaklanmas\u0131n\u0131 sa\u011flayabilir.<\/p>\n<p><strong>Senaryo:<\/strong> Bir yaz\u0131l\u0131m \u015firketi, gelen destek e-postalar\u0131n\u0131 otomatik olarak okuyup, s\u0131k\u00e7a sorulan sorulara (SSS) uygun yan\u0131tlar\u0131 g\u00f6ndermek ve daha karma\u015f\u0131k talepleri ilgili departmanlara y\u00f6nlendirmek istiyor.<\/p>\n<p><strong>Ajan\u0131n \u0130\u015fleyi\u015fi:<\/strong><\/p>\n<p>1.  <strong>E-posta Okuma Sens\u00f6r\u00fc:<\/strong> Belirli bir e-posta hesab\u0131n\u0131 (IMAP kullanarak) d\u00fczenli olarak kontrol eder. Yeni gelen e-postalar\u0131 okur, konu ve i\u00e7erik bilgilerini ayr\u0131\u015ft\u0131r\u0131r. Okunan e-postalar\u0131 \"i\u015flendi\" olarak i\u015faretleyebilir.<br \/>\n2.  <strong>Do\u011fal Dil \u0130\u015fleme (NLP) Davran\u0131\u015f\u0131:<\/strong> E-posta i\u00e7eri\u011fini al\u0131r ve metin s\u0131n\u0131fland\u0131rma (\u00f6rne\u011fin, <code>spaCy<\/code> veya <code>nltk<\/code> ile basit anahtar kelime e\u015fle\u015ftirme) kullanarak e-postan\u0131n kategorisini belirler (\u00f6r: \"\u015fifre s\u0131f\u0131rlama\", \"hesap aktivasyonu\", \"teknik sorun\", \"genel soru\").<br \/>\n3.  <strong>Yan\u0131t \u015eablonu Eyleyicisi:<\/strong> E\u011fer e-posta bir SSS kategorisine giriyorsa, \u00f6nceden tan\u0131mlanm\u0131\u015f bir yan\u0131t \u015fablonunu kullan\u0131r ve otomatik bir yan\u0131t e-postas\u0131 olu\u015fturur. Bu eylem, <code>EmailSenderAction<\/code> gibi bir e-posta g\u00f6nderme mekanizmas\u0131n\u0131 tetikler.<br \/>\n4.  <strong>Y\u00f6nlendirme Eyleyicisi:<\/strong> E\u011fer e-posta karma\u015f\u0131k bir teknik sorunsa veya SSS kategorisine girmiyorsa, ilgili departman\u0131n e-posta adresine (\u00f6rne\u011fin <code>support-level2@company.com<\/code>) orijinal e-postay\u0131 veya \u00f6zetini y\u00f6nlendirir.<\/p>\n<p><strong>Mobil Uyumlu HTML\/CSS Yap\u0131s\u0131 (\u00d6rnek - Ajan\u0131n Rapor \u00c7\u0131k\u0131\u015flar\u0131 \u0130\u00e7in):<\/strong><\/p>\n<p>E\u011fer ajan, web tabanl\u0131 bir aray\u00fcz veya rapor paneli \u00fczerinden izleniyorsa, bu aray\u00fcz\u00fcn mobil uyumlu olmas\u0131 \u00f6nemlidir. A\u015fa\u011f\u0131daki CSS kodu, ajan\u0131n \u00fcretti\u011fi raporlar\u0131n veya bildirimlerin mobil cihazlarda d\u00fczg\u00fcn g\u00f6r\u00fcnmesini sa\u011flamak i\u00e7in kullan\u0131labilir.<\/p>\n<pre><code>\n\/* Rapor veya bildirim \u00e7\u0131kt\u0131s\u0131 i\u00e7in genel stiller *\/\n.report-container {\n    padding: 20px;\n    border: 1px solid #ddd;\n    border-radius: 8px;\n    background-color: #fff;\n    margin-bottom: 20px;\n}\n.report-header {\n    font-size: 1.5em;\n    color: #3498db;\n    margin-bottom: 15px;\n}\n.report-item {\n    margin-bottom: 10px;\n    padding: 10px;\n    border-left: 4px solid #1abc9c;\n    background-color: #f8f8f8;\n}\n.report-item strong {\n    color: #2c3e50;\n}\n\n\/* Mobil cihazlar i\u00e7in responsive ayarlar *\/\n@media (max-width: 600px) {\n    .report-container {\n        padding: 10px;\n        margin: 10px;\n    }\n    .report-header {\n        font-size: 1.2em;\n    }\n    .report-item {\n        font-size: 0.9em;\n        padding: 8px;\n    }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Bu CSS, ajan\u0131n \u00fcretti\u011fi raporlar\u0131 daha okunakl\u0131 hale getirir ve k\u00fc\u00e7\u00fck ekranlarda dahi bilgilerin d\u00fczg\u00fcn bir \u015fekilde g\u00f6r\u00fcnt\u00fclenmesini sa\u011flar. Bir e-posta g\u00f6nderen ajan, HTML tabanl\u0131 e-postalar i\u00e7in de benzer responsive tasar\u0131m prensiplerini uygulayarak, al\u0131c\u0131lar\u0131n e-postay\u0131 mobil cihazlar\u0131nda rahat\u00e7a okumas\u0131n\u0131 sa\u011flayabilir.<\/p>\n<h2 id=\"performansi-optimize-etme-ve-strands-ajanlarini-ileri-duzeyde-kullanma\">Performans\u0131 Optimize Etme ve Strands Ajanlar\u0131n\u0131 \u0130leri D\u00fczeyde Kullanma<\/h2>\n<p>Strands Agents ile temel ajanlar olu\u015fturmak kolay olsa da, ajanlar\u0131n\u0131z\u0131 ger\u00e7ek d\u00fcnya senaryolar\u0131nda daha verimli, g\u00fcvenli ve \u00f6l\u00e7eklenebilir hale getirmek i\u00e7in baz\u0131 ileri d\u00fczey tekniklere ihtiya\u00e7 duyulur. Bu b\u00f6l\u00fcmde, ajan\u0131n performans\u0131n\u0131 art\u0131rma, davran\u0131\u015flar\u0131n\u0131 daha sofistike hale getirme ve \u00e7oklu ajan sistemleri gibi konulara odaklanaca\u011f\u0131z.<\/p>\n<h3>Ajan Davran\u0131\u015flar\u0131n\u0131 Geli\u015ftirme ve Mod\u00fclerlik<\/h3>\n<p>Bir ajan\u0131n performans\u0131, sadece do\u011fru sens\u00f6r ve eyleyicilere sahip olmas\u0131yla de\u011fil, ayn\u0131 zamanda bu bile\u015fenleri ne kadar etkin bir \u015fekilde kulland\u0131\u011f\u0131yla da ilgilidir.<\/p>\n<p><strong>Ajan Durum Y\u00f6netimi ve Haf\u0131za Kullan\u0131m\u0131:<\/strong> Ajanlar genellikle \u00f6nceki eylemlerinden veya alg\u0131lamalar\u0131ndan edindikleri bilgilere ihtiya\u00e7 duyarlar. Strands Agents'ta ajan\u0131n durumunu y\u00f6netmek i\u00e7in, sens\u00f6r veya eyleyici s\u0131n\u0131flar\u0131n\u0131z\u0131n <code>__init__<\/code> metodunda <code>self<\/code> de\u011fi\u015fkenleri tan\u0131mlayarak durumu saklayabilirsiniz (yukar\u0131daki <code>PriceScraperSensor<\/code> \u00f6rne\u011findeki <code>self.last_price<\/code> gibi). Daha karma\u015f\u0131k durumlar i\u00e7in, ajan\u0131n bir veritaban\u0131, Redis gibi bir anahtar-de\u011fer deposu veya hatta dosya sistemi arac\u0131l\u0131\u011f\u0131yla kal\u0131c\u0131 bir haf\u0131zaya sahip olmas\u0131n\u0131 sa\u011flayabilirsiniz. Bu, ajan\u0131n her \u00e7al\u0131\u015ft\u0131\u011f\u0131nda s\u0131f\u0131rdan ba\u015flamamas\u0131n\u0131 ve \u00f6\u011frenilmi\u015f bilgileri korumas\u0131n\u0131 sa\u011flar.<\/p>\n<p><strong>Birden Fazla Ajan\u0131n Birlikte \u00c7al\u0131\u015fmas\u0131 (Multi-Agent Systems):<\/strong> Tek bir ajan\u0131n yerine, farkl\u0131 g\u00f6revlere odaklanm\u0131\u015f birden fazla ajan\u0131 bir araya getirmek, karma\u015f\u0131k problemlerin \u00e7\u00f6z\u00fcm\u00fcnde daha etkili olabilir. \u00d6rne\u011fin, bir ajan web sitelerini tararken, ba\u015fka bir ajan toplanan veriyi analiz edebilir ve \u00fc\u00e7\u00fcnc\u00fc bir ajan bildirim g\u00f6nderebilir. Strands Agents'\u0131n mod\u00fcler yap\u0131s\u0131, bu t\u00fcr \u00e7oklu ajan sistemlerini kurmay\u0131 kolayla\u015ft\u0131r\u0131r. Ajanlar aras\u0131 ileti\u015fimi, ortak bir veritaban\u0131, mesaj kuyruklar\u0131 (RabbitMQ, Kafka) veya basit dosya sistemleri \u00fczerinden sa\u011flayabilirsiniz. Her ajan kendi belirli sorumlulu\u011funu yerine getirdi\u011finden, sistem daha esnek ve hata toleransl\u0131 hale gelir.<\/p>\n<p><strong>Hata Y\u00f6netimi ve G\u00fcnl\u00fckleme (Logging):<\/strong> Her yaz\u0131l\u0131mda oldu\u011fu gibi, ajanlar da beklenmeyen durumlarla kar\u015f\u0131la\u015fabilir. Sens\u00f6rlerin API \u00e7a\u011fr\u0131lar\u0131 ba\u015far\u0131s\u0131z olabilir, veritaban\u0131 ba\u011flant\u0131lar\u0131 kesilebilir veya eyleyiciler bir hata f\u0131rlatabilir. Bu durumlar i\u00e7in sa\u011flam hata y\u00f6netimi mekanizmalar\u0131 olu\u015fturmak \u00f6nemlidir:<br \/>\n*   <strong><code>try-except<\/code> bloklar\u0131:<\/strong> Kritik kod par\u00e7alar\u0131n\u0131 bu bloklar i\u00e7ine alarak, hatalar\u0131n ajan\u0131n tamamen \u00e7\u00f6kmesini engellemesini sa\u011flay\u0131n.<br \/>\n*   <strong>G\u00fcnl\u00fckleme (Logging):<\/strong> Python'\u0131n <code>logging<\/code> mod\u00fcl\u00fc, ajan\u0131n \u00e7al\u0131\u015fma zaman\u0131ndaki olaylar\u0131, uyar\u0131lar\u0131 ve hatalar\u0131 kaydetmek i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Bu loglar, ajan\u0131n davran\u0131\u015f\u0131n\u0131 anlaman\u0131za ve sorunlar\u0131 te\u015fhis etmenize yard\u0131mc\u0131 olur.<\/p>\n<pre><code>\nimport logging\n\n# Loglama yap\u0131land\u0131rmas\u0131\nlogging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')\nlogger = logging.getLogger(__name__)\n\nclass RobustAPISensor(Sensor):\n    def __init__(self, api_url):\n        self.api_url = api_url\n\n    def sense(self):\n        try:\n            response = requests.get(self.api_url, timeout=10) # 10 saniye zaman a\u015f\u0131m\u0131\n            response.raise_for_status() # HTTP hatalar\u0131 i\u00e7in istisna f\u0131rlat\n            data = response.json()\n            logger.info(f\"API'den veri ba\u015far\u0131yla al\u0131nd\u0131: {self.api_url}\")\n            return data\n        except requests.exceptions.Timeout:\n            logger.error(f\"API iste\u011fi zaman a\u015f\u0131m\u0131na u\u011frad\u0131: {self.api_url}\")\n            return None\n        except requests.exceptions.RequestException as e:\n            logger.error(f\"API iste\u011fi hatas\u0131 ({self.api_url}): {e}\")\n            return None\n        except ValueError as e:\n            logger.error(f\"API yan\u0131t\u0131 JSON format\u0131nda de\u011fil veya i\u015flenemedi: {e}\")\n            return None\n\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnek, bir API sens\u00f6r\u00fcnde zaman a\u015f\u0131m\u0131, a\u011f hatalar\u0131 ve JSON ayr\u0131\u015ft\u0131rma hatalar\u0131 gibi farkl\u0131 senaryolar\u0131 nas\u0131l ele alaca\u011f\u0131n\u0131z\u0131 g\u00f6sterir.<\/p>\n<h3>G\u00fcvenlik ve \u00d6l\u00e7eklenebilirlik \u0130\u00e7in \u0130pu\u00e7lar\u0131<\/h3>\n<p>Ajanlar\u0131n\u0131z\u0131 \u00fcretime ta\u015f\u0131rken, g\u00fcvenlik ve performans konular\u0131 b\u00fcy\u00fck \u00f6nem ta\u015f\u0131r.<\/p>\n<p><strong>API Anahtarlar\u0131n\u0131n G\u00fcvenli Saklanmas\u0131:<\/strong> Ajanlar genellikle harici servislerle etkile\u015fim kurmak i\u00e7in API anahtarlar\u0131 veya kimlik bilgileri kullan\u0131r. Bu bilgileri do\u011frudan kod i\u00e7ine yazmak yerine, \u00e7evre de\u011fi\u015fkenleri (<code>os.environ<\/code>), <code>.env<\/code> dosyalar\u0131 (<code>python-dotenv<\/code> k\u00fct\u00fcphanesi ile) veya \u00f6zel bir s\u0131r y\u00f6netimi \u00e7\u00f6z\u00fcm\u00fc (HashiCorp Vault, AWS Secrets Manager gibi) kullanarak g\u00fcvenli bir \u015fekilde saklay\u0131n. Bu, kodunuzun da\u011f\u0131t\u0131labilirli\u011fini ve g\u00fcvenli\u011fini art\u0131r\u0131r.<\/p>\n<p><strong>Asenkron \u0130\u015flemler ve Kuyruk Sistemleri Entegrasyonu:<\/strong> Bir ajan\u0131n yapmas\u0131 gereken baz\u0131 i\u015flemler uzun s\u00fcrebilir (\u00f6rne\u011fin, b\u00fcy\u00fck bir dosyay\u0131 i\u015flemek, karma\u015f\u0131k bir hesaplama yapmak). E\u011fer ajan\u0131n t\u00fcm d\u00f6ng\u00fcs\u00fc bu uzun i\u015flemleri beklerse, di\u011fer sens\u00f6rlerin alg\u0131lamas\u0131 veya ba\u015fka eylemlerin tetiklenmesi gecikebilir. Bu t\u00fcr durumlarda, asenkron i\u015flemler veya mesaj kuyruklar\u0131 kullanmak ak\u0131ll\u0131ca bir yakla\u015f\u0131md\u0131r. Ajan, uzun s\u00fcreli bir g\u00f6revi bir mesaj kuyru\u011funa (\u00f6rne\u011fin Celery, RabbitMQ) b\u0131rakabilir ve g\u00f6revin arka planda ba\u015fka bir i\u015f\u00e7i (worker) taraf\u0131ndan i\u015flenmesini sa\u011flayabilir. B\u00f6ylece ajan\u0131n ana d\u00f6ng\u00fcs\u00fc kesintiye u\u011framaz ve ajan\u0131n tepki s\u00fcresi artar.<\/p>\n<p><strong>Performans \u0130zleme ve Optimizasyon:<\/strong> Ajanlar\u0131n\u0131z\u0131n canl\u0131 ortamda nas\u0131l performans g\u00f6sterdi\u011fini izlemek kritik \u00f6neme sahiptir.<br \/>\n*   <strong>Metrik Toplama:<\/strong> Ajan\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 s\u0131kl\u0131k, sens\u00f6rlerin veri toplama s\u00fcresi, eyleyicilerin tamamlama s\u00fcresi gibi metrikleri izleyin. Prometheus gibi ara\u00e7lar ve Grafana gibi g\u00f6rselle\u015ftirme panolar\u0131 bu verileri takip etmek i\u00e7in kullan\u0131labilir.<br \/>\n*   <strong>Kaynak Kullan\u0131m\u0131:<\/strong> Ajan\u0131n CPU, bellek ve a\u011f kullan\u0131m\u0131n\u0131 d\u00fczenli olarak kontrol edin. Beklenmeyen art\u0131\u015flar, bir bellek s\u0131z\u0131nt\u0131s\u0131 veya verimsiz bir i\u015flem oldu\u011funu g\u00f6sterebilir.<br \/>\n*   <strong>Profil Olu\u015fturma (Profiling):<\/strong> Python'\u0131n yerle\u015fik <code>cProfile<\/code> mod\u00fcl\u00fc gibi ara\u00e7lar, kodunuzun hangi k\u0131s\u0131mlar\u0131n\u0131n en \u00e7ok zaman ald\u0131\u011f\u0131n\u0131 belirlemenize yard\u0131mc\u0131 olabilir. Bu sayede optimizasyon \u00e7abalar\u0131n\u0131z\u0131 en verimli noktalara odaklayabilirsiniz.<\/p>\n<div class=\"expert-tip\">Uzman \u0130pucu: K\u00fc\u00e7\u00fck iyile\u015ftirmelerin bile uzun vadede b\u00fcy\u00fck fark yaratabilece\u011fini unutmay\u0131n. Ajan\u0131n\u0131z\u0131n her bir bile\u015fenini ayr\u0131 ayr\u0131 test edin ve darbo\u011fazlar\u0131 belirlemek i\u00e7in metrikleri kullan\u0131n. Ayr\u0131ca, ajan\u0131n\u0131z\u0131n davran\u0131\u015flar\u0131n\u0131 s\u00fcrekli olarak g\u00f6zden ge\u00e7irin ve gereksiz alg\u0131lamalar\u0131 veya eylemleri ortadan kald\u0131rarak kaynak t\u00fcketimini azalt\u0131n. Mod\u00fclerlik, sadece ajan\u0131n geli\u015ftirilmesini kolayla\u015ft\u0131rmakla kalmaz, ayn\u0131 zamanda her bir mod\u00fcl\u00fcn ba\u011f\u0131ms\u0131z olarak optimize edilmesine de olanak tan\u0131r.<\/div>\n<h2 id=\"sonuc-ve-sikca-sorulan-sorular\">Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu rehber boyunca, Strands Agents framework'\u00fc ile yapay zeka ajanlar\u0131 geli\u015ftirmenin temel prensiplerini, ad\u0131m ad\u0131m kurulumunu ve ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l kullan\u0131labilece\u011fini ke\u015ffettik. G\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi, Strands Agents, mod\u00fcler yap\u0131s\u0131, sezgisel davran\u0131\u015f tan\u0131mlama mekanizmalar\u0131 ve Python'\u0131n g\u00fcc\u00fc sayesinde, AI ajanlar\u0131 olu\u015fturmay\u0131 hem yeni ba\u015flayanlar hem de deneyimli geli\u015ftiriciler i\u00e7in olduk\u00e7a eri\u015filebilir k\u0131l\u0131yor. Basit otomasyon g\u00f6revlerinden karma\u015f\u0131k karar alma sistemlerine kadar geni\u015f bir yelpazede kullan\u0131labilen bu framework, i\u015f s\u00fcre\u00e7lerini optimize etmek, verimlili\u011fi art\u0131rmak ve daha ak\u0131ll\u0131 uygulamalar geli\u015ftirmek isteyen herkes i\u00e7in de\u011ferli bir ara\u00e7t\u0131r.<\/p>\n<p>Strands Agents, tekrarlayan manuel g\u00f6revleri ortadan kald\u0131rarak insan kayna\u011f\u0131n\u0131 daha yarat\u0131c\u0131 ve stratejik i\u015flere y\u00f6nlendirme potansiyeli sunar. E-ticaretten m\u00fc\u015fteri hizmetlerine, veri analizinden sistem izlemeye kadar bir\u00e7ok alanda ak\u0131ll\u0131 ajanlar tasarlayabilir ve da\u011f\u0131tabilirsiniz. Unutmay\u0131n ki, bir ajan\u0131n g\u00fcc\u00fc, onun sens\u00f6rlerinin ne kadar iyi alg\u0131lad\u0131\u011f\u0131, eyleyicilerinin ne kadar etkili davrand\u0131\u011f\u0131 ve davran\u0131\u015f mant\u0131\u011f\u0131n\u0131n ne kadar ak\u0131ll\u0131ca tasarland\u0131\u011f\u0131yla do\u011fru orant\u0131l\u0131d\u0131r. S\u00fcrekli \u00f6\u011frenme ve iyile\u015ftirme, ajanlar\u0131n\u0131z\u0131n zamanla daha da ak\u0131ll\u0131 hale gelmesini sa\u011flayacakt\u0131r. Bu rehberin, Strands Agents d\u00fcnyas\u0131na ilk ad\u0131m\u0131n\u0131z\u0131 atman\u0131z i\u00e7in size sa\u011flam bir temel sundu\u011funu umuyoruz.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<div class=\"faq-question\">Strands Agents \u00fccretli mi?<\/div>\n<div class=\"faq-answer\">Hay\u0131r, Strands Agents a\u00e7\u0131k kaynakl\u0131 bir Python framework'\u00fcd\u00fcr ve tamamen \u00fccretsiz olarak kullan\u0131labilir. GitHub \u00fczerinden eri\u015filebilir ve topluluk taraf\u0131ndan desteklenir.<\/div>\n<div class=\"faq-question\">Hangi programlama dillerini destekler?<\/div>\n<div class=\"faq-answer\">Strands Agents tamamen Python ile yaz\u0131lm\u0131\u015ft\u0131r ve Python programlama dili kullan\u0131larak ajanlar geli\u015ftirilir. Python'\u0131n geni\u015f k\u00fct\u00fcphane ekosistemi sayesinde, ajanlar\u0131n\u0131z\u0131 \u00e7e\u015fitli \u00fc\u00e7\u00fcnc\u00fc taraf servislerle entegre etmek olduk\u00e7a kolayd\u0131r.<\/div>\n<div class=\"faq-question\">Karma\u015f\u0131k g\u00f6revler i\u00e7in uygun mu?<\/div>\n<div class=\"faq-answer\">Evet, Strands Agents'\u0131n mod\u00fcler yap\u0131s\u0131 ve esnek davran\u0131\u015f tan\u0131mlama yetene\u011fi sayesinde karma\u015f\u0131k g\u00f6revler i\u00e7in de uygundur. Sens\u00f6rleri, eyleyicileri ve davran\u0131\u015flar\u0131 birle\u015ftirerek olduk\u00e7a sofistike i\u015f ak\u0131\u015flar\u0131 olu\u015fturulabilir. Ayr\u0131ca, \u00e7oklu ajan sistemleri kurarak karma\u015f\u0131kl\u0131\u011f\u0131 da\u011f\u0131tabilirsiniz.<\/div>\n<div class=\"faq-question\">Veri g\u00fcvenli\u011fi nas\u0131l sa\u011flan\u0131r?<\/div>\n<div class=\"faq-answer\">Veri g\u00fcvenli\u011fi, Strands Agents'\u0131n bir \u00f6zelli\u011fi olmaktan \u00e7ok, ajan\u0131 geli\u015ftiren ki\u015finin sorumlulu\u011fundad\u0131r. Hassas API anahtarlar\u0131 ve kimlik bilgileri i\u00e7in \u00e7evre de\u011fi\u015fkenleri, s\u0131r y\u00f6netimi ara\u00e7lar\u0131 kullan\u0131lmas\u0131, g\u00fcvenli ba\u011flant\u0131lar (HTTPS, SSH) \u00fczerinden veri al\u0131\u015fveri\u015fi yap\u0131lmas\u0131 ve eri\u015fim kontrollerinin uygulanmas\u0131 \u00f6nerilir.<\/div>\n<div class=\"faq-question\">Geli\u015ftirmeye ba\u015flamak i\u00e7in \u00f6n ko\u015fullar nelerdir?<\/div>\n<div class=\"faq-answer\">Temel Python programlama bilgisi, Strands Agents ile geli\u015ftirmeye ba\u015flamak i\u00e7in yeterlidir. Ayr\u0131ca, otomasyon veya \u00e7\u00f6zmek istedi\u011finiz problem alan\u0131yla ilgili temel bir anlay\u0131\u015fa sahip olmak, daha etkili ajanlar tasarlaman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/div>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Strands Agents framework&#8217;\u00fcn\u00fc kullanarak yapay zeka ajanlar\u0131 geli\u015ftirmeye ba\u015flamak ister misiniz? Bu rehber, ba\u015flang\u0131\u00e7tan ileri seviyeye, Strands Agents&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1342],"tags":[],"class_list":{"0":"post-31957","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ai","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Strands Agentlar\u0131 ile AI Ajanlar\u0131 Olu\u015fturma: Basit K\u0131lavuz<\/title>\n<meta name=\"description\" content=\"Strands Agents framework&#039;\u00fcn\u00fc kullanarak yapay zeka ajanlar\u0131 geli\u015ftirmeye ba\u015flamak ister misiniz? Bu rehber, ba\u015flang\u0131\u00e7tan ileri seviyeye, Strands Agents ile ak\u0131ll\u0131 sistemleri kolayca in\u015fa etmenin temel ad\u0131mlar\u0131n\u0131 ve pratik ipu\u00e7lar\u0131n\u0131 sunuyor. Gelin, otomasyon ve ak\u0131ll\u0131 karar alma yeteneklerini projelerinize nas\u0131l dahil edece\u011finizi birlikte ke\u015ffedelim.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Strands Agentlar\u0131 ile AI Ajanlar\u0131 Olu\u015fturma: Basit K\u0131lavuz\" \/>\n<meta property=\"og:description\" content=\"Strands Agents framework&#039;\u00fcn\u00fc kullanarak yapay zeka ajanlar\u0131 geli\u015ftirmeye ba\u015flamak ister misiniz? Bu rehber, ba\u015flang\u0131\u00e7tan ileri seviyeye, Strands Agents ile ak\u0131ll\u0131 sistemleri kolayca in\u015fa etmenin temel ad\u0131mlar\u0131n\u0131 ve pratik ipu\u00e7lar\u0131n\u0131 sunuyor. Gelin, otomasyon ve ak\u0131ll\u0131 karar alma yeteneklerini projelerinize nas\u0131l dahil edece\u011finizi birlikte ke\u015ffedelim.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-15T23:01:36+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"29 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Strands Agentlar\u0131 ile AI Ajanlar\u0131 Olu\u015fturma: Basit K\u0131lavuz\",\"datePublished\":\"2025-10-15T23:01:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/\"},\"wordCount\":3604,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"AI\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/\",\"name\":\"Strands Agentlar\u0131 ile AI Ajanlar\u0131 Olu\u015fturma: Basit K\u0131lavuz\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-15T23:01:36+00:00\",\"description\":\"Strands Agents framework'\u00fcn\u00fc kullanarak yapay zeka ajanlar\u0131 geli\u015ftirmeye ba\u015flamak ister misiniz? Bu rehber, ba\u015flang\u0131\u00e7tan ileri seviyeye, Strands Agents ile ak\u0131ll\u0131 sistemleri kolayca in\u015fa etmenin temel ad\u0131mlar\u0131n\u0131 ve pratik ipu\u00e7lar\u0131n\u0131 sunuyor. Gelin, otomasyon ve ak\u0131ll\u0131 karar alma yeteneklerini projelerinize nas\u0131l dahil edece\u011finizi birlikte ke\u015ffedelim.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Strands Agentlar\u0131 ile AI Ajanlar\u0131 Olu\u015fturma: Basit K\u0131lavuz\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Strands Agentlar\u0131 ile AI Ajanlar\u0131 Olu\u015fturma: Basit K\u0131lavuz","description":"Strands Agents framework'\u00fcn\u00fc kullanarak yapay zeka ajanlar\u0131 geli\u015ftirmeye ba\u015flamak ister misiniz? Bu rehber, ba\u015flang\u0131\u00e7tan ileri seviyeye, Strands Agents ile ak\u0131ll\u0131 sistemleri kolayca in\u015fa etmenin temel ad\u0131mlar\u0131n\u0131 ve pratik ipu\u00e7lar\u0131n\u0131 sunuyor. Gelin, otomasyon ve ak\u0131ll\u0131 karar alma yeteneklerini projelerinize nas\u0131l dahil edece\u011finizi birlikte ke\u015ffedelim.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/","og_locale":"tr_TR","og_type":"article","og_title":"Strands Agentlar\u0131 ile AI Ajanlar\u0131 Olu\u015fturma: Basit K\u0131lavuz","og_description":"Strands Agents framework'\u00fcn\u00fc kullanarak yapay zeka ajanlar\u0131 geli\u015ftirmeye ba\u015flamak ister misiniz? Bu rehber, ba\u015flang\u0131\u00e7tan ileri seviyeye, Strands Agents ile ak\u0131ll\u0131 sistemleri kolayca in\u015fa etmenin temel ad\u0131mlar\u0131n\u0131 ve pratik ipu\u00e7lar\u0131n\u0131 sunuyor. Gelin, otomasyon ve ak\u0131ll\u0131 karar alma yeteneklerini projelerinize nas\u0131l dahil edece\u011finizi birlikte ke\u015ffedelim.","og_url":"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-15T23:01:36+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"29 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Strands Agentlar\u0131 ile AI Ajanlar\u0131 Olu\u015fturma: Basit K\u0131lavuz","datePublished":"2025-10-15T23:01:36+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/"},"wordCount":3604,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["AI"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/","url":"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/","name":"Strands Agentlar\u0131 ile AI Ajanlar\u0131 Olu\u015fturma: Basit K\u0131lavuz","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-15T23:01:36+00:00","description":"Strands Agents framework'\u00fcn\u00fc kullanarak yapay zeka ajanlar\u0131 geli\u015ftirmeye ba\u015flamak ister misiniz? Bu rehber, ba\u015flang\u0131\u00e7tan ileri seviyeye, Strands Agents ile ak\u0131ll\u0131 sistemleri kolayca in\u015fa etmenin temel ad\u0131mlar\u0131n\u0131 ve pratik ipu\u00e7lar\u0131n\u0131 sunuyor. Gelin, otomasyon ve ak\u0131ll\u0131 karar alma yeteneklerini projelerinize nas\u0131l dahil edece\u011finizi birlikte ke\u015ffedelim.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/strands-agentlari-ile-ai-ajanlari-olusturma-basit-kilavuz\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Strands Agentlar\u0131 ile AI Ajanlar\u0131 Olu\u015fturma: Basit K\u0131lavuz"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31957","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=31957"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31957\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31957"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31957"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31957"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}