Vue d’ensemble
revolution/laravel-amazon-bedrock est un pilote permettant d’utiliser Amazon Bedrock avec Laravel AI SDK. Il expose plusieurs modèles Bedrock via l’API unifiée de Laravel AI SDK.Le symbole
⚠️ du tableau signifie non pas que la fonctionnalité est absente, mais qu’elle n’est pas utilisable avec la seule clé API Bedrock.La prise en charge officielle du Text, de l’Image et des Embeddings via une clé API Bedrock a été ajoutée dans Laravel AI SDK v0.6.3. Ce package couvre également des fonctionnalités absentes de l’intégration officielle, comme la synthèse vocale (TTS) via Amazon Polly ou le reranking, et continue donc d’être publié.
- Authentification : au choix, clé API Bedrock, identifiants AWS IAM (SigV4) ou chaîne d’identifiants AWS par défaut (rôle IAM, profil d’instance, etc.).
- Basculement (failover) : compatible avec le failover multi-provider de l’AI SDK. Les erreurs de limitation (429), de surcharge (503, 529) et les erreurs liées aux crédits sont mappées sur des exceptions permettant le basculement.
- Contrôle du cache : cache éphémère toujours activé sur le prompt système via l’API Bedrock Converse.
- API unifiée : tous les modèles (Anthropic Claude, Amazon Nova, Meta Llama, Mistral, etc.) sont exposés via une interface unique grâce à l’API Bedrock Converse.
Prérequis
- PHP >= 8.3
- Laravel >= 12.x
Installation
1
Installer le package
2
Publier la configuration d'AI SDK
Configuration
Ajoutez le provideramazon-bedrock dans config/ai.php. Basculez éventuellement les providers par défaut vers Bedrock.
Option 1 : clé API Bedrock
Option 2 : identifiants AWS IAM (SigV4)
Utilisez une access key et une secret key AWS signées avec Signature Version 4.Ne renseignez
AWS_SESSION_TOKEN que si vous utilisez des identifiants temporaires (STS).Option 3 : chaîne d’identifiants AWS par défaut (rôle IAM)
Dans les environnements disposant d’un rôle IAM (EC2 / ECS / Lambda, etc.), vous pouvez omettrekey et secret et utiliser la chaîne de fournisseurs d’identifiants AWS par défaut.
~/.aws/credentials), le rôle de tâche ECS, le profil d’instance EC2, etc.
Clés de configuration facultatives
Génération de texte
Classe Agent
Créez une classe Agent avec une commande Artisan.Agent anonyme
Pour une utilisation rapide sans créer de classe, utilisez le helperagent().
Streaming
Utilisation d’outils (Function Calling)
Définissez un outil qui pourra être appelé pendant la génération.Pièces jointes
Le paramètreattachments permet de joindre à un prompt des fichiers image, document, audio ou vidéo. L’API Bedrock Converse traite les blocs de pièces jointes, mais les formats réellement acceptés dépendent du modèle (par exemple Anthropic Claude ne gère que les images et les documents).
Image, Document et Audio dans Laravel\Ai\Files\*. Les vidéos peuvent être jointes via Illuminate\Http\UploadedFile.
Le téléversement de fichiers côté serveur (
Document::fromPath()->put()) et la réutilisation via un identifiant (Document::fromId()) ne sont pas pris en charge par Bedrock.Historique de conversation
Pour maintenir une conversation multi-tours, implémentez l’interfaceConversational dans votre classe Agent. Les messages retournés par messages() seront automatiquement inclus dans chaque prompt.
Sauvegarde automatique avec RemembersConversations
Si vous ne souhaitez pas implémenter vous-même messages(), le trait RemembersConversations fournit une sauvegarde entièrement automatique des conversations. Une table de base de données de l’AI SDK est nécessaire ; exécutez d’abord php artisan vendor:publish --provider="Laravel\Ai\AiServiceProvider" && php artisan migrate.
Sortie structurée
En implémentant l’interfaceHasStructuredOutput, vous pouvez obtenir une réponse typée.
output_structured_data) est créé pour forcer une valeur conforme au schéma. Cette approche est compatible avec tous les modèles disponibles sur Bedrock via l’API Converse.
API Converse (tous les modèles)
Toute la génération de texte et le streaming passent par l’API Bedrock Converse. L’interface est unifiée, y compris pour Anthropic Claude, et vous pouvez utiliser Amazon Nova, Meta Llama, Mistral, Cohere, DeepSeek ou d’autres modèles Bedrock via la même interface.Provider Options
Pour transmettre des options spécifiques à Bedrock telles queanthropic_version, implémentez HasProviderOptions.
Attributs de configuration d’Agent
Les attributs PHP permettent de configurer les options de génération de texte.Génération d’images
Générez des images avec les modèles Stability AI (par défaut) ou Amazon Nova Canvas.us-west-2) :
Les modèles d’image Stability AI ne sont disponibles qu’en
us-west-2. Définissez AWS_DEFAULT_REGION=us-west-2 pour les utiliser.Édition d’images avec Stability AI
Les modèles d’édition de Stability AI Image Services sont également accessibles via la méthodeattachments(). Passez l’image d’entrée et transformez-la avec un modèle d’édition.
us-east-1, us-east-2, us-west-2) :
Amazon Nova Canvas est également pris en charge, bien que son abandon soit en cours chez AWS.
Synthèse vocale (TTS)
Générez de la parole à partir de texte avec Amazon Polly.default-female → Ruth, default-male → Matthew (toutes deux compatibles avec le moteur generative).
Embeddings
Générez des vecteurs d’embedding avec Amazon Titan Embeddings V2.Modèles Cohere Embed
Les modèles Cohere Embed sont détectés automatiquement et utilisent l’API batch. Alors que Titan envoie une requête HTTP par entrée, Cohere regroupe toutes les entrées en une seule requête, ce qui est efficace pour traiter plusieurs textes.Les modèles Cohere Embed ne renvoient pas de nombre de tokens ;
$response->tokens vaut donc toujours 0.Reranking
Réordonnez des documents selon leur pertinence par rapport à une requête avec Cohere Rerank 3.5 ou Amazon Rerank 1.0.L’API de reranking utilise l’endpoint
bedrock-agent-runtime (et non bedrock-runtime). Amazon Rerank 1.0 n’étant pas disponible en us-east-1, utilisez Cohere Rerank 3.5 dans cette région.Tests
Les fonctionnalités de test standard de l’AI SDK sont utilisables telles quelles. Bien que non documenté officiellement, les agents anonymes créés via le helperagent() peuvent être mockés avec AnonymousAgent::fake(), et leur variante à sortie structurée avec StructuredAnonymousAgent::fake().
Pour les informations les plus récentes, reportez-vous au dépôt GitHub.