Agent dünyasında aynı tartışma dönüp duruyor. Agent gerçekten "düşünerek" mi ilerlemeli, yoksa her adım baştan kodla mı tanımlanmalı? Bir tarafta prompt'a fazla yük bindiren yapılar var. Diğer tarafta ise akışı öyle sertleştiren sistemler çıkıyor ki ortada artık agent'tan çok karar ağacı kalıyor.
Strands Agents bu gerilimin tam ortasına yerleşiyor.
İlk bakışta sade görünüyor. Hatta biraz fazla sade. Ana sayfada "Write code, not pipelines" diyerek kendini tanıtıyor ve erken dönem agent framework'lerinin modelleri dış orchestration mantığıyla sardığını, artık ise tool'ları fonksiyon olarak tanımlayıp agent loop'unu modele bırakmanın daha mantıklı olduğunu savunuyor.
Ama Strands'i ilginç yapan şey yalnızca bu slogan değil. Asıl mesele şu: Serbest tool-calling ile deterministik workflow arasında makul bir denge kurmaya çalışıyor. Bunu pazarlama cümlesiyle değil, dokümantasyondaki örneklerle gösteriyor.
Bu yazıda Strands Agents'in ne olduğunu, hangi tasarım kararlarıyla ayrıştığını, örneklerin bize ne anlattığını ve NNF gibi ürün ekiplerinin neden dikkat etmesi gerektiğini adım adım ele alacağım.
Strands Agents nedir?
En kısa tanımıyla Strands Agents, Python ve TypeScript için geliştirilmiş açık kaynak bir agent SDK'sı. Ana hedefi şu: geliştiricinin tool'ları ve iş kurallarını doğrudan kodla tanımlamasına izin vermek, agent loop'unu ise olabildiğince hafif tutmak.
Ana sayfada öne çıkan başlıklar da bunu destekliyor:
- Python ve TypeScript SDK
- herhangi bir modelle çalışma iddiası
- MCP desteği
- steering middleware
- multi-agent sistemler
- skills
- conversation memory
- observability
Strands'in temel vaadi, agent geliştirmeyi bir sürü XML benzeri workflow tanımı ya da karmaşık graph editörüyle başlatmamak. Onun yerine "tool'larını düzgün tanımla, system prompt'unu yaz, gerekirse middleware ile yön ver, karmaşıklık gerekiyorsa sonra ekle" diyor.
Bu yaklaşımın iyi yanı da var, riskli yanı da. Ama önce mimari felsefesine bakalım.
Strands Agents hangi fikri savunuyor?
Strands'in ana fikri şu cümlede toplanıyor: Modeli gereğinden fazla zincire vurma, ama tamamen başıboş da bırakma.
Bu aslında son dönemde iyi agent sistemlerinde gördüğümüz daha olgun bir tavır. Çünkü iki uç da problemli:
- Sadece prompt'a güvenince agent bazen doğru tool'u yanlış sırayla çağırıyor, bazen kuralları unutuyor, bazen hatasını fark etmiyor.
- Her adımı önceden kodlayınca da sistem kırılganlaşıyor. Yeni bir durum gelince esnekliği kaybediyor.
Strands bu yüzden iki şeyi aynı anda sunuyor:
- Fonksiyon tabanlı tool katmanı
- Gerektiğinde steering, graph, workflow ve agent-as-tool gibi daha kontrollü desenler
Ana sayfanın "No step definitions, no workflow graphs. Just code." çizgisi pazarlama açısından net. Ama dokümantasyondaki örnekleri okuyunca gerçek yaklaşımın biraz daha dengeli olduğunu görüyorsun. Evet, Strands seni ilk günden grafik çizdirmeye zorlamıyor. Ama karmaşıklık gerçekten gerekiyorsa code-defined workflow ve loop örnekleri zaten belgelerde mevcut.
Yani daha dürüst bir özet şu olur: Strands graph'lara karşı değil. Sadece her problemi graph ile çözerek başlama diyor.
Tool yazmayı neden özellikle kolaylaştırıyor?
Strands'in en güçlü taraflarından biri tool tanımını gereksiz yere şişirmemesi. Ana sayfada gösterilen temel kullanımda, bir Python fonksiyonunu @tool ile işaretliyorsun, docstring tool açıklamasına dönüşüyor ve agent bunu çağırabiliyor. Başlangıç noktası bu kadar basit.
Bu küçük gibi görünen karar, ekip içi benimseme açısından büyük fark yaratır. Çünkü birçok agent framework'ü ilk adımdan itibaren geliştiriciyi şema, registry, adapter ve ek tanım dosyalarıyla boğuyor.
Strands burada daha pratik davranıyor. "İşlevini yaz, açıklamasını düzgün yaz, tool hazır" yaklaşımı var. Bu da küçük ekiplere, ürün stüdyolarına ve hızlı prototip yapan takımlara ciddi hız kazandırır.
Weather Forecaster örneği bize ne söylüyor?
Bu örnekte agent'a esasen HTTP isteği yapabilen bir tool veriliyor. System prompt içinde ise açık ama aşırı kısıtlayıcı olmayan bir akış tarif ediliyor: önce belirli endpoint'ten lokasyon bilgisi al, sonra forecast URL'ine git, sonra sonucu kullanıcıya sade biçimde anlat.
Buradaki önemli ders şu: Strands, basit ve orta karmaşıklıktaki görevlerde orchestration'ı doğrudan modele bırakmaktan çekinmiyor.
Bu bence doğru karar. Çünkü hava durumu gibi lineer bir iş için ayrı workflow motoru kurmak anlamsız olurdu. Modelin tool sequencing becerisine güvenmek burada yeterli. Framework'ün olgunluğu bazen ne eklediğinde değil, neyi eklemediğinde anlaşılır.
File Operations örneği neden pratik?
Bu örnek iki farklı kullanım biçimini göstermesi açısından değerli. Birincisi, kullanıcı agent ile doğal dil üzerinden konuşuyor. İkincisi, geliştirici aynı tool'ları doğrudan programatik olarak çağırabiliyor.
Bu ayrım çoğu ekip için kritik. Çünkü aynı capability bazen chat arayüzünden, bazen backend içi bir akıştan tetikleniyor. Strands bu iki kullanım biçimini birbirine düşman gibi sunmuyor.
NNF gibi ürün ekipleri için bunun anlamı açık:
- aynı tool set'i panel içi chat deneyiminde kullanabilirsin,
- aynı tool set'i arka plandaki otomasyon akışlarında da kullanabilirsin.
Bu, sonradan "chat için ayrı servis, backend için ayrı helper" yazma ihtiyacını azaltır.
Memory Agent ve Knowledge Base Agent neden daha gerçekçi?
Strands'in bence en iyi örnekleri bunlar.
Sebebi şu: Bu örnekler pazarlama dilini biraz kenara bırakıp gerçek hayatta neyin işe yaradığını gösteriyor.
Özellikle Knowledge Base Agent örneği çok önemli bir cümle kuruyor. Sistem, agent'ın her seferinde kendi başına hangi tool'u seçeceğine güvenmek yerine, davranışı belirli noktalarda kodla açıkça tanımlanmış bir workflow üzerinden kuruyor. Yani önce intent sınıflandırması var, sonra store ya da retrieve yoluna dallanılıyor.
Bu çok kıymetli bir kabul. Çünkü bazı problem tiplerinde serbest tool-calling iyi sonuç vermez. Özellikle şu alanlarda:
- bilgi kaydetme / geri çağırma
- bellek yönetimi
- erişim sınırları
- hassas veri akışları
- compliance gerektiren işler
- deterministic branching gereken senaryolar
Strands bu örneklerle şunu söylüyor: Gerekirse modeli sınırlandır. Her kararı ona bırakmak zorunda değilsin.
Bu tavır, dokümantasyonu gerçekten kullanan ekipler için çok daha güven verici.
Multi-agent yaklaşımı ne kadar olgun?
Strands bu tarafta da gösteriş yerine daha taşınabilir desenler seçmiş görünüyor.
Temel fikir şu: bir agent'ı başka bir agent için tool gibi kullanabilirsin. Araştırmacı agent bilgi toplar, başka agent değerlendirir, başka agent metin üretir. Ya da orkestratör agent gelen talebi uygun uzmana yollar.
Bu yaklaşımın güzel tarafı hafif olması. Her şeyi dağıtık sistem gibi tasarlamıyor. İlk aşamada "agent-as-tool" deseniyle başlatıyor. Bence çoğu şirketin ihtiyaç duyduğu da tam bu. Çünkü çok sayıda ekip, daha işin başında ağır bir agent swarm mimarisi istemiyor. Daha basit, okunabilir ve bakım yapılabilir bir rol ayrımı istiyor.
Strands burada iyi bir denge kurmuş.
Graph with Loops örneği neden ciddiye alınmalı?
Sebebi, Strands'in yalnızca "bırak model çözsün" demediğini göstermesi. Bu örnekte yazar agent çıktı üretiyor, kalite kontrol katmanı bunu inceliyor, gerekiyorsa tekrar yazar agent'a dönülüyor. Üstelik kalite kontrol kısmı yalnızca LLM ile değil, deterministik mantıkla da tanımlanabiliyor.
İyi agent sistemleri tam burada olgunlaşıyor. Çünkü üretimde çoğu zaman iki şey gerekir:
- muhakeme için model,
- kontrol için deterministik kod
Biri olmadan diğeri eksik kalıyor. Strands'in bu örneği, framework'ün gerçek dünyaya göz kırptığını gösteriyor.
Structured Output desteği neden önemli?
Birçok ekip agent'ı uzun metin üreten bir katman gibi düşünüyor. Oysa kurumsal yazılımlarda ihtiyaç çoğu zaman metin değil, yapılandırılmış çıktı oluyor. Mesela:
- lead qualification sonucu
- teklif nesnesi
- CRM alanları
- belge analizi sonucu
- özet + skor + kategori yapısı
- tabloya yazılacak düzenli veri
Strands bu noktada typed output'u ilk sınıf özellik olarak sunuyor. Python tarafında veri modeliyle, TypeScript tarafında schema tabanlı biçimde output almak mümkün. Bu da framework'ü "demo agent" dünyasından çıkarıp iş uygulamalarına biraz daha yaklaştırıyor.
NNF gibi ekipler için bu çok önemli. Çünkü müşterinin istediği şey genelde güzel cümle değil; sistemine yazılabilecek temiz veri oluyor.
MCP desteği ne kadar işe yarar?
Bu örnek küçük ama stratejik. Çünkü Strands, tool ekosistemini yalnızca kendi iç decorator sistemine kapatmıyor. MCP üzerinden harici tool server'lara bağlanmayı birinci sınıf vatandaş gibi ele alıyor.
Bu uzun vadede daha sağlıklı bir yaklaşım. Özellikle çok sayıda iç araç, dış API ve provider ile çalışan ekipler için. Çünkü her entegrasyonu framework'e özel biçimde yazmak sürdürülebilir olmuyor. MCP burada ortak protokol katmanı gibi davranıyor.
Eğer bir ekip aynı agent runtime içinde farklı tool sunucularına bağlanmak istiyorsa, Strands'in bu tarafı ciddiye alınmalı.
Meta-tooling örneği neden heyecan verici ama riskli?
Açık söylemek gerekirse, Strands'in en "vay be" dedirten ama en dikkatli yaklaşılması gereken örneklerinden biri bu. Çünkü burada agent, yeni tool dosyaları yazıyor, yüklüyor ve kullanıyor. Yani yalnızca mevcut tool'ları çağırmıyor; tool üretim katmanına da dokunuyor.
Research ve demo açısından bakınca etkileyici. Üretim açısından bakınca ise birkaç alarm lambası yanıyor:
- güvenlik
- gözlemlenebilirlik
- bakım maliyeti
- determinism kaybı
- yanlış tool üretip sistemi bozma riski
Böyle bir yeteneği tamamen reddetmek doğru olmaz. Ama bunu doğrudan canlı sistemin ortasına koymak da akıllıca değil. Kontrollü sandbox, sıkı policy ve güçlü gözlem katmanı olmadan bu tarz dinamik tool üretimi hızla sorun çıkarabilir.
Multimodal örnek ne anlatıyor?
Burada dikkatimi çeken şey, Strands'in multimodal işi de tek bir "süper agent" ile çözmeye çalışmaması. Bir agent görsel üretiyor, diğeri bunları değerlendiriyor, çıktı zincirleme biçimde taşınıyor. Yani yine rol bazlı düşünce korunuyor.
Bu tercih bence mantıklı. Çünkü multimodal sistemlerde de üretim ve değerlendirme aynı role yüklendiğinde kalite hızla düşebiliyor. Strands burada ayrıştırmayı teşvik ediyor.
Steering middleware neden Strands'in en önemli farklarından biri olabilir?
Ana sayfadaki en karakteristik fikirlerden biri steering yaklaşımı. Strands bunu HTTP middleware analojisiyle anlatıyor: tool çağrısından önce araya gir, model yanıtından sonra kontrol et, gerekirse yönlendir, engelle ya da düzelt.
Bu yaklaşım çok değerli. Çünkü birçok ekip agent davranışını yalnızca prompt ile yönetmeye çalışıyor. Oysa prompt, kuralların en zayıf uygulama katmanlarından biri olabilir. Uzun prompt yazdıkça kuralların bir bölümü unutuluyor, bir bölümü esnetiliyor, bir bölümü yanlış yorumlanıyor.
Middleware yaklaşımı bu yüzden daha güvenilir. Özellikle şu senaryolarda:
- e-posta göndermeden önce kontrol
- hassas veri sızıntısını engelleme
- belirli tool'ların giriş/çıkış doğrulaması
- biçimsel hata kontrolü
- policy enforcement
- agent recovery
NNF'nin ürün çizgisinden bakınca da bu ciddi bir artı. Teklif agent'ı, satış agent'ı, RAG agent'ı ya da iç operasyon agent'ı geliştirirken, her kuralı system prompt'a gömmek yerine bir kısmını middleware ile uygulamak çok daha sürdürülebilir olur.
Strands Agents'in güçlü tarafları
Strands'i ilginç yapan birkaç şey var:
1. Öğrenmesi ve başlaması nispeten kolay
Tool tanımı hafif. İlk agent'ı ayağa kaldırmak zor değil. Bu, küçük ekipler için önemli.
2. "Sadece workflow" ya da "sadece prompt" kampına saplanmıyor
Gerekirse serbest agent bırakıyor, gerekirse explicit workflow kullanıyor, gerekirse graph loop gösteriyor.
3. MCP, structured output ve multi-agent gibi modern ihtiyaçları doğal biçimde kapsıyor
Bugün agent tabanlı ürün geliştiren çoğu ekip için bunlar yan özellik değil, çekirdek ihtiyaç.
4. Steering middleware ile gerçek üretim problemlerine dokunuyor
Bu tarafı, sırf güzel görünen demo'lardan daha değerli.
Strands Agents'in zayıf tarafları ve soru işaretleri
Elbette her şey kusursuz değil.
1. Pazarlama dili bazen fazla iddialı
"No workflow graphs. Just code." gibi ifadeler akılda kalıyor ama dokümantasyondaki örneklerin kendisi bile zaman zaman workflow, branching ve loop kullanımını savunuyor.
2. Bazı başarı iddiaları daha fazla bağlam gerektiriyor
Ana sayfadaki steering başarı oranı gibi örnekler ilginç, ama bunları genellenebilir gerçek kabul etmeden önce benchmark bağlamını görmek gerekir.
3. Büyük kurumsal akışlarda tek başına yeterli olmayabilir
Uzun süreli job orchestration, kuyruk yönetimi, approval süreçleri, audit zincirleri ve stateful business workflow'lar için Strands'in çevresine ek katmanlar gerekir.
Yani Strands'i tam bir "iş akışı platformu" gibi değil, daha doğru biçimde agent runtime SDK'sı gibi okumak lazım.
Sonuç
Strands Agents bence şu an agent ekosistemindeki daha aklı başında SDK'lardan biri. Bunu yalnızca sade API tasarımıyla değil, örneklerinin verdiği mesajla söylüyorum.
Framework şunu dayatmıyor:
- her şeyi prompt ile çöz
- her şeyi graph ile çöz
- her şeyi multi-agent yap
- her şeyi otomatik bırak
Bunun yerine daha olgun bir çizgi izliyor:
- basitse basit başla
- tool'ları iyi tanımla
- gerektiğinde middleware kullan
- bazı akışları kodla netleştir
- gerekiyorsa graph ve loop ekle
- structured output ile sistemi uygulamaya bağla
- dış dünyaya MCP ile açıl
Bu yüzden Strands'i yalnızca "bir agent framework daha" diye görmek haksızlık olur. Asıl değeri, agent tasarımında orta yolu ciddiye alması.



