Skip to main content

Introducción

Laravel AI SDK proporciona una API unificada y expresiva para interactuar con proveedores de IA como OpenAI, Anthropic o Gemini. Con AI SDK puedes construir agentes inteligentes con herramientas y salida estructurada, generar imágenes, sintetizar voz y transcribir audio, crear embeddings vectoriales y muchas otras funciones de IA con una interfaz coherente y muy propia de Laravel.
Laravel AI SDK es un paquete oficial añadido en Laravel 13. Se distribuye como laravel/ai y permite trabajar con múltiples proveedores de IA a través de una API unificada.

Lista de compatibilidad por proveedor

Instalación

1

Instalación del paquete

Instala Laravel AI SDK con Composer.
2

Publicar el archivo de configuración y las migraciones

Publica el archivo de configuración y las migraciones con el comando Artisan vendor:publish.
3

Ejecutar las migraciones

Ejecuta las migraciones de la base de datos. Se crearán las tablas agent_conversations y agent_conversation_messages, que se usan para guardar el historial de conversaciones.

Configuración

Variables de entorno

Define las claves de API de los proveedores de IA que vayas a usar en el archivo .env.
Los modelos por defecto para texto, imágenes, audio, transcripción y embeddings también pueden configurarse en config/ai.php.

URL base personalizada

Si necesitas dirigir el tráfico a través de un servicio proxy, puedes definir una URL personalizada por proveedor.
Las URL base personalizadas están disponibles para OpenAI, Anthropic, Gemini, Groq, Cohere, DeepSeek, xAI y OpenRouter.

Proveedor OpenAI-Compatible

Cuando uses APIs compatibles con OpenAI, como LM Studio, vLLM, Together, Fireworks o gateways locales, puedes configurar el proveedor con el driver openai-compatible. url es obligatorio y, si indicas key, se enviará como token Bearer.
Una vez configurado, puedes indicarlo por su nombre de la misma forma que los demás proveedores.
Si defines un modelo de texto por defecto, no necesitarás indicar el modelo cada vez.
El proveedor OpenAI-Compatible soporta generación de texto, streaming, herramientas, salida estructurada y adjuntar imágenes. Si tu endpoint necesita campos adicionales en el cuerpo de la petición, utiliza opciones de proveedor.

Enum Lab

Para referenciar los proveedores desde el código utiliza el enum Lab.

Agentes

Los agentes son el bloque de construcción fundamental de Laravel AI SDK. Puedes generar una clase de agente con el comando make:agent.
Los agentes generados se colocan en el directorio app/Ai/Agents/. A continuación se muestra un ejemplo de un agente que implementa todas las interfaces principales.

Prompt

Envía un mensaje al agente con el método prompt().
Con el método estático make() puedes crear una instancia resolviendo sus dependencias desde el contenedor.
El proveedor, el modelo y el timeout pueden sobreescribirse mediante los argumentos de prompt().

Contexto conversacional

Si implementas la interfaz Conversational y defines el método messages(), puedes pasar el historial de conversación previo a la IA. Con el trait RemembersConversations puedes guardar y recuperar automáticamente el historial de conversación en la base de datos.
Inicia una conversación con forUser() y utiliza el conversationId devuelto para continuarla con continue().

Salida estructurada

Si implementas la interfaz HasStructuredOutput y defines el esquema JSON en el método schema(), podrás recibir la respuesta de la IA como datos estructurados.

Objetos anidados

Arrays de objetos

anyOf (elegir entre varios esquemas)

Cuando el valor pueda coincidir con cualquiera de varios esquemas, usa el método anyOf.

Adjuntos

Con el argumento attachments puedes pasar documentos e imágenes al agente.
Los adjuntos de imagen se manejan de la misma forma.

Streaming

Con el método stream() la respuesta se devuelve por fragmentos (chunks). Es útil para enviar respuestas largas al frontend en tiempo real.
Puedes describir el procesamiento tras finalizar el streaming con el callback then().
También puedes iterar el stream manualmente.

Protocolo Vercel AI SDK

Si usas Vercel AI SDK en el frontend, llama a usingVercelDataProtocol().

Broadcasting

Los eventos del stream pueden enviarse a canales de broadcast como Laravel Echo.
Con broadcastOnQueue() puedes emitir el broadcast pasando por la cola.

Omitir eventos muy grandes

Algunas plataformas de broadcast limitan los mensajes de WebSocket a aproximadamente 10 KB. Los eventos de stream con mucho contenido (como resultados de herramientas de gran tamaño) pueden superar ese límite y fallar al emitirse. Con el atributo WithoutBroadcasting puedes excluir del broadcast tipos de eventos concretos.
Los eventos excluidos no se emiten por broadcast, pero se siguen guardando en la tabla agent_conversation_messages. De esta forma, el frontend puede obtener todos los datos de las herramientas tras finalizar el stream. Esto funciona tanto por cola (broadcastOnQueue) como de forma síncrona (broadcast / broadcastNow).

Cola

Con el método queue() puedes encolar el prompt para procesarlo de forma asíncrona.

Herramientas

Las herramientas permiten que la IA invoque funciones de tu código. Puedes generar una clase de herramienta con el comando make:tool.
Registra las herramientas en el método tools() del agente.

Herramienta de búsqueda por similitud

Puedes añadir con facilidad una herramienta de búsqueda por similitud basada en embeddings vectoriales.
También puedes indicar opciones.
Y definir tu propia lógica de búsqueda con un closure.
Con withDescription() puedes personalizar la descripción de la herramienta.

Herramientas de almacenamiento de archivos

Con la fábrica de herramientas FileStorage puedes darle al agente acceso a un disco del sistema de archivos de Laravel. El método all devuelve el conjunto de herramientas para listar, leer, generar URL, escribir, eliminar y copiar archivos en el disco indicado.
Si solo quieres permitir acceso de lectura, utiliza el método readOnly.
Estos métodos devuelven una Illuminate\Support\Collection, así que puedes filtrar aún más las herramientas que se ofrecen.

Herramientas MCP

Si tu aplicación utiliza Laravel MCP, puedes ofrecer al agente las herramientas expuestas por un servidor Model Context Protocol. Puedes utilizar el cliente MCP de Laravel para conectarte a un servidor MCP remoto o local y pasar sus herramientas directamente al agente.
Para usar herramientas MCP necesitas tener instalado el paquete Laravel MCP en la aplicación.
El método tools del cliente MCP devuelve una colección, así que utiliza el operador spread ... para expandirla dentro del array tools del agente.
El AI SDK envuelve automáticamente cada herramienta MCP para que el agente pueda invocarla como cualquier otra herramienta. También puedes usar clientes MCP con nombre.
O conectarte a un servidor MCP local.
Para más información sobre la creación de clientes MCP y la autenticación (tokens Bearer, OAuth, etc.), consulta la documentación del cliente MCP.

Herramientas de proveedor

Son herramientas especiales que el proveedor de IA implementa de forma nativa.

Búsqueda web

Añade búsqueda web al agente. Compatible con Anthropic, OpenAI, Gemini y OpenRouter.
Opcionalmente puedes indicar el número de resultados, restringir dominios o especificar la ubicación.

Fetch web

Herramienta para obtener el contenido de la URL indicada. Compatible con Anthropic y Gemini.

Búsqueda de archivos

Herramienta para buscar documentos en un vector store. Compatible con OpenAI y Gemini.
También puedes indicar filtros complejos con FileSearchQuery.

Subagentes

Un agente también puede devolverse desde el método tools() de otro agente. Al registrar un agente como herramienta, el agente padre puede delegar tareas concretas en el subagente e incorporar el resultado a su respuesta original. Resulta útil cuando un agente genérico necesita acceder a agentes especializados con instrucciones, herramientas, configuración de modelo o de proveedor específicas. Por ejemplo, un agente de atención al cliente que delega las preguntas sobre políticas de reembolso a un agente especializado en reembolsos.
Para personalizar cómo se le presenta el subagente al agente padre, implementa la interfaz CanActAsTool en el subagente y define el nombre y la descripción de la herramienta.
Cuando el subagente no implementa CanActAsTool, Laravel usa el nombre de la clase como nombre de la herramienta y genera automáticamente una descripción genérica. Cada invocación de subagente es independiente y no hereda el historial de conversación del agente padre.

Middleware

Puedes añadir middleware al agente para interceptar prompts y respuestas.
Implementa la interfaz HasMiddleware en el agente y registra el middleware en el método middleware().
Un ejemplo de implementación de la clase de middleware.
Con then() también puedes añadir procesamiento posterior a la respuesta.

Agentes anónimos

Con la función helper agent() puedes utilizar agentes anónimos sin necesidad de definir una clase.
También puedes crear agentes anónimos con salida estructurada.

Configuración del agente (atributos PHP)

Con atributos PHP puedes escribir la configuración por defecto del agente de forma declarativa.
También hay atributos de atajo para la selección de modelo.

Opciones de proveedor

Al implementar la interfaz HasProviderOptions puedes pasar opciones específicas del proveedor.

Aprobación humana de herramientas (Human Tool Approval)

Para utilizar la aprobación de herramientas necesitas un agente Conversational cuyo historial de conversación se persista. Para poder reanudar una invocación en pausa, el trait RemembersConversations aporta la persistencia necesaria.
En herramientas que realizan operaciones sensibles o irreversibles, como eliminar archivos o transferir dinero, puedes exigir aprobación humana antes de la ejecución. Para marcar una herramienta como aprobable, implementa el contrato Approvable y usa el trait InteractsWithApprovals. Las herramientas aprobables requieren aprobación por defecto.
Si quieres decidir si se requiere aprobación en función de los argumentos de la invocación, define el método needsApproval en la herramienta. Este método puede devolver un booleano o una instancia de Approval que incluya el motivo de la aprobación.
Al devolver las herramientas desde el método tools del agente también puedes sobreescribir el requisito de aprobación.
Cuando se invoca una herramienta aprobable, el agente se detiene antes de ejecutarla. Puedes examinar pendingApprovals en la respuesta para consultar el ID, el nombre de la herramienta, los argumentos y el motivo de aprobación de cada invocación.
Para reanudar el agente, continúa la conversación y pasa una instancia de Decisions con la decisión de cada invocación de herramienta pendiente. En una decisión puedes aprobar, rechazar o editar los argumentos de la invocación antes de ejecutarla.
Los valores booleanos true y false pueden usarse como forma abreviada de aprobar y rechazar, respectivamente. Todas las invocaciones de herramienta pendientes necesitan una decisión. Si indicas un ID de invocación desconocido, ausente o ya resuelto, se lanzará ApprovalMismatchException. Para las invocaciones sin decisión explícita, puedes indicar una decisión por defecto con los métodos approveRemaining o rejectRemaining.
Al rechazar con un resultado, como Decision::reject('No fue aprobado.'), el resultado se devuelve al modelo y la respuesta continúa. Si se rechaza sin resultado, el bucle de generación se detiene en el momento en que se registra el rechazo. La aprobación de herramientas se soporta en los métodos prompt, stream, queue, broadcast, broadcastNow y broadcastOnQueue. Durante el streaming y el broadcasting, la pausa se representa como un evento tool_approval_request. Cuando utilizas el protocolo de stream de Vercel AI SDK, las solicitudes y los resultados de aprobación se emiten como las partes nativas de aprobación de herramientas del protocolo. En el caso de agentes encolados, la respuesta resultante se pasa al callback then y Laravel también despacha el evento ToolApprovalRequested. Laravel guarda el resultado de la ejecución de las herramientas aprobadas antes de pedirle al modelo que continúe. Si la generación posterior falla, las aprobaciones ya están resueltas. En lugar de reenviar la misma decisión de aprobación, continúa la conversación con un prompt de texto normal.

Flujo completo de aprobación

Las siguientes rutas muestran un flujo completo de aprobación. La ruta GET devuelve la pantalla de chat y la ruta POST recibe un nuevo prompt de texto desde la pantalla o una decisión de aprobación. En este ejemplo se asume que el modelo User de la aplicación usa el trait HasConversations.
Cuando el estado de la respuesta sea awaiting_approval, la pantalla de chat mostrará las aprobaciones pendientes y deberá enviar al mismo endpoint la elección del usuario usando como clave el ID de la invocación de la herramienta.
Para un mensaje de chat normal, en su lugar envía el valor de message.
El flujo de aprobación es un mecanismo que otorga a los agentes de IA capacidades operativas potentes al tiempo que introduce una revisión humana antes de la ejecución. Aprovéchalo especialmente en herramientas cuyas operaciones no puedan deshacerse: eliminación de archivos, procesamiento de pagos, escritura en APIs externas, etc.

Generación de imágenes

Con la clase Image puedes generar imágenes. Compatible con los proveedores OpenAI, Gemini y xAI.
Puedes indicar la calidad, la relación de aspecto y el timeout.
También puedes adjuntar una imagen de referencia para editarla.

Guardar la imagen

Generar imágenes por cola


Síntesis de voz (TTS)

Con la clase Audio puedes convertir texto a voz. Compatible con los proveedores OpenAI y ElevenLabs.
Puedes indicar el género de la voz, un ID de voz concreto o instrucciones de estilo.

Guardar el audio

Generar audio por cola


Transcripción (STT)

Con la clase Transcription puedes convertir archivos de audio a texto. Compatible con los proveedores OpenAI, ElevenLabs y Mistral.

Diarización de hablantes

Con diarize() obtienes una transcripción segmentada por hablante.

Transcripción por cola


Resumen de texto (Text Summarization)

Con el método summarize que proporciona la clase Stringable de Laravel puedes resumir un texto. Por defecto se resume en 3 frases como máximo, utilizando el modelo de texto más económico del proveedor configurado.
También puedes indicar el número máximo de frases del resumen, el proveedor, el modelo y el timeout. La clase Str ofrece la versión estática.

Embeddings

Convierte texto en representaciones vectoriales para aprovecharlo en búsquedas por similitud, entre otras cosas.
También puedes indicar el proveedor, el modelo y las dimensiones.

Embeddings multimodales

El método Embeddings::for no solo acepta cadenas: también admite imágenes, audio, documentos y vídeo, de forma que puedes generar embeddings para contenido distinto del texto. Gemini soporta embeddings de imágenes, audio, documentos y vídeo; VoyageAI soporta embeddings de imágenes y vídeo.
Para las entradas multimodales se usan las mismas clases de archivo que en los adjuntos. Puedes crear estos archivos a partir de una ruta local, de un disco del sistema de archivos, de una URL remota o de contenido codificado en Base64. Las imágenes, documentos y vídeos también pueden crearse desde archivos subidos, y los documentos pueden crearse desde contenido de cadena en bruto.
VoyageAI no permite mezclar en la misma petición contenido multimedia de URL remotas con contenido codificado en Base64. Los archivos locales, de storage y subidos se envían como contenido codificado en Base64, y las entradas de texto se pueden combinar con cualquiera de las dos fuentes de contenido. Consulta la documentación de cada proveedor para conocer los modelos multimodales y las entradas disponibles.

Búsqueda vectorial (pgvector)

Ejemplo de configuración de búsqueda vectorial con PostgreSQL y la extensión pgvector.
1

Crear la migración

2

Configurar el modelo

3

Consulta por similitud

También hay métodos de más bajo nivel.

Caché de embeddings

Puedes cachear los embeddings para no volver a generarlos con el mismo texto. Configura los valores por defecto de la caché en config/ai.php.
También puedes controlar la caché por petición.

Reranking

Puedes reordenar (rerank) los resultados de búsqueda según su relevancia para la consulta. Compatible con los proveedores Cohere y Jina.
Con limit() puedes limitar el número de resultados devueltos.

Reranking de colecciones

Puedes rerankar directamente una colección de Eloquent.

Gestión de archivos

Puedes subir archivos al proveedor de IA para referenciarlos posteriormente.
También puedes trabajar con cadenas o con subidas desde formulario.

Referenciar un archivo ya guardado

Puedes adjuntar al agente un archivo ya subido a partir de su ID.

Obtener y eliminar archivos

Especificar el proveedor

Especificar opciones específicas del proveedor

Con el método withProviderOptions puedes pasar opciones de subida específicas del proveedor. Por ejemplo, puedes configurar el purpose del archivo en OpenAI.
Si quieres indicar opciones distintas por proveedor, pasa un closure.

Vector Stores

Con los vector stores puedes gestionar los documentos en el lado del proveedor.

Añadir archivos al store

También puedes asociar metadatos.

Eliminar archivos del store


Failover

Si indicas varios proveedores en un array, cuando el primero falle se hará automáticamente fallback al siguiente.

Pruebas

Laravel AI SDK ofrece funcionalidad de fakes para pruebas, de forma que puedas testear sin llamar a la API real.

Pruebas de agentes

También hay aserciones para encolado.
Con preventStrayPrompts() se lanza una excepción si se invoca un prompt que no ha sido definido en el fake.
Al hacer fake de un agente con salida estructurada, puedes indicar la respuesta como array. El agente devolverá una respuesta estructurada con los datos indicados.
Si se llama a fake() en un agente con salida estructurada sin pasar datos falsos explícitos, Laravel genera automáticamente datos falsos acordes con el esquema definido por el agente.
Para probar agentes anónimos, usa AnonymousAgent::fake().

Pruebas de generación de imágenes

Pruebas de síntesis de voz

Pruebas de transcripción

Pruebas de embeddings

Pruebas de reranking

Pruebas de archivos

Pruebas de vector stores

También puedes hacer aserciones sobre las operaciones de archivo del store.

Eventos

Laravel AI SDK despacha los siguientes eventos. Puedes escucharlos para registrar logs, monitorizar, etc.
  • PromptingAgent — antes de enviar el prompt
  • AgentPrompted — después de enviar el prompt
  • StreamingAgent — al iniciar el streaming
  • AgentStreamed — al finalizar el streaming
  • InvokingTool — antes de invocar la herramienta
  • ToolInvoked — después de invocar la herramienta
  • ToolApprovalRequested — cuando se solicita aprobación de la herramienta
  • ToolApprovalResolved — después de resolverse la aprobación de la herramienta
  • GeneratingImage — antes de generar la imagen
  • ImageGenerated — después de generar la imagen
  • GeneratingAudio — antes de generar el audio
  • AudioGenerated — después de generar el audio
  • GeneratingTranscription — antes de generar la transcripción
  • TranscriptionGenerated — después de generar la transcripción
  • GeneratingEmbeddings — antes de generar los embeddings
  • EmbeddingsGenerated — después de generar los embeddings
  • Reranking — antes del reranking
  • Reranked — después del reranking
  • StoringFile — antes de guardar el archivo
  • FileStored — después de guardar el archivo
  • FileDeleted — después de eliminar el archivo
  • CreatingStore — antes de crear el store
  • StoreCreated — después de crear el store
  • AddingFileToStore — antes de añadir el archivo al store
  • FileAddedToStore — después de añadir el archivo al store
  • RemovingFileFromStore — antes de eliminar el archivo del store
  • FileRemovedFromStore — después de eliminar el archivo del store
Última modificación el 2 de agosto de 2026