Skip to main content

Wann Sie einen eigenen Provider brauchen

Das Laravel AI SDK unterstützt OpenAI, Anthropic, Gemini, Mistral und andere zentrale KI-Dienste out of the box. In folgenden Fällen reichen die Standard-Provider aber nicht:
  • Ein aufstrebender KI-Dienst, der noch nicht offiziell unterstützt wird.
  • Sie möchten über ein internes Modell-Gateway oder eine Abrechnungsschicht laufen.
  • Ein On-Prem-Inferenzserver mit eigenem Protokoll oder Auth-Verfahren.
In solchen Fällen implementieren Sie einen eigenen Provider und registrieren ihn am AiManager des SDK. Die Nutzung ist dann identisch zu den Standard-Providern.
Für OpenAI-kompatible APIs den eingebauten Driver nutzenAb SDK 0.9 ist der Treiber openai-compatible standardmäßig verfügbar. Für interne OpenAI-kompatible Inferenzserver (etwa den OpenAI-kompatiblen Endpoint von Ollama) genügt eine Ergänzung in config/ai.php — eine eigene Provider-Implementierung ist nicht nötig.

Überblick der Architektur

Zweischichtiger Aufbau

Das Laravel AI SDK besteht aus zwei Schichten: Provider und Gateway. Alle Provider erben von der abstrakten Klasse Laravel\Ai\Providers\Provider und implementieren feature-spezifische Contracts. Die mehrstufige Schleife mit Tool-Aufrufen läuft in TextGenerationLoop, das das Gateway wiederholt aufruft.

Übersicht der Contracts

Sie implementieren nur die Contracts der Funktionen, die Sie anbieten wollen.
In den meisten Fällen genügt die Implementierung von TextProvider.

Der TextProvider-Contract

Das ist das Interface, das ein Text-Provider implementiert (src/Contracts/Providers/TextProvider.php).
Die Implementierung von prompt() und stream() können Sie an vorhandene Traits (GeneratesText, StreamsText) abgeben — Sie müssen also nur drei Methoden für die Modellnamen und zusätzlich textGateway() implementieren (insgesamt vier). Die mehrstufige Tool-Schleife übernimmt TextGenerationLoop; das Gateway verarbeitet nur den Request eines einzelnen Schritts.

Implementierungsbeispiel: eigener Provider

Beispiel: Ein Inferenzdienst mit eigener API wird als Provider my-inference registriert.
1

Provider-Klasse anlegen

Legen Sie app/Ai/Providers/MyInferenceProvider.php an.
2

Im AppServiceProvider registrieren

Registrieren Sie den Provider in der boot-Methode Ihres App\Providers\AppServiceProvider per extend().
3

Provider in config/ai.php ergänzen

In der .env ergänzen Sie:
4

Aus einem Agenten heraus nutzen

Nach der Registrierung geben Sie in prompt() den Provider-Namen an — die Nutzung entspricht den Standard-Providern.
Als Default-Provider ändern Sie den default-Key in config/ai.php.

Ein eigenes Gateway implementieren

Für Dienste mit eigener, nicht OpenAI-kompatibler API brauchen Sie ein Gateway, das den StepTextGateway-Contract implementiert.

Der Contract StepTextGateway

Definiert in src/Contracts/Gateway/StepTextGateway.php. Das Gateway verarbeitet einen einzelnen Schritt der Konversation und gibt eine StepResponse zurück. Die Tool-Schleife übernimmt der aufrufende TextGenerationLoop.
Der ältere TextGateway-Contract (generateText(), stream(), onToolInvocation()) aus 0.8 wurde in 0.9 entfernt. Bestehende eigene Gateways müssen auf StepTextGateway migriert werden. Das onToolInvocation() bei Tool-Aufrufen ist in den TextGenerationLoop gewandert.

Beispiel eines eigenen Gateways

Ein Gerüst, das HTTP-Requests an eine eigene Inferenz-API sendet.
Für Tool-Aufrufe (Function Calling) legen Sie in generateTextStep() das Ergebnis der Tool-Auswertung in toolCalls ab und setzen finishReason auf FinishReason::ToolCalls. Die Tool-Ausführung und den nächsten Schritt übernimmt TextGenerationLoop. Referenzimplementierung: AnthropicGateway.php.

Wie Sie testen

Das fake() der Agent-Klasse verwenden

In Tests der Agent-Klasse mit Ihrem eigenen Provider verwenden Sie die fake()-Methode der Agent-Klasse. Sie setzt unabhängig vom Provider ein Fake-Gateway.
Ab 0.9 laufen Agent::fake()-Responses durch denselben TextGenerationLoop wie echte Provider. Definieren Sie Fake-Tool-Aufrufe bei einem Agenten ohne Tools, wird eine NoSuchToolException geworfen.

Mock-Provider per extend()

Sie können auch einen Test-Provider über den Container registrieren.

OllamaProvider.php — schlichtes Provider-Beispiel

Ein minimaler Provider, der einen lokalen Modell-Server anbindet — als Vorlage für eigene Provider.

AnthropicGateway.php — Beispiel-Gateway

Beispielimplementierung eines Gateways, das StepTextGateway implementiert. Zeigt generateTextStep() und generateStreamStep().

StepTextGateway Contract

Definition des Interfaces, das Text-Gateways implementieren.

TextProvider Contract

Definition des Interfaces, das Text-Provider implementieren.
Zuletzt geändert am 13. Juli 2026