{"id":30380,"date":"2025-09-27T04:01:39","date_gmt":"2025-09-27T01:01:39","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/"},"modified":"2025-09-27T04:01:39","modified_gmt":"2025-09-27T01:01:39","slug":"langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/","title":{"rendered":"LangChain &#038; LangGraph ile Otonom AI Ajan Geli\u015ftirme Rehberi: Starbucks Agent"},"content":{"rendered":"<p><body><\/p>\n<p>Yapay zeka teknolojileri h\u0131zla geli\u015firken, otonom ajanlar i\u015f d\u00fcnyas\u0131nda devrim yaratma potansiyeli ta\u015f\u0131yor. Bu makalede, LangChain ve LangGraph gibi g\u00fc\u00e7l\u00fc ara\u00e7lar\u0131 kullanarak kendi kendine karar verebilen bir AI ajan\u0131 nas\u0131l geli\u015ftirece\u011finizi ad\u0131m ad\u0131m ke\u015ffedeceksiniz. \u00d6zellikle, LangChain ve LangGraph&#8217;\u0131n temel kavramlar\u0131ndan ba\u015flayarak, Starbucks senaryosunda sipari\u015f al\u0131p i\u015fleyebilen ger\u00e7ek\u00e7i bir otonom kahve ajan\u0131 olu\u015fturma s\u00fcrecine odaklanaca\u011f\u0131z.<\/p>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn rekabet\u00e7i i\u015f d\u00fcnyas\u0131nda verimlilik ve otomasyon, \u015firketlerin ayakta kalmas\u0131 ve b\u00fcy\u00fcmesi i\u00e7in hayati \u00f6nem ta\u015f\u0131yor. \u0130\u015fte tam bu noktada Yapay Zeka (AI) ajanlar\u0131 devreye giriyor. Peki, bir AI ajan\u0131 tam olarak nedir ve i\u015fletmelere nas\u0131l bir de\u011fer sunar? En basit tan\u0131m\u0131yla, bir AI ajan\u0131, belirli bir ortamda alg\u0131layabilen, bilgi i\u015fleyebilen ve hedeflerine ula\u015fmak i\u00e7in otonom kararlar alarak eylemler ger\u00e7ekle\u015ftirebilen bir yaz\u0131l\u0131m varl\u0131\u011f\u0131d\u0131r. Geleneksel otomasyon sistemlerinin aksine, AI ajanlar\u0131 daha karma\u015f\u0131k, \u00f6ng\u00f6r\u00fclemeyen senaryolarla ba\u015fa \u00e7\u0131kabilir ve hatta deneyimlerinden \u00f6\u011frenerek zamanla performanslar\u0131n\u0131 art\u0131rabilirler.<\/p>\n<p>Bu yetenekleri sayesinde AI ajanlar\u0131, m\u00fc\u015fteri hizmetlerinden tedarik zinciri y\u00f6netimine, finansal analizlerden sa\u011fl\u0131k hizmetlerine kadar pek \u00e7ok alanda d\u00f6n\u00fc\u015ft\u00fcr\u00fcc\u00fc bir etki yaratma potansiyeline sahiptir. \u00d6rne\u011fin, m\u00fc\u015fteri hizmetlerinde bir chatbotun \u00e7ok \u00f6tesine ge\u00e7erek, bir m\u00fc\u015fterinin karma\u015f\u0131k sorununu anlayabilen, ilgili departmanlarla ileti\u015fime ge\u00e7ebilen ve hatta ki\u015fiye \u00f6zel \u00e7\u00f6z\u00fcmler \u00fcretebilen bir ajan\u0131 hayal edin. Bu, hem m\u00fc\u015fteri memnuniyetini art\u0131r\u0131r hem de operasyonel maliyetleri \u00f6nemli \u00f6l\u00e7\u00fcde d\u00fc\u015f\u00fcr\u00fcr. Bir di\u011fer \u00f6rnek ise, piyasa verilerini s\u00fcrekli analiz ederek al\u0131m-sat\u0131m kararlar\u0131 verebilen finansal ajanlar veya hastan\u0131n semptomlar\u0131n\u0131 de\u011ferlendirip olas\u0131 te\u015fhisler \u00f6nerebilen medikal ajanlard\u0131r.<\/p>\n<p>AI ajanlar\u0131n\u0131n sa\u011flad\u0131\u011f\u0131 temel avantajlar\u0131 birka\u00e7 maddede \u00f6zetleyebiliriz:<\/p>\n<ul>\n<li><strong>Otomasyon ve Verimlilik:<\/strong> Tekrarlayan, zaman al\u0131c\u0131 g\u00f6revleri otomatikle\u015ftirerek insan kaynaklar\u0131n\u0131n daha stratejik i\u015flere odaklanmas\u0131n\u0131 sa\u011flarlar. B\u00f6ylece genel verimlilik artar.<\/li>\n<li><strong>S\u00fcrekli Eri\u015filebilirlik:<\/strong> 7\/24 kesintisiz hizmet sunabilirler, bu da k\u00fcresel operasyonlar ve farkl\u0131 zaman dilimlerindeki m\u00fc\u015fteriler i\u00e7in b\u00fcy\u00fck bir avantajd\u0131r.<\/li>\n<li><strong>Karar Verme Yetene\u011fi:<\/strong> B\u00fcy\u00fck veri k\u00fcmelerini analiz ederek insan g\u00f6z\u00fcnden ka\u00e7abilecek i\u00e7g\u00f6r\u00fcler sunar ve daha bilin\u00e7li kararlar al\u0131nmas\u0131na yard\u0131mc\u0131 olurlar. Baz\u0131 durumlarda insan m\u00fcdahalesi olmadan karar al\u0131p uygulayabilirler.<\/li>\n<li><strong>\u00d6l\u00e7eklenebilirlik:<\/strong> \u0130\u015f y\u00fck\u00fc artt\u0131\u011f\u0131nda kolayca \u00f6l\u00e7eklendirilebilirler. \u0130nsan ekibinin aksine, daha fazla ajan\u0131 devreye sokmak genellikle daha az maliyetli ve daha h\u0131zl\u0131d\u0131r.<\/li>\n<li><strong>Ki\u015fiselle\u015ftirme:<\/strong> Kullan\u0131c\u0131 etkile\u015fimlerini \u00f6\u011frenerek ki\u015fiye \u00f6zel deneyimler sunabilir, bu da m\u00fc\u015fteri sadakatini ve sat\u0131\u015flar\u0131 art\u0131rabilir.<\/li>\n<li><strong>Hata Azaltma:<\/strong> \u0130nsan hatas\u0131 olas\u0131l\u0131\u011f\u0131n\u0131 azaltarak operasyonel s\u00fcre\u00e7lerde tutarl\u0131l\u0131\u011f\u0131 ve do\u011frulu\u011fu art\u0131r\u0131rlar.<\/li>\n<\/ul>\n<p>Bu potansiyel, AI ajanlar\u0131n\u0131 sadece bir teknoloji trendi olmaktan \u00e7\u0131kar\u0131p, \u015firketler i\u00e7in stratejik bir yat\u0131r\u0131m haline getiriyor. Gelecekte, her sekt\u00f6rde AI ajanlar\u0131n\u0131n farkl\u0131 rollerde kar\u015f\u0131m\u0131za \u00e7\u0131kmas\u0131 ka\u00e7\u0131n\u0131lmaz g\u00f6r\u00fcn\u00fcyor. \u0130\u015fte bu y\u00fczden, LangChain ve LangGraph gibi ara\u00e7larla AI ajan\u0131 geli\u015ftirme becerilerini edinmek, hem bireysel geli\u015ftiriciler hem de i\u015fletmeler i\u00e7in kritik bir yetkinlik haline gelmektedir.<\/p>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: AI ajanlar\u0131n\u0131n \u015firketinizdeki potansiyel kullan\u0131m alanlar\u0131n\u0131 belirlerken, \u00f6ncelikle en \u00e7ok manuel i\u015f y\u00fck\u00fcne sahip ve tekrarlayan s\u00fcre\u00e7leri hedefleyin. Bu alanlarda h\u0131zl\u0131 bir ROI (Yat\u0131r\u0131m Getirisi) elde edebilir ve ajan\u0131n de\u011ferini kan\u0131tlayabilirsiniz.\n    <\/div>\n<h2>Temel Ta\u015flar: LangChain, LangGraph ve LLM&#8217;ler Neler Sunuyor?<\/h2>\n<p>Otonom AI ajanlar\u0131 geli\u015ftirirken kar\u015f\u0131m\u0131za \u00e7\u0131kan en g\u00fc\u00e7l\u00fc ve esnek ara\u00e7lardan ikisi LangChain ve LangGraph&#8217;t\u0131r. Bu iki k\u00fct\u00fcphane, B\u00fcy\u00fck Dil Modellerini (LLM&#8217;ler) kullanarak karma\u015f\u0131k etkile\u015fimler ve \u00e7ok ad\u0131ml\u0131 g\u00f6revler tasarlamam\u0131za olanak tan\u0131r. Ancak ba\u015flamadan \u00f6nce, bu teknolojilerin her birinin ne i\u015fe yarad\u0131\u011f\u0131n\u0131 ve neden bu kadar \u00f6nemli olduklar\u0131n\u0131 anlamam\u0131z gerekiyor.<\/p>\n<h3>B\u00fcy\u00fck Dil Modelleri (LLM&#8217;ler): Yapay Zekan\u0131n Kalbi<\/h3>\n<p>Her \u015feyin merkezinde B\u00fcy\u00fck Dil Modelleri (Large Language Models &#8211; LLM) yer al\u0131r. GPT-4, Claude, Llama gibi modeller, milyarlarca parametreye sahip olup devasa metin veri k\u00fcmeleri \u00fczerinde e\u011fitilmi\u015flerdir. Bu sayede, insan dilini anlama, metin \u00fcretme, \u00e7eviri yapma, \u00f6zetleme ve hatta kod yazma gibi inan\u0131lmaz yeteneklere sahiptirler. Bir AI ajan\u0131 i\u00e7in LLM, beynin ta kendisidir; karar verme, d\u00fc\u015f\u00fcnme ve ileti\u015fim kurma yetene\u011fini sa\u011flar. Ancak, tek ba\u015f\u0131na bir LLM, genellikle belirli bir g\u00f6revi yerine getirmek i\u00e7in yeterli de\u011fildir. LLM&#8217;ler d\u00fcnyay\u0131 sadece metin olarak bilir ve d\u0131\u015f d\u00fcnyayla etkile\u015fime ge\u00e7mek i\u00e7in ara\u00e7lara ihtiya\u00e7 duyarlar. \u0130\u015fte burada LangChain ve LangGraph devreye girer.<\/p>\n<h3>LangChain: LLM Uygulamalar\u0131 \u0130\u00e7in Bir \u00c7er\u00e7eve<\/h3>\n<p>LangChain, LLM&#8217;lerin g\u00fcc\u00fcn\u00fc kullanarak karma\u015f\u0131k uygulamalar geli\u015ftirmeyi kolayla\u015ft\u0131ran pop\u00fcler bir Python k\u00fct\u00fcphanesidir. Ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, &#8220;dil zincirleri&#8221; olu\u015fturmam\u0131za olanak tan\u0131r; yani, birden fazla LLM \u00e7a\u011fr\u0131s\u0131n\u0131, di\u011fer ara\u00e7lar\u0131 ve veri kaynaklar\u0131n\u0131 bir araya getirerek sofistike i\u015f ak\u0131\u015flar\u0131 tasarlayabiliriz. LangChain&#8217;in sundu\u011fu temel bile\u015fenler \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Modeller (Models):<\/strong> \u00c7e\u015fitli LLM&#8217;lerle (OpenAI, Hugging Face vb.) entegrasyonu sa\u011flar.<\/li>\n<li><strong>Prompt&#8217;lar (Prompts):<\/strong> LLM&#8217;lere girdi olarak verilen metinleri y\u00f6netmek ve \u015fablonlamak i\u00e7in ara\u00e7lar sunar.<\/li>\n<li><strong>Zincirler (Chains):<\/strong> Birden fazla LLM \u00e7a\u011fr\u0131s\u0131n\u0131 veya ba\u015fka bir i\u015flemi ard\u0131\u015f\u0131k olarak birle\u015ftirir. \u00d6rne\u011fin, bir metni \u00f6zetleyip ard\u0131ndan ba\u015fka bir LLM&#8217;e g\u00f6nderebilir.<\/li>\n<li><strong>Ajanlar (Agents):<\/strong> Bir LLM&#8217;in hangi arac\u0131 ne zaman kullanaca\u011f\u0131na karar vermesini sa\u011flayan yap\u0131d\u0131r. Bu, ajan\u0131n &#8220;d\u00fc\u015f\u00fcnmesini&#8221; ve dinamik olarak eylem planlar\u0131 olu\u015fturmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Ara\u00e7lar (Tools):<\/strong> LLM&#8217;lerin d\u0131\u015f d\u00fcnyayla etkile\u015fime girmesini sa\u011flayan fonksiyonlard\u0131r (\u00f6rn. Google aramas\u0131, API \u00e7a\u011fr\u0131s\u0131, veritaban\u0131 sorgusu).<\/li>\n<li><strong>Bellek (Memory):<\/strong> Ajan\u0131n \u00f6nceki etkile\u015fimlerini hat\u0131rlamas\u0131n\u0131 sa\u011flar, bu da daha tutarl\u0131 ve ba\u011flamsal sohbetler i\u00e7in kritiktir.<\/li>\n<\/ul>\n<p>LangChain, bu bile\u015fenleri bir araya getirerek, bir LLM&#8217;in sadece metin \u00fcretmekle kalmay\u0131p, ayn\u0131 zamanda belirli bir amaca y\u00f6nelik olarak hareket edebilmesini, bilgi toplayabilmesini ve ald\u0131\u011f\u0131 kararlara g\u00f6re aksiyon alabilmesini sa\u011flar. \u00d6rne\u011fin, bir e-ticaret ajan\u0131 LangChain ile \u00fcr\u00fcn sto\u011funu kontrol etmek i\u00e7in bir veritaban\u0131 arac\u0131n\u0131 kullanabilir ve ard\u0131ndan m\u00fc\u015fteriye bilgi vermek i\u00e7in bir LLM kullanabilir.<\/p>\n<h3>LangGraph: Ajanlar\u0131n Durum Y\u00f6netimi ve \u00c7oklu Ad\u0131ml\u0131 Karar Alma<\/h3>\n<p>LangChain, tek ad\u0131ml\u0131 veya basit zincirleme g\u00f6revler i\u00e7in harikayken, daha karma\u015f\u0131k ve d\u00f6ng\u00fcsel etkile\u015fimler gerektiren otonom ajanlar i\u00e7in bazen yetersiz kalabilir. \u0130\u015fte bu noktada LangGraph devreye girer. LangGraph, LangChain&#8217;in \u00fczerine in\u015fa edilmi\u015f, ajanlar\u0131 bir durum makinesi (state machine) veya y\u00f6nlendirilmi\u015f bir graf (directed graph) olarak modellemeyi sa\u011flayan bir k\u00fct\u00fcphanedir. Bu, ajanlar\u0131n daha sofistike karar verme s\u00fcre\u00e7lerine sahip olmas\u0131n\u0131, \u00f6nceki eylemlerine veya g\u00f6zlemlerine g\u00f6re farkl\u0131 yollar\u0131 takip etmesini ve hatta kendi kendine d\u00fczeltmeler yapmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>LangGraph&#8217;\u0131n ana avantajlar\u0131 \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Durum Y\u00f6netimi:<\/strong> Ajan\u0131n mevcut durumunu (\u00f6rne\u011fin, &#8220;sipari\u015f al\u0131n\u0131yor&#8221;, &#8220;\u00f6deme bekleniyor&#8221;) tan\u0131mlayabilir ve bu durumu kolayca g\u00fcncelleyebiliriz.<\/li>\n<li><strong>D\u00f6ng\u00fcler ve \u015eartl\u0131 Mant\u0131k:<\/strong> Bir g\u00f6rev tamamlanana kadar belirli ad\u0131mlar\u0131 tekrarlayabilen (d\u00f6ng\u00fcler) veya belirli ko\u015fullara g\u00f6re farkl\u0131 ad\u0131mlara ge\u00e7i\u015f yapabilen (\u015fartl\u0131 mant\u0131k) ak\u0131\u015flar olu\u015fturabiliriz. Bu, hata d\u00fczeltme veya tekrar deneme mekanizmalar\u0131 i\u00e7in idealdir.<\/li>\n<li><strong>\u00c7ok A\u015famal\u0131 Planlama:<\/strong> Ajan\u0131n karma\u015f\u0131k bir hedefi ger\u00e7ekle\u015ftirmek i\u00e7in ad\u0131m ad\u0131m bir plan yapmas\u0131n\u0131 ve bu plan\u0131 uygulamada esneklik g\u00f6stermesini sa\u011flar.<\/li>\n<li><strong>\u015eeffafl\u0131k:<\/strong> Ajan\u0131n karar verme s\u00fcrecini ve hangi ad\u0131mlar\u0131 izledi\u011fini g\u00f6rsel olarak takip etmek daha kolayd\u0131r, bu da hata ay\u0131klamay\u0131 ve geli\u015ftirmeyi basitle\u015ftirir.<\/li>\n<\/ul>\n<p>\u00d6zetle, LangChain bir LLM&#8217;e d\u0131\u015f d\u00fcnyayla etkile\u015fim kurma yetene\u011fi verirken, LangGraph bu etkile\u015fimleri daha yap\u0131land\u0131r\u0131lm\u0131\u015f, esnek ve ak\u0131ll\u0131 bir \u015fekilde y\u00f6netmeyi sa\u011flar. Bir Starbucks ajan\u0131 \u00f6rne\u011finde, LangChain men\u00fcye bakma veya sipari\u015f alma gibi ara\u00e7lar\u0131 sa\u011flarken, LangGraph bu ara\u00e7lar\u0131 ne zaman kullanaca\u011f\u0131n\u0131, bir hata oldu\u011funda ne yapaca\u011f\u0131n\u0131 veya m\u00fc\u015fteri sipari\u015fini de\u011fi\u015ftirdi\u011finde nas\u0131l yeniden planlayaca\u011f\u0131n\u0131 y\u00f6netecek iskeleti olu\u015fturacakt\u0131r.<\/p>\n<h2>Otonom Starbucks Ajan\u0131: Kavramsal Tasar\u0131m ve Mimari<\/h2>\n<p>\u015eimdi teoriden prati\u011fe ge\u00e7elim ve &#8220;Otonom Starbucks Ajan\u0131&#8221;m\u0131z\u0131 tasarlayal\u0131m. Amac\u0131m\u0131z, bir m\u00fc\u015fterinin Starbucks&#8217;ta kahve sipari\u015fini tam anlam\u0131yla otonom bir \u015fekilde al\u0131p i\u015fleyebilecek bir AI ajan\u0131 olu\u015fturmak. Bu ajan, m\u00fc\u015fterinin taleplerini anlayacak, men\u00fcy\u00fc kontrol edecek, sipari\u015fi do\u011frulayacak ve hatta \u00f6deme s\u00fcrecini sim\u00fcle edecek yetenekte olmal\u0131. Bu t\u00fcr bir ajan\u0131 in\u015fa etmek i\u00e7in nas\u0131l bir mimari ve tasar\u0131m stratejisi izlememiz gerekiyor?<\/p>\n<h3>Ajan\u0131n G\u00f6revleri ve Hedefleri<\/h3>\n<p>Starbucks Ajan\u0131&#8217;n\u0131n temel g\u00f6revleri \u015funlard\u0131r:<\/p>\n<ol>\n<li><strong>M\u00fc\u015fteri \u0130leti\u015fimi:<\/strong> M\u00fc\u015fteriden sipari\u015f almak, sorular\u0131n\u0131 yan\u0131tlamak ve olas\u0131 belirsizlikleri gidermek.<\/li>\n<li><strong>Men\u00fc Kontrol\u00fc:<\/strong> M\u00fc\u015fterinin istedi\u011fi \u00fcr\u00fcnlerin men\u00fcde olup olmad\u0131\u011f\u0131n\u0131 ve fiyatlar\u0131n\u0131 kontrol etmek.<\/li>\n<li><strong>Sipari\u015f Olu\u015fturma:<\/strong> M\u00fc\u015fterinin isteklerine g\u00f6re do\u011fru sipari\u015fi olu\u015fturmak (\u00f6rn. &#8220;b\u00fcy\u00fck boy latte, badem s\u00fctl\u00fc&#8221;).<\/li>\n<li><strong>Sipari\u015f Do\u011frulama:<\/strong> Olu\u015fturulan sipari\u015fi m\u00fc\u015fteriye teyit ettirmek.<\/li>\n<li><strong>\u00d6deme \u0130\u015flemi (Sim\u00fclasyon):<\/strong> Sipari\u015f tutar\u0131n\u0131 hesaplamak ve \u00f6deme i\u015flemini ba\u015flatmak\/tamamlamak.<\/li>\n<li><strong>Hata Y\u00f6netimi:<\/strong> Eksik bilgi, men\u00fcde olmayan \u00fcr\u00fcn veya \u00f6deme hatas\u0131 gibi durumlarda uygun \u015fekilde tepki vermek.<\/li>\n<\/ol>\n<p>Ajan\u0131n nihai hedefi, m\u00fc\u015fterinin sorunsuz ve keyifli bir sipari\u015f deneyimi ya\u015famas\u0131n\u0131 sa\u011flamakt\u0131r.<\/p>\n<h3>Mimari Bile\u015fenler: LLM, Ara\u00e7lar ve Durum Y\u00f6netimi<\/h3>\n<p>Ajan\u0131m\u0131z\u0131 tasarlarken, LangChain ve LangGraph&#8217;\u0131n sundu\u011fu yetenekleri bir araya getirece\u011fiz:<\/p>\n<ol>\n<li><strong>B\u00fcy\u00fck Dil Modeli (LLM):<\/strong> Ajan\u0131n &#8220;beyni&#8221; olarak g\u00f6rev yapacak. M\u00fc\u015fteri girdisini anlayacak, karar verecek ve \u00e7\u0131kt\u0131lar \u00fcretecek. \u00d6rne\u011fin, OpenAI&#8217;nin GPT-4 modeli tercih edilebilir.<\/li>\n<li><strong>Ara\u00e7lar (Tools):<\/strong> LLM&#8217;in d\u0131\u015f d\u00fcnyayla etkile\u015fime ge\u00e7mesini sa\u011flayacak spesifik fonksiyonlar. Bu senaryoda ba\u015fl\u0131ca ara\u00e7lar \u015funlar olabilir:\n<ul>\n<li><code>get_menu(item_name: str = None)<\/code>: Starbucks men\u00fcs\u00fcn\u00fc sorgular. Belirli bir \u00fcr\u00fcn istenirse detaylar\u0131n\u0131, istenmezse t\u00fcm men\u00fcy\u00fc d\u00f6ner.<\/li>\n<li><code>calculate_order_total(order_details: dict)<\/code>: Verilen sipari\u015fin toplam tutar\u0131n\u0131 hesaplar.<\/li>\n<li><code>process_payment(amount: float)<\/code>: \u00d6deme i\u015flemini sim\u00fcle eder. Ger\u00e7ek bir uygulamada Stripe veya ba\u015fka bir \u00f6deme ge\u00e7idi entegre edilebilir.<\/li>\n<li><code>confirm_order(order_id: str, customer_name: str)<\/code>: Sipari\u015fin sisteme kaydedildi\u011fini sim\u00fcle eder.<\/li>\n<\/ul>\n<p>            Bu ara\u00e7lar Python fonksiyonlar\u0131 olarak tan\u0131mlanacak ve LangChain&#8217;e tan\u0131t\u0131lacak.<\/li>\n<li><strong>Ajan (Agent &#8211; LangChain):<\/strong> LLM&#8217;i ve tan\u0131mlanan ara\u00e7lar\u0131 bir araya getiren ana karar mekanizmas\u0131. M\u00fc\u015fteri talebine g\u00f6re hangi arac\u0131 kullanaca\u011f\u0131na karar verir.<\/li>\n<li><strong>Durum Grafi\u011fi (State Graph &#8211; LangGraph):<\/strong> Ajan\u0131n karma\u015f\u0131k i\u015f ak\u0131\u015f\u0131n\u0131, d\u00f6ng\u00fclerini ve karar noktalar\u0131n\u0131 y\u00f6netecek ana yap\u0131. Bu, sipari\u015fin al\u0131nmas\u0131ndan \u00f6demeye kadar olan t\u00fcm s\u00fcreci y\u00f6netir ve olas\u0131 hatalar\u0131 ele al\u0131r. Graf\u0131n temel d\u00fc\u011f\u00fcmleri (nodes) m\u00fc\u015fteri girdisini i\u015fleme, men\u00fc sorgulama, sipari\u015f do\u011frulama ve \u00f6deme gibi a\u015famalar olabilirken, ge\u00e7i\u015fler (edges) bu a\u015famalar aras\u0131ndaki mant\u0131ksal ak\u0131\u015f\u0131 belirleyecektir.<\/li>\n<\/ul>\n<h3>Veri Yap\u0131lar\u0131 ve Ak\u0131\u015f<\/h3>\n<p>Ajan\u0131n durumunu y\u00f6netmek i\u00e7in bir durum (state) yap\u0131s\u0131 tan\u0131mlamam\u0131z gerekecek. Bu durum, LLM ve ara\u00e7lar aras\u0131nda payla\u015f\u0131lan bilgiyi i\u00e7erecektir. \u00d6rne\u011fin:<\/p>\n<pre><code class=\"language-python\">\nfrom typing import TypedDict, List, Dict, Union\n\nclass AgentState(TypedDict):\n    chat_history: List[str]  # M\u00fc\u015fteri ve ajan\u0131n konu\u015fma ge\u00e7mi\u015fi\n    current_order: Dict[str, Union[int, float]]  # Mevcut sipari\u015f detaylar\u0131 (\u00fcr\u00fcn, miktar, fiyat)\n    order_total: float  # Toplam sipari\u015f tutar\u0131\n    payment_status: str  # \u00d6deme durumu (bekliyor, ba\u015far\u0131l\u0131, ba\u015far\u0131s\u0131z)\n    user_query: str # Kullan\u0131c\u0131n\u0131n son girdisi\n    menu_data: Dict # Men\u00fc bilgileri\n    tools_output: str # Ara\u00e7tan d\u00f6nen son \u00e7\u0131kt\u0131\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu <code>AgentState<\/code> yap\u0131s\u0131, ajan\u0131n her ad\u0131mda neyi bilmesi gerekti\u011fini ve hangi bilgileri aktarmas\u0131 gerekti\u011fini g\u00f6sterir. LangGraph, bu durumun d\u00fc\u011f\u00fcmler aras\u0131nda nas\u0131l g\u00fcncellenece\u011fini ve ge\u00e7i\u015flerin bu duruma g\u00f6re nas\u0131l tetiklenece\u011fini y\u00f6netecektir. \u00d6rne\u011fin, <code>current_order<\/code> bo\u015fsa, ajan \"sipari\u015f alma\" modunda demektir. E\u011fer <code>order_total<\/code> hesaplanm\u0131\u015fsa, \"\u00f6deme bekleme\" moduna ge\u00e7ebilir.<\/p>\n<p>Bu kavramsal tasar\u0131m, LangChain'in ara\u00e7 entegrasyonu ve LLM ile karar alma yetene\u011fini, LangGraph'\u0131n ise bu kararlar\u0131 yap\u0131land\u0131r\u0131lm\u0131\u015f, \u00e7ok ad\u0131ml\u0131 bir s\u00fcre\u00e7te y\u00f6netme g\u00fcc\u00fcyle birle\u015ftirerek sa\u011flam bir temel olu\u015fturur. B\u00f6ylece ajan\u0131n sadece basit sorular\u0131 yan\u0131tlamakla kalmay\u0131p, karma\u015f\u0131k bir hizmet s\u00fcrecini ba\u015ftan sona y\u00f6netebilmesini sa\u011flar\u0131z. Gelecek b\u00f6l\u00fcmde, bu tasar\u0131m\u0131 Python koduyla nas\u0131l hayata ge\u00e7irece\u011fimizi detayl\u0131ca inceleyece\u011fiz.<\/p>\n<h2>Ad\u0131m Ad\u0131m Uygulama: Starbucks Ajan\u0131n\u0131 Nas\u0131l Kodlar\u0131z?<\/h2>\n<p>\u015eimdi teorik bilgileri prati\u011fe d\u00f6kelim ve otonom Starbucks Ajan\u0131m\u0131z\u0131 kodlamaya ba\u015flayal\u0131m. Bu b\u00f6l\u00fcmde, gerekli kurulumlardan ba\u015flayarak, ara\u00e7lar\u0131m\u0131z\u0131 tan\u0131mlamaya, LangChain ajan\u0131 olu\u015fturmaya ve son olarak LangGraph ile karma\u015f\u0131k bir i\u015f ak\u0131\u015f\u0131 tasarlamaya kadar her ad\u0131m\u0131 detayl\u0131ca ele alaca\u011f\u0131z.<\/p>\n<h3>1. Gerekli K\u00fct\u00fcphaneleri Kurma ve API Anahtarlar\u0131n\u0131 Ayarlama<\/h3>\n<p>\u0130lk ad\u0131m, projemiz i\u00e7in gerekli Python k\u00fct\u00fcphanelerini kurmak ve OpenAI gibi bir LLM sa\u011flay\u0131c\u0131s\u0131n\u0131n API anahtar\u0131n\u0131 ayarlamakt\u0131r.<\/p>\n<pre><code class=\"language-bash\">\npip install langchain langchain-openai langgraph beautifulsoup4\n    <\/pre>\n<p><\/code><\/p>\n<p>Ard\u0131ndan, API anahtar\u0131n\u0131z\u0131 ortam de\u011fi\u015fkeni olarak ayarlay\u0131n veya do\u011frudan kod i\u00e7inde tan\u0131mlay\u0131n (g\u00fcvenlik a\u00e7\u0131s\u0131ndan ortam de\u011fi\u015fkeni tercih edilir):<\/p>\n<pre><code class=\"language-python\">\nimport os\nfrom langchain_openai import ChatOpenAI\n\n# Ortam de\u011fi\u015fkeninden API anahtar\u0131n\u0131 al\u0131n\nos.environ[\"OPENAI_API_KEY\"] = \"sizin_openai_api_anahtar\u0131n\u0131z\" # Buray\u0131 kendi anahtar\u0131n\u0131zla de\u011fi\u015ftirin\n\n# LLM modelini ba\u015flat\u0131n\nllm = ChatOpenAI(model=\"gpt-4o\", temperature=0)\n    <\/pre>\n<p><\/code><\/p>\n<h3>2. Ara\u00e7lar\u0131m\u0131z\u0131 Tan\u0131mlama<\/h3>\n<p>Ajan\u0131m\u0131z\u0131n d\u0131\u015f d\u00fcnyayla etkile\u015fime ge\u00e7mesini sa\u011flayacak ara\u00e7lar\u0131 (fonksiyonlar\u0131) tan\u0131mlayal\u0131m. Bu ara\u00e7lar, ajan\u0131n men\u00fcy\u00fc kontrol etmesi, sipari\u015f tutar\u0131n\u0131 hesaplamas\u0131 ve \u00f6deme i\u015flemini sim\u00fcle etmesi i\u00e7in kullan\u0131lacak.<\/p>\n<pre><code class=\"language-python\">\nfrom langchain.tools import tool\n\n# Basit bir Starbucks men\u00fcs\u00fc (ger\u00e7ek\u00e7i olmas\u0131 i\u00e7in biraz daha geni\u015fletilebilir)\nSTARBUCKS_MENU = {\n    \"latte\": {\"price\": 10.0, \"description\": \"Espresso, buhar s\u00fct\u00fc, k\u00f6p\u00fck\"},\n    \"cappuccino\": {\"price\": 9.5, \"description\": \"Espresso, buhar s\u00fct\u00fc, yo\u011fun k\u00f6p\u00fck\"},\n    \"mocha\": {\"price\": 11.0, \"description\": \"Espresso, \u00e7ikolata sosu, buhar s\u00fct\u00fc, krem \u015fanti\"},\n    \"americano\": {\"price\": 8.0, \"description\": \"Espresso, s\u0131cak su\"},\n    \"espresso\": {\"price\": 7.0, \"description\": \"Tek veya \u00e7ift shot espresso\"},\n    \"frappuccino\": {\"price\": 12.0, \"description\": \"Buzlu, kar\u0131\u015ft\u0131r\u0131lm\u0131\u015f kahve i\u00e7ece\u011fi\"},\n    \"iced coffee\": {\"price\": 8.5, \"description\": \"Buzlu filtre kahve\"},\n    \"croissant\": {\"price\": 5.0, \"description\": \"Tereya\u011fl\u0131 kruvasan\"},\n    \"muffin\": {\"price\": 4.5, \"description\": \"\u00c7e\u015fitli aromalarda muffin\"},\n}\n\n@tool\ndef get_menu(item_name: str = None) -> str:\n    \"\"\"Starbucks men\u00fcs\u00fcn\u00fc sorgular. E\u011fer 'item_name' belirtilirse o \u00fcr\u00fcn\u00fcn detaylar\u0131n\u0131 d\u00f6ner.\n    Belirtilmezse t\u00fcm men\u00fcdeki i\u00e7ecek ve yiyecekleri listeler.\"\"\"\n    if item_name:\n        item = STARBUCKS_MENU.get(item_name.lower())\n        if item:\n            return f\"{item_name.capitalize()}: Fiyat\u0131 {item['price']} TL. A\u00e7\u0131klama: {item['description']}.\"\n        else:\n            return f\"\u00dczg\u00fcn\u00fcz, '{item_name}' men\u00fcde bulunmamaktad\u0131r.\"\n    else:\n        menu_items = \"\\n\".join([f\"- {name.capitalize()} ({details['price']} TL)\" for name, details in STARBUCKS_MENU.items()])\n        return f\"Mevcut men\u00fc \u00fcr\u00fcnlerimiz:\\n{menu_items}\"\n\n@tool\ndef calculate_order_total(order_items: Dict[str, int]) -> float:\n    \"\"\"Verilen sipari\u015f detaylar\u0131na g\u00f6re toplam tutar\u0131 hesaplar.\n    \u00d6rnek: {\"latte\": 2, \"muffin\": 1}\"\"\"\n    total = 0.0\n    for item, quantity in order_items.items():\n        menu_item = STARBUCKS_MENU.get(item.lower())\n        if not menu_item:\n            raise ValueError(f\"Men\u00fcde bulunmayan \u00fcr\u00fcn: {item}\")\n        total += menu_item[\"price\"] * quantity\n    return total\n\n@tool\ndef process_payment(amount: float) -> str:\n    \"\"\"Belirtilen tutarda \u00f6deme i\u015flemini sim\u00fcle eder. Ba\u015far\u0131l\u0131 veya ba\u015far\u0131s\u0131z sonucunu d\u00f6ner.\"\"\"\n    # Ger\u00e7ek bir uygulamada Stripe\/\u00f6deme ge\u00e7idi API'si \u00e7a\u011fr\u0131l\u0131r.\n    # Burada basit bir sim\u00fclasyon yapal\u0131m.\n    if amount > 0:\n        return f\"{amount} TL tutar\u0131ndaki \u00f6deme ba\u015far\u0131yla al\u0131nd\u0131. Sipari\u015finiz haz\u0131rlan\u0131yor!\"\n    else:\n        return \"\u00d6deme i\u015flemi ba\u015far\u0131s\u0131z. L\u00fctfen tekrar deneyin.\"\n\n# T\u00fcm ara\u00e7lar\u0131 bir listeye toplayal\u0131m\ntools = [get_menu, calculate_order_total, process_payment]\n    <\/pre>\n<p><\/code><\/p>\n<h3>3. LangChain Ajan\u0131n\u0131 Olu\u015fturma<\/h3>\n<p>\u015eimdi LLM'i ve ara\u00e7lar\u0131m\u0131z\u0131 kullanarak bir LangChain ajan\u0131 olu\u015ftural\u0131m. Bu ajan, gelen sorular\u0131 anlayacak ve hangi arac\u0131 kullanaca\u011f\u0131na karar verecektir.<\/p>\n<pre><code class=\"language-python\">\nfrom langchain import hub\nfrom langchain.agents import AgentExecutor, create_tool_calling_agent\n\n# Ajan i\u00e7in prompt'u LangChain Hub'dan \u00e7ekelim (veya kendimiz tan\u0131mlayabiliriz)\nprompt = hub.pull(\"hwchase17\/openai-tools-agent\")\n\n# Ajan\u0131 olu\u015ftur\nagent = create_tool_calling_agent(llm, tools, prompt)\nagent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)\n    <\/pre>\n<p><\/code><\/p>\n<h3>4. LangGraph ile Durum Y\u00f6netimi ve \u0130\u015f Ak\u0131\u015f\u0131 Tasar\u0131m\u0131<\/h3>\n<p>En karma\u015f\u0131k k\u0131s\u0131m olan LangGraph ile durum makinesi (state machine) tasar\u0131m\u0131na ge\u00e7iyoruz. \u00d6nce <code>AgentState<\/code> yap\u0131m\u0131z\u0131 hat\u0131rlayal\u0131m ve ard\u0131ndan graf\u0131m\u0131z\u0131 olu\u015ftural\u0131m.<\/p>\n<pre><code class=\"language-python\">\nfrom langgraph.graph import StateGraph, END\nfrom typing import TypedDict, List, Dict, Union, Annotated\nfrom operator import add\n\n# AgentState yap\u0131m\u0131z\u0131 tan\u0131mlayal\u0131m\nclass AgentState(TypedDict):\n    chat_history: List[str]\n    current_order: Dict[str, int] # \u00dcr\u00fcn ad\u0131: miktar\n    order_total: Annotated[float, add] # Toplam tutar\n    payment_status: str\n    user_query: str\n    tools_output: str\n\n# Her bir d\u00fc\u011f\u00fcm (node) i\u00e7in fonksiyonlar\u0131m\u0131z\u0131 tan\u0131mlayal\u0131m\ndef run_agent(state: AgentState) -> AgentState:\n    \"\"\"Ajan\u0131n LLM'i kullanarak bir sonraki eylemi belirledi\u011fi d\u00fc\u011f\u00fcm.\"\"\"\n    print(\"---AGENT D\u00dc\u011e\u00dcM\u00dc \u00c7ALI\u015eIYOR---\")\n    user_query = state[\"user_query\"]\n    # LangChain agent_executor'\u0131 ile ajan\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 k\u0131s\u0131m\n    response = agent_executor.invoke({\"input\": user_query, \"chat_history\": state[\"chat_history\"]})\n    \n    # LLM'den gelen yan\u0131t\u0131n bir ara\u00e7 \u00e7a\u011fr\u0131s\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol et\n    if \"output\" in response: # LLM direkt bir metin yan\u0131t\u0131 verdi\n        return {\"chat_history\": state[\"chat_history\"] + [f\"AI: {response['output']}\"]}\n    else: # LLM bir ara\u00e7 \u00e7a\u011f\u0131rmas\u0131 \u00f6nerdi\n        # LangGraph'ta ara\u00e7 \u00e7a\u011fr\u0131s\u0131 ve sonucunu manuel olarak y\u00f6netmek gerekiyor\n        # Bu durumda, biz ajan\u0131n kendisinden d\u00f6nen \u00e7\u0131kt\u0131y\u0131 tools_output olarak saklay\u0131p\n        # bir sonraki d\u00fc\u011f\u00fcmde i\u015fleyece\u011fiz.\n        # Basitlik ad\u0131na, burada LLM'in direkt bir yan\u0131t verdi\u011fini varsayal\u0131m\n        # veya tools_output'u do\u011frudan \u00e7a\u011fr\u0131dan sonra doldural\u0131m.\n        # Ger\u00e7ek bir LangGraph ajan\u0131nda, ajandan d\u00f6nen \"tool_calls\" i\u015flenmelidir.\n        \n        # Buras\u0131 genellikle ajan\u0131n 'tool_calls' \u00f6zelli\u011fini inceleyip ilgili ara\u00e7lar\u0131 manuel olarak \u00e7a\u011f\u0131rd\u0131\u011f\u0131m\u0131z yerdir.\n        # \u015eimdilik LangChain AgentExecutor'\u0131n 'verbose=True' \u00e7\u0131kt\u0131lar\u0131ndan yararlanal\u0131m\n        # veya basitle\u015ftirilmi\u015f bir ak\u0131\u015f izleyelim.\n        \n        # Tam LangGraph entegrasyonu i\u00e7in, ajan\u0131n \"planlama\" \u00e7\u0131kt\u0131s\u0131n\u0131 yakalay\u0131p\n        # sonraki d\u00fc\u011f\u00fcmde \"tool_execution\" yapmal\u0131y\u0131z.\n        # Bu \u00f6rnekte, agent_executor'\u0131n do\u011frudan \u00e7\u0131kt\u0131 vermesini bekliyoruz.\n        # Ancak daha sa\u011flam bir yakla\u015f\u0131m i\u00e7in, 'create_react_agent' veya\n        # 'create_tool_calling_agent' ile do\u011frudan 'tool_executor' kullan\u0131labilir.\n        \n        # Basitlik ad\u0131na, do\u011frudan agent_executor'dan d\u00f6nen output'u i\u015fleyelim\n        # veya e\u011fer ara\u00e7 \u00e7a\u011fr\u0131s\u0131 yap\u0131ld\u0131ysa onu sim\u00fcle edelim.\n        # AgentExecutor genellikle output'u d\u00f6nd\u00fcr\u00fcr. E\u011fer bir tool kulland\u0131ysa, output tool'dan gelen sonu\u00e7tur.\n        # E\u011fer tool kullanmad\u0131ysa, output LLM'in direkt yan\u0131t\u0131d\u0131r.\n        if \"output\" in response:\n            return {\"chat_history\": state[\"chat_history\"] + [f\"AI: {response['output']}\"]}\n        else: # Bu k\u0131s\u0131m LangChain AgentExecutor ile biraz farkl\u0131 \u00e7al\u0131\u015fabilir, genelde 'output' hep olur.\n            return {\"chat_history\": state[\"chat_history\"] + [f\"AI: Anlayamad\u0131m, tekrar edebilir misiniz?\"]}\n\ndef call_tool(state: AgentState) -> AgentState:\n    \"\"\"Ajan\u0131n bir ara\u00e7 \u00e7a\u011f\u0131rmas\u0131 gerekti\u011finde \u00e7al\u0131\u015fan d\u00fc\u011f\u00fcm.\"\"\"\n    print(\"---ARA\u00c7 \u00c7A\u011eRISI D\u00dc\u011e\u00dcM\u00dc \u00c7ALI\u015eIYOR---\")\n    # Bu d\u00fc\u011f\u00fcm, 'run_agent' d\u00fc\u011f\u00fcm\u00fcnden gelen ara\u00e7 \u00e7a\u011fr\u0131s\u0131n\u0131 al\u0131r ve y\u00fcr\u00fct\u00fcr.\n    # Ger\u00e7ek bir LangGraph ajan\u0131nda, 'run_agent' d\u00fc\u011f\u00fcm\u00fc bir ara\u00e7 \u00e7a\u011fr\u0131s\u0131 planlad\u0131\u011f\u0131nda\n    # bu d\u00fc\u011f\u00fcme ge\u00e7i\u015f yapar ve burada o arac\u0131 \u00e7al\u0131\u015ft\u0131r\u0131r\u0131z.\n    \n    # Basitlik ad\u0131na, agent_executor.invoke i\u00e7indeki verbose \u00e7\u0131kt\u0131s\u0131ndan tool \u00e7a\u011fr\u0131s\u0131n\u0131 yakalamak yerine\n    # LangChain'in ara\u00e7 \u00e7a\u011f\u0131rma mant\u0131\u011f\u0131n\u0131 kullanaca\u011f\u0131z.\n    # Daha sa\u011flam bir yakla\u015f\u0131m i\u00e7in, agent.run(state[\"user_query\"]) ile ayr\u0131 bir ajan \u00e7al\u0131\u015ft\u0131rmak\n    # ve onun tool call'lar\u0131n\u0131 ayr\u0131\u015ft\u0131rmak gerekir.\n    \n    # Bu \u00f6rnek i\u00e7in, 'run_agent' zaten ara\u00e7 \u00e7a\u011fr\u0131s\u0131n\u0131 handle edip output'u d\u00f6nece\u011fi i\u00e7in\n    # bu d\u00fc\u011f\u00fcm\u00fc sadece bir placeholder olarak tutal\u0131m veya daha geli\u015fmi\u015f bir ak\u0131\u015f i\u00e7in kullanal\u0131m.\n    \n    # E\u011fer agent_executor direkt output d\u00f6nd\u00fcrm\u00fcyorsa, burada manuel olarak arac\u0131 \u00e7al\u0131\u015ft\u0131rmal\u0131y\u0131z.\n    # \u00d6rne\u011fin:\n    # tool_name = \"get_menu\"\n    # tool_args = {\"item_name\": \"latte\"}\n    # tool_result = globals()[tool_name](**tool_args)\n    # return {\"tools_output\": tool_result, \"chat_history\": state[\"chat_history\"] + [f\"AI (tool result): {tool_result}\"]}\n    \n    # Mevcut LangChain AgentExecutor yap\u0131s\u0131, tool'u \u00e7a\u011f\u0131r\u0131p sonucunu 'output' olarak d\u00f6nd\u00fcr\u00fcr.\n    # Dolay\u0131s\u0131yla bu 'call_tool' d\u00fc\u011f\u00fcm\u00fcne do\u011frudan bir ge\u00e7i\u015f yapmak yerine, 'run_agent'\u0131n\n    # LLM \u00e7\u0131kt\u0131s\u0131na g\u00f6re farkl\u0131 yollara dallanabiliriz.\n    \n    # Bu senaryoda 'run_agent' her \u015feyi kapsad\u0131\u011f\u0131 i\u00e7in, 'call_tool' d\u00fc\u011f\u00fcm\u00fcn\u00fc sadece\n    # e\u011fer LLM'den \u00f6zel bir tool \u00e7a\u011fr\u0131s\u0131 yapmas\u0131n\u0131 bekliyorsak kullan\u0131r\u0131z.\n    \n    # LangGraph'\u0131n temel yap\u0131s\u0131 genellikle \u015f\u00f6yledir:\n    # LLM_Node -> (Conditional Edge: Has Tool Call? -> Tool_Node | No Tool Call? -> Human_Response_Node)\n    \n    # Bu \u00f6rnekte daha basitle\u015ftirilmi\u015f bir ak\u0131\u015f i\u00e7in, 'run_agent'\u0131 tek bir ana i\u015flem d\u00fc\u011f\u00fcm\u00fc olarak kullanal\u0131m.\n    # Veya, 'run_agent'tan d\u00f6nen 'tool_calls' listesini analiz edip buradan devam edelim.\n    \n    # Varsay\u0131msal olarak, 'run_agent' e\u011fer bir ara\u00e7 \u00e7a\u011f\u0131rd\u0131ysa, durumu buna g\u00f6re g\u00fcncelledi\u011fini varsayal\u0131m.\n    # Yani, AgentExecutor i\u00e7indeki tool \u00e7a\u011fr\u0131lar\u0131 burada i\u015fleniyormu\u015f gibi d\u00fc\u015f\u00fcnece\u011fiz.\n    \n    # Bu karma\u015f\u0131kl\u0131\u011f\u0131 azaltmak ad\u0131na, LangGraph'ta agent_executor'\u0131 direkt \u00e7a\u011f\u0131r\u0131p onun \u00e7\u0131kt\u0131s\u0131na g\u00f6re\n    # hareket edece\u011fiz.\n    \n    # E\u011fer state'te bir 'tool_call' bilgisi varsa, onu i\u015fletelim\n    # (Bu k\u0131s\u0131m, daha geli\u015fmi\u015f LangGraph \u00f6rneklerinde 'tool_executor' ile y\u00f6netilir)\n    \n    # \u015eimdilik, sadece bir ge\u00e7i\u015f noktas\u0131 olarak dursun, run_agent t\u00fcm i\u015fi yaps\u0131n.\n    # Geli\u015fmi\u015f durumda:\n    # tool_calls = state.get(\"tool_calls\", [])\n    # for tool_call in tool_calls:\n    #    tool_name = tool_call[\"name\"]\n    #    tool_args = tool_call[\"args\"]\n    #    result = globals()[tool_name](**tool_args)\n    # return {\"tools_output\": result, ...}\n    \n    return state # \u015eimdilik state'i oldu\u011fu gibi d\u00f6ns\u00fcn\n\ndef decide_next_step(state: AgentState) -> str:\n    \"\"\"Ajan\u0131n mevcut duruma g\u00f6re bir sonraki ad\u0131m\u0131 belirledi\u011fi karar d\u00fc\u011f\u00fcm\u00fc.\"\"\"\n    print(\"---KARAR D\u00dc\u011e\u00dcM\u00dc \u00c7ALI\u015eIYOR---\")\n    # E\u011fer kullan\u0131c\u0131ya cevap verildi ve sipari\u015f tamamlanmad\u0131ysa, tekrar ajan \u00e7al\u0131\u015ft\u0131rmaya devam et.\n    # E\u011fer son mesajda \"sipari\u015finiz haz\u0131rlan\u0131yor\" gibi bir ifade varsa, END'e ge\u00e7.\n\n    last_ai_message = state[\"chat_history\"][-1] if state[\"chat_history\"] else \"\"\n\n    if \"sipari\u015finiz haz\u0131rlan\u0131yor\" in last_ai_message.lower() or \"\u00f6deme ba\u015far\u0131yla al\u0131nd\u0131\" in last_ai_message.lower():\n        return \"end_conversation\"\n    elif \"men\u00fcde bulunmamaktad\u0131r\" in last_ai_message.lower():\n        # \u00dcr\u00fcn bulunamad\u0131, ajan\u0131n tekrar denemesini veya yeni bir soru sormas\u0131n\u0131 isteyelim\n        return \"agent\"\n    elif not state.get(\"current_order\"): # Hen\u00fcz sipari\u015f al\u0131nmad\u0131ysa\n        return \"agent\"\n    elif state.get(\"current_order\") and not state.get(\"order_total\"): # Sipari\u015f var ama tutar hesaplanmad\u0131ysa\n        return \"agent\"\n    elif state.get(\"order_total\") and state.get(\"payment_status\") != \"ba\u015far\u0131l\u0131\": # Tutar var ama \u00f6deme yap\u0131lmad\u0131ysa\n        return \"agent\"\n    \n    return \"agent\" # Varsay\u0131lan olarak ajana geri d\u00f6n\n    \n# Graf\u0131m\u0131z\u0131 in\u015fa edelim\nworkflow = StateGraph(AgentState)\n\n# D\u00fc\u011f\u00fcmleri ekleyelim\nworkflow.add_node(\"agent\", run_agent) # Ajan\u0131n d\u00fc\u015f\u00fcnme ve karar verme\/tool \u00e7a\u011f\u0131rma d\u00fc\u011f\u00fcm\u00fc\nworkflow.add_node(\"tool_node\", call_tool) # Ara\u00e7lar\u0131n \u00e7a\u011fr\u0131ld\u0131\u011f\u0131 d\u00fc\u011f\u00fcm (\u015fimdilik pasif)\n\n# Giri\u015f noktas\u0131n\u0131 belirleyelim\nworkflow.set_entry_point(\"agent\")\n\n# Ge\u00e7i\u015fleri tan\u0131mlayal\u0131m\n# Ajan \u00e7al\u0131\u015ft\u0131\u011f\u0131nda bir karar d\u00fc\u011f\u00fcm\u00fcne gitsin\nworkflow.add_edge(\"agent\", \"decide_next_step\") # Bunu b\u00f6yle yapamay\u0131z, ge\u00e7i\u015fler direkt d\u00fc\u011f\u00fcmlere olmal\u0131.\n\n# Yeni bir karar d\u00fc\u011f\u00fcm\u00fc ekleyelim ve ge\u00e7i\u015fleri ona ba\u011flayal\u0131m\n# Karar d\u00fc\u011f\u00fcm\u00fc do\u011frudan LangGraph'\u0131n 'conditional_edge' mekanizmas\u0131d\u0131r.\nworkflow.add_conditional_edges(\n    \"agent\", # 'agent' d\u00fc\u011f\u00fcm\u00fcnden sonra\n    decide_next_step, # Karar fonksiyonu\n    {\n        \"agent\": \"agent\", # E\u011fer \"agent\" d\u00f6nerse, tekrar ajana git (bir sonraki kullan\u0131c\u0131 girdisini bekle)\n        \"end_conversation\": END # E\u011fer \"end_conversation\" d\u00f6nerse, sohbeti bitir\n    }\n)\n# Ba\u015flang\u0131\u00e7ta agent'tan sonraki ge\u00e7i\u015fi manuel olarak ayarlamam\u0131z gerekiyor.\n# Bizim 'decide_next_step' fonksiyonumuz asl\u0131nda bir sonraki ad\u0131m\u0131n ad\u0131n\u0131 d\u00f6n\u00fcyor.\n# Ancak LangGraph'ta conditional_edges bir fonksiyona dayan\u0131r.\n\n# D\u00fczeltilmi\u015f LangGraph ak\u0131\u015f\u0131\n# D\u00fc\u011f\u00fcmleri tan\u0131mlayal\u0131m\ndef agent_node(state: AgentState):\n    \"\"\"Ajan\u0131n LLM'i kullanarak bir sonraki eylemi belirledi\u011fi ve ara\u00e7lar\u0131 \u00e7a\u011f\u0131rd\u0131\u011f\u0131 d\u00fc\u011f\u00fcm.\"\"\"\n    print(\"\\n---AGENT NODE BA\u015eLADI---\")\n    user_query = state[\"user_query\"]\n    \n    # LangChain AgentExecutor'\u0131 do\u011frudan \u00e7a\u011f\u0131r\u0131yoruz. Bu, LLM'in d\u00fc\u015f\u00fcnmesini ve gerekirse ara\u00e7lar\u0131 \u00e7a\u011f\u0131rmas\u0131n\u0131 sa\u011flar.\n    # <code>handle_parsing_errors=True<\/code> ekleyelim\n    response = agent_executor.invoke({\n        \"input\": user_query,\n        \"chat_history\": state[\"chat_history\"]\n    }, handle_parsing_errors=True)\n    \n    ai_message = response.get(\"output\", \"\u00dczg\u00fcn\u00fcm, anlayamad\u0131m.\")\n    \n    # State'i g\u00fcncelle\n    new_state = {\n        \"chat_history\": state[\"chat_history\"] + [f\"AI: {ai_message}\"],\n        \"user_query\": \"\" # Kullan\u0131c\u0131 girdisini s\u0131f\u0131rla\n    }\n    \n    # Sipari\u015f ve \u00f6deme durumu g\u00fcncellemeleri\n    if \"sipari\u015finiz haz\u0131rlan\u0131yor\" in ai_message.lower():\n        new_state[\"payment_status\"] = \"ba\u015far\u0131l\u0131\"\n    \n    # Mevcut sipari\u015f g\u00fcncellemeleri, daha geli\u015fmi\u015f bir parsing ile yap\u0131labilir\n    # \u00d6rnek: \"1 latte, 2 muffin\" => {\"latte\": 1, \"muffin\": 2}\n    # Bu ajan\u0131n \u00e7\u0131kt\u0131s\u0131n\u0131 parse etmeyi gerektirir. Basitlik ad\u0131na \u015fu an i\u00e7in LLM'in\n    # kendi kendine bu state'i manip\u00fcle etmedi\u011fini varsayal\u0131m.\n    # Geli\u015fmi\u015f senaryolarda, agent_executor'\u0131n tool_calls'lar\u0131n\u0131 yakalay\u0131p\n    # buradan state'i g\u00fcncelleyebiliriz.\n    \n    print(f\"Agent Node \u00c7\u0131kt\u0131s\u0131: {ai_message}\")\n    return new_state\n\ndef final_check(state: AgentState) -> str:\n    \"\"\"Sipari\u015fin durumuna g\u00f6re bir sonraki ad\u0131m\u0131 belirleyen karar d\u00fc\u011f\u00fcm\u00fc.\"\"\"\n    print(\"\\n---F\u0130NAL KONTROL D\u00dc\u011e\u00dcM\u00dc---\")\n    last_ai_message = state[\"chat_history\"][-1]\n    \n    if \"sipari\u015finiz haz\u0131rlan\u0131yor\" in last_ai_message.lower() or \"\u00f6deme ba\u015far\u0131yla al\u0131nd\u0131\" in last_ai_message.lower():\n        return \"end_conversation\"\n    # E\u011fer kullan\u0131c\u0131 \"men\u00fcy\u00fc g\u00f6ster\" gibi bir \u015fey dediyse ve men\u00fc g\u00f6sterildiyse, yine de ajana geri d\u00f6n\n    # aksi takdirde kullan\u0131c\u0131 ba\u015fka bir \u015fey isteyebilir.\n    return \"continue_chat\"\n\nworkflow = StateGraph(AgentState)\nworkflow.add_node(\"agent_node\", agent_node)\n\nworkflow.set_entry_point(\"agent_node\")\n\nworkflow.add_conditional_edges(\n    \"agent_node\", # agent_node'dan sonra\n    final_check,  # Karar fonksiyonumuz\n    {\n        \"end_conversation\": END, # E\u011fer end_conversation d\u00f6nerse, ak\u0131\u015f\u0131 bitir\n        \"continue_chat\": \"agent_node\" # Aksi halde, tekrar agent_node'a d\u00f6n (yeni kullan\u0131c\u0131 girdisi i\u00e7in)\n    }\n)\n\n# Graf\u0131 derleyelim\napp = workflow.compile()\n    <\/pre>\n<p><\/code><\/p>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: LangGraph'ta her bir d\u00fc\u011f\u00fcm\u00fcn (node) sadece state'i al\u0131p yeni bir state d\u00f6nd\u00fcrd\u00fc\u011f\u00fcnden emin olun. Bu, graf\u0131n ak\u0131\u015f\u0131n\u0131 tutarl\u0131 ve izlenebilir k\u0131lar. Karma\u015f\u0131k mant\u0131\u011f\u0131 d\u00fc\u011f\u00fcm fonksiyonlar\u0131 i\u00e7inde saklay\u0131n.\n    <\/div>\n<h3>5. Ajan\u0131 \u00c7al\u0131\u015ft\u0131rma ve Test Etme<\/h3>\n<p>Ajan\u0131m\u0131z\u0131 art\u0131k test edebiliriz. M\u00fc\u015fteri gibi davranarak ajana sipari\u015f verelim.<\/p>\n<pre><code class=\"language-python\">\n# Sohbet ge\u00e7mi\u015fini saklamak i\u00e7in basit bir liste\nchat_history = []\ncurrent_order = {}\norder_total = 0.0\npayment_status = \"\"\n\n# Ajanla etkile\u015fim\ndef chat_with_starbucks_agent(query: str):\n    global chat_history, current_order, order_total, payment_status\n    \n    # LangGraph state'ini olu\u015ftur\n    inputs = {\n        \"user_query\": query,\n        \"chat_history\": chat_history,\n        \"current_order\": current_order,\n        \"order_total\": order_total,\n        \"payment_status\": payment_status\n    }\n    \n    # Ajan\u0131 \u00e7al\u0131\u015ft\u0131r\n    result = app.invoke(inputs)\n    \n    # State'i g\u00fcncelle\n    chat_history = result[\"chat_history\"]\n    current_order = result.get(\"current_order\", current_order)\n    order_total = result.get(\"order_total\", order_total)\n    payment_status = result.get(\"payment_status\", payment_status)\n    \n    # En son AI yan\u0131t\u0131n\u0131 ekrana yazd\u0131r\n    last_ai_message = chat_history[-1].replace(\"AI: \", \"\")\n    print(f\"\\nStarbucks Ajan\u0131: {last_ai_message}\")\n\n# \u00d6rnek etkile\u015fimler\nchat_with_starbucks_agent(\"Merhaba, men\u00fcn\u00fczde neler var?\")\nchat_with_starbucks_agent(\"Bir latte alabilir miyim?\")\nchat_with_starbucks_agent(\"B\u00fcy\u00fck boy olsun ve badem s\u00fctl\u00fc.\") # Ajan\u0131n bu bilgiyi nas\u0131l i\u015fleyece\u011fi, LLM'in tool \u00e7a\u011fr\u0131 yetene\u011fine ba\u011fl\u0131\nchat_with_starbucks_agent(\"Yan\u0131na bir de muffin ekler misiniz?\")\n# calculate_order_total arac\u0131n\u0131 tetiklemesi i\u00e7in net bir ifade gerekebilir\nchat_with_starbucks_agent(\"Toplam ne kadar tuttu?\")\nchat_with_starbucks_agent(\"\u00d6deme yapabilir miyim?\") # process_payment arac\u0131n\u0131 tetiklemeli\n\n# LangChain AgentExecutor'\u0131n <code>invoke<\/code> metodu, tool \u00e7\u0131kt\u0131s\u0131n\u0131 <code>output<\/code> i\u00e7inde d\u00f6ner.\n# Bu y\u00fczden LangGraph'taki <code>agent_node<\/code> daha basit kal\u0131r.\n# Geli\u015fmi\u015f senaryolarda, agent_node i\u00e7inde <code>agent.stream<\/code> kullanarak tool_calls'\u0131 yakalay\u0131p ayr\u0131 bir d\u00fc\u011f\u00fcmde i\u015fleyebiliriz.\n# Bu \u00f6rnekte, AgentExecutor'\u0131n do\u011frudan ara\u00e7lar\u0131 kullan\u0131p son yan\u0131t\u0131 d\u00f6nd\u00fcrmesiyle yetiniyoruz.\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu kod blo\u011fu, Starbucks Ajan\u0131m\u0131z\u0131n temel iskeletini olu\u015fturur. Geli\u015fmi\u015f hata y\u00f6netimi, ba\u011flam takibi ve daha karma\u015f\u0131k sipari\u015f modifikasyonlar\u0131 i\u00e7in <code>AgentState<\/code> yap\u0131m\u0131z\u0131 ve <code>agent_node<\/code> fonksiyonumuzu daha detayl\u0131 hale getirmemiz gerekebilir. Ancak bu temel yap\u0131, LangChain ve LangGraph'\u0131n nas\u0131l bir arada \u00e7al\u0131\u015farak otonom bir ajan olu\u015fturabildi\u011fini g\u00f6stermektedir. Ajan, m\u00fc\u015fteri girdisine g\u00f6re dinamik olarak ara\u00e7lar\u0131 kullanacak ve sohbeti y\u00f6nlendirecektir.<\/p>\n<h2>\u0130leri D\u00fczey Optimizasyonlar ve En \u0130yi Uygulamalar<\/h2>\n<p>Temel bir otonom ajan geli\u015ftirdik, ancak ger\u00e7ek d\u00fcnya senaryolar\u0131nda daha sa\u011flam, verimli ve kullan\u0131c\u0131 dostu bir sistem i\u00e7in baz\u0131 ileri d\u00fczey tekniklere ve en iyi uygulamalara ihtiya\u00e7 duyar\u0131z. Bu b\u00f6l\u00fcm, Starbucks Ajan\u0131m\u0131z\u0131 bir sonraki seviyeye ta\u015f\u0131yacak ipu\u00e7lar\u0131 sunuyor.<\/p>\n<h3>1. Geli\u015fmi\u015f Ba\u011flam Y\u00f6netimi ve Bellek<\/h3>\n<p>Mevcut durumda, ajan\u0131n <code>chat_history<\/code> \u00fczerinden basit bir ba\u011flam takibi var. Ancak daha zengin bir etkile\u015fim i\u00e7in kal\u0131c\u0131 bellek (persistent memory) ve karma\u015f\u0131k ba\u011flam y\u00f6netimi kritik \u00f6neme sahiptir.<\/p>\n<ul>\n<li><strong>VectorStore backed Memory:<\/strong> Uzun sohbet ge\u00e7mi\u015flerini \u00f6zetlemek ve sadece alakal\u0131 bilgiyi LLM'e g\u00f6ndermek i\u00e7in bir vekt\u00f6r veritaban\u0131 (Pinecone, ChromaDB gibi) kullanabilirsiniz. Bu, LLM'e g\u00f6nderilen token say\u0131s\u0131n\u0131 azalt\u0131r ve maliyeti d\u00fc\u015f\u00fcr\u00fcrken performans\u0131 art\u0131r\u0131r.<\/li>\n<li><strong>Structured Memory:<\/strong> Sipari\u015f detaylar\u0131, m\u00fc\u015fteri tercihleri gibi yap\u0131land\u0131r\u0131lm\u0131\u015f bilgileri ayr\u0131 bir bellekte (Python s\u00f6zl\u00fc\u011f\u00fc veya veritaban\u0131) tutmak, LLM'in bu bilgilere daha kolay eri\u015fmesini ve manip\u00fcle etmesini sa\u011flar. LangChain'in <code>ConversationBufferWindowMemory<\/code> gibi ara\u00e7lar\u0131, k\u0131sa s\u00fcreli bellek i\u00e7in kullan\u0131labilir.<\/li>\n<li><strong>Retrieval Augmented Generation (RAG):<\/strong> Men\u00fc veya s\u0131k\u00e7a sorulan sorular gibi bilgileri do\u011frudan LLM'e beslemek yerine, bir RAG sistemi kurarak ajan\u0131n sadece ihtiya\u00e7 duydu\u011fu anda bu bilgilere eri\u015fmesini sa\u011flay\u0131n. Bu, men\u00fc g\u00fcncellemelerini kolayla\u015ft\u0131r\u0131r ve \"hal\u00fcsinasyon\" riskini azalt\u0131r.<\/li>\n<\/ul>\n<h3>2. Hata Y\u00f6netimi ve Sa\u011flaml\u0131k<\/h3>\n<p>Otonom ajanlar hata yapabilir; ara\u00e7lar ba\u015far\u0131s\u0131z olabilir veya LLM yanl\u0131\u015f bir karar verebilir. Sa\u011flam bir ajan i\u00e7in hata y\u00f6netimi \u00e7ok \u00f6nemlidir.<\/p>\n<ul>\n<li><strong>Retry Mekanizmalar\u0131:<\/strong> Bir ara\u00e7 \u00e7a\u011fr\u0131s\u0131 ba\u015far\u0131s\u0131z oldu\u011funda, ajan\u0131n otomatik olarak tekrar denemesini sa\u011flay\u0131n. LangGraph, d\u00f6ng\u00fcler ve ko\u015fullu ge\u00e7i\u015flerle bu t\u00fcr mekanizmalar\u0131 kolayca uygulaman\u0131za olanak tan\u0131r.<\/li>\n<li><strong>Geri D\u00f6n\u00fc\u015f Stratejileri:<\/strong> Belirli bir g\u00f6revde birden fazla ba\u015far\u0131s\u0131zl\u0131k oldu\u011funda, ajan\u0131n insan m\u00fcdahalesi istemesi veya varsay\u0131lan, g\u00fcvenli bir yan\u0131t vermesi gibi geri d\u00f6n\u00fc\u015f stratejileri tan\u0131mlay\u0131n.<\/li>\n<li><strong>Do\u011frulama ve Onay:<\/strong> \u00d6zellikle sipari\u015f alma ve \u00f6deme gibi kritik ad\u0131mlarda, ajan\u0131n m\u00fc\u015fteriden net onaylar almas\u0131n\u0131 sa\u011flay\u0131n. \u00d6rne\u011fin, sipari\u015fin \u00f6zetini sunup \"Onayl\u0131yor musunuz?\" diye sormak.<\/li>\n<li><strong>Token Limit Y\u00f6netimi:<\/strong> Uzun sohbetlerde veya karma\u015f\u0131k g\u00f6revlerde LLM'in token limitlerine tak\u0131lmamak i\u00e7in ge\u00e7mi\u015fi \u00f6zetleme veya en alakal\u0131 k\u0131sm\u0131 se\u00e7me stratejileri uygulay\u0131n.<\/li>\n<\/ul>\n<h3>3. Performans ve Maliyet Optimizasyonu<\/h3>\n<p>LLM \u00e7a\u011fr\u0131lar\u0131 maliyetli olabilir. Performans\u0131 art\u0131r\u0131rken maliyeti d\u00fc\u015f\u00fcrmek i\u00e7in \u015fu y\u00f6ntemleri kullanabilirsiniz:<\/p>\n<ul>\n<li><strong>Ak\u0131ll\u0131 LLM Se\u00e7imi:<\/strong> Her g\u00f6rev i\u00e7in en g\u00fc\u00e7l\u00fc LLM'i kullanmak yerine, basit g\u00f6revler i\u00e7in daha ucuz ve h\u0131zl\u0131 modelleri (\u00f6rn. GPT-3.5 Turbo) tercih edin. Kritik ve karma\u015f\u0131k g\u00f6revler i\u00e7in GPT-4o gibi daha yetenekli modelleri ay\u0131r\u0131n.<\/li>\n<li><strong>\u00d6nbellekleme (Caching):<\/strong> S\u0131k\u00e7a yap\u0131lan men\u00fc sorgular\u0131 gibi ayn\u0131 \u00e7\u0131kt\u0131y\u0131 veren LLM \u00e7a\u011fr\u0131lar\u0131n\u0131 \u00f6nbelle\u011fe al\u0131n. LangChain'in kendi \u00f6nbellekleme mekanizmalar\u0131 mevcuttur.<\/li>\n<li><strong>Paralel \u0130\u015fleme:<\/strong> M\u00fcmk\u00fcn oldu\u011funca, ba\u011f\u0131ms\u0131z g\u00f6revleri paralel olarak \u00e7al\u0131\u015ft\u0131rmay\u0131 d\u00fc\u015f\u00fcn\u00fcn (ancak bu LangGraph ak\u0131\u015f\u0131n\u0131 karma\u015f\u0131kla\u015ft\u0131rabilir).<\/li>\n<li><strong>Prompt M\u00fchendisli\u011fi:<\/strong> LLM'den istenen \u00e7\u0131kt\u0131y\u0131 en az token ile ve en do\u011fru \u015fekilde alabilmek i\u00e7in prompt'lar\u0131n\u0131z\u0131 optimize edin. A\u00e7\u0131k, \u00f6z ve hedefe y\u00f6nelik prompt'lar kullan\u0131n.<\/li>\n<\/ul>\n<h3>4. G\u00fcvenlik ve Gizlilik<\/h3>\n<p>M\u00fc\u015fteri verileriyle \u00e7al\u0131\u015f\u0131rken g\u00fcvenlik ve gizlilik en \u00fcst d\u00fczeyde olmal\u0131d\u0131r.<\/p>\n<ul>\n<li><strong>Veri \u015eifreleme:<\/strong> M\u00fc\u015fteri bilgilerini ve \u00f6deme verilerini her zaman \u015fifreli bir \u015fekilde saklay\u0131n ve iletin.<\/li>\n<li><strong>Eri\u015fim Kontrol\u00fc:<\/strong> Ajan\u0131n ve entegre oldu\u011fu sistemlerin sadece gerekli verilere eri\u015fti\u011finden emin olun (Least Privilege Prensibi).<\/li>\n<li><strong>Giri\u015f Filtreleme:<\/strong> K\u00f6t\u00fc niyetli veya zararl\u0131 girdileri tespit etmek ve engellemek i\u00e7in LLM giri\u015flerini filtreleyin.<\/li>\n<li><strong>Anonimle\u015ftirme:<\/strong> M\u00fcmk\u00fcn oldu\u011funda hassas m\u00fc\u015fteri verilerini anonimle\u015ftirerek kullan\u0131n.<\/li>\n<\/ul>\n<h3>5. Kullan\u0131c\u0131 Aray\u00fcz\u00fc (UI) ve Mobil Uyumluluk<\/h3>\n<p>Ajan\u0131n\u0131z\u0131n etkile\u015fime girdi\u011fi bir kullan\u0131c\u0131 aray\u00fcz\u00fc olacaksa (web veya mobil), bunun da optimize edilmesi gerekir.<\/p>\n<pre><code class=\"language-css\">\n\/* Mobil cihazlar i\u00e7in temel stil ayarlar\u0131 *\/\nbody {\n    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n    margin: 0;\n    padding: 10px;\n    background-color: #f4f7f6;\n    color: #333;\n}\n\n.chat-container {\n    max-width: 600px;\n    margin: 20px auto;\n    background-color: #fff;\n    border-radius: 8px;\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n    display: flex;\n    flex-direction: column;\n    min-height: 500px;\n}\n\n.messages {\n    flex-grow: 1;\n    padding: 15px;\n    overflow-y: auto;\n    border-bottom: 1px solid #eee;\n}\n\n.message {\n    padding: 8px 12px;\n    margin-bottom: 10px;\n    border-radius: 15px;\n    max-width: 80%;\n    word-wrap: break-word;\n}\n\n.user-message {\n    background-color: #007bff;\n    color: white;\n    align-self: flex-end;\n    margin-left: auto;\n}\n\n.ai-message {\n    background-color: #e2e6ea;\n    color: #333;\n    align-self: flex-start;\n}\n\n.input-area {\n    display: flex;\n    padding: 15px;\n    border-top: 1px solid #eee;\n}\n\n.input-area input[type=\"text\"] {\n    flex-grow: 1;\n    padding: 10px 15px;\n    border: 1px solid #ccc;\n    border-radius: 20px;\n    margin-right: 10px;\n    font-size: 16px;\n}\n\n.input-area button {\n    background-color: #28a745;\n    color: white;\n    border: none;\n    padding: 10px 20px;\n    border-radius: 20px;\n    cursor: pointer;\n    font-size: 16px;\n    transition: background-color 0.3s ease;\n}\n\n.input-area button:hover {\n    background-color: #218838;\n}\n\n\/* Mobil uyumluluk i\u00e7in Media Query *\/\n@media (max-width: 768px) {\n    .chat-container {\n        margin: 0;\n        border-radius: 0;\n        box-shadow: none;\n        height: 100vh; \/* Tam ekran y\u00fcksekli\u011fi *\/\n    }\n    .message {\n        max-width: 90%;\n    }\n    .input-area {\n        padding: 10px;\n    }\n    .input-area input[type=\"text\"],\n    .input-area button {\n        font-size: 14px;\n        padding: 8px 12px;\n    }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki CSS \u00f6rne\u011fi, bir sohbet aray\u00fcz\u00fcn\u00fcn mobil cihazlarda nas\u0131l daha iyi g\u00f6r\u00fcnece\u011fine dair bir fikir vermektedir. <code>max-width: 768px<\/code> media query'si, ekran geni\u015fli\u011fi bu de\u011ferin alt\u0131na d\u00fc\u015ft\u00fc\u011f\u00fcnde belirli stillerin (\u00f6rn. tam ekran y\u00fcksekli\u011fi, daha k\u00fc\u00e7\u00fck yaz\u0131 tipleri) uygulanmas\u0131n\u0131 sa\u011flar. Bu, ajan\u0131n etkile\u015fimde oldu\u011fu web veya mobil uygulamalar\u0131n\u0131n farkl\u0131 cihazlarda sorunsuz bir deneyim sunmas\u0131 i\u00e7in \u00f6nemlidir.<\/p>\n<p>Bu ileri d\u00fczey konular\u0131 g\u00f6z \u00f6n\u00fcnde bulundurarak ajan\u0131n\u0131z\u0131 geli\u015ftirmeniz, sadece i\u015flevsel de\u011fil, ayn\u0131 zamanda g\u00fcvenilir, verimli ve kullan\u0131c\u0131 dostu bir AI \u00e7\u00f6z\u00fcm\u00fc olu\u015fturman\u0131z\u0131 sa\u011flayacakt\u0131r.<\/p>\n<h2>Sonu\u00e7: Gelece\u011fin Kahve Deneyimi ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu makalede, LangChain ve LangGraph'\u0131n bir araya gelerek nas\u0131l otonom AI ajanlar\u0131 olu\u015fturabilece\u011fimize dair kapsaml\u0131 bir rehber sunduk. Starbucks Ajan\u0131 \u00f6rne\u011fi \u00fczerinden, bir LLM'in ara\u00e7larla entegrasyonu, durum y\u00f6netimi ve karma\u015f\u0131k i\u015f ak\u0131\u015flar\u0131n\u0131n nas\u0131l tasarlanabilece\u011fini ad\u0131m ad\u0131m g\u00f6sterdik. Art\u0131k sadece komutlar\u0131 takip eden chatbotlar\u0131n \u00f6tesine ge\u00e7erek, kendi ba\u015f\u0131na karar alabilen, d\u0131\u015f d\u00fcnyayla etkile\u015fime girebilen ve hatta hatalar\u0131ndan \u00f6\u011frenebilen ak\u0131ll\u0131 sistemler geli\u015ftirebiliriz. Bu t\u00fcr ajanlar, m\u00fc\u015fteri deneyimini ki\u015fiselle\u015ftirme, operasyonel verimlili\u011fi art\u0131rma ve i\u015f s\u00fcre\u00e7lerini otomatize etme konusunda muazzam bir potansiyele sahiptir.<\/p>\n<p>Otonom ajanlar\u0131n gelece\u011fi, sadece kahve sipari\u015fleriyle s\u0131n\u0131rl\u0131 de\u011fil. Sa\u011fl\u0131k hizmetlerinden finans sekt\u00f6r\u00fcne, e\u011fitimden lojisti\u011fe kadar her alanda, bu teknolojinin insanlar\u0131 tekrarlayan g\u00f6revlerden kurtararak daha yarat\u0131c\u0131 ve stratejik i\u015flere odaklanmas\u0131n\u0131 sa\u011flayaca\u011f\u0131na inan\u0131yoruz. Ancak, bu yolculukta performans optimizasyonu, hata y\u00f6netimi, g\u00fcvenlik ve gizlilik gibi konulara dikkat etmek, ajanlar\u0131m\u0131z\u0131n ba\u015far\u0131l\u0131 ve s\u00fcrd\u00fcr\u00fclebilir olmas\u0131n\u0131n anahtar\u0131d\u0131r. LangChain ve LangGraph, bu zorluklar\u0131n \u00fcstesinden gelmek i\u00e7in g\u00fc\u00e7l\u00fc ve esnek bir \u00e7er\u00e7eve sunarak geli\u015ftiricilere ilham verici bir platform sa\u011fl\u0131yor.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ul>\n<li>\n            <strong>S: LangChain ve LangGraph aras\u0131ndaki temel fark nedir?<\/strong><\/p>\n<p>C: LangChain, LLM'lerle uygulama geli\u015ftirmek i\u00e7in bir \u00e7er\u00e7evedir; ara\u00e7lar, zincirler ve ajanlar gibi bile\u015fenler sunar. LangGraph ise LangChain'in \u00fczerine in\u015fa edilmi\u015ftir ve ajanlar\u0131n durum makineleri veya grafikler arac\u0131l\u0131\u011f\u0131yla daha karma\u015f\u0131k, \u00e7ok ad\u0131ml\u0131 ve d\u00f6ng\u00fcsel i\u015f ak\u0131\u015flar\u0131n\u0131 y\u00f6netmesini sa\u011flar. \u00d6zetle, LangChain LLM'e ara\u00e7 verir, LangGraph bu ara\u00e7lar\u0131n ne zaman ve nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 y\u00f6neten orkestrasyonu sa\u011flar.<\/p>\n<\/li>\n<li>\n            <strong>S: Otonom bir AI ajan\u0131 geli\u015ftirmek i\u00e7in hangi programlama dillerini bilmeliyim?<\/strong><\/p>\n<p>C: LangChain ve LangGraph a\u011f\u0131rl\u0131kl\u0131 olarak Python tabanl\u0131 k\u00fct\u00fcphaneler oldu\u011fu i\u00e7in Python programlama dilinde yetkin olman\u0131z \u00f6nemlidir. Ek olarak, web tabanl\u0131 aray\u00fczler i\u00e7in JavaScript\/TypeScript ve CSS bilgisi, veri depolama i\u00e7in SQL bilgisi faydal\u0131 olabilir.<\/p>\n<\/li>\n<li>\n            <strong>S: Starbucks Ajan\u0131 gibi bir projeyi ger\u00e7ek hayata ge\u00e7irmek ne kadar zor olur?<\/strong><\/p>\n<p>C: Bu makaledeki \u00f6rnek, kavramsal bir ba\u015flang\u0131\u00e7t\u0131r. Ger\u00e7ek bir Starbucks Ajan\u0131, men\u00fc y\u00f6netimi, stok takibi, ger\u00e7ek zamanl\u0131 \u00f6deme entegrasyonlar\u0131 (Stripe, BKM Express vb.), sipari\u015f y\u00f6netim sistemleriyle (POS) entegrasyon, hata d\u00fczeltme, m\u00fc\u015fteri do\u011frulama ve veri g\u00fcvenli\u011fi gibi \u00e7ok daha karma\u015f\u0131k sistem entegrasyonlar\u0131 gerektirir. Bu nedenle, ciddi bir m\u00fchendislik \u00e7abas\u0131 ve sistem mimarisi tasar\u0131m\u0131 gereklidir.<\/p>\n<\/li>\n<li>\n            <strong>S: LLM'ler her zaman do\u011fru cevap verir mi? \"Hal\u00fcsinasyon\" nedir?<\/strong><\/p>\n<p>C: Hay\u0131r, LLM'ler her zaman do\u011fru cevap vermez. \"Hal\u00fcsinasyon\", bir LLM'in mevcut verilerle desteklenmeyen, ancak inand\u0131r\u0131c\u0131 g\u00f6r\u00fcnen yanl\u0131\u015f veya uydurma bilgiler \u00fcretmesidir. Ajan geli\u015ftirirken, hal\u00fcsinasyonlar\u0131 en aza indirmek i\u00e7in g\u00fcvenilir ara\u00e7lar kullanmak (\u00f6rn. API'lar), do\u011fru prompt m\u00fchendisli\u011fi yapmak ve Retrieval Augmented Generation (RAG) gibi tekniklerden faydalanmak \u00f6nemlidir.<\/p>\n<\/li>\n<li>\n            <strong>S: Otonom ajanlar i\u015fimi elimden alacak m\u0131?<\/strong><\/p>\n<p>C: Otonom ajanlar\u0131n temel amac\u0131 insanlar\u0131 tamamen yerinden etmek de\u011fil, tekrarlayan, s\u0131k\u0131c\u0131 veya y\u00fcksek hacimli g\u00f6revleri \u00fcstlenerek insan kaynaklar\u0131n\u0131n daha yarat\u0131c\u0131, stratejik ve empati gerektiren i\u015flere odaklanmas\u0131n\u0131 sa\u011flamakt\u0131r. Bu, yeni roller ve i\u015f tan\u0131mlar\u0131 yaratacak, mevcut i\u015fleri daha verimli ve tatmin edici hale getirecektir. \u0130nsan ve AI'n\u0131n i\u015fbirli\u011fi, gelece\u011fin \u00e7al\u0131\u015fma modelini \u015fekillendirecektir.<\/p>\n<\/li>\n<\/ul>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Yapay zeka teknolojileri h\u0131zla geli\u015firken, otonom ajanlar i\u015f d\u00fcnyas\u0131nda devrim yaratma potansiyeli ta\u015f\u0131yor. Bu makalede, LangChain ve LangGraph&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-30380","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>LangChain &amp; LangGraph ile Otonom AI Ajan Geli\u015ftirme Rehberi: Starbucks Agent<\/title>\n<meta name=\"description\" content=\"Yapay zeka teknolojileri h\u0131zla geli\u015firken, otonom ajanlar i\u015f d\u00fcnyas\u0131nda devrim yaratma potansiyeli ta\u015f\u0131yor. Bu makalede, LangChain ve LangGraph gibi g\u00fc\u00e7l\u00fc ara\u00e7lar\u0131 kullanarak kendi kendine karar verebilen bir AI ajan\u0131 nas\u0131l geli\u015ftirece\u011finizi ad\u0131m ad\u0131m ke\u015ffedeceksiniz. \u00d6zellikle, LangChain ve LangGraph&#039;\u0131n temel kavramlar\u0131ndan ba\u015flayarak, Starbucks senaryosunda sipari\u015f al\u0131p i\u015fleyebilen ger\u00e7ek\u00e7i bir otonom kahve ajan\u0131 olu\u015fturma s\u00fcrecine odaklanaca\u011f\u0131z.\" \/>\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\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"LangChain &amp; LangGraph ile Otonom AI Ajan Geli\u015ftirme Rehberi: Starbucks Agent\" \/>\n<meta property=\"og:description\" content=\"Yapay zeka teknolojileri h\u0131zla geli\u015firken, otonom ajanlar i\u015f d\u00fcnyas\u0131nda devrim yaratma potansiyeli ta\u015f\u0131yor. Bu makalede, LangChain ve LangGraph gibi g\u00fc\u00e7l\u00fc ara\u00e7lar\u0131 kullanarak kendi kendine karar verebilen bir AI ajan\u0131 nas\u0131l geli\u015ftirece\u011finizi ad\u0131m ad\u0131m ke\u015ffedeceksiniz. \u00d6zellikle, LangChain ve LangGraph&#039;\u0131n temel kavramlar\u0131ndan ba\u015flayarak, Starbucks senaryosunda sipari\u015f al\u0131p i\u015fleyebilen ger\u00e7ek\u00e7i bir otonom kahve ajan\u0131 olu\u015fturma s\u00fcrecine odaklanaca\u011f\u0131z.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-27T01:01:39+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=\"33 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"LangChain &#038; LangGraph ile Otonom AI Ajan Geli\u015ftirme Rehberi: Starbucks Agent\",\"datePublished\":\"2025-09-27T01:01:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/\"},\"wordCount\":3967,\"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\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/\",\"name\":\"LangChain & LangGraph ile Otonom AI Ajan Geli\u015ftirme Rehberi: Starbucks Agent\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-09-27T01:01:39+00:00\",\"description\":\"Yapay zeka teknolojileri h\u0131zla geli\u015firken, otonom ajanlar i\u015f d\u00fcnyas\u0131nda devrim yaratma potansiyeli ta\u015f\u0131yor. Bu makalede, LangChain ve LangGraph gibi g\u00fc\u00e7l\u00fc ara\u00e7lar\u0131 kullanarak kendi kendine karar verebilen bir AI ajan\u0131 nas\u0131l geli\u015ftirece\u011finizi ad\u0131m ad\u0131m ke\u015ffedeceksiniz. \u00d6zellikle, LangChain ve LangGraph'\u0131n temel kavramlar\u0131ndan ba\u015flayarak, Starbucks senaryosunda sipari\u015f al\u0131p i\u015fleyebilen ger\u00e7ek\u00e7i bir otonom kahve ajan\u0131 olu\u015fturma s\u00fcrecine odaklanaca\u011f\u0131z.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"LangChain &#038; LangGraph ile Otonom AI Ajan Geli\u015ftirme Rehberi: Starbucks Agent\"}]},{\"@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":"LangChain & LangGraph ile Otonom AI Ajan Geli\u015ftirme Rehberi: Starbucks Agent","description":"Yapay zeka teknolojileri h\u0131zla geli\u015firken, otonom ajanlar i\u015f d\u00fcnyas\u0131nda devrim yaratma potansiyeli ta\u015f\u0131yor. Bu makalede, LangChain ve LangGraph gibi g\u00fc\u00e7l\u00fc ara\u00e7lar\u0131 kullanarak kendi kendine karar verebilen bir AI ajan\u0131 nas\u0131l geli\u015ftirece\u011finizi ad\u0131m ad\u0131m ke\u015ffedeceksiniz. \u00d6zellikle, LangChain ve LangGraph'\u0131n temel kavramlar\u0131ndan ba\u015flayarak, Starbucks senaryosunda sipari\u015f al\u0131p i\u015fleyebilen ger\u00e7ek\u00e7i bir otonom kahve ajan\u0131 olu\u015fturma s\u00fcrecine odaklanaca\u011f\u0131z.","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\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/","og_locale":"tr_TR","og_type":"article","og_title":"LangChain & LangGraph ile Otonom AI Ajan Geli\u015ftirme Rehberi: Starbucks Agent","og_description":"Yapay zeka teknolojileri h\u0131zla geli\u015firken, otonom ajanlar i\u015f d\u00fcnyas\u0131nda devrim yaratma potansiyeli ta\u015f\u0131yor. Bu makalede, LangChain ve LangGraph gibi g\u00fc\u00e7l\u00fc ara\u00e7lar\u0131 kullanarak kendi kendine karar verebilen bir AI ajan\u0131 nas\u0131l geli\u015ftirece\u011finizi ad\u0131m ad\u0131m ke\u015ffedeceksiniz. \u00d6zellikle, LangChain ve LangGraph'\u0131n temel kavramlar\u0131ndan ba\u015flayarak, Starbucks senaryosunda sipari\u015f al\u0131p i\u015fleyebilen ger\u00e7ek\u00e7i bir otonom kahve ajan\u0131 olu\u015fturma s\u00fcrecine odaklanaca\u011f\u0131z.","og_url":"https:\/\/fatihsoysal.com\/blog\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-09-27T01:01:39+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"33 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"LangChain &#038; LangGraph ile Otonom AI Ajan Geli\u015ftirme Rehberi: Starbucks Agent","datePublished":"2025-09-27T01:01:39+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/"},"wordCount":3967,"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\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/","url":"https:\/\/fatihsoysal.com\/blog\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/","name":"LangChain & LangGraph ile Otonom AI Ajan Geli\u015ftirme Rehberi: Starbucks Agent","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-09-27T01:01:39+00:00","description":"Yapay zeka teknolojileri h\u0131zla geli\u015firken, otonom ajanlar i\u015f d\u00fcnyas\u0131nda devrim yaratma potansiyeli ta\u015f\u0131yor. Bu makalede, LangChain ve LangGraph gibi g\u00fc\u00e7l\u00fc ara\u00e7lar\u0131 kullanarak kendi kendine karar verebilen bir AI ajan\u0131 nas\u0131l geli\u015ftirece\u011finizi ad\u0131m ad\u0131m ke\u015ffedeceksiniz. \u00d6zellikle, LangChain ve LangGraph'\u0131n temel kavramlar\u0131ndan ba\u015flayarak, Starbucks senaryosunda sipari\u015f al\u0131p i\u015fleyebilen ger\u00e7ek\u00e7i bir otonom kahve ajan\u0131 olu\u015fturma s\u00fcrecine odaklanaca\u011f\u0131z.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/langchain-langgraph-ile-otonom-ai-ajan-gelistirme-rehberi-starbucks-agent\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"LangChain &#038; LangGraph ile Otonom AI Ajan Geli\u015ftirme Rehberi: Starbucks Agent"}]},{"@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\/30380","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=30380"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30380\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=30380"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=30380"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=30380"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}