Skip to main content

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.
Sus principales características son:
  • 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 proveedor amazon-bedrock en config/ai.php. Si es necesario, cambia también el proveedor por defecto a Bedrock.

Opción 1: API key de Bedrock

La API key de Bedrock se obtiene desde la consola de AWS.
La API key de Bedrock es exclusiva de la Bedrock Runtime API. No se puede usar con reranking (bedrock-agent-runtime) ni con Amazon Polly (TTS). Para esos servicios utiliza SigV4 o la cadena de credenciales por defecto de AWS.

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 omitir key y secret y utilizar la cadena de proveedores de credenciales por defecto de AWS.
La cadena de credenciales por defecto resuelve automáticamente desde variables de entorno, el archivo de credenciales compartido (~/.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 helper agent().

Streaming

También puedes manejar los eventos manualmente.

Uso de herramientas (Function Calling)

Define las herramientas que se invocarán durante la generación.
Se usa desde el Agent.
También funciona con Anonymous Agent.
Las llamadas a herramientas también funcionan en streaming. El SDK ejecuta las herramientas automáticamente y continúa la conversación hasta obtener la respuesta de texto final.

Adjuntar archivos

Con el parámetro attachments 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).
Los tipos de adjunto compatibles son 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 interfaz Conversational 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.
Inicia una nueva conversación.
Continúa una conversación existente.
El driver de Bedrock incluye automáticamente el historial de conversaciones en las peticiones a la Converse API, por lo que puedes usar el contexto de conversaciones multiturno en todos los modelos compatibles.

Salida estructurada

Si implementas la interfaz HasStructuredOutput, obtendrás respuestas tipadas.
La salida estructurada también funciona con Anonymous Agent.
Internamente se crea una herramienta sintética (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.
El streaming, el uso de herramientas, la salida estructurada y los adjuntos de archivos funcionan con los modelos que los admitan. Consulta el detalle en la lista de modelos compatibles de Bedrock.

Provider Options

Para pasar opciones específicas de Bedrock como anthropic_version, implementa HasProviderOptions.
Provider Options admitidas:

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.
Modelos de Stability AI disponibles (todos requieren la región 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étodo attachments(). Se pasa una imagen de entrada y el modelo de edición la transforma.
Modelos de edición de Stability AI disponibles (todos en 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.
Puedes indicar voz masculina o femenina.
Especifica una voz de Polly concreta.
Guarda el audio generado.
También puedes indicar el motor (modelo).
Voces por defecto: default-female → Ruth, default-male → Matthew (ambas compatibles con el motor generative).
Amazon Polly es un servicio de AWS distinto de Bedrock. La API key de Bedrock (bearer token) no es válida para Polly. Utiliza credenciales IAM de AWS (SigV4) o la cadena de credenciales por defecto de AWS.

Embeddings

Genera embeddings vectoriales con Amazon Titan Embeddings V2.
Puedes indicar las dimensiones (Titan Embeddings V2 admite 256, 512 y 1024).
Ejemplo indicando un modelo personalizado.

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.
Ejemplo indicando un modelo personalizado.
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 helper agent() 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.
Última modificación el 26 de julio de 2026