Erste Schritte ohne AgentCore CLI
Sie können einen AgentCore Runtime-Agent ohne die AgentCore CLI erstellen. Stattdessen können Sie eine Kombination von Befehlszeilentools verwenden, um Ihren Agenten zu konfigurieren und für eine AgentCore Runtime bereitzustellen.
Dieses Tutorial zeigt, wie Sie einen benutzerdefinierten Agenten bereitstellen, ohne die AgentCore CLI zu verwenden. Ein benutzerdefinierter Agent ist ein Agent, der ohne Verwendung des AgentCore Python-SDK erstellt wurde. In diesem Tutorial wird der benutzerdefinierte Agent mit FastAPI und Docker erstellt. Der benutzerdefinierte Agent folgt den AgentCore Runtime-Anforderungen, was bedeutet, dass der Agent /invocations POST- und /ping GET-Endpunkte verfügbar machen und in einem Docker-Container verpackt sein muss. Amazon Bedrock AgentCore benötigt eine ARM64-Architektur für alle bereitgestellten Agenten.
Anmerkung
Sie können diesen Ansatz auch für Agenten verwenden, die Sie mit dem AgentCore Python-SDK erstellen.
Schnellstart-Setup
Aktivieren Sie Observability für Ihren Agenten
Amazon Bedrock AgentCore Observability hilft Ihnen dabei, Agenten, die Sie in Runtime hosten, zu verfolgen, zu debuggen und zu überwachen. AgentCore Um einen Agenten zu beobachten, aktivieren Sie zunächst die CloudWatch Transaktionssuche, indem Sie den Anweisungen unter Observability aktivieren folgen. AgentCore
Installieren Sie uv
In diesem Beispiel verwenden wir den uv Paketmanager, obwohl Sie jedes Python-Hilfsprogramm oder jeden Paketmanager verwenden können. Zur Installation uv auf macOS:
curl -LsSf https://astral.sh/uv/install.sh | sh
Installationsanweisungen auf anderen Plattformen finden Sie in der UV-Dokumentation
Erstellen Sie Ihr Agentenprojekt
Richten Sie Ihr Projekt ein
-
Erstellen Sie Ihr Projektverzeichnis und navigieren Sie zu diesem:
mkdir my-custom-agent && cd my-custom-agent -
Initialisieren Sie das Projekt mit Python 3.11:
uv init --python 3.11 -
Fügen Sie die erforderlichen Abhängigkeiten hinzu (uv erstellt automatisch ein .venv):
uv add fastapi 'uvicorn[standard]' pydantic httpx strands-agents
Anforderungen an den Vertrag für Agenten
Ihr kundenspezifischer Agent muss die folgenden Kernanforderungen erfüllen:
-
/invocations Endpunkt: POST-Endpunkt für Agenteninteraktionen (ERFORDERLICH)
-
/ping Endpoint: GET-Endpunkt für Zustandsprüfungen (ERFORDERLICH)
-
Docker Container: Containerisiertes ARM64-Bereitstellungspaket
Struktur des Projekts
Hinweis: Der Einfachheit halber verwendet das folgende Beispiel FastAPI Server als Webserver-Framework für die Bearbeitung von Anfragen.
Ihr Projekt sollte die folgende Struktur haben:
my-custom-agent/ ├── agent.py # FastAPI application ├── Dockerfile # ARM64 container configuration ├── pyproject.toml # Created by uv init └── uv.lock # Created automatically by uv
Vollständiges Beispiel für Strands Agent
Erstellen Sie agent.py in Ihrem Projektstamm den folgenden Inhalt:
Beispiel agent.py
from fastapi import FastAPI, HTTPException from pydantic import BaseModel from typing import Dict, Any from datetime import datetime from strands import Agent app = FastAPI(title="Strands Agent Server", version="1.0.0") # Initialize Strands agent strands_agent = Agent() class InvocationRequest(BaseModel): input: Dict[str, Any] class InvocationResponse(BaseModel): output: Dict[str, Any] @app.post("/invocations", response_model=InvocationResponse) async def invoke_agent(request: InvocationRequest): try: user_message = request.input.get("prompt", "") if not user_message: raise HTTPException( status_code=400, detail="No prompt found in input. Please provide a 'prompt' key in the input." ) result = strands_agent(user_message) response = { "message": result.message, "timestamp": datetime.utcnow().isoformat() } return InvocationResponse(output=response) except Exception as e: raise HTTPException(status_code=500, detail=f"Agent processing failed: {str(e)}") @app.get("/ping") async def ping(): return {"status": "healthy"} if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8080)
Diese Implementierung:
-
Erstellt eine FastAPI-Anwendung mit den erforderlichen Endpunkten
-
Initialisiert einen Strings-Agenten für die Verarbeitung von Benutzernachrichten
-
Implementiert den
/invocationsPOST-Endpunkt für Agenteninteraktionen -
Implementiert den
/pingGET-Endpunkt für Zustandsprüfungen -
Konfiguriert den Server so, dass er auf Host
0.0.0.0und Port läuft8080
Ausführen lokaler Tests
Testen Sie Ihren Agenten
-
Führen Sie die Anwendung aus:
uv run uvicorn agent:app --host 0.0.0.0 --port 8080 -
Testen Sie den
/pingEndpunkt (in einem anderen Terminal):curl http://localhost:8080/ping -
Testen Sie den
/invocationsEndpunkt:curl -X POST http://localhost:8080/invocations \ -H "Content-Type: application/json" \ -d '{ "input": {"prompt": "What is artificial intelligence?"} }'
Erstellen Sie eine Docker-Datei
Erstellen Sie Dockerfile in Ihrem Projektstamm mit dem folgenden Inhalt:
Beispiel Dockerfile
# Use uv's ARM64 Python base image FROM --platform=linux/arm64 ghcr.io/astral-sh/uv:python3.11-bookworm-slim WORKDIR /app # Copy uv files COPY pyproject.toml uv.lock ./ # Install dependencies (including strands-agents) RUN uv sync --frozen --no-cache # Copy agent file COPY agent.py ./ # Expose port EXPOSE 8080 # Run application CMD ["uv", "run", "uvicorn", "agent:app", "--host", "0.0.0.0", "--port", "8080"]
Dieses Dockerfile:
-
Verwendet ein ARM64-Python-Basis-Image (von Amazon AgentCore Bedrock erforderlich)
-
Richtet das Arbeitsverzeichnis ein
-
Kopiert die Abhängigkeitsdateien und installiert Abhängigkeiten
-
Kopiert den Agentencode
-
Macht Port 8080 verfügbar
-
Konfiguriert den Befehl zum Ausführen der Anwendung
Erstellen und implementieren Sie ein ARM64-Image
Docker Buildx einrichten
Mit Docker buildx können Sie Images für verschiedene Architekturen erstellen. Richten Sie es ein mit:
docker buildx create --use
Für ARM64 erstellen und lokal testen
Ihr Image erstellen und testen
-
Erstellen Sie das Image lokal zum Testen:
docker buildx build --platform linux/arm64 -t my-agent:arm64 --load. -
Testen Sie lokal mit Anmeldeinformationen (Strons-Agenten benötigen AWS Anmeldeinformationen):
docker run --platform linux/arm64 -p 8080:8080 \ -e AWS_ACCESS_KEY_ID="$AWS_ACCESS_KEY_ID" \ -e AWS_SECRET_ACCESS_KEY="$AWS_SECRET_ACCESS_KEY" \ -e AWS_SESSION_TOKEN="$AWS_SESSION_TOKEN" \ -e AWS_REGION="$AWS_REGION" \ my-agent:arm64
ECR-Repository erstellen und bereitstellen
Bereitstellung auf ECR
-
Erstellen Sie ein ECR-Repository:
aws ecr create-repository --repository-name my-strands-agent --region us-west-2 -
Melden Sie sich bei ECR an:
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin account-id.dkr.ecr.us-west-2.amazonaws.com -
Erstellen und auf ECR übertragen:
docker buildx build --platform linux/arm64 -t account-id.dkr.ecr.us-west-2.amazonaws.com/my-strands-agent:latest --push. -
Stellen Sie sicher, dass das Image übertragen wurde:
aws ecr describe-images --repository-name my-strands-agent --region us-west-2
Agent-Runtime bereitstellen
Erstellen Sie eine Datei mit dem Namen deploy_agent.py und dem folgenden Inhalt:
Beispiel deploy_agent.py
import boto3 client = boto3.client('bedrock-agentcore-control', region_name='us-west-2') response = client.create_agent_runtime( agentRuntimeName='strands_agent', agentRuntimeArtifact={ 'containerConfiguration': { 'containerUri': 'account-id.dkr.ecr.us-west-2.amazonaws.com/my-strands-agent:latest' } }, networkConfiguration={"networkMode": "PUBLIC"}, roleArn='arn:aws:iam::account-id:role/AgentRuntimeRole', lifecycleConfiguration={ 'idleRuntimeSessionTimeout': 300, # 5 min, configurable 'maxLifetime': 1800 # 30 minutes, configurable }, ) print(f"Agent Runtime created successfully!") print(f"Agent Runtime ARN: {response['agentRuntimeArn']}") print(f"Status: {response['status']}")
Führen Sie das Skript aus, um Ihren Agenten bereitzustellen:
uv run deploy_agent.py
Dieses Skript verwendet den create_agent_runtime Vorgang, um Ihren Agenten auf Amazon Bedrock AgentCore bereitzustellen. Stellen Sie sicher, dass Sie es durch Ihre tatsächliche AWS Konto-ID account-id ersetzen und stellen Sie sicher, dass die IAM-Rolle über die erforderlichen Berechtigungen verfügt. Weitere Informationen finden Sie unter IAM-Berechtigungen für AgentCore Runtime.
Aufrufen Ihres Agenten
Erstellen Sie eine Datei mit dem Namen invoke_agent.py und dem folgenden Inhalt:
Beispiel invoke_agent.py
import boto3 import json agent_core_client = boto3.client('bedrock-agentcore', region_name='us-west-2') payload = json.dumps({ "input": {"prompt": "Explain machine learning in simple terms"} }) response = agent_core_client.invoke_agent_runtime( agentRuntimeArn='arn:aws:bedrock-agentcore:us-west-2:account-id:runtime/myStrandsAgent-suffix', runtimeSessionId='dfmeoagmreaklgmrkleafremoigrmtesogmtrskhmtkrlshmt', # Must be 33+ chars payload=payload, qualifier="DEFAULT" ) response_body = response['response'].read() response_data = json.loads(response_body) print("Agent Response:", response_data)
Führen Sie das Skript aus, um Ihren Agenten aufzurufen:
uv run invoke_agent.py
Dieses Skript verwendet den InvokeAgentRuntime AWS SDK-Vorgang, um eine Anfrage an Ihren bereitgestellten Agenten zu senden. Stellen Sie sicher, dass Sie account-id und agentArn durch Ihre tatsächlichen Werte ersetzen.
Wenn Sie vorhaben, Ihren Agenten in OAuth zu integrieren, können Sie das AWS SDK nicht für Anrufe verwenden. InvokeAgentRuntime Stellen Sie stattdessen eine HTTPS-Anfrage an. InvokeAgentRuntime Weitere Informationen finden Sie unter Authentifizieren und Autorisieren mit Inbound Auth und Outbound Auth.
Erwartetes Antwortformat
Wenn Sie Ihren Agenten aufrufen, erhalten Sie eine Antwort wie diese:
Beispiel für eine Antwort
{ "output": { "message": { "role": "assistant", "content": [ { "text": "# Artificial Intelligence in Simple Terms\n\nArtificial Intelligence (AI) is technology that allows computers to do tasks that normally need human intelligence. Think of it as teaching machines to:\n\n- Learn from information (like how you learn from experience)\n- Make decisions based on what they've learned\n- Recognize patterns (like identifying faces in photos)\n- Understand language (like when I respond to your questions)\n\nInstead of following specific step-by-step instructions for every situation, AI systems can adapt to new information and improve over time.\n\nExamples you might use every day include voice assistants like Siri, recommendation systems on streaming services, and email spam filters that learn which messages are unwanted." } ] }, "timestamp": "2025-07-13T01:48:06.740668" } }
Runtime-Sitzung beenden
Um die laufende Sitzung vor der konfigurierbaren Sitzung zu beenden IdleRuntimeSessionTimeout (standardmäßig 15 Minuten) und mögliche Kosten zu vermeiden, führen Sie folgenden Befehl aus: stop_runtime_session
Erstellen Sie eine Datei mit dem Namen stop_runtime_session.py und dem folgenden Inhalt:
Beispiel stop_runtime_session.py
import boto3 agent_core_client = boto3.client('bedrock-agentcore', region_name='us-west-2') response = agent_core_client.stop_runtime_session( agentRuntimeArn='arn:aws:bedrock-agentcore:us-west-2:account-id:runtime/myStrandsAgent-suffix', runtimeSessionId='dfmeoagmreaklgmrkleafremoigrmtesogmtrskhmtkrlshmt', qualifier="DEFAULT" )
Zusammenfassung der Amazon AgentCore Bedrock-Anforderungen
-
Plattform: Muss sein
linux/arm64 -
Endpunkte:
/invocationsPOST und/pingGET sind obligatorisch -
ECR: Bilder müssen für ECR bereitgestellt werden
-
Port: Die Anwendung läuft auf Port 8080
-
Strands Integration: Verwendet Strands Agent für die KI-Verarbeitung
-
Anmeldeinformationen: Strons-Agenten benötigen AWS Anmeldeinformationen für den Betrieb
Schlussfolgerung
In diesem Handbuch haben Sie gelernt, wie Sie:
-
Richten Sie eine Entwicklungsumgebung für die Erstellung benutzerdefinierter Agenten ein
-
Erstellen Sie eine FastAPI-Anwendung, die die erforderlichen Endpunkte implementiert
-
Containerisieren Sie Ihren Agenten für die ARM64-Architektur
-
Testen Sie Ihren Agenten lokal
-
Stellen Sie Ihren Agenten in ECR bereit
-
Erstellen Sie eine Agentenlaufzeit in Amazon Bedrock AgentCore
-
Rufen Sie Ihren eingesetzten Agenten auf
-
Beenden Sie die Agenten-Laufzeitsitzung
Wenn Sie diese Schritte befolgen, können Sie benutzerdefinierte Agenten erstellen und bereitstellen, die die Leistungsfähigkeit von Amazon Bedrock nutzen und AgentCore gleichzeitig die volle Kontrolle über die Implementierung Ihres Agenten behalten.