Descripción general
revolution/laravel-amazon-bedrock es un driver para usar Amazon Bedrock con Laravel AI SDK. Permite manejar múltiples modelos de Bedrock a través de la API unificada del Laravel AI SDK.El símbolo
⚠️ en la tabla no significa que la función no esté soportada, sino que no se puede usar únicamente con la API key de Bedrock.Con Laravel AI SDK v0.6.3 se añadió soporte oficial para Text, Image y Embeddings utilizando la API key de Bedrock. Este paquete sigue publicándose porque además admite funciones como audio (TTS) con Amazon Polly y reranking, que no están disponibles en la integración oficial.
- Autenticación: puedes elegir entre API key de Bedrock, credenciales IAM de AWS (SigV4) o la cadena de credenciales por defecto de AWS (roles IAM, perfiles de instancia, etc.).
- Failover: compatible con el failover multiproveedor del AI SDK. Los errores de límite de tasa (429), sobrecarga (503, 529) y errores relacionados con créditos se mapean a excepciones aptas para failover.
- Control de caché: la caché ephemeral está siempre activada en los prompts de sistema de la Converse API de Bedrock.
- API unificada: Anthropic Claude, Amazon Nova, Meta Llama, Mistral y cualquier otro modelo se manejan con una interfaz unificada a través de la Converse API de Bedrock.
Requisitos
- PHP >= 8.3
- Laravel >= 12.x
Instalación
1
Instala el paquete
2
Publica la configuración de AI SDK
Configuración
Añade el proveedoramazon-bedrock en config/ai.php. Si es necesario, cambia también el proveedor por defecto a Bedrock.
Opción 1: API key de Bedrock
Opción 2: credenciales IAM de AWS (SigV4)
Utiliza una access key y una secret key de AWS que se firman con Signature Version 4.AWS_SESSION_TOKEN solo se configura cuando se usan credenciales temporales (STS).Opción 3: cadena de credenciales por defecto de AWS (roles IAM)
En entornos con rol IAM como EC2 / ECS / Lambda, puedes omitirkey y secret y utilizar la cadena de proveedores de credenciales por defecto de AWS.
~/.aws/credentials), roles de tareas de ECS, perfiles de instancia EC2, etc.
Claves de configuración opcionales
Generación de texto
Clase Agent
Crea una clase Agent con un comando Artisan.Anonymous Agent
Si quieres usarlo rápidamente sin crear una clase, utiliza el helperagent().
Streaming
Uso de herramientas (Function Calling)
Define las herramientas que se invocarán durante la generación.Adjuntar archivos
Con el parámetroattachments puedes adjuntar imágenes, documentos, audio y vídeo al prompt. La Converse API de Bedrock procesa los bloques adjuntos, aunque los formatos realmente utilizables dependen del modelo (por ejemplo, Anthropic Claude solo admite imágenes y documentos).
Image, Document y Audio dentro de Laravel\Ai\Files\*. El vídeo puede adjuntarse mediante Illuminate\Http\UploadedFile.
La subida de archivos al servidor (
Document::fromPath()->put()) y la reutilización mediante ID (Document::fromId()) no son compatibles con Bedrock.Historial de conversaciones
Para mantener una conversación de varios turnos, implementa la interfazConversational en la clase Agent. Los mensajes que devuelve messages() se incluirán automáticamente en cada prompt.
Guardado automático con RemembersConversations
Si no quieres implementar messages() por tu cuenta, puedes utilizar el trait RemembersConversations para guardar automáticamente la conversación. Necesitas las tablas de base de datos del AI SDK, así que ejecuta antes php artisan vendor:publish --provider="Laravel\Ai\AiServiceProvider" && php artisan migrate.
Salida estructurada
Si implementas la interfazHasStructuredOutput, obtendrás respuestas tipadas.
output_structured_data) que obliga a devolver un valor que se ajuste al esquema. Este mecanismo es compatible con todos los modelos de Bedrock a través de la Converse API.
Converse API (todos los modelos)
Toda la generación de texto y el streaming se ejecutan a través de la Converse API de Bedrock. El acceso está unificado incluso para Anthropic Claude, y puedes utilizar los distintos modelos disponibles en Bedrock como Amazon Nova, Meta Llama, Mistral, Cohere o DeepSeek con la misma interfaz.Provider Options
Para pasar opciones específicas de Bedrock comoanthropic_version, implementa HasProviderOptions.
Atributos de configuración del Agent
Puedes configurar las opciones de generación de texto mediante atributos de PHP.Generación de imágenes
Genera imágenes con modelos de Stability AI (por defecto) o con Amazon Nova Canvas.us-west-2):
Los modelos de imagen de Stability AI solo están disponibles en
us-west-2. Configura AWS_DEFAULT_REGION=us-west-2 cuando los uses.Edición de imágenes con Stability AI
También puedes usar los modelos de edición de Stability AI Image Services mediante el métodoattachments(). Se pasa una imagen de entrada y el modelo de edición la transforma.
us-east-1, us-east-2 y us-west-2):
También se admite Amazon Nova Canvas, aunque AWS está avanzando en su desaprobación.
Audio (TTS)
Genera audio a partir de texto usando Amazon Polly.default-female → Ruth, default-male → Matthew (ambas compatibles con el motor generative).
Embeddings
Genera embeddings vectoriales con Amazon Titan Embeddings V2.Modelos Cohere Embed
Los modelos Cohere Embed se detectan automáticamente y utilizan la API de lote. Mientras que Titan envía una petición HTTP por cada entrada, Cohere agrupa todas las entradas en una única petición, por lo que resulta más eficiente cuando procesas varios textos.Los modelos Cohere Embed no devuelven el número de tokens, por lo que
$response->tokens siempre es 0.Reranking
Reordena los documentos por relevancia respecto a la consulta usando Cohere Rerank 3.5 o Amazon Rerank 1.0.La API de reranking utiliza el endpoint
bedrock-agent-runtime (no bedrock-runtime). Amazon Rerank 1.0 no está disponible en us-east-1, así que en esa región usa Cohere Rerank 3.5.Pruebas
Puedes usar directamente las funciones de testing estándar del AI SDK. Aunque no está documentado oficialmente, los Anonymous Agent creados con el helperagent() se pueden mockear con AnonymousAgent::fake(), y la versión de salida estructurada con StructuredAnonymousAgent::fake().
Consulta la información más actualizada en el repositorio de GitHub.