Quando serve un provider personalizzato
Laravel AI SDK supporta di default i principali servizi AI (OpenAI, Anthropic, Gemini, Mistral). Ma nei casi seguenti i provider standard non bastano.- Servizi AI emergenti non ancora ufficialmente supportati
- Vuoi passare attraverso un gateway di modelli interno o un livello di gestione fatturazione aziendale
- Server di inferenza on-premise con protocolli o metodi di autenticazione proprietari
AiManager dell’SDK: potrai poi usarlo con la stessa API dei provider standard.
Per API OpenAI-compatibili usa il driver integratoDa SDK 0.9 è disponibile il driver
openai-compatible. Per server di inferenza interni OpenAI-compatibili (per esempio l’endpoint OpenAI-compatibile di Ollama) basta aggiungere una voce a config/ai.php senza implementare un provider custom.Panoramica dell’architettura
Struttura a due livelli
Laravel AI SDK è composto da due livelli: Provider e Gateway.
Tutti i provider estendono la classe astratta
Laravel\Ai\Providers\Provider e implementano i contract (interfacce) delle funzionalità che offrono. Il loop multi-step con chiamata di tool è realizzato da TextGenerationLoop che invoca ripetutamente il gateway.
Elenco dei contract
Implementi solo i contract corrispondenti alle funzionalità che vuoi offrire.Nella maggior parte dei casi implementare solo
TextProvider è sufficiente.Il contract TextProvider
Interfaccia che i provider di generazione testo implementano (src/Contracts/Providers/TextProvider.php).
prompt() e stream() può essere delegata ai trait esistenti (GeneratesText, StreamsText), quindi in pratica devi implementare quattro metodi: i tre che restituiscono i nomi dei modelli e textGateway(). Il loop multi-step per i tool è gestito da TextGenerationLoop: il gateway elabora solo la richiesta di un singolo step.
Esempio di implementazione: provider personalizzato
Esempio di registrazione di un servizio di inferenza proprietario con un provider chiamatomy-inference.
1
Creare la classe provider
Crea
app/Ai/Providers/MyInferenceProvider.php.2
Registrarlo in AppServiceProvider
Nel metodo
boot di App\Providers\AppServiceProvider registra il provider con extend().3
Aggiungere il provider a config/ai.php
.env.4
Utilizzo da un agente
Dopo la registrazione, basta indicare il nome del provider nell’argomento Per usarlo come provider di default, cambia la chiave
provider di prompt() per usarlo come qualsiasi altro provider standard.default in config/ai.php.Implementazione di un gateway personalizzato
Per servizi con API proprietarie non OpenAI-compatibili ti serve un gateway custom che implementi il contractStepTextGateway.
Il contract StepTextGateway
Interfaccia definita insrc/Contracts/Gateway/StepTextGateway.php. Il gateway gestisce la richiesta di un solo step della conversazione e restituisce uno StepResponse. Il loop delle chiamate di tool è gestito dal TextGenerationLoop chiamante.
Esempio di implementazione di un gateway custom
Scheletro di un gateway semplice che invia richieste HTTP a un’API di inferenza proprietaria.Se vuoi supportare la chiamata di tool (function calling), in
generateTextStep() includi le tool call in toolCalls e imposta finishReason su FinishReason::ToolCalls. L’esecuzione dei tool e il passaggio allo step successivo sono gestiti automaticamente da TextGenerationLoop. Come riferimento consulta AnthropicGateway.php.Come testare
Usare fake() sulla classe Agent
Per testare un agente che usa un provider custom, usa il metodofake() della classe Agent. Indipendentemente dal fatto che sia custom o meno, un gateway fake viene assegnato al provider.
Da 0.9, le risposte di
Agent::fake() passano attraverso lo stesso TextGenerationLoop del provider reale. Se imposti una chiamata di tool fake su un agente che non registra tool, viene sollevata NoSuchToolException.Provider mock con extend()
Puoi anche registrare un provider di test tramite il container usandoextend().
Link di riferimento
OllamaProvider.php — esempio semplice di provider
Configurazione minima di un provider che si collega a un model server locale. Utile come riferimento per implementare provider custom.
AnthropicGateway.php — esempio di gateway
Esempio di gateway che implementa
StepTextGateway. Puoi vedere l’implementazione di generateTextStep() e generateStreamStep().Contract StepTextGateway
Definizione dell’interfaccia che un text generation gateway deve implementare.
Contract TextProvider
Definizione dell’interfaccia che un text generation provider deve implementare.