Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
AI Agent Nedir? Workflow, Agent ve "Burada Agent Gerekmez" Kararı
Agent, kontrol akışını modelin yönettiği sistemdir; workflow'da yolu kod çizer. Bookstore'dan üç senaryoyu (sipariş durumu, iade, kitap bul ve sepete ekle) aynı kodla qwen3:4b üzerinde koşturup model çağrısı, token ve süreyi ölçüyor, agent'ın bedelini ve "burada agent gerekmez" kararının kriterlerini çıkarıyoruz.
Agent Loop'unu Sıfırdan Yazmak: Plan, Tool Çağrısı, Gözlem ve Durma Koşulu
Bir agent loop'u framework'süz C# ile yazıyoruz: tool sonucunu ve hatasını modele geri vermek, adım/token/zaman bütçesi, tekrar eden çağrıyı engellemek ve her adımı trace'lemek. Gerçek koşuda token'ın turdan tura nasıl biriktiğini görüp aynı işi FunctionInvokingChatClient ve MAF ChatClientAgent ile yapıyor, neyin soyutlandığını karşılaştırıyoruz.
Agent'lar için Tool Tasarımı: İsim, Açıklama, Şema, Hata Mesajı ve Tool Sayısı
API'yi birebir saran on iki CRUD tool'u ile iki iş odaklı tool'u aynı isteklerle qwen3:4b üzerinde karşılaştırıyoruz: on üç kat token, bulunamayan kitap ve yanlış kitabı ekleyip "eklendi" diyen agent. Şemanın doğrulama olmadığı, insan okunur çıktı, boş sonucun nedenini söyleyen mesaj, isim çakışması ve yan etkili tool'lar.
Context Engineering: Agent'ın Context'ini Yönetmek, Compaction ve Memory
Context bir bütçedir ve dolduğunda hata vermeden kesilebilir: 4.096 token'la yüklenmiş qwen3:4b, uzayan bir oturumda baştaki bütçe cümlesini kaybedip rakam uyduruyor. MAF CompactionProvider ile eski tool çıktılarını sıkıştırmak, AIContextProvider ile oturumlar arası tercih memory'si ve iş devredilen sub-agent'tan yalnızca özet almak, gerçek token sayılarıyla.
Agent Workflow Pattern'leri: Prompt Chaining, Routing, Parallelization, Orchestrator-Workers ve Evaluator-Optimizer
Beş workflow pattern'ini Bookstore üzerinde koşturuyoruz: prompt chaining ve orchestrator-workers düz C# ile, routing, fan-out/fan-in ve writer-critic döngüsü MAF WorkflowBuilder ile. Küçük modelin "must read" ifadesini onayladığı, orchestrator'ın bütçeyi aştığı gerçek koşular, kod kapıları ve workflow'u AsAIAgent ile agent gibi dışarı açmak.
Multi-agent Sistemler: Handoff, Group Chat, Orchestration ve A2A
Birden fazla agent uzmanlaşma, izolasyon ve paralellik getirir ama token çarpanı ve koordinasyon hatasıyla ödenir. MAF'ın sequential, concurrent, handoff, group chat ve Magentic orkestrasyonlarını Bookstore'da koşturuyor; uzmanın tool çağırmadan geri devrettiği handoff'u ve bitmeyen group chat'i gerçek çıktılarla görüyor, başka servisteki agent'a A2A ile iş veriyoruz.
Human-in-the-loop: Tool Onayı, Checkpoint ve Uzun Süren Agent'lar
Yazma yapan tool'ları ApprovalRequiredAIFunction ile onaya bağlıyor, onay saatler sürdüğünde agent session'ını JSON'a yazıp başka bir process'te devam ediyoruz. Gerekçeli ret, onay cevabındaki argümanı değiştirme denemesi (approval-response binding) ve RequestPort ile workflow'u checkpoint'ten sürdürmek gerçek koşularla.
Model Context Protocol Nedir? Host, Client, Server ve 2026-07-28 Spec'i
MCP, tool ve veri kaynaklarını bir kez server olarak yazıp her AI uygulamasına standart bir client üzerinden bağlamanı sağlayan JSON-RPC tabanlı bir protokoldür. Host, client ve server rollerini, tools/resources/prompts primitive'lerini, stdio ve Streamable HTTP transport'larını ve el sıkışmasını kaldıran 2026-07-28 revizyonunu elle yazılmış JSON mesajlarıyla kabloda görüyoruz.
MCP Client Yazmak: McpClient, Tool'ları IChatClient ve Agent'a Bağlamak, Elicitation
C#'ta MCP client'ı McpClient.CreateAsync ile stdio ya da HTTP transport üzerinden kurarsın; ListToolsAsync'in döndürdüğü McpClientTool bir AIFunction olduğu için doğrudan IChatClient'a ve MAF agent'ına verilebilir. İki server'daki aynı adlı tool'ları önekle ayırıyor, tool tanımlarını parmak iziyle pinliyor, yerel qwen3:4b ile gerçek tool çağrılarını ve server'ın onay isteğini SDK'nın MRTR turlarıyla nasıl karşıladığını görüyoruz.
MCP ve Agent Güvenliği: Tool Poisoning, Confused Deputy, Least Privilege ve Sandboxing
MCP ve agent güvenliği modelin iyi davranmasına değil, modelden bağımsız kontrollere dayanır: güvenilmeyen tool tanımlarını pinlemek, token'ı yalnız kendi server'ın için kabul edip iletmemek, yıkıcı tool'ları ayrı scope'a ve onaya bağlamak, ağ çıkışını kısıtlamak. Spec'in Security Best Practices bölümünü, [Authorize] ile tool bazında yetkiyi, reddedilen denemeleri de yakalayan audit log'u ve ağsız container'da çalışan bir stdio server'ı gerçek çıktılarla görüyoruz.
Agent'ları Değerlendirmek: Trajectory, Tool Call Accuracy, Task Adherence ve Production Gözlemi
Bir agent'ı değerlendirmek için sonucu, izlediği yolu (trajectory) ve maliyeti ayrı ayrı ölçer, aynı senaryoyu fake tool'larla N kez koşturup başarı oranı raporlarsın; LLM-as-judge ancak kod kontrollerinden sonra ve gerekçesi okunarak kullanılır. Kendi trajectory kaydımızı, deterministik senaryoları, Microsoft.Extensions.AI.Evaluation'ın agent evaluator'larının yerel modellerle gerçek sonuçlarını ve OpenTelemetry span'lerinden regresyon setine giden yolu görüyoruz.