Skip to main content

Einführung

Das Laravel AI SDK bietet eine einheitliche und ausdrucksstarke API zur Interaktion mit KI-Anbietern wie OpenAI, Anthropic und Gemini. Mit dem AI SDK können Sie intelligente Agenten mit Tools und strukturierten Ausgaben erstellen, Bilder generieren, Sprache synthetisieren und transkribieren, Vektor-Embeddings erzeugen und viele weitere KI-Funktionen über eine konsistente, Laravel-typische Schnittstelle nutzen.
Das Laravel AI SDK ist ein offizielles Paket, das in Laravel 13 hinzugefügt wurde. Es wird als laravel/ai bereitgestellt und ermöglicht die Nutzung mehrerer KI-Anbieter über eine einheitliche API.

Übersicht der unterstützten Anbieter

Installation

1

Paket installieren

Installieren Sie das Laravel AI SDK über Composer.
2

Konfigurationsdatei und Migrationen veröffentlichen

Veröffentlichen Sie die Konfigurationsdatei und die Migrationen mit dem Artisan-Befehl vendor:publish.
3

Migrationen ausführen

Führen Sie die Datenbankmigrationen aus. Dabei werden die Tabellen agent_conversations und agent_conversation_messages erstellt, in denen der Gesprächsverlauf gespeichert wird.

Konfiguration

Umgebungsvariablen

Tragen Sie in Ihre .env-Datei die API-Schlüssel der KI-Anbieter ein, die Sie verwenden möchten.
Die Standardmodelle für Text, Bild, Audio, Transkription und Embeddings können außerdem in config/ai.php konfiguriert werden.

Benutzerdefinierte Basis-URL

Wenn Sie Anfragen über einen Proxydienst leiten möchten, können Sie pro Anbieter eine benutzerdefinierte URL festlegen.
Benutzerdefinierte Basis-URLs stehen für OpenAI, Anthropic, Gemini, Groq, Cohere, DeepSeek, xAI und OpenRouter zur Verfügung.

OpenAI-kompatible Anbieter

Wenn Sie eine OpenAI-kompatible API verwenden – zum Beispiel LM Studio, vLLM, Together, Fireworks oder ein lokales Gateway – können Sie einen Anbieter mit dem Treiber openai-compatible konfigurieren. url ist erforderlich; wenn Sie key angeben, wird er als Bearer-Token gesendet.
Nach der Konfiguration können Sie den Anbieter wie jeden anderen über seinen Namen ansprechen.
Wenn Sie ein Standard-Textmodell konfigurieren, müssen Sie das Modell nicht bei jedem Aufruf angeben.
Der OpenAI-kompatible Anbieter unterstützt Textgenerierung, Streaming, Tools, strukturierte Ausgaben und Bildanhänge. Wenn Ihr Endpunkt zusätzliche Felder im Request-Body benötigt, verwenden Sie die Anbieteroptionen.

Lab-Enum

Verwenden Sie das Lab-Enum, um Anbieter im Code zu referenzieren.

Agenten

Agenten sind der grundlegende Baustein des Laravel AI SDK. Mit dem Befehl make:agent erzeugen Sie eine Agentenklasse.
Die erzeugten Agenten werden im Verzeichnis app/Ai/Agents/ abgelegt. Nachfolgend sehen Sie einen Agenten, der alle wichtigen Schnittstellen implementiert.

Prompt

Über die Methode prompt() senden Sie eine Nachricht an den Agenten.
Mit der statischen Methode make() können Sie eine Instanz erzeugen und Abhängigkeiten über den Container auflösen lassen.
Anbieter, Modell und Timeout lassen sich als Argumente von prompt() überschreiben.

Gesprächskontext

Wenn Sie das Conversational-Interface implementieren und eine Methode messages() definieren, wird der bisherige Gesprächsverlauf an die KI übergeben. Das Trait RemembersConversations speichert und lädt den Gesprächsverlauf automatisch aus der Datenbank.
Beginnen Sie eine Unterhaltung mit forUser() und setzen Sie sie mit continue() fort, indem Sie die zurückgegebene conversationId verwenden.

Strukturierte Ausgaben

Implementieren Sie das HasStructuredOutput-Interface und definieren Sie in der Methode schema() ein JSON-Schema, um die Antwort der KI als strukturierte Daten zu erhalten.

Verschachtelte Objekte

Arrays von Objekten

anyOf (Auswahl aus mehreren Schemata)

Wenn ein Wert einem von mehreren möglichen Schemata entsprechen soll, verwenden Sie die Methode anyOf.

Anhänge

Über das Argument attachments können Sie dem Agenten Dokumente oder Bilder übergeben.
Bilder lassen sich auf gleiche Weise anhängen.

Streaming

Mit der Methode stream() können Sie die Antwort chunkweise zurückgeben. Das eignet sich, um lange Antworten in Echtzeit an das Frontend zu senden.
Mit einem then()-Callback lässt sich die Verarbeitung nach Abschluss des Streams beschreiben.
Sie können den Stream auch manuell iterieren.

Vercel-AI-SDK-Protokoll

Wenn Sie im Frontend das Vercel AI SDK verwenden, rufen Sie usingVercelDataProtocol() auf.

Broadcasting

Ereignisse aus dem Stream können an Broadcast-Kanäle, etwa Laravel Echo, gesendet werden.
Mit broadcastOnQueue() erfolgt das Broadcasten über eine Queue.

Sehr große Ereignisse überspringen

Manche Broadcast-Plattformen begrenzen WebSocket-Nachrichten auf etwa 10 KB. Datenintensive Stream-Ereignisse wie große Tool-Ergebnisse können diese Grenze überschreiten und beim Broadcasten fehlschlagen. Mit dem Attribut WithoutBroadcasting können Sie bestimmte Ereignistypen vom Broadcast ausschließen.
Ausgeschlossene Ereignisse werden nicht per Broadcast versendet, aber weiterhin in der Tabelle agent_conversation_messages gespeichert. Dadurch kann das Frontend nach Abschluss des Streams weiterhin auf die vollständigen Tool-Daten zugreifen. Dies funktioniert sowohl über die Queue (broadcastOnQueue) als auch synchron (broadcast / broadcastNow).

Queue

Mit der Methode queue() können Sie Prompts asynchron in die Queue stellen.

Tools

Mit Tools kann die KI Funktionen in Ihrem Code aufrufen. Mit dem Befehl make:tool erzeugen Sie eine Toolklasse.
Registrieren Sie Tools in der Methode tools() des Agenten.

Ähnlichkeitssuche als Tool

Ein Tool für die Ähnlichkeitssuche mit Vektor-Embeddings lässt sich unkompliziert einbinden.
Sie können zusätzliche Optionen angeben.
Eine eigene Suchlogik lässt sich per Closure definieren.
Mit withDescription() passen Sie die Beschreibung des Tools an.

Dateisystem-Tools

Mit der Fabrik FileStorage können Sie Ihrem Agenten Zugriff auf Filesystem-Disks von Laravel geben. Die Methode all gibt einen Satz von Tools zurück, mit denen der Agent Dateien auf der angegebenen Disk auflisten, lesen, URLs erzeugen, schreiben, löschen und kopieren kann.
Wenn Sie nur Lesezugriff gewähren möchten, verwenden Sie die Methode readOnly.
Diese Methoden liefern eine Illuminate\Support\Collection zurück, sodass Sie die bereitgestellten Tools weiter filtern können.

MCP-Tools

Wenn Ihre Anwendung Laravel MCP verwendet, können Sie Ihrem Agenten die Tools bereitstellen, die ein Model-Context-Protocol-Server veröffentlicht. Mit dem Laravel-MCP-Client können Sie sich mit entfernten oder lokalen MCP-Servern verbinden und deren Tools direkt an den Agenten übergeben.
Für die Nutzung von MCP-Tools muss das Paket Laravel MCP in Ihrer Anwendung installiert sein.
Die Methode tools des MCP-Clients liefert eine Collection zurück, die Sie mit dem Spread-Operator ... in das tools-Array des Agenten einfügen.
Das AI SDK umschließt jedes MCP-Tool automatisch, sodass der Agent es wie jedes andere Tool aufrufen kann. Sie können auch benannte MCP-Clients verwenden.
Ebenso können Sie sich mit einem lokalen MCP-Server verbinden.
Details zur Erstellung von MCP-Clients und zur Authentifizierung (Bearer-Token, OAuth usw.) finden Sie in der MCP-Client-Dokumentation.

Anbieter-Tools

Dies sind spezielle Tools, die die KI-Anbieter nativ implementieren.

Websuche

Fügt dem Agenten eine Websuche hinzu. Unterstützt werden Anthropic, OpenAI, Gemini und OpenRouter.
Optional lassen sich die Anzahl der Treffer, erlaubte Domains und der Standort einschränken.

Web-Fetch

Ein Tool, das den Inhalt einer angegebenen URL abruft. Unterstützt werden Anthropic und Gemini.

Dateisuche

Ein Tool, das Dokumente aus einem Vektorspeicher durchsucht. Unterstützt werden OpenAI und Gemini.
Auch komplexe Filter über FileSearchQuery sind möglich.

Subagenten

Agenten können auch aus der tools()-Methode eines anderen Agenten zurückgegeben werden. Wenn Sie einen Agenten als Tool registrieren, kann der übergeordnete Agent bestimmte Aufgaben an einen Subagenten delegieren und dessen Ergebnis in die ursprüngliche Antwort einbetten. Das ist nützlich, wenn ein Allzweck-Agent auf spezialisierte Agenten mit eigenen Anweisungen, Tools, Modell- oder Anbietereinstellungen zugreifen soll. Ein Beispiel: Ein Kundenservice-Agent delegiert Fragen zur Rückerstattungsrichtlinie an einen spezialisierten Erstattungsagenten.
Um festzulegen, wie der Subagent gegenüber dem übergeordneten Agenten erscheint, implementieren Sie das Interface CanActAsTool und definieren einen Namen und eine Beschreibung für das Tool.
Wenn ein Subagent CanActAsTool nicht implementiert, verwendet Laravel den Klassennamen als Tool-Namen und generiert automatisch eine allgemeine Beschreibung. Jeder Aufruf eines Subagenten erfolgt unabhängig; der Gesprächsverlauf des übergeordneten Agenten wird nicht übernommen.

Middleware

Sie können Middleware zu einem Agenten hinzufügen, um Prompts und Antworten abzufangen.
Lassen Sie den Agenten das Interface HasMiddleware implementieren und registrieren Sie die Middleware in der Methode middleware().
Beispiel für eine Middleware-Klasse:
Mit then() können Sie zusätzliche Verarbeitungsschritte nach der Antwort ergänzen.

Anonyme Agenten

Ohne eine eigene Klasse zu definieren, können Sie mit dem Helper agent() anonyme Agenten verwenden.
Auch anonyme Agenten mit strukturierter Ausgabe sind möglich.

Agentenkonfiguration (PHP-Attribute)

Standardeinstellungen eines Agenten lassen sich deklarativ über PHP-Attribute festlegen.
Für die Modellauswahl gibt es Abkürzungsattribute.

Anbieteroptionen

Wenn Sie das Interface HasProviderOptions implementieren, können Sie anbieterspezifische Optionen übergeben.

Bildgenerierung

Mit der Klasse Image können Sie Bilder generieren. Unterstützt werden die Anbieter OpenAI, Gemini und xAI.
Sie können Qualität, Seitenverhältnis und Timeout angeben.
Auch das Bearbeiten anhand eines Referenzbildes ist möglich.

Bilder speichern

Bildgenerierung per Queue


Sprachsynthese (TTS)

Mit der Klasse Audio können Sie Text in Sprache umwandeln. Unterstützt werden die Anbieter OpenAI und ElevenLabs.
Sie können das Geschlecht der Stimme, eine konkrete Voice-ID sowie Anweisungen für den Sprechstil angeben.

Audio speichern

Sprachsynthese per Queue


Transkription (STT)

Mit der Klasse Transcription können Sie Audiodateien in Text umwandeln. Unterstützt werden die Anbieter OpenAI, ElevenLabs und Mistral.

Sprechertrennung (Diarisierung)

Mit diarize() erhalten Sie eine Transkription, die nach Sprechern getrennt ist.

Transkription per Queue


Embeddings

Wandeln Sie Text in eine Vektor-Repräsentation um, die sich zum Beispiel für die Ähnlichkeitssuche nutzen lässt.
Anbieter, Modell und Anzahl der Dimensionen lassen sich ebenfalls angeben.

Vektorsuche (pgvector)

Beispielkonfiguration einer Vektorsuche mit PostgreSQL und der pgvector-Erweiterung.
1

Migration erstellen

2

Model konfigurieren

3

Ähnlichkeitssuche

Es stehen auch Low-Level-Methoden zur Verfügung.

Embeddings zwischenspeichern

Sie können Embeddings zwischenspeichern, um denselben Text nicht mehrfach zu berechnen. Die Standardeinstellungen für den Cache legen Sie in config/ai.php fest.
Sie können den Cache auch pro Anfrage steuern.

Reranking

Suchergebnisse können anhand ihrer Relevanz zu einer Anfrage neu sortiert werden (Reranking). Unterstützt werden die Anbieter Cohere und Jina.
Mit limit() schränken Sie die Anzahl der zurückgegebenen Ergebnisse ein.

Reranking von Collections

Eloquent-Collections lassen sich direkt reranken.

Dateiverwaltung

Sie können Dateien zu einem KI-Anbieter hochladen und später darauf verweisen.
Auch Strings und Formular-Uploads sind möglich.

Auf gespeicherte Dateien verweisen

Bereits hochgeladene Dateien können Sie über ihre ID an einen Agenten anhängen.

Dateien abrufen und löschen

Anbieter angeben

Anbieterspezifische Optionen angeben

Über die Methode withProviderOptions können Sie anbieterspezifische Upload-Optionen übergeben. So können Sie zum Beispiel den purpose-Wert für OpenAI-Dateien setzen.
Wenn Sie pro Anbieter unterschiedliche Optionen angeben möchten, übergeben Sie eine Closure.

Vektorspeicher

Mit Vektorspeichern (Vector Stores) können Sie Dokumente auf Anbieterseite verwalten lassen.

Dateien zum Store hinzufügen

Sie können auch Metadaten anhängen.

Dateien aus einem Store entfernen


Failover

Wenn Sie mehrere Anbieter als Array angeben, wird bei einem Fehlschlag des ersten Anbieters automatisch auf den nächsten umgeschaltet.

Testen

Das Laravel AI SDK stellt Fakes bereit, mit denen Sie testen können, ohne echte APIs aufzurufen.

Agenten testen

Auch für die Queue stehen Zusicherungen zur Verfügung.
Mit preventStrayPrompts() wird eine Ausnahme ausgelöst, wenn ein Prompt aufgerufen wird, der nicht als Fake definiert wurde.
Wenn Sie einen Agenten mit strukturierter Ausgabe faken, können Sie die Antwort als Array angeben. Der Agent liefert dann eine strukturierte Antwort mit den angegebenen Daten zurück.
Wenn fake() bei einem Agenten mit strukturierter Ausgabe ohne explizit angegebene Fake-Daten aufgerufen wird, generiert Laravel automatisch Fake-Daten, die dem vom Agenten definierten Schema entsprechen.
Zum Testen anonymer Agenten verwenden Sie AnonymousAgent::fake().

Bildgenerierung testen

Sprachsynthese testen

Transkription testen

Embeddings testen

Reranking testen

Dateien testen

Vektorspeicher testen

Auch Zusicherungen zu Dateioperationen an einem Store sind möglich.

Events

Das Laravel AI SDK dispatcht die folgenden Events. Durch Abonnieren dieser Events lassen sich Logging, Monitoring und Ähnliches umsetzen.
  • PromptingAgent — vor dem Senden eines Prompts
  • AgentPrompted — nach dem Senden eines Prompts
  • StreamingAgent — beim Start des Streamings
  • AgentStreamed — nach Abschluss des Streamings
  • InvokingTool — vor dem Aufruf eines Tools
  • ToolInvoked — nach dem Aufruf eines Tools
  • GeneratingImage — vor der Bildgenerierung
  • ImageGenerated — nach der Bildgenerierung
  • GeneratingAudio — vor der Audiogenerierung
  • AudioGenerated — nach der Audiogenerierung
  • GeneratingTranscription — vor der Transkription
  • TranscriptionGenerated — nach der Transkription
  • GeneratingEmbeddings — vor der Embedding-Erzeugung
  • EmbeddingsGenerated — nach der Embedding-Erzeugung
  • Reranking — vor dem Reranking
  • Reranked — nach dem Reranking
  • StoringFile — vor dem Speichern einer Datei
  • FileStored — nach dem Speichern einer Datei
  • FileDeleted — nach dem Löschen einer Datei
  • CreatingStore — vor dem Anlegen eines Stores
  • StoreCreated — nach dem Anlegen eines Stores
  • AddingFileToStore — vor dem Hinzufügen einer Datei zum Store
  • FileAddedToStore — nach dem Hinzufügen einer Datei zum Store
  • RemovingFileFromStore — vor dem Entfernen einer Datei aus dem Store
  • FileRemovedFromStore — nach dem Entfernen einer Datei aus dem Store
Zuletzt geändert am 20. Juli 2026