Überblick
revolution/laravel-amazon-bedrock ist ein Treiber, mit dem Sie Amazon Bedrock im Laravel AI SDK verwenden können. Sie können die verschiedenen Bedrock-Modelle über die einheitliche API des Laravel AI SDK ansprechen.Das
⚠️ in der Tabelle bedeutet nicht, dass die Funktion selbst nicht unterstützt wird, sondern dass sie nicht allein mit einem Bedrock-API-Key genutzt werden kann.In Laravel AI SDK v0.6.3 wurde die offizielle Unterstützung für Text, Bild und Embeddings über den Bedrock-API-Key ergänzt. Da dieses Paket auch Funktionen wie Audio (TTS) über Amazon Polly und Reranking abdeckt, die in der offiziellen Integration nicht verfügbar sind, wird es weiterhin veröffentlicht.
- Authentifizierung: Sie können zwischen Bedrock-API-Key, AWS IAM-Credentials (SigV4) und der Default AWS Credentials Chain (IAM-Rollen, Instance Profiles etc.) wählen.
- Failover: Unterstützt das Multi-Provider-Failover des AI SDK. Rate Limits (429), Overloads (503, 529) und Credit-bezogene Fehler werden auf failover-fähige Exceptions abgebildet.
- Cache Control: Für System-Prompts der Bedrock Converse API ist der ephemere Cache stets aktiviert.
- Einheitliche API: Alle Modelle wie Anthropic Claude, Amazon Nova, Meta Llama, Mistral usw. werden über die Bedrock Converse API mit einer einheitlichen Schnittstelle angesprochen.
Voraussetzungen
- PHP >= 8.3
- Laravel >= 12.x
Installation
1
Paket installieren
2
Konfiguration des AI SDK veröffentlichen
Konfiguration
Fügen Sie inconfig/ai.php den Provider amazon-bedrock hinzu. Bei Bedarf setzen Sie den Standard-Provider ebenfalls auf Bedrock.
Option 1: Bedrock-API-Key
Option 2: AWS IAM-Credentials (SigV4)
Verwendet AWS Access Key und Secret Key mit Signierung nach Signature Version 4.AWS_SESSION_TOKEN wird nur gesetzt, wenn temporäre Credentials (STS) verwendet werden.Option 3: Default AWS Credentials Chain (IAM-Rolle)
In Umgebungen mit IAM-Rollen wie EC2 / ECS / Lambda können Siekey und secret weglassen und die Default AWS Credentials Provider Chain nutzen.
~/.aws/credentials), ECS-Task-Rollen, EC2-Instance-Profiles usw. auf.
Optionale Konfigurationsschlüssel
Textgenerierung
Agent-Klasse
Erzeugen Sie mit einem Artisan-Kommando eine Agent-Klasse.Anonymer Agent
Wenn Sie schnell ohne eigene Klasse arbeiten möchten, nutzen Sie den Helperagent().
Streaming
Tool-Nutzung (Function Calling)
Definieren Sie ein Tool, das während der Generierung aufgerufen wird.Dateianhänge
Über den Parameterattachments können Sie Bilder, Dokumente, Audio- und Videodateien an einen Prompt anhängen. Die Bedrock Converse API verarbeitet die Anhang-Blöcke, welche Formate tatsächlich verwendbar sind, hängt aber vom Modell ab (z. B. unterstützt Anthropic Claude nur Bilder und Dokumente).
Image, Document und Audio aus Laravel\Ai\Files\*. Videos können über Illuminate\Http\UploadedFile angehängt werden.
Server-seitige Datei-Uploads (
Document::fromPath()->put()) und die Wiederverwendung über ID (Document::fromId()) werden von Bedrock nicht unterstützt.Konversationsverlauf
Um Mehrfach-Turn-Konversationen zu erhalten, implementieren Sie in der Agent-Klasse das InterfaceConversational. Wenn messages() frühere Nachrichten zurückgibt, werden diese jedem Prompt automatisch hinzugefügt.
Automatisches Speichern mit RemembersConversations
Wenn Sie messages() nicht selbst implementieren möchten, können Sie das vollständig automatische Speichern von Konversationen über den Trait RemembersConversations nutzen. Da die Datenbanktabellen des AI SDK benötigt werden, führen Sie zuvor php artisan vendor:publish --provider="Laravel\Ai\AiServiceProvider" && php artisan migrate aus.
Strukturierte Ausgaben
Wenn Sie das InterfaceHasStructuredOutput implementieren, können Sie typisierte Antworten erhalten.
output_structured_data) erzeugt, das Werte gemäß dem Schema zurückgeben lässt. Dieser Ansatz ist über die Converse API mit allen Bedrock-Modellen kompatibel.
Converse API (alle Modelle)
Sämtliche Textgenerierung und Streaming erfolgt über die Bedrock Converse API. Auch Anthropic Claude ist einheitlich integriert. Sie können Modelle wie Amazon Nova, Meta Llama, Mistral, Cohere, DeepSeek usw. auf Bedrock über dieselbe Schnittstelle ansprechen.Provider Options
Um Bedrock-spezifische Optionen wieanthropic_version zu übergeben, implementieren Sie HasProviderOptions.
Konfigurations-Attribute für Agents
Über PHP-Attribute können Sie Optionen für die Textgenerierung setzen.Bildgenerierung
Erzeugen Sie Bilder mit Stability-AI-Modellen (Standard) oder Amazon Nova Canvas.us-west-2):
Die Bildmodelle von Stability AI sind nur in
us-west-2 verfügbar. Setzen Sie AWS_DEFAULT_REGION=us-west-2, wenn Sie diese Modelle verwenden.Bildbearbeitung mit Stability AI
Auch die Editing-Modelle der Stability AI Image Services lassen sich über die Methodeattachments() verwenden. Übergeben Sie ein Eingangsbild, das dann vom Editing-Modell umgewandelt wird.
us-east-1, us-east-2 und us-west-2 verfügbar):
Amazon Nova Canvas wird ebenfalls unterstützt, wird von AWS aber schrittweise als „deprecated” gekennzeichnet.
Audio (TTS)
Erzeugen Sie mit Amazon Polly Sprache aus Text.default-female → Ruth, default-male → Matthew (beide unterstützen die generative Engine).
Embeddings
Erzeugen Sie Vektor-Embeddings mit Amazon Titan Embeddings V2.Cohere-Embed-Modelle
Cohere-Embed-Modelle werden automatisch erkannt und verwenden die Batch-API. Während Titan pro Eingabe eine HTTP-Anfrage sendet, fasst Cohere alle Eingaben zu einer einzigen Anfrage zusammen und ist damit bei mehreren Texten effizienter.Cohere-Embed-Modelle liefern keine Token-Anzahl zurück,
$response->tokens ist daher stets 0.Reranking
Mit Cohere Rerank 3.5 oder Amazon Rerank 1.0 können Sie Dokumente nach Relevanz zu einer Query sortieren.Die Reranking-API verwendet den Endpunkt
bedrock-agent-runtime (nicht bedrock-runtime). Da Amazon Rerank 1.0 in us-east-1 nicht verfügbar ist, nutzen Sie in dieser Region Cohere Rerank 3.5.Tests
Die üblichen Testfunktionen des AI SDK können unverändert verwendet werden. Zwar nicht in der offiziellen Dokumentation aufgeführt, aber anonyme Agents, die mit dem Helperagent() erzeugt wurden, können Sie mit AnonymousAgent::fake() mocken, die strukturierte Variante mit StructuredAnonymousAgent::fake().
Aktuelle Informationen finden Sie im GitHub-Repository.