AWS in Switzerland and Austria (Alps)

Effiziente KI-Agenten-Entwicklung mit AWS Strands Agents und Amazon Q Developer

Dieser Blog bietet eine kurze Einführung in das Open-Source-SDK Strands Agents von Amazon, das die Entwicklung von Agentic AI erheblich vereinfacht. Entwickler können dabei entweder Amazon Bedrock, alternative LLM’s oder sogar lokal gehostete Modelle, verwenden. Im folgenden Beispiel wird eine Agentic AI-Anwendung mit Hilfe des KI-gestützten Assistenten für Softwareentwickler (Amazon Q Developer) erstellt. Dabei erleben wir GenAI aus zwei Perspektiven: einerseits zur Code-Generierung und andererseits zur Nutzung des entwickelten KI-Agenten.

Was ist das Strands Agents SDK?

Strands Agents ist ein Open-Source-SDK von AWS, das die Entwicklung von KI-Agenten deutlich vereinfacht und beschleunigt. Es verfolgt einen modellgetriebenen Ansatz, bei dem ein Large Language Model (LLM) wie Claude die Verarbeitung der Anfrage orchestriert. Im Gegensatz zu klassischen, workflow-basierten Frameworks, bei denen Entwickler komplexe Schritt-für-Schritt-Prozesse definieren müssen, genügen bei Strands Agents bereits ein kurzer Prompt (Aufgabenbeschreibung) und eine Liste von Werkzeugen (Tools), um einen Agenten zu erstellen. Das LLM plant eigenständig die nächsten Schritte (Reasoning), ruft bei Bedarf Tools auf und verarbeitet deren Ergebnisse weiter, bis die Aufgabe gelöst ist. Strands Agents entstand aus dem internen Bedarf bei der Entwicklung von Amazon Q Developer. Früher waren komplexe Bibliotheken nötig, um AI-Agenten zu entwickeln, und der Weg von Prototyp zur Produktion dauerte mehrere Monate. Mit Strands lassen sich nun Prototypen schnell entwickeln und die Zeit bis zur Produktionsreife hat sich auf Tage und Wochen verkürzt. Mehrere AWS-Teams nutzen Strands bereits produktiv, darunter Amazon Q Developer, AWS Glue und VPC Reachability Analyzer.

Ein Agent interagiert mit seinem Modell und seinen Tools in einer Schleife (Agentic Loop), bis er die durch den Prompt vorgegebene Aufgabe abgeschlossen hat. Diese Schleife bildet den Kern von Strands’ Fähigkeiten. Dabei wird die volle Leistungsfähigkeit moderner LLMs und ihre natürlichen Fähigkeiten zu Schlussfolgern, Planen und zur Tool-Auswahl optimal ausgenutzt.

Setup und Voraussetzungen

Bevor Sie mit der Entwicklung von Strands Agents beginnen können, müssen einige grundlegende AWS-Komponenten korrekt konfiguriert sein. Diese Basis-Infrastruktur ist essentiell für die Arbeit mit dem Framework und Amazon Bedrock.
AWS-Grundkonfiguration: Zunächst benötigen Sie einen AWS Account mit einer funktionierenden AWS CLI-Installation. Das AWS CLI sollte bereits mit gültigen IAM-Credentials konfiguriert sein, die Ihnen Zugriff auf Ihre AWS-Ressourcen ermöglichen. Falls Sie das AWS CLI noch nicht installiert haben, finden Sie die Anleitung in der offiziellen AWS-Dokumentation.
IAM-Berechtigungen für Amazon Bedrock: Für die Nutzung von Strands Agents mit Amazon Bedrock benötigen Sie eine IAM-Rolle oder einen IAM-Benutzer mit entsprechenden Berechtigungen. Die minimal erforderliche Berechtigung ist bedrock-runtime:InvokeModel und allenfalls bedrock-runtime:InvokeModelWithResponseStream, die es Ihnen ermöglicht, Large Language Models aufzurufen. Je nach Ihren spezifischen Anforderungen können weitere Berechtigungen wie bedrock:InvokeAgent, bedrock:GetAgent und bedrock:UpdateAgent benötigt werden.

Hier ein Beispiel für eine IAM-Policy:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "bedrock-runtime:InvokeModel",
                "bedrock-runtime:InvokeModelWithResponseStream"
            ],
            "Resource": "*"
        }
    ]
}

Modell-Aktivierung in Amazon Bedrock: Ein nötiger Schritt ist die Aktivierung der gewünschten LLM-Modelle in Amazon Bedrock. Diese Aktivierung muss explizit für jede AWS-Region durchgeführt werden, in der Sie Strands nutzen möchten. Navigieren Sie dazu in der AWS-Konsole zu Amazon Bedrock und wählen Sie im linken Menü “Modellzugriff” aus.

Installation von Amazon Q for Developer CLI: Das folgende Beispiel verwendet Amazon Q Developer CLI, das speziell für die Kommandozeilen-basierte Entwicklung optimiert ist. Alternativ können Sie auch das Amazon Q Developer Plugin für Ihre bevorzugte Entwicklungsumgebung (wie VS Code oder JetBrains IDEs) verwenden. Die detaillierte Installationsanleitung für Amazon Q Developer CLI finden Sie in der offiziellen AWS-Dokumentation.

Praktisches Beispiel: Schweizer Post API

Im folgenden Beispiel implementieren wir anhand einer API-Spezifikation Tools und einen Agenten. Dazu verwenden wir eine API der Schweizer Post, um dem Agenten Tools zur Abfrage von Preisinformationen und Versandmöglichkeiten zur Verfügung zu stellen. Details dazu und Informationen zur Erstellung eines API-Keys finden Sie im Developer Portal der Post: https://developer.apis.post.ch.

Amazon Q Developer CLI Setup

Um mit Strands Agents zu beginnen, eignet sich der KI-Coding-Assisstent Amazon Q for Developer hervorragend. Im Beispiel wurde Amazon Q Developer CLI verwendet. Eine Einführung finden Sie im Blog “A lightning fast, new agentic coding experience within the Amazon Q Developer CLI“.

Amazon Q Developer unterstützt MCP (Model Context Protocol), einen universellen, offenen Standard für die Integration externer Datenquellen und Tools in KI-Modelle. Für Strands Agents steht ein spezieller MCP-Server zur Verfügung, der die aktuelle Strands-Dokumentation bereitstellt. Dadurch kann Amazon Q Developer auf Informationen zugreifen, die dem zugrundeliegenden Modell noch nicht bekannt sind. Zunächst müssen Sie dazu den uv Package Manager installieren, einen schnellen Python-Paketmanager, der für den Strands Agent MCP Server benötigt wird. Die Installationsanleitung finden Sie auf der offiziellen uv-Website. Danach binden Sie den Strands Agent MCP-Server über die untenstehende Konfiguration ein. Diese ermöglicht Amazon Q Developer den direkten Zugriff auf die Strands-Dokumentation während der Code-Generierung.

In ~/.aws/amazonq/mcp.json:

{
  "mcpServers": {
    "strands": {
      "command": "uvx",
      "args": ["strands-agents-mcp-server"]
    }
  }
}

Danach kann Amazon Q Developer CLI mit q chat aufgerufen werden. Mit /tools können die vorhandenen aufgelistet werden (z.B. strands documentation)

Agent-Entwicklung mit Amazon Q Developer

Nach der Konfiguration rufen wir Amazon Q Developer CLI mit qchat auf und geben folgenden Prompt ein. Wir kopieren dazu auch die OpenAPI Spezifikation der gewünschten API in den Prompt:

Erstelle ein einfaches Agentic AI Script mit dem Strands Agents SDK unter verwendung von folgendem API: openapi: 3.0.0
info:
  title: VSC product API
  description: Versand Calculator product API
  version: 1.0.0
servers:
- url: https://vsc.apis.post.ch/product/v1/
  description: Public on-premise API gateway
security:
- ApiKeyAuth: []
tags:
- name: country
  description: Everything for country selection
paths:
  /countries/:
    get:
... (API Spezifikation abgeschnitten)

Amazon Q Developer beginnt dann zu planen, nutzt Tools vom MCP-Server und startet die Implementierung des Agents inkl. der Tools basierend auf der API-Spezifizierung.

I'll help you create a simple agentic AI script using the Strands Agents framework that interacts with the VSC
product API. First, let's explore the Strands Agents documentation to understand how to set it up.


🛠️ Using tool: quickstart from mcp server strands
⋮
● Running quickstart with the param:
⋮ {
⋮ "arguments": {},
⋮ "name": "quickstart"
⋮ }
Allow this action? Use 't' to trust (always allow) this tool for the session. [y/n/t]:
> t
⋮
● Completed in 0.31s

🛠️ Using tool: model_providers from mcp server strands
⋮
● Running model_providers with the param:
...
Now I'll create a simple agentic AI script using Strands Agents that interacts with the VSC product API. Let's 
create a script that can:

1. Fetch countries from the API
2. Get product information for a specific country, format, and weight
3. Display available formats for international shipments


🛠️  Using tool: fs_write
 ⋮ 
 ● Path: /Users/schnidrc/vsc_agent.py

+      1: """
+      2: VSC Product API Agent
+      3: 
+      4: This script creates an AI agent that can interact with the VSC (Versand Calculator) product API
+      5: to retrieve information about countries, products, and shipping formats.
+      6: """
+      7: 
+      8: import os
+      9: from strands import Agent, tool
+     10: import requests
+     11: import json
+     12: from typing import Optional, List, Dict, Any, Union
+     13: 
+     14: # API Base URL
+     15: BASE_URL = "https://vsc.apis.post.ch/product/v1"
... (Skript abgeschnitten)

Beispiel-Interaktion

Das produzierte Script kann danach aufgerufen werden. Als, erstes wird der API-Key für das Post API nachgefragt.

(.venv) schnidrc@b0be834b1932 strands % python vsc_agent.py
VSC API Agent initialized. Type 'exit' to quit.
First, set your API key using: set my API key to YOUR_API_KEY

You: set my api key to 12345678-xxxx-xxxx-xxxx-abcdefghijkl
I'll set your API key for the VSC API.
Tool #1: set_api_key
2025-06-10 23:00:55,939 - vsc_agent - INFO - API key has been set
Great! Your API key has been set successfully. You're now authenticated with the VSC API and can use all available functions to retrieve information about countries, shipping products, and formats.

What would you like to do next? For example, you can:
Get a list of all countries
Check information about a specific country
View available shipping formats
Get product information for specific shipping parameters

You: welche möglichkeit habe ich einen A4 brief so schnell wie möglich in der schweiz zu versenden?
Um Ihre Frage zu beantworten, werde ich nachsehen, welche Möglichkeiten es gibt, einen A4-Brief (was dem Format B4 entspricht) so schnell wie möglich innerhalb der Schweiz zu versenden. Dazu schaue ich mir zunächst die verfügbaren Formate für Inlandssendungen (nationale Sendungen) an.
Tool #2: get_national_formats
2025-06-10 23:01:23,797 - vsc_agent - INFO - Making API request to https://vsc.apis.post.ch/product/v1/national/formats
2025-06-10 23:01:23,895 - vsc_agent - INFO - Response status code: 200
Jetzt suche ich nach den verfügbaren Produkten für einen B4-Brief innerhalb der Schweiz. Ich nehme an, dass er unter 500g wiegt, was für einen normalen A4-Brief üblich ist.
Tool #3: get_products
2025-06-10 23:01:27,960 - vsc_agent - INFO - Making API request to https://vsc.apis.post.ch/product/v1/products with params: {'isoCode': 'CH', 'format': 'B4', 'weight': 500}
2025-06-10 23:01:28,081 - vsc_agent - INFO - Response status code: 200
Basierend auf den Ergebnissen kann ich Ihnen die Möglichkeiten für den schnellstmöglichen Versand eines A4-Briefs (Format B4) innerhalb der Schweiz zusammenfassen:

Schnellste Versandoptionen (nach Zustellzeit geordnet):
SameDay Nachmittag / SameDay Abend (noch am selben Tag):
Preis: CHF 64.00
Zustellung: Am selben Tag (0 Transporttage)
Swiss-Express «Mond» (bis 9:00 Uhr am nächsten Tag):
Preis: CHF 17.00
Zustellung: Am nächsten Werktag bis 9:00 Uhr morgens
PostPac Priority (nächster Tag):
Preis: CHF 10.50
Zustellung: Am nächsten Werktag
Annahmeschluss: 12:00 Uhr (bei ausgewählten Filialen bis 16:00 Uhr)
Einschreiben (nächster Tag + Nachweis):
"Einschreiben R": CHF 6.80
"Einschreiben Prepaid": CHF 5.80
Zustellung: Am nächsten Werktag mit Zustellnachweis und Unterschrift
Haftung bei Verlust bis CHF 500.-
A-Post Plus (nächster Tag + Tracking):
Preis: CHF 5.70
Zustellung: Am nächsten Werktag
Mit Sendungsverfolgung und Haftung bis CHF 100.-
A-Post Grossbrief (nächster Tag):
Preis: CHF 2.50
Zustellung: Am nächsten Werktag
Langsamere Optionen:
PostPac Economy: CHF 8.50 (2 Transporttage)
B-Post Grossbrief: CHF 2.00 (2-3 Transporttage)
Empfehlung:
Wenn es absolut so schnell wie möglich sein soll und Kosten keine Rolle spielen, wählen Sie SameDay (CHF 64.00).

Wenn es am nächsten Morgen früh ankommen soll, ist Swiss-Express «Mond» (CHF 17.00) die beste Option.

Erweiterte Funktionen mit Strands

Strands hat viele weitere Funktionen, so können z.B. Guardrails und Knowledge Bases von Amazon Bedrock genutzt werden. Zusätzlich können Details zum LLM wie Region oder Modell angegeben werden. Umfangreiche Möglichkeiten rund um Throttling und Rate Limiting sind standardmässig eingebaut. Hier die entsprechenden Paramater zum Tuning.

# Create a BedrockModel instance with Claude 3.5 in Europe/Zurich and throttling
bedrock_model = BedrockModel(
    model_id=anthropic.claude-3-5-sonnet-20240620-v1:0,
    region_name=eu-central-2,
    temperature=0.7,  # Default temperature, adjust as needed
    max_retries=10,  # Increase max retries
    backoff_factor=3.0,  # More aggressive exponential backoff
    retry_delay=5.0,  # Longer initial delay
    retry_jitter=True,  # Add randomness to retry timing
    # Add rate limiting to avoid throttling
    rate_limit_config={
        "tokens_per_minute": 100000,  # Adjust based on your quota
        "max_parallel_requests": 1
    }
)

agent = Agent(model=bedrock_model)

Weitere Informationen zur Konfiguration des Modelles können in der Model Provider Dokumentation gefunden werden.

Produktions-Deployment von Strands Agents

Strands wurde für den Produktionseinsatz entwickelt und bietet flexible Deployment-Optionen für verschiedene Anwendungsszenarien. Von Haus aus, unterstützt das Framework vier Möglichkeiten zum Deployment des Agents auf AWS:

AWS Lambda eignet sich perfekt für kurze Agent-Interaktionen und Batch-Verarbeitung. Diese Serverless-Option minimiert Infrastruktur-Management und ist kosteneffizient für sporadische Nutzung. Beispiel: Ein Agent, der täglich Berichte generiert oder auf Webhook-Events reagiert.
AWS Fargate bietet containerisierte Deployments mit Streaming-Support. Ideal für interaktive Anwendungen mit Echtzeit-Anforderungen oder hoher Gleichzeitigkeit. Beispiel: Chatbots oder Customer-Service-Agenten, die kontinuierlich verfügbar sein müssen.
Amazon EKS/ECS ermöglicht ebenfalls containerisierte Bereitstellung mit erweiterten Kubernetes-Features. Geeignet für komplexe Multi-Agent-Systeme oder wenn Sie bereits Kubernetes-Infrastruktur nutzen. Beispiel: Orchestrierung mehrerer spezialisierter Agenten in einem Microservice-System.
Amazon EC2 bietet maximale Kontrolle und Flexibilität für High-Volume-Anwendungen oder spezielle Infrastruktur-Anforderungen. Beispiel: Agenten mit besonderen Hardware-Anforderungen oder bei Bedarf nach vollständiger Umgebungskontrolle.
Die Praxistauglichkeit zeigt sich daran, dass AWS-Teams wie Amazon Q Developer, AWS Glue und VPC Reachability Analyzer Strands bereits produktiv einsetzen.
Detaillierte Deployment-Anleitungen für jeden AWS-Service finden Sie in der Strands-Dokumentation.

Zusammenfassung

AWS hat Strands entwickelt, um die Integration von Agentic AI in eigene Produkte zu vereinfachen und die Implementierungszeit für neue Agenten drastisch zu reduzieren. Als Open-Source-Lösung ermöglicht Strands das Erstellen und Ausführen von KI-Agenten mit nur wenigen Codezeilen. Das Framework skaliert von einfachen bis zu komplexen Anwendungsfällen und von der lokalen Entwicklung bis zum Produktionseinsatz.

Weitere Ressourcen:
Blog über Strands Agents: https://aws.amazon.com/blogs/opensource/introducing-strands-agents-an-open-source-ai-agents-sdk/
Dokumentation: https://strandsagents.com/
Workshop: https://workshops.aws/categories/Strands%20Agents