Cuándo necesitas un proveedor personalizado
Laravel AI SDK soporta de forma predeterminada los principales servicios de IA como OpenAI, Anthropic, Gemini y Mistral. Sin embargo, en los siguientes casos los proveedores estándar no bastan:- Servicios de IA emergentes que aún no cuentan con soporte oficial.
- Cuando quieres pasar por una gateway de modelos interna o una capa de gestión de facturación.
- Servidores de inferencia on-premise con protocolos o esquemas de autenticación propios.
AiManager del SDK, podrás utilizarlo con la misma API que los proveedores estándar.
Para APIs compatibles con OpenAI, usa el driver integradoDesde la versión 0.9 del SDK se proporciona el driver
openai-compatible. Para servidores de inferencia internos compatibles con OpenAI (como el endpoint compatible con OpenAI de Ollama), basta con añadir la configuración a config/ai.php; no es necesario implementar un proveedor personalizado.Descripción general de la arquitectura
Estructura de dos capas
Laravel AI SDK está compuesto por dos capas: proveedores (providers) y gateways.| Capa | Rol | Ejemplo |
|---|---|---|
| Provider | Interfaz del lado de la aplicación. Resuelve el nombre del modelo y conserva la configuración. | OpenAiProvider, AnthropicProvider |
| Gateway | Envía la petición real a la API correspondiente a un paso. | AnthropicGateway, OpenAiCompatibleGateway |
Laravel\Ai\Providers\Provider e implementan los contratos (interfaces) correspondientes a cada capacidad. Los bucles de varios pasos que incluyen llamadas a herramientas se ejecutan haciendo que TextGenerationLoop invoque el gateway de forma repetida.
Lista de contratos
Implementa solo los contratos necesarios según las funcionalidades que quieras ofrecer.| Contrato | Namespace | Funcionalidad |
|---|---|---|
TextProvider | Laravel\Ai\Contracts\Providers\TextProvider | Generación de texto y agentes |
EmbeddingProvider | Laravel\Ai\Contracts\Providers\EmbeddingProvider | Generación de embeddings vectoriales |
ImageProvider | Laravel\Ai\Contracts\Providers\ImageProvider | Generación de imágenes |
AudioProvider | Laravel\Ai\Contracts\Providers\AudioProvider | Síntesis de voz (TTS) |
TranscriptionProvider | Laravel\Ai\Contracts\Providers\TranscriptionProvider | Reconocimiento de voz (STT) |
En la mayoría de los casos, basta con implementar
TextProvider.Contrato TextProvider
Es la interfaz que implementan los proveedores de generación de texto (src/Contracts/Providers/TextProvider.php).
prompt() y stream() pueden delegarse en los traits existentes (GeneratesText, StreamsText), por lo que en la práctica solo debes implementar los tres métodos que devuelven el nombre del modelo y textGateway(), un total de cuatro. Como el bucle de herramientas multi-paso lo gestiona TextGenerationLoop, el gateway solo procesa la petición de un único paso.
Ejemplo de implementación: un proveedor personalizado
Ejemplo para registrar un servicio de inferencia con una API propia como proveedor llamadomy-inference.
Regístralo en el AppServiceProvider
Regístralo con
extend() en el método boot de App\Providers\AppServiceProvider.Implementar un gateway personalizado
Para servicios con una API propia que no sea compatible con OpenAI, necesitarás un gateway personalizado que implemente el contratoStepTextGateway.
Contrato StepTextGateway
Es la interfaz definida ensrc/Contracts/Gateway/StepTextGateway.php. El gateway procesa la petición correspondiente a un solo paso de la conversación y devuelve un StepResponse. El bucle de llamadas a herramientas lo gestiona TextGenerationLoop desde la capa superior.
Ejemplo de implementación de un gateway personalizado
Este es el esqueleto de un gateway sencillo que envía peticiones HTTP a una API de inferencia propia.Si tu gateway soporta llamadas a herramientas (function calling), incluye los resultados de la llamada en
toolCalls desde generateTextStep() y establece finishReason como FinishReason::ToolCalls. La ejecución de las herramientas y el paso al siguiente step los gestiona TextGenerationLoop automáticamente. Como referencia de implementación, consulta AnthropicGateway.php.Cómo hacer pruebas
Usa fake() en la clase del agente
Para probar un agente que utiliza un proveedor personalizado, utiliza el métodofake() de la clase del agente. Se instalará un gateway falso en el proveedor, independientemente de si se trata de un proveedor personalizado o no.
Desde 0.9, las respuestas de
Agent::fake() pasan por el mismo TextGenerationLoop que un proveedor real. Si configuras una llamada falsa a una herramienta en un agente sin herramientas registradas, se lanzará NoSuchToolException.Proveedor mock usando extend()
También puedes registrar un proveedor de prueba en el contenedor usandoextend().
Enlaces de referencia
OllamaProvider.php — ejemplo simple de implementación de un provider
Configuración mínima de un proveedor que se conecta a un servidor de modelos local. Es una buena referencia para implementar tu propio proveedor.
AnthropicGateway.php — ejemplo de implementación de gateway
Ejemplo de implementación de un gateway que implementa
StepTextGateway. Puedes ver la implementación de generateTextStep() y generateStreamStep().StepTextGateway Contract
Definición de la interfaz que implementan los gateways de generación de texto.
TextProvider Contract
Definición de la interfaz que implementan los proveedores de generación de texto.