DEV Community

Cover image for Strands Agents Nedir? AWS Açık Kaynak Model Odaklı Aracı SDK
Tobias Hoffmann
Tobias Hoffmann

Posted on • Originally published at apidog.com

Strands Agents Nedir? AWS Açık Kaynak Model Odaklı Aracı SDK

Dev bir if/else durum makinesini birbirine bağlayarak yapay zeka ajanı inşa ettiyseniz, bunun ne kadar hızlı kırılgan hale geldiğini bilirsiniz. Strands Agents farklı bir varsayımla başlar: planlamayı modele bırakın; siz yalnızca istemi, modeli ve araçları tanımlayın. AWS tarafından geliştirilen bu açık kaynak SDK, Mayıs 2025’te Apache Lisansı 2.0 altında yayınlandı ve Amazon Q Developer ile AWS Glue gibi Amazon içi üretim ajanlarında kullanılan yaklaşımları dışarıya açtı.

Apidog'u bugün deneyin

Strands Agents aslında nedir?

Strands Agents, birkaç satır kodla yapay zeka ajanları oluşturmak ve çalıştırmak için kullanılan bir SDK’dır. Bir ajanı çalıştırmak için temelde üç şey verirsiniz:

  1. Kullanılacak model
  2. Sistem istemi
  3. Modelin çağırabileceği araçlar

Model istemi okur, hangi aracı çağıracağına karar verir, aracı çalıştırır, sonucu değerlendirir ve görev tamamlanana kadar bu döngüyü sürdürür.

Strands Agents mimarisi

Strands Agents, Python ve TypeScript için kullanılabilir. “Strands” adı, ajanı oluşturan iki temel ipliğe gönderme yapar: model ve araçlar. AWS, SDK’yı dahili üretim senaryolarında kullandıktan sonra açık kaynak olarak yayınladı; bu yüzden tasarım yalnızca demo akışlarına değil, gerçek ajan ihtiyaçlarına odaklanır.

Önizleme lansmanından sonra 150 binden fazla PyPI indirmesini aştı ve 1.0 sürümüyle çoklu ajan primitifleri ile Ajan-Ajan (A2A) protokol desteği kazandı.

Benzer araçları araştırdıysanız yapı tanıdık gelecektir. Strands, LangGraph ve Google ADK ile aynı problem alanındadır. Farkı, kontrol akışını sizin önceden çizdiğiniz bir grafiğe değil, modelin muhakeme döngüsüne daha fazla bırakmasıdır.

Model odaklı yaklaşım vs elle kodlanmış orkestrasyon

Klasik ajan çerçevelerinde iş akışını genellikle önceden tanımlarsınız:

  • Düğümler
  • Kenarlar
  • Koşullar
  • Yönlendirme kuralları
  • Hata yolları

Bu yaklaşım deterministik akışlar için güçlüdür; ancak her yeni yetenek, grafiği güncellemek ve yeniden test etmek anlamına gelir.

Strands ters yönden ilerler. Modern modeller zaten planlama yapabilir, araç seçebilir, sonuçları değerlendirebilir ve bir sonraki adımı belirleyebilir. Bu nedenle Strands ile genellikle şu modeli izlersiniz:

Hedefi tanımla
Araçları sağla
Modelin adımları seçmesine izin ver
Enter fullscreen mode Exit fullscreen mode
Yaklaşım Tanımladığınız Kontrol akışı şurada yaşar Yeni bir yeteneğin maliyeti
Elle kodlanmış orkestrasyon Düğümler, kenarlar, koşullar, yönlendirme Graf kodunuz Grafiği düzenleyin, yolları yeniden test edin
Model odaklı (Strands) İstem + araç listesi Modelin muhakeme döngüsü Bir araç ekleyin, istemi güncelleyin

Bu bir takas içerir. Model odaklı ajanlar daha hızlı geliştirilir ve yeni araçlara daha kolay uyum sağlar. Buna karşılık, her çalıştırmada birebir aynı yolun izlenmesini beklememelisiniz.

Eğer akışın kesin olarak denetlenmesi gerekiyorsa Strands içinde kancalar, çoklu ajan desenleri ve daha yapılandırılmış araç sözleşmeleri kullanabilirsiniz. Yine de temel varsayım şudur: grafiği ancak gerçekten ihtiyaç duyduğunuzda ekleyin.

Minimal bir Strands ajanı

En küçük kullanışlı Strands ajanı, bir Agent nesnesi ve isteğe bağlı araçlardan oluşur.

from strands import Agent, tool

@tool
def word_count(text: str) -> int:
    """Metin bloğundaki kelimeleri sayar."""
    return len(text.split())

agent = Agent(
    system_prompt="Sen özlü bir yazı asistanısın.",
    tools=[word_count],
)

response = agent("Bu cümlede kaç kelime var?")
print(response)
Enter fullscreen mode Exit fullscreen mode

Burada önemli parçalar:

  • @tool, normal bir Python fonksiyonunu modelin çağırabileceği araca dönüştürür.
  • Fonksiyonun docstring’i araç açıklaması olarak kullanılır.
  • Tip ipuçları giriş şemasının oluşturulmasına yardımcı olur.
  • agent(...) çağrısı, model görevi tamamladığını düşünene kadar ajan döngüsünü çalıştırır.

Ayrı bir araç kayıt defteri yazmanız gerekmez. Bir fonksiyonu ekler, tiplerini belirtir ve ajanın araç listesine koyarsınız.

Daha gerçekçi bir araç örneği

Bir ajan genellikle yalnızca metin işlemez; HTTP API’leri, veritabanları veya dahili servislerle konuşur. Basit bir API çağrısını araç olarak sarmalayabilirsiniz:

from strands import Agent, tool
import requests

@tool
def get_user_status(user_id: str) -> dict:
    """Kullanıcının hesap durumunu döndürür."""
    response = requests.get(
        f"https://api.example.com/users/{user_id}/status",
        timeout=10,
    )
    response.raise_for_status()
    return response.json()

agent = Agent(
    system_prompt=(
        "Sen destek ekibine yardımcı olan bir ajansın. "
        "Kullanıcı durumunu kontrol etmek için mevcut araçları kullan."
    ),
    tools=[get_user_status],
)

result = agent("12345 numaralı kullanıcının hesabı aktif mi?")
print(result)
Enter fullscreen mode Exit fullscreen mode

Bu yapıda model, get_user_status aracını ne zaman çağıracağına kendisi karar verir. Sizin göreviniz aracın güvenilir, tipleri belirli ve test edilebilir olmasını sağlamaktır.

Araçlar nasıl tasarlanmalı?

Strands’te araç kalitesi, ajan kalitesini doğrudan etkiler. Araç yazarken şu kuralları uygulayın:

  1. Tek sorumluluk verin

    Bir araç tek bir işi yapmalı. Örneğin get_user_status, hem kullanıcıyı güncellememeli hem de ödeme geçmişini çekmemeli.

  2. Açık docstring yazın

    Model aracı docstring üzerinden anlamlandırır.

   @tool
   def refund_order(order_id: str, reason: str) -> dict:
       """Belirtilen sipariş için iade süreci başlatır. Yalnızca kullanıcı iade talep ettiyse çağrılmalıdır."""
       ...
Enter fullscreen mode Exit fullscreen mode
  1. Tip ipuçlarını kullanın

    str, int, dict, list gibi tipler modelin doğru giriş üretmesine yardımcı olur.

  2. Hataları kontrollü döndürün

    Araç hataları model için anlaşılır olmalı.

   @tool
   def get_invoice(invoice_id: str) -> dict:
       """Fatura detaylarını getirir."""
       try:
           response = requests.get(
               f"https://api.example.com/invoices/{invoice_id}",
               timeout=10,
           )
           response.raise_for_status()
           return response.json()
       except requests.HTTPError as exc:
           return {
               "error": "invoice_lookup_failed",
               "message": str(exc),
           }
Enter fullscreen mode Exit fullscreen mode
  1. Yan etkili araçları dikkatli adlandırın delete_user, charge_card, send_email gibi araçlar net olmalı ve sistem isteminde kullanım koşulları belirtilmelidir.

Model sağlayıcıları

Strands varsayılan olarak Amazon Bedrock ile çalışır. SDK, kutudan çıktığı haliyle us-west-2 bölgesinde bir Claude Sonnet modeli kullanacak şekilde yapılandırılmıştır; ancak kesin varsayılan model kimliği SDK sürümlerine göre değişebileceği için bunu sabit varsaymak yerine kullandığınız sürümün dokümantasyonunu kontrol etmelisiniz.

Desteklenen model seçenekleri şunları kapsar:

  • Araç kullanımını ve ajan akışını destekleyen Amazon Bedrock modelleri
  • Anthropic API üzerinden Claude modelleri
  • Llama API üzerinden Llama modelleri
  • Yerel geliştirme için Ollama
  • LiteLLM üzerinden OpenAI gibi diğer sağlayıcılar

Pratikte sağlayıcı değiştirmek, ajan kodunu baştan yazmak anlamına gelmez. Model nesnesini değiştirirsiniz; araçlarınız ve sistem isteminiz aynı kalır. Bu, yerelde Ollama ile prototip geliştirip üretimde Bedrock’a geçmeyi mümkün kılar.

Çoklu ajan ve MCP desteği

Tek ajan birçok iş için yeterlidir; ancak gerçek sistemlerde görevleri ayırmak daha sürdürülebilir olabilir. Örneğin:

  • Bir ajan kullanıcı isteğini sınıflandırır.
  • Bir ajan ürün bilgisi toplar.
  • Bir ajan yanıtı son kullanıcıya uygun hale getirir.
  • Bir ajan güvenlik veya uyumluluk kontrolü yapar.

Strands 1.0, çoklu ajan uygulamaları için primitifler ekledi. Bunlardan biri “Ajan-Araç Olarak” desenidir. Bu desende bir ajan, başka bir ajanı normal bir araç çağırır gibi çağırabilir. Ayrıca birlikte çalışan ajan grupları için Swarm tarzı koordinasyon ve A2A protokol desteği de bulunur. A2A desteği sayesinde Strands ajanları, farklı çerçevelerle oluşturulmuş ajanlarla iletişim kurabilir.

MCP tarafında ise Strands, Model Bağlam Protokolü desteği sunar. MCP, modelleri araçlara ve veri kaynaklarına bağlamak için açık bir standarttır. Strands ile yayınlanmış MCP sunucularına bağlanabilir ve bu sunucuların araçlarını doğrudan ajana verebilirsiniz.

Bu özellikle şu durumlarda kullanışlıdır:

  • Zaten MCP sunucularınız varsa
  • Mevcut entegrasyonları yeniden yazmadan ajana açmak istiyorsanız
  • Dosya sistemi, veritabanı, API veya SaaS araçlarını standart bir arayüzle kullanmak istiyorsanız

Ancak MCP sunucularını ajana bağladığınızda, ajanın doğruluğu bu sunucuların davranışına da bağlı olur. Bu nedenle temel uç noktaların test edilmesi kritik hale gelir.

Strands ajanını dağıtma

Strands, yerelden üretime geçişi çerçeve değiştirmeden yapacak şekilde tasarlanmıştır. Ajan normal bir Python veya TypeScript uygulaması gibi paketlenebilir.

Yaygın dağıtım hedefleri:

  • Yönetilen ajan çalışma zamanı için Amazon Bedrock AgentCore
  • Olay odaklı ve kısa ömürlü ajanlar için AWS Lambda
  • Kapsayıcılı, uzun süreli servisler için AWS Fargate veya Amazon EKS
  • Bir container çalıştırabildiğiniz herhangi bir ortamda Docker

Basit bir Docker paketleme akışı şu şekilde olabilir:

FROM python:3.12-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["python", "main.py"]
Enter fullscreen mode Exit fullscreen mode

Örnek requirements.txt:

strands-agents
requests
Enter fullscreen mode Exit fullscreen mode

Üretime çıkmadan önce şu kontrolleri ekleyin:

  • Model sağlayıcı kimlik bilgileri environment variable üzerinden geliyor mu?
  • Araç API’leri için timeout tanımlandı mı?
  • Yan etkili araçlar için yetkilendirme kontrolü var mı?
  • Hatalar loglanıyor mu?
  • Ajanın hangi aracı ne zaman çağırdığı izlenebiliyor mu?

AWS ayrıca gözlemlenebilirlik kancalarını belgelemektedir. Bu kancalar, ajan yayına alındığında modelin hangi kararı verdiğini ve hangi araçları çağırdığını takip etmenize yardımcı olur.

Apidog nerede devreye girer?

Strands ajanı oluşturur; ancak ajanın çağırdığı API’leri oluşturmaz. Bu ayrımı net yapmak önemlidir.

Bir Strands ajanı genellikle iki tür HTTP bağımlılığına sahiptir:

  1. Model sağlayıcısının LLM API’si
  2. @tool fonksiyonlarının veya MCP sunucularının arkasındaki REST/API uç noktaları

Bu uç noktalar hatalı davranırsa ajan “model kötü karar verdi” gibi görünen ama aslında API kaynaklı olan hatalar üretir.

Apidog ve ajan API testleri

Apidog, ajanın kullanacağı temel API’leri önceden test etmek, doğrulamak ve taklit etmek için kullanılabilir.

Pratik kullanım alanları:

  • Geliştirme sırasında model veya araç uç noktasını mock’layın; her çalıştırmada token harcamayın veya rate limit’e takılmayın. APIDog ile bir yapay zeka ajanı test koşum takımı oluşturma makalesi bu deseni gösterir.
  • Araç yanıt şemalarını doğrulayın; hatalı payload üretimde değil testte yakalansın. Alanları, tipleri ve durum kodlarını doğrulamak için API doğrulamaları kılavuzuna bakabilirsiniz.
  • Ajanınızın ele alması gereken hata durumlarını simüle eden bir mock API kurun.
  • Ortam bazlı API anahtarlarını yönetin; geliştirme, staging ve production ajanları kimlik bilgilerini koda gömmeden doğru arka uçlara bağlansın.

Örneğin bir araç API’si şu yanıtı döndürüyorsa:

{
  "user_id": "12345",
  "status": "active",
  "plan": "pro"
}
Enter fullscreen mode Exit fullscreen mode

Apidog tarafında bu şemayı doğrulayabilir, sonra Strands aracınızın bu yapıya göre çalıştığından emin olabilirsiniz:

@tool
def get_user_status(user_id: str) -> dict:
    """Kullanıcının hesap durumunu getirir."""
    response = requests.get(
        f"{BASE_URL}/users/{user_id}/status",
        headers={"Authorization": f"Bearer {API_TOKEN}"},
        timeout=10,
    )
    response.raise_for_status()
    return response.json()
Enter fullscreen mode Exit fullscreen mode

Apidog bir ajan çerçevesi değildir ve Strands yerine orkestrasyon yapmaz. Strands ajanın muhakeme katmanıdır. Apidog ise ajanın çağırdığı API’leri tasarlamak, mock’lamak ve test etmek için çalışma tezgahıdır. Apidog'u indirebilir ve birkaç dakika içinde araç uç noktalarınız için mock servisler kurabilirsiniz.

Strands Agents ne zaman kullanılır?

Strands’i şu durumlarda değerlendirin:

  • Hızlı prototip çıkarmak istiyorsanız
  • Planlama yükünü modele bırakmak uygunsa
  • AWS ve özellikle Bedrock ekosistemindeyseniz
  • Önce tek ajanla başlayıp sonra çoklu ajan yapısına geçmek istiyorsanız
  • MCP araçlarını özel entegrasyon kodu yazmadan kullanmak istiyorsanız
  • Araç ekleyerek yetenek genişletmek istiyorsanız

Daha zayıf olduğu durumlar:

  • Her dalı önceden tanımlanmış, deterministik bir akış gerekiyorsa
  • Uyumluluk nedeniyle her karar yolunun açıkça modellenmesi gerekiyorsa
  • Ajanın her çalıştırmada aynı sırayla aynı adımları izlemesi gerekiyorsa

Bu senaryolarda grafik odaklı bir çerçeve daha doğrudan uyabilir. Strands ile yapılandırılmış akışlar kurabilirsiniz; ancak varsayılan felsefesi model odaklıdır.

Uygulama kontrol listesi

Bir Strands ajanı üretime yaklaştırmadan önce şu listeyi kullanın:

  • [ ] Sistem istemi kısa, açık ve görev odaklı mı?
  • [ ] Her araç tek bir sorumluluğa mı sahip?
  • [ ] Araç docstring’leri modelin anlayacağı kadar açıklayıcı mı?
  • [ ] Tip ipuçları eksiksiz mi?
  • [ ] HTTP araçlarında timeout var mı?
  • [ ] Hatalar modele anlaşılır şekilde döndürülüyor mu?
  • [ ] Yan etkili araçlar için koruma ve yetkilendirme var mı?
  • [ ] API yanıtları Apidog gibi bir araçla doğrulanıyor mu?
  • [ ] Mock API’ler ile başarısızlık senaryoları test edildi mi?
  • [ ] Geliştirme, staging ve production ortamları ayrıldı mı?
  • [ ] Model sağlayıcı ve API anahtarları environment variable üzerinden yönetiliyor mu?
  • [ ] Ajanın araç çağrıları loglanıyor mu?

Sıkça sorulan sorular

Strands Agents ücretsiz ve açık kaynak mı?

Evet. Strands Agents, Apache Lisansı 2.0 altında açık kaynaktır ve kaynak kodu GitHub’da bulunur. SDK için lisans ücreti yoktur. Model kullanımı ve dağıttığınız bulut kaynakları için ödeme yaparsınız; örneğin Bedrock çıkarımı veya Lambda yürütmesi gibi. Çerçevenin kendisi ek lisans maliyeti getirmez.

Strands ile Amazon Bedrock kullanmak zorunda mıyım?

Hayır. Bedrock varsayılan sağlayıcıdır; ancak Strands, Anthropic API’sini, Llama API’sini, yerel çalışma için Ollama’yı ve LiteLLM üzerinden diğer sağlayıcıları destekler. Model nesnesini değiştirip araçlarınızı ve ajan mantığınızı koruyabilirsiniz.

Strands ile grafik tabanlı bir çerçeve arasındaki fark nedir?

Strands model odaklıdır. Bir istem ve araçlar sağlarsınız; model adımları seçer. Grafik tabanlı çerçevelerde ise kontrol akışını düğümler ve kenarlar olarak siz tanımlarsınız. Strands daha hızlı geliştirme ve adaptasyon sağlar. Grafik tabanlı yaklaşımlar daha sıkı ve öngörülebilir yürütme sunar.

Strands ajanımın bağımlı olduğu API’leri nasıl test ederim?

Ajanı oluşturmadan önce ve geliştirirken API’leri ayrı test edin. LLM ve araç uç noktalarını mock’layın, yanıt şemalarını doğrulayın ve bu kontrolleri CI sürecine ekleyin. Apidog gibi bir araç mock ve doğrulama tarafını yönetebilir. Apidog ile ChatGPT API'sini test etme kılavuzu; kimlik doğrulama, akış ve ajan arka uçlarına benzer araç çağrısı testlerini kapsar.

Sonuç

Strands Agents, ajan geliştirmeyi sadeleştirir: modeli, sistem istemini ve araçları tanımlarsınız; model döngüyü çalıştırır. Tek ajandan çoklu ajan mimarisine ölçeklenebilir, MCP ve A2A desteği sunar ve AWS yığını içinde yeniden yazma gerektirmeden dağıtılabilir.

Ancak ajan yalnızca bağlı olduğu API’ler kadar güvenilirdir. Strands muhakeme katmanını sağlar; sizin sorumluluğunuz araçların, MCP sunucularının ve REST uç noktalarının sağlam olduğundan emin olmaktır. Apidog bu noktada devreye girer: ajanın çağırdığı uç noktaları mock’layarak, doğrulayarak ve test ederek hataları üretim yerine geliştirme aşamasında yakalamanıza yardımcı olur.

Top comments (0)