Skip to main content

Einführung

Das Laravel AI SDK bietet eine einheitliche, ausdrucksstarke API für die Interaktion mit KI-Anbietern wie OpenAI, Anthropic und Gemini. Mit dem AI SDK realisieren Sie unter einer einheitlichen, Laravel-typischen Schnittstelle vielfältige KI-Funktionen: den Aufbau intelligenter Agenten mit Tools und strukturierter Ausgabe, Bildgenerierung, Sprachsynthese und Transkription sowie die Erzeugung von Vektor-Embeddings.
Das Laravel AI SDK ist ein in Laravel 13 hinzugefügtes offizielles Paket. 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 Datenbank-Migrationen aus. Dabei werden die Tabellen agent_conversations und agent_conversation_messages erstellt, die zum Speichern des Konversationsverlaufs dienen.

Konfiguration

Umgebungsvariablen

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

Benutzerdefinierte Basis-URL

Wenn Sie einen Proxy-Dienst verwenden, können Sie pro Anbieter eine eigene 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 — beispielsweise LM Studio, vLLM, Together, Fireworks oder ein lokales Gateway —, können Sie den Anbieter mit dem Treiber openai-compatible konfigurieren. url ist erforderlich; ein angegebener key wird als Bearer-Token gesendet.
Nach der Einrichtung können Sie den Anbieter genau wie andere Anbieter über seinen Namen ansprechen.
Wenn Sie ein Standard-Textmodell konfigurieren, müssen Sie das Modell nicht jedes Mal angeben.
OpenAI-kompatible Anbieter unterstützen Textgenerierung, Streaming, Tools, strukturierte Ausgabe und angehängte Bilder. Wenn Ihr Endpunkt zusätzliche Felder im Request-Body benötigt, nutzen Sie Provider-Optionen.

Lab-Enum

Um Anbieter im Code zu referenzieren, verwenden Sie das Lab-Enum.

Agenten

Agenten sind der grundlegende Baustein des Laravel AI SDK. Mit dem Befehl make:agent erzeugen Sie eine Agentenklasse.
Die generierten Agenten werden im Verzeichnis app/Ai/Agents/ abgelegt. Das folgende Beispiel zeigt einen Agenten, der alle wichtigen Interfaces implementiert.

Prompt

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

Konversationskontext

Indem Sie das Interface Conversational implementieren und die Methode messages() definieren, geben Sie den bisherigen Konversationsverlauf an die KI weiter. Mit dem Trait RemembersConversations speichern und laden Sie den Konversationsverlauf automatisch in der Datenbank.
Mit forUser() beginnen Sie eine Konversation. Über die zurückgegebene conversationId können Sie mit continue() an derselben Konversation weiterarbeiten.

Strukturierte Ausgabe

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

Verschachtelte Objekte

Array von Objekten

anyOf (Auswahl aus mehreren Schemata)

Wenn ein Wert einem von mehreren Schemata entsprechen kann, verwenden Sie die Methode anyOf.

Anhänge

Mit dem Argument attachments übergeben Sie dem Agenten Dokumente oder Bilder.
Bildanhänge funktionieren analog.

Streaming

Mit der Methode stream() senden Sie die Antwort in Chunks zurück — ideal, um lange Antworten in Echtzeit an das Frontend zu übertragen.
Mit dem Callback then() beschreiben Sie die Verarbeitung nach Abschluss des Streamings.
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

Die Events eines Streams können Sie an Broadcast-Kanäle wie Laravel Echo senden.
Mit broadcastOnQueue() können Sie das Broadcasting über eine Queue durchführen.

Große Events überspringen

Manche Broadcast-Plattformen beschränken WebSocket-Nachrichten auf etwa 10 KB. Stream-Events mit großen Datenmengen — etwa umfangreiche Tool-Ergebnisse — können diese Grenze überschreiten und beim Broadcasting scheitern. Mit dem Attribut WithoutBroadcasting schließen Sie bestimmte Event-Typen vom Broadcasting aus.
Ausgeschlossene Events werden nicht broadcast, aber weiterhin in der Tabelle agent_conversation_messages gespeichert. Dadurch kann das Frontend nach Abschluss des Streams sämtliche Tool-Daten abrufen. Dies funktioniert sowohl über Queue (broadcastOnQueue) als auch synchron (broadcast / broadcastNow).

Queue

Mit der Methode queue() können Sie Prompts in einer Queue einreihen und asynchron verarbeiten.

Tools

Mit Tools ermöglichen Sie es der KI, Funktionen in Ihrem Code aufzurufen. Mit dem Befehl make:tool erzeugen Sie eine Tool-Klasse.
Registrieren Sie Tools in der Methode tools() des Agenten.

Similarity-Search-Tool

Ein Ähnlichkeitssuche-Tool auf Basis von Vektor-Embeddings lässt sich einfach hinzufügen.
Sie können auch Optionen angeben.
Mit einer Closure lässt sich eine eigene Suchlogik definieren.
Mit withDescription() können Sie die Beschreibung des Tools anpassen.

File-Storage-Tools

Mit der Tool-Factory FileStorage geben Sie einem Agenten Zugriff auf eine Filesystem-Disk von Laravel. Die Methode all liefert einen kompletten Satz an Tools zum Auflisten, Lesen, URL-Generieren, Schreiben, Löschen und Kopieren von Dateien auf der angegebenen Disk.
Um nur lesenden Zugriff zu gewähren, verwenden Sie die Methode readOnly.
Diese Methoden liefern eine Illuminate\Support\Collection zurück, sodass Sie die bereitgestellten Tools weiter einschränken können.

MCP-Tools

Wenn Sie in Ihrer Anwendung Laravel MCP verwenden, können Sie Tools an Ihren Agenten weitergeben, die von einem Model-Context-Protocol-Server angeboten werden. Über den Laravel MCP-Client verbinden Sie sich mit einem entfernten oder lokalen MCP-Server und übergeben dessen Tools direkt an Ihren Agenten.
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. Verwenden Sie den Spread-Operator ..., um sie in das tools-Array Ihres Agenten zu integrieren.
Das AI SDK wrappt jedes MCP-Tool automatisch, sodass der Agent es wie jedes andere Tool aufrufen kann. Sie können auch benannte MCP-Clients verwenden.
Oder eine Verbindung zu einem lokalen MCP-Server aufbauen.
Details zur Erstellung und Authentifizierung von MCP-Clients (Bearer-Token, OAuth usw.) finden Sie in der Dokumentation zum MCP-Client.

Anbieter-Tools

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

Websuche

Fügt eine Websuche zu Ihrem Agenten hinzu. Unterstützt werden Anthropic, OpenAI, Gemini und OpenRouter.
Optional lassen sich die Anzahl der Treffer, 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 zum Suchen von Dokumenten in einem Vector Store. Unterstützt werden OpenAI und Gemini.
Komplexere Filter lassen sich über eine FileSearchQuery angeben.

Sub-Agenten

Ein Agent kann 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 den Sub-Agenten delegieren und dessen Ergebnis in die eigene Antwort einbeziehen. Das ist praktisch, wenn ein generalistischer Agent auf spezialisierte Agenten mit eigenen Anweisungen, Tools, Modelleinstellungen oder Anbieter-Konfigurationen zugreifen soll. Ein Kundensupport-Agent könnte etwa Fragen zur Rückerstattungsrichtlinie an einen spezialisierten Rückerstattungs-Agenten delegieren.
Um anzupassen, wie der Sub-Agent dem übergeordneten Agenten präsentiert wird, implementieren Sie im Sub-Agenten das Interface CanActAsTool und definieren einen Namen und eine Beschreibung für das Tool.
Für Sub-Agenten, die CanActAsTool nicht implementieren, verwendet Laravel den Klassennamen als Tool-Namen und erzeugt automatisch eine generische Beschreibung. Jeder Aufruf eines Sub-Agenten erfolgt unabhängig, ohne den Konversationsverlauf des übergeordneten Agenten zu übernehmen.

Middleware

Sie können Middleware zu einem Agenten hinzufügen, um Prompts und Antworten abzufangen.
Implementieren Sie im Agenten das Interface HasMiddleware und registrieren Sie die Middleware in der Methode middleware().
Beispiel für die Implementierung einer Middleware-Klasse:
Mit then() können Sie auch nachgelagerte Verarbeitung nach der Antwort hinzufügen.

Anonyme Agenten

Ohne eine Klasse zu definieren, können Sie mit dem Helper agent() einen anonymen Agenten verwenden.
Auch anonyme Agenten mit strukturierter Ausgabe lassen sich erstellen.

Agentenkonfiguration (PHP-Attribute)

Die Standardkonfiguration eines Agenten lässt sich mit PHP-Attributen deklarativ festlegen.
Es gibt auch Shortcut-Attribute für die Modellauswahl.

Provider-Optionen

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

Freigabe durch den Menschen (Human Tool Approval)

Um die Tool-Freigabe zu nutzen, benötigen Sie einen Conversational-Agenten mit persistiertem Konversationsverlauf. Der Trait RemembersConversations liefert die notwendige Persistenz, um pausierte Aufrufe wieder aufzunehmen.
Für Tools, die sensible oder nicht rückgängig zu machende Aktionen ausführen — etwa das Löschen von Dateien oder Überweisungen — können Sie vor der Ausführung eine menschliche Freigabe verlangen. Um ein Tool freigabepflichtig zu machen, implementieren Sie den Contract Approvable und verwenden den Trait InteractsWithApprovals. Freigabepflichtige Tools benötigen standardmäßig eine Freigabe.
Wenn Sie in Abhängigkeit von den Argumenten des Tool-Aufrufs entscheiden möchten, ob eine Freigabe nötig ist, definieren Sie die Methode needsApproval im Tool. Diese Methode kann einen Boolean oder eine Approval-Instanz mit einem Begründungsgrund zurückgeben.
Sie können die Freigabeanforderung auch beim Rückgeben des Tools aus der tools-Methode des Agenten überschreiben.
Sobald ein freigabepflichtiges Tool aufgerufen wird, pausiert der Agent vor der Ausführung. Anhand von pendingApprovals der Antwort können Sie ID, Toolname, Argumente und Freigabegrund jedes Tool-Aufrufs prüfen.
Um den Agenten fortzusetzen, setzen Sie die Konversation fort und übergeben eine Decisions-Instanz, die eine Entscheidung für jeden ausstehenden Tool-Aufruf enthält. Mit einer Entscheidung lässt sich der Aufruf freigeben, ablehnen oder die Argumente vor der Ausführung bearbeiten.
Die Booleans true und false sind Kurzformen für Freigabe bzw. Ablehnung. Jeder ausstehende Tool-Aufruf muss eine Entscheidung erhalten. Wird eine unbekannte, fehlende oder bereits aufgelöste Tool-Aufruf-ID angegeben, wird eine ApprovalMismatchException geworfen. Mit den Methoden approveRemaining oder rejectRemaining können Sie eine Standardentscheidung für Aufrufe ohne explizite Entscheidung festlegen.
Wenn Sie mit einem Ergebnis ablehnen — etwa Decision::reject('Nicht freigegeben.') —, wird dieses an das Modell zurückgegeben und die Antwort wird fortgesetzt. Wird ohne Ergebnis abgelehnt, stoppt die Generierungsschleife an dem Punkt, an dem die Ablehnung protokolliert wurde. Die Tool-Freigabe wird von den Methoden prompt, stream, queue, broadcast, broadcastNow und broadcastOnQueue unterstützt. Während des Streamings und Broadcastings wird die Pause als tool_approval_request-Event dargestellt. Wenn Sie das Vercel-AI-SDK-Streaming-Protokoll verwenden, werden Freigabeanforderungen und -ergebnisse als native Tool-Approval-Parts des Protokolls emittiert. Bei in die Queue eingereihten Agenten wird die resultierende Antwort an den then-Callback übergeben; zusätzlich dispatcht Laravel das Event ToolApprovalRequested. Bevor Laravel das Modell zum Fortfahren auffordert, speichert es die Ergebnisse der freigegebenen Tool-Ausführung. Schlägt die Generierung anschließend fehl, sind die Freigaben bereits aufgelöst. Statt dieselben Entscheidungen erneut zu senden, setzen Sie die Konversation mit einem gewöhnlichen Text-Prompt fort.

Vollständiger Freigabe-Ablauf

Die folgenden Routen zeigen einen vollständigen Freigabe-Ablauf. Die GET-Route liefert die Chat-Ansicht, die POST-Route nimmt entweder eine neue Textnachricht aus der Chat-Ansicht oder eine Freigabeentscheidung entgegen. Dieses Beispiel setzt voraus, dass das User-Modell Ihrer Anwendung den Trait HasConversations verwendet.
Wenn der Status der Antwort awaiting_approval lautet, muss die Chat-Ansicht die ausstehenden Freigaben anzeigen und die Wahl des Nutzers mit der Tool-Aufruf-ID als Schlüssel an denselben Endpunkt zurücksenden.
Für gewöhnliche Chat-Nachrichten senden Sie stattdessen den message-Wert.
Der Freigabe-Ablauf ist ein Mechanismus, der KI-Agenten mit weitreichenden Rechten ausstattet und dabei eine menschliche Kontrolle vor der Ausführung vorschaltet. Setzen Sie ihn aktiv bei Tools ein, die nicht rückgängig zu machende Aktionen ausführen — etwa Dateilöschungen, Zahlungsabwicklung oder Schreibzugriffe auf externe APIs.

Bildgenerierung

Mit der Klasse Image können Sie Bilder generieren. Unterstützt werden OpenAI, Gemini und xAI.
Sie können Qualität, Seitenverhältnis und Timeout angeben.
Sie können auch ein Referenzbild anhängen und dieses bearbeiten lassen.

Bild speichern

Bildgenerierung per Queue


Sprachsynthese (TTS)

Mit der Klasse Audio wandeln Sie Text in Sprache um. Unterstützt werden OpenAI und ElevenLabs.
Sie können auch das Geschlecht der Stimme, eine konkrete Voice-ID oder Anweisungen zum Sprechstil angeben.

Audio speichern

Sprachsynthese per Queue


Transkription (STT)

Mit der Klasse Transcription wandeln Sie Audiodateien in Text um. Unterstützt werden OpenAI, ElevenLabs und Mistral.

Sprechertrennung (Diarisierung)

Mit diarize() erhalten Sie eine nach Sprechern getrennte Transkription.

Transkription per Queue


Textzusammenfassung (Text Summarization)

Mit der Methode summarize der Laravel-Klasse Stringable können Sie Text zusammenfassen. Standardmäßig wird in maximal drei Sätzen zusammengefasst und dabei das günstigste Textmodell des konfigurierten Anbieters verwendet.
Sie können auch die maximale Anzahl an Sätzen, Anbieter, Modell und Timeout angeben. Für die Klasse Str gibt es ebenfalls eine statische Variante.

Embeddings

Sie wandeln Text in eine Vektordarstellung um und nutzen diese etwa für Ähnlichkeitssuchen.
Sie können auch Anbieter, Modell und Dimensionen angeben.

Multimodale Embeddings

Die Methode Embeddings::for akzeptiert neben Strings auch Bilder, Audio, Dokumente und Videos als Eingabe und kann so auch für nicht-textuelle Inhalte Embeddings erzeugen. Gemini unterstützt Embeddings für Bilder, Audio, Dokumente und Videos; VoyageAI unterstützt Embeddings für Bilder und Videos.
Für multimodale Eingaben verwenden Sie dieselben Dateiklassen wie für Anhänge. Diese Dateien lassen sich aus lokalen Pfaden, Filesystem-Disks, entfernten URLs oder Base64-kodierten Inhalten erstellen. Bilder, Dokumente und Videos können auch aus hochgeladenen Dateien erstellt werden, Dokumente zusätzlich aus rohen Zeichenkettenwerten.
VoyageAI erlaubt es nicht, Medien aus entfernten URLs und Base64-kodierte Medien innerhalb desselben Requests zu mischen. Lokale Dateien, Storage-Dateien und hochgeladene Dateien werden als Base64-kodierte Inhalte gesendet, während Texteingaben mit beiden Medienquellen kombiniert werden können. Prüfen Sie in der Dokumentation des jeweiligen Anbieters die verfügbaren multimodalen Modelle und Eingaben.

Vektorsuche (pgvector)

Ein Beispiel für die Konfiguration der Vektorsuche mit PostgreSQL und der pgvector-Erweiterung:
1

Migration erstellen

2

Modell konfigurieren

3

Ähnlichkeitssuche

Auch niedrigere Methoden stehen zur Verfügung.

Embeddings zwischenspeichern

Sie können vermeiden, Embeddings für denselben Text mehrfach zu erzeugen, indem Sie das Ergebnis zwischenspeichern. Konfigurieren Sie die Standard-Cache-Einstellung in config/ai.php.
Sie können den Cache auch pro Request steuern.

Reranking

Sie können Suchergebnisse nach Relevanz zur Anfrage neu anordnen. Unterstützt werden Cohere und Jina.
Mit limit() schränken Sie die Anzahl der zurückgegebenen Einträge ein.

Reranking von Collections

Sie können Eloquent-Collections direkt reranken.

Dateiverwaltung

Sie können Dateien zum KI-Anbieter hochladen und später darauf zugreifen.
Auch Zeichenketten und Formular-Uploads sind möglich.

Referenzierung gespeicherter Dateien

Sie hängen eine bereits hochgeladene Datei über ihre ID an einen Agenten an.

Dateien abrufen und löschen

Anbieter angeben

Anbieterspezifische Optionen angeben

Mit der Methode withProviderOptions übergeben Sie anbieterspezifische Upload-Optionen. So können Sie z. B. bei OpenAI den Datei-purpose setzen.
Wenn Sie je Anbieter unterschiedliche Optionen setzen möchten, übergeben Sie eine Closure.

Vector Stores

Mit Vector Stores lassen sich Dokumente auf Anbieterseite verwalten.

Dateien zum Store hinzufügen

Sie können auch Metadaten hinzufügen.

Dateien aus dem Store entfernen


Failover

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

Tests

Das Laravel AI SDK stellt Fake-Funktionen für Tests bereit, sodass Sie testen können, ohne echte APIs anzusprechen.

Agenten testen

Auch Queue-Assertions sind verfügbar.
Mit preventStrayPrompts() wird eine Exception ausgelöst, wenn ein Prompt aufgerufen wird, der nicht im Fake definiert ist.
Wenn Sie einen Agenten mit strukturierter Ausgabe faken, können Sie die Antwort als Array angeben. Der Agent gibt dann eine strukturierte Antwort mit den angegebenen Daten zurück.
Wenn fake() bei einem Agenten mit strukturierter Ausgabe ohne explizite Fake-Daten aufgerufen wird, generiert Laravel automatisch Fake-Daten, die dem definierten Schema entsprechen.
Zum Testen anonymer Agenten verwenden Sie AnonymousAgent::fake().

Bildgenerierung testen

Sprachsynthese testen

Transkription testen

Embeddings testen

Reranking testen

Dateien testen

Vector Stores testen

Auch Assertions für Dateiaktionen am Store sind möglich.

Events

Das Laravel AI SDK dispatcht die folgenden Events. Über das Abonnieren dieser Events können Sie Logging und Monitoring realisieren.
  • PromptingAgent — Vor dem Senden des Prompts
  • AgentPrompted — Nach dem Senden des Prompts
  • StreamingAgent — Bei Beginn des Streamings
  • AgentStreamed — Nach Abschluss des Streamings
  • InvokingTool — Vor dem Aufruf eines Tools
  • ToolInvoked — Nach dem Aufruf eines Tools
  • ToolApprovalRequested — Bei Anfrage einer Tool-Freigabe
  • ToolApprovalResolved — Nach Auflösung einer Tool-Freigabe
  • GeneratingImage — Vor der Bildgenerierung
  • ImageGenerated — Nach der Bildgenerierung
  • GeneratingAudio — Vor der Sprachsynthese
  • AudioGenerated — Nach der Sprachsynthese
  • GeneratingTranscription — Vor der Transkription
  • TranscriptionGenerated — Nach der Transkription
  • GeneratingEmbeddings — Vor der Erzeugung von Embeddings
  • EmbeddingsGenerated — Nach der Erzeugung von Embeddings
  • 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 Erstellen eines Stores
  • StoreCreated — Nach dem Erstellen 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 2. August 2026