Gerçek Yapay Zeka Ajanları (Agents) Nasıl Tasarlanır?
"Persona"lardan Araç Kullanan (Tool-Using) Karar Mekanizmalarına Geçiş
Seviye 0'dan Seviye 7'ye adım adım senior düzeyde AI Engineer rehberi.
🎯 Giriş: Neden "Sen Dünyanın En İyi YZ Mühendisisin" Yetersizdir?
İnternetteki eğitimlerin %90'ı size bir ajan yaratmak için şunu yazmanızı söyler:
Eğer production'a, yani canlıya bir uygulama çıkacaksanız, sadece persona vererek yazdığınız promptlar sisteminizi bir halüsinasyon bombasına çevirir.
Agent'ların asıl gücü onlara verdiğiniz rollerdan değil; Tool Kullanımı (Araç Kullanımı), Grounding (Temellendirme) ve Açıklanabilirlik (Explainability)'dir.
💡 Bu Yazıda Ne Öğreneceksiniz?
Bu yazıda basit bir problem olan "iki metnin benzerliğini ölçme" görevini alacağız ve acemi bir yaklaşımdan, senior bir YZ mühendisinin tasarlayacağı otonom seviyeye kadar adım adım nasıl geliştireceğimizi göreceğiz. Her seviyede prompt, mimari ve maliyet karşılaştırması yapacağız.
🎬 Video ile Öğrenin: Murat Karakaya Akademi
Bu eğitimi Murat Karakaya Akademi YouTube kanalında da izleyebilirsiniz. Adım adım canlı demo, kod açıklaması ve mimari analiz ile Seviye 0'dan Seviye 7'ye aynı yolculuğu video olarak da takip edebilirsiniz.
📌 Seviye 0 — Acemi Yaklaşım: Kara Kutu & Halüsinasyon
Senaryo: Uygulamamızda üretilen Metin 1 ile Metin 2'nin ne kadar benzer olduğunu 0–100 arasında bulmamız gerekiyor. (Örneğin bir RAG sisteminde, üretilen cevabın referans metne ne kadar sadık olduğunu ölçüyoruz).
"Sen bir metin analistisin. Sana verilen Metin 1 ve Metin 2'yi karşılaştırıp ne kadar benzer olduklarına karar ver. Benzerliği 0–100 arasında bir sayısal değer ile döndür. 0: Hiç benzemiyorlar, 100: Tamamen kelime kelime aynılar."
Neden Kötü?
- Kara Kutu (Black Box): Model sadece "75" döndürdü. Neden 75? 74 veya 80 değil? Bilmiyoruz.
- Subjektiflik: Aynı metinlere bir gün 60, ertesi gün 85 verebilir.
- Halüsinasyon Riski: LLM'ler matematiksel ölçüm yapamaz; kelime tahmin eder. "75" uydurulmuş bir değerdir.
📌 Seviye 1 — Yapılandırılmış Çıktı & Düşünce Zinciri
İstediğimiz ilk şey Açıklanabilirlik (Explainability). Modele "bana sadece sonuç verme, düşünme sürecini de ver" diyoruz.
- Chain of Thought (Düşünce Zinciri): Modelden önce skoru istemedik. Önce reasoning alanını doldurmasını istedik. Model açıklamayı yazarken kendi çıkarımını temellendirir.
- Hata Ayıklama (Debugging): Skor 40 geldiğinde, "Model şu detayı kaçırmış, o yüzden düşük vermiş" diyebiliriz.
- Entegrasyon: JSON çıktısı uygulama kodu tarafından parse edilebilir.
📌 Seviye 2 — Rubrik ve Objektivite (Divide & Conquer)
Agent'ın "benzerlik" gibi soyut bir kavramı kendi başına yorumlamasına izin vermiyoruz. Ona kurallar (rubrik) veriyoruz. Problemi parçalara bölüyoruz.
Rubrik:
- 1. Ana Fikir (0-20): İki metin aynı ana mesajı mı veriyor?
- 2. Ton ve Üslup (0-20): İki metnin resmiyeti ve duygusu aynı mı?
- 3. Varlıklar / Entities (0-20): Metinlerde geçen isimler, tarihler, sayılar eşleşiyor mu?
- 4. Eksik Bilgi (0-20): Metin 2, Metin 1'deki önemli bir detayı atlamış mı?
- 5. Akıcılık (0-20): Metin 2 yapısal olarak ne kadar tutarlı?
- Grounding (Temellendirme): Modeli soyut 100 üzerinden değerlendirmeden kurtardık.
- Objektiflik: Farklı zamanlarda çalıştırsanız bile skorlar çok daha tutarlı olur (varyans azalır).
- Karşılaştırılabilirlik: Farklı promptları aynı rubrik üzerinden değerlendirebiliriz.
📌 Seviye 3 — Örnekli Rubrik Kalibrasyonu (One-Shot / Few-Shot)
Seviye 2'de rubrik verdik; fakat bu hâlâ sıfır-örnekli prompting (zero-shot prompting) idi. Model kriterleri okudu ama "20 puan ne zaman verilir?", "10 puan hangi sınır durumu?" gibi karar sınırlarını örneklerden görmedi.
Bu seviyede her kriter için küçük ve temsil gücü yüksek örnekler veriyoruz.
Puanlama Kalibrasyonu Örnekleri:
- Ana Fikir — 20 puan: "Veri temizliği model başarısı için kritiktir" ve "Model kalitesi büyük ölçüde temiz veriye bağlıdır" aynı ana fikri verir.
- Ana Fikir — 10 puan: İki metin de veri kalitesinden söz eder ama biri güvenlik risklerine, diğeri model performansına odaklanır.
- Ana Fikir — 0 puan: Biri veri temizliğini, diğeri spor müsabakası sonucunu anlatır.
- Ton ve Üslup — 20 puan: İki metin de akademik ve resmi bir dille yazılmıştır.
- Ton ve Üslup — 10 puan: Biri resmi, diğeri daha konuşma dilindedir ama anlam korunmuştur.
- Tutarlılık: Model aynı puan aralıklarını daha kararlı kullanır.
- Öğretilebilirlik: Rubrik artık yalnızca soyut bir liste değil, davranış örnekleriyle desteklenmiştir.
- Maliyet: Few-shot örnekler giriş tokenını artırır — bu yüzden örnekler kısa ve net seçilir.
Beklenen JSON şeması:
📌 Seviye 4 — Araç Kullanımı (Tool Calling) ve İş Akışı (Workflow)
Seviye 3'te rubriği örneklerle kalibre ettik; fakat değerlendirme hâlâ yalnızca LLM yorumuna dayanıyor. Şimdi dış sistemlerden gelen deterministik metrikleri kanıt olarak ekliyoruz.
Kullanılan Metrikler:
- ROUGE-L F1: Kelime dizisi örtüşmesini ölçer.
- Hafif Benzerlik Skoru: Token cosine + Token Jaccard + Karakter 3-gram cosine + Sequence ratio birleşimi.
- ROUGE-L F1 düşükse kelime örtüşmesinin düşük olduğunu gösterir; tek başına düşük anlamsal benzerlik kanıtı değildir.
- Hafif Benzerlik Skoru ROUGE-L'ye göre daha yüksekse, metinler farklı kelimelerle benzer mesaj veriyor olabilir.
- Hafif Benzerlik Skoru gerçek semantik embedding değildir; karar destek sinyali olarak kullanılmalı, tek karar verici yapılmamalıdır.
🌍 Gerçek Dünyada Neden Bu Kullanılır?
- Güvenilirlik: ROUGE ve hafif benzerlik skorları deterministiktir — aynı metin çiftine her zaman aynı skorları verir.
- İzlenebilirlik: LLM yorumu dış kanıta dayandığı için değerlendirme daha denetlenebilir olur.
- Maliyet Kontrolü: Hafif metrikler hızlıdır ve ağır model bağımlılığı gerektirmez.
🔬 Deney Hijyeni Notu
Seviye 4, Seviye 3 ile aynı rubrik metnini kullanır. Bu bilinçli bir karar: iki seviye arasındaki fark rubrik değişikliği değil, yalnızca dış metrik bağlamıdır.
Seviye 4'te eklenen Zorunlu JSON alanları:
metric_interpretation: ROUGE-L F1 ve Hafif Benzerlik Skoru değerlerini nasıl yorumladığını açıkla.calibration_note: Rubrik kalibrasyon örneklerinin puanlamanı nasıl etkilediğini açıkla.
Beklenen JSON şeması (Seviye 4):
📌 Seviye 5 — ReAct ve Ollama Tool Calling ile Gerçek Ajan Döngüsü
Seviye 4'te güçlü bir iş akışı kurduk ama kurduğumuz sistem gerçek bir ajan mıydı? Tam olarak hayır. Çünkü metrikleri Python ile biz hesapladık. Gerçek ajan davranışında model hangi kanıta ihtiyaç duyduğunu belirler, yazılım katmanı aracı çalıştırır ve sonuç tekrar modele döner.
ReAct Döngüsü:
- Reasoning (Muhakeme): Model hangi dış kanıta ihtiyaç duyduğunu belirler.
- Action (Eylem): Model düz metin yazmak yerine Ollama'nın native
tool_callsalanını üretir. - Observation (Gözlem): Python ilgili fonksiyonu çalıştırır, sonucu
role="tool"olarak modele geri verir. - Final Answer (Nihai Cevap): Model tool sonuçlarını kullanarak rubrik temelli JSON değerlendirmesini üretir.
Ollama Native Tool Calling Akışı:
Tool Tanımları (Python):
Tool Calling Loop (Pseudo-Python):
- ReAct yalnızca
Thought / Action / Observationyazdırmak değildir; düşünceyi gerçek araç yürütmeye bağlamaktır. - Ajan; prompt, tool calling, execution loop, grounding ve hata kontrolü katmanlarının birlikte tasarlanmasıdır.
- Model araç ihtiyacını belirler, Python aracı gerçekten çalıştırır, nihai değerlendirme dış kanıtla desteklenir.
📊 Seviye 5 Token Maliyeti:
"Seviye 5 çok turlu (multi-turn) bir ajan loop'u olduğu için giriş tokenı (input token), yalnızca ilk kullanıcı promptunun uzunluğu değildir. Her client.chat çağrısında sistem mesajı, kullanıcı mesajı, önceki asistan mesajları ve tool sonuçları yeniden bağlama girer. Bu nedenle Seviye 5'teki input token toplamı, tekil token sayısı değil, kümülatif işlenen token / maliyet göstergesidir."
🛡️ Gerçek Dünyada: Üretim Ortamı Koruma Katmanları
Gerçek üretimde şu korumalar eklenir: şema doğrulama (schema validation), maksimum adım sayısı (max step limit), tool izin listesi (tool allowlist), yeniden deneme (retry) ve izleme/günlükleme (tracing/logging).
Seviye 5 Tool Calling JSON şeması:
📌 Seviye 6 — Rubrik Bazlı Sub-Agentlar ve Python Aggregator
Seviye 5'te tek bir ajan hem araç çağırdı hem de bütün rubriği tek başına yorumladı. Bu seviyede farklı bir mimari deniyoruz: tek büyük prompt yerine, her rubrik kriterini ayrı bir alt ajana (sub-agent) veriyoruz.
Mimari:
- 1 generic sub-agent fonksiyonu yazılır.
- Bu fonksiyon 5 farklı rubrik konfigürasyonu ile 5 kez çağrılır.
- Her sub-agent yalnızca kendi kriterini değerlendirir.
- Python aggregator sonuçları doğrular, sıraya koyar ve toplam skoru hesaplar.
- Aggregator LLM çağrısı yapmaz — deterministiktir.
Bu Seviyenin Pedagojik Mesajı:
Sınırları:
- 5 sub-agent = 5 LLM çağrısı = Seviye 5'ten daha pahalı.
- Her durumda gerekli değildir; rubrik büyüdüğünde veya denetlenebilirlik kritik olduğunda anlam kazanır.
Seviye 6 - Sub-Agent JSON Çıktısı (tek kriter için):
Python Aggregator Toplam Çıktısı (tüm kriterler):
Seviye 6 Python aggregator fonksiyon örneği:
Seviye 6 — Token Maliyeti:
- 5 sub-agent = 5 bağımsız LLM çağrısı
- Her çağrı sistem promptu + kullanıcı promptu + metrik bağlamını içerir
- Toplam input token = 5 × (sistem + kullanıcı promptu uzunluğu)
- Aggregator token maliyeti = 0 (Python kodu çalışır)
Seviye 6 — Sub-Agent JSON Şeması (build_sub_agent_system_prompt içinde):
📌 Seviye 7 — Orkestratör Ajanlar ve Ne Zaman Gerekli Olmadıkları
Seviye 6'dan sonra doğal soru: "Bu alt ajanları bir de orkestratör ajan yönetse daha iyi olmaz mı?"
Orkestratör Ajan (Orchestrator Agent) gerçek hayatta güçlü bir mimaridir. Görevi parçalara ayırabilir, hangi sub-agent'ın çalışacağına karar verebilir, araç seçebilir, eksik veya çelişkili sonuçlarda yeniden deneme başlatabilir ve farklı ajanlardan gelen sonuçları nihai karara dönüştürebilir.
Ancak bu örnekte buna bilinçli olarak gerek duymuyoruz, çünkü:
- 5 rubrik kriteri önceden belli.
- Her kriterin mutlaka çalışması gerekiyor.
- Her sub-agent yalnızca kendi kriterini değerlendiriyor.
- Eksik kriter kontrolü, sıralama ve toplam skor Python ile güvenilir biçimde yapılabiliyor.
🏗️ Orkestratör Ajan Ne Zaman Anlamlıdır?
- Hangi sub-agent'ların çalışacağı görevden göreve değişiyorsa.
- Araç seçimi, veri kaynağı seçimi veya iş akışı dallanması gerekiyorsa.
- Alt ajan cevapları arasında çelişki varsa ve yorumlayıcı uzlaştırma gerekiyorsa.
- Kalite kontrol, yeniden deneme, eksik bilgi tamamlama veya insan onayı gibi dinamik adımlar varsa.
Seviye 7'nin Mesajı: Orkestratör + sub-agent mimarileri vardır ve önemlidir; fakat her problemde gerekli değildir. Bu örnekte Python aggregator doğru, sade ve öğretici tercihtir.
📊 Tüm Seviyelerin Karşılaştırması
| Seviye | Yaklaşım | Eklenen Katman | Kazanım | Sınır / Ders |
|---|---|---|---|---|
| Lvl 0 | Persona / Kara Kutu | Basit sistem promptu | Hızlı başlangıç | Tutarsız, açıklanamaz, halüsinasyona açık |
| Lvl 1 | JSON + Açıklama | Yapılandırılmış çıktı | Cevap parse edilebilir | Hâlâ subjektif |
| Lvl 2 | Rubrik | Kriter bazlı değerlendirme | Daha objektif skor | Dış kanıt yok, hâlâ LLM yorumu |
| Lvl 3 | One-Shot / Few-Shot Kalibrasyon | Kriter bazlı örnekler | Tutarlı skorlar | İşlem tokenı artar |
| Lvl 4 | Workflow + Tools | ROUGE + hafif benzerlik metrikleri | Grounded, kanıta dayalı | Tool seçimini yazılımcı yapar |
| Lvl 5 | ReAct + Tool Calling | Otomatik tool çağrısı + execution loop | Gerçek agent davranışı | Yüksek maliyet, loop yönetimi gerekli |
| Lvl 6 | Sub-Agentlar + Python Aggregator | Generic sub-agent + deterministic toplama | Görev ayrıştırma, sorumluluk ayrımı | 5× LLM çağrısı, daha pahalı |
| Lvl 7 | Orkestratör Ajan Kararı | Mimari karar verme | İleri mimari anlayışı | Her yerde orkestratör gerekmez |
🎓 Son Mesaj: Prompt Mühendisliği, Sistem Mühendisliğine Dönüşür
Bir ajana yalnızca güçlü görünen bir prompt verip doğru çalışmasını beklemek yeterli değildir.
Gerçek Yapay Zeka Ajanı, yalnızca cevap üreten bir model değil; düşünme biçimi, araç kullanımı, muhakeme adımları ve veriye dayalı kanıtları birlikte yönetilen bir yazılım sistemidir.
Seviye 0'dan Seviye 7'ye ilerlerken aslında aynı fikri katman katman inşa ettik. Önce çıktıyı yapılandırdık, sonra değerlendirmeyi rubrikle parçaladık, ardından örneklerle kalibre ettik. Daha sonra metriklerle temellendirme ekledik ve ReAct fikrini gerçek araç yürütmeye bağladık. Sonunda orkestratör ajan gibi daha ileri mimarilerin var olduğunu, fakat bu örnekte ek LLM orchestrator kullanmamanın daha doğru mühendislik kararı olduğunu gördük.
Bir YZ Mühendisi olarak değerimiz burada ortaya çıkar: Modelden mucize beklemek yerine, modelin güçlü ve zayıf yönlerini anlayıp etrafına doğru mimariyi kurmak. İyi ajan tasarımı; prompt yazmak kadar, veriyle kanıtlama, araçlarla destekleme, muhakemeyi görünür kılma ve çıktıyı ölçülebilir hale getirme işidir.
📝 Eğitimde Kullanılan Test Metinleri
Bu iki metin özellikle seçilmiştir: kelime örtüşmesi düşük (düşük ROUGE), ancak anlamsal olarak benzer mesaj vermektedirler.
"Yapay zeka modellerinin eğitilmesi sürecinde, yüksek kaliteli veri setlerinin kullanılması kritik bir öneme sahiptir. Eğer veri seti hatalı, yanlı veya eksik bilgiler içeriyorsa, modelin üreteceği sonuçlar da kaçınılmaz olarak kusurlu ve güvenilmez olacaktır. Bu nedenle veri temizliği, model mimarisinin karmaşıklığından bile daha öncelikli bir adımdır."
"Makine öğrenmesi algoritmalarının başarısı, büyük ölçüde beslendikleri bilginin kalitesine bağlıdır. Kirli, önyargılı ya da noksan verilerle beslenen algoritmalar, doğal olarak yanlış ve itimat edilemez çıktılar verecektir. Dolayısıyla, verilerin filtrelenmesi ve düzenlenmesi, sistemin altyapısını kurmaktan çok daha elzem bir süreçtir."
🏷️ Etiketler & Hashtagler
#YapayZeka #AI #MachineLearning #DeepLearning #LLM #LargeLanguageModel #PromptMühendisliği #PromptEngineering #AgentDesign #ArtificialIntelligence #Ollama #ToolCalling #ReAct #SubAgent #Orchestrator #StructuredOutput #Rubric #FewShot #Grounding #Explainability #RAG #ROUGE #TokenMaliyeti #MuratKarakayaAkademi #YZMühendisliği #YZ #AIEngineering #AIAgents #TechEducation #YouTubeEğitim #Blogger