Symfony AI Structured Output
Symfony AI Structured Output liefert typsichere PHP Objekte aus LLM Antworten. Beispiel: Land eingeben, Hauptstadt zurückbekommen. Mit Ollama und Symfony.
Mehr erfahren
Model Inference bezeichnet in Symfony AI das Senden von Prompts an ein KI Modell und das Empfangen der Antwort über einen einzigen Methodenaufruf. Die Platform Component abstrahiert dabei die Unterschiede der Anbieter. Du sprichst OpenAI, Anthropic, Mistral, Google Gemini oder ein lokales Modell über dieselbe invoke Schnittstelle an, ohne deinen Anwendungscode zu ändern.
Das mentale Modell besteht aus drei Bausteinen: Du baust eine MessageBag aus Message Objekten, übergibst sie einer Platform über invoke und liest das Result mit einer der asText, asObject, asFile oder asStream Methoden aus. Diese drei Nomen lernst du einmal, danach funktioniert jeder Anbieter und jede Modalität gleich.
Der Vorteil liegt in der Entkopplung: KI Modelle ändern sich schneller als Bibliotheken, neue erscheinen fast täglich. Model Inference über die Platform trennt den Modell Lebenszyklus vom Anwendungscode. Never Code Alone setzt genau diese Abstraktion ein, um KI Features anbieterunabhängig in Symfony und Sulu CMS Projekte zu bringen, inklusive lokaler Modelle für den Datenschutz.
Never Code Alone entwickelt seit über 15 Jahren mit Symfony und betreibt die eigene Plattform auf Sulu CMS. Model Inference über die Platform Component ist für uns der zentrale Hebel, um KI Features ohne Vendor Lock In zu bauen. Auf derselben Schnittstelle setzt auch Structured Output auf, das typsichere PHP Objekte aus Modellantworten erzeugt.
Wir begleiten Teams beim Vibe Coding Consulting, beim Weg vom Prototyp zur Produktion und beim Absichern über CI/CD Pipelines mit PHPStan, Psalm und PHPUnit. Für sensible Daten setzen wir auf DSGVO konforme self hosted KI mit Ollama und europäischen Modellen wie Mistral.
Finde das passende Angebot für dein Projekt
Hey! Ich bin CodeBot. Lass uns herausfinden, wie wir dein Projekt zum Fliegen bringen.
Was soll entstehen?
Du erstellst eine Platform über eine Factory, baust eine MessageBag mit System und User Nachricht und rufst invoke mit Modellname und Nachrichten auf. Das Ergebnis liest du über asText als reinen Text aus. Genau dieses eine Beispiel zeigt bereits das komplette Prinzip.
$platform = Factory::createPlatform($apiKey, http_client());
$messages = new MessageBag(
Message::forSystem('You are a helpful assistant.'),
Message::ofUser('What is the Symfony framework?'),
);
$result = $platform->invoke('gpt-5-mini', $messages);
echo $result->asText();
Drei Bausteine reichen: MessageBag, Platform und Result. Die Platform ist eine dünne Abstraktion über die Anbieter APIs, jeder Aufruf läuft über dieselbe invoke Methode, unabhängig davon, welches Modell dahinter steckt. Das Result liefert je nach Bedarf Text, ein typsicheres Objekt, eine Datei oder einen Stream.
Der eigentliche Gewinn von Model Inference ist die Anbieterunabhängigkeit. Willst du von OpenAI zu Anthropic wechseln, tauschst du nur die Factory und den Modellnamen. Der restliche Code bleibt identisch, weil MessageBag, invoke und Result für jeden Anbieter gleich funktionieren.
// OpenAI
use Symfony\AI\Platform\Bridge\OpenAi\Factory;
$platform = Factory::createPlatform($apiKey);
$result = $platform->invoke('gpt-5-mini', $messages);
// Anthropic: nur Factory und Modellname tauschen
use Symfony\AI\Platform\Bridge\Anthropic\Factory as AnthropicFactory;
$platform = AnthropicFactory::createPlatform($apiKey);
$result = $platform->invoke('claude-opus-4-8', $messages);
Die Liste der unterstützten Plattformen ist lang: OpenAI, Anthropic, Google Gemini, Azure OpenAI, AWS Bedrock, Mistral, Ollama, ElevenLabs und jeder OpenAI kompatible Endpoint über die Generic Bridge. Über den models.dev Bridge bleibt der Modellkatalog aktuell, neue Modelle kommen per composer update dazu, ohne dass du Listen pflegst. Auf Platform Ebene lassen sich zudem Failover und Load Balancing einrichten.
Model Inference funktioniert nicht nur in der Cloud. Über die Ollama Bridge sprichst du lokale Modelle auf eigener Hardware an, mit demselben invoke Aufruf. Für DSGVO sensible Projekte ist das die naheliegende Wahl, weil keine Prompts den eigenen Server verlassen.
use Symfony\AI\Platform\Bridge\Ollama\PlatformFactory;
$platform = PlatformFactory::create(
'http://127.0.0.1:11434',
HttpClient::create(),
);
$result = $platform->invoke('qwen3', $messages);
echo $result->asText();
In der NCA Produktion setzen wir lokale Modelle über Ollama mit Qwen und Llama ein und kombinieren sie je nach Anforderung mit europäischen Anbietern wie Mistral. So bleiben Daten und Kosten im Haus. Die Platform Abstraktion erlaubt es, im Development lokal zu arbeiten und in Production bei Bedarf auf ein stärkeres Modell zu wechseln, ohne den Code anzufassen.
Dieselbe invoke Schnittstelle deckt deutlich mehr ab als reinen Text. Über Optionen und unterschiedliche Result Methoden erschließt du weitere Modalitäten:
Ein API, ein mentales Modell: Du lernst MessageBag, invoke und Result einmal und nutzt damit jede Fähigkeit der Modelle. Auf Structured Output baut die typsichere Variante auf, bei der das Result direkt ein PHP Objekt ist.
Im NCA Stack ist Symfony die Basis und Sulu CMS das produktive Content System. Die Platform landet als Service im Container, jeder invoke Aufruf ist über den Symfony Profiler nachvollziehbar und mit PHPUnit getestet. Für Integrationstests nutzen wir den Symfony KernelTestCase und mocken Modellantworten über den HttpClient MockResponse, sodass keine echten API Calls nötig sind.
So wird aus einem KI Feature getesteter Code, der in Production zuverlässig läuft. Wir beraten Teams beim Einbau im Rahmen unseres Vibe Coding Consultings, beim 1 zu 1 Mentoring und beim Onboarding ins Team. Wer ein festgefahrenes KI Projekt hat, findet Hilfe beim Vibe Coding Projekt retten.
At first AI is a ton of buzzwords and hype
In Beratungsprojekten sehen wir oft denselben Fehler: Eine Anwendung wird fest gegen die API eines einzigen Anbieters verdrahtet. Sobald sich Preise, Verfügbarkeit oder Datenschutzanforderungen ändern, wird der Wechsel teuer. Model Inference über die Platform löst das, weil der Anbieter zu einem austauschbaren Detail wird statt zu einer Architekturentscheidung.
Unser Ansatz: KI Feature anbieterunabhängig bauen, lokal mit Ollama entwickeln und mit deterministischen Werkzeugen absichern. PHPStan und Psalm prüfen die Typen, PHPUnit hält das Verhalten fest, eingebettet in eine CI/CD Pipeline. Wer Symfony AI weiter erkunden will, findet im Structured Output Eintrag, beim Symfony AI Mate und im Neuron AI Vergleich weitere Bausteine.
Roland Golla ist Entwickler aus Leidenschaft – seit über 20 Jahren. Er hat hunderte Projekte begleitet, von Legacy-Refactoring bis KI-Integration. Bei Vibe Coding verbindet er das Beste aus beiden Welten: Die Geschwindigkeit von KI-generiertem Code mit der Qualität professioneller Softwareentwicklung. Kein Bullshit, keine Agentur-Floskeln – direkte Hilfe von jemandem, der selbst täglich im Code steckt.
Die wichtigsten Fragen rund um Model Inference, die Platform Component und den anbieterunabhängigen Einsatz von KI Modellen im Symfony und Sulu CMS Stack im Überblick.
Model Inference ist das Senden von Prompts an ein KI Modell und das Empfangen der Antwort über einen einzigen invoke Aufruf der Platform Component. Du baust eine MessageBag, übergibst sie der Platform und liest das Result aus. Die Platform abstrahiert die Unterschiede der Anbieter, sodass dein Anwendungscode unabhängig vom konkreten Modell bleibt.
Die Liste ist umfangreich: OpenAI, Anthropic, Google Gemini, Azure OpenAI, AWS Bedrock, Mistral und Ollama für lokale Modelle. Dazu kommen Sprachdienste wie ElevenLabs und Whisper sowie jeder OpenAI kompatible Endpoint über die Generic Bridge. Welches konkrete Modell verfügbar ist, hängt vom jeweiligen Anbieter und seinem Katalog ab.
Ja. Um von OpenAI zu Anthropic zu wechseln, tauschst du nur die Factory und den Modellnamen. MessageBag, der invoke Aufruf und das Result bleiben identisch. Mit einem Multi Provider Setup und passendem Modellkatalog routet die Platform Anfragen sogar automatisch zum richtigen Anbieter, ohne dass du Modelle manuell zuordnest.
Ja. Über die Ollama Bridge sprichst du lokale Modelle auf eigener Hardware mit demselben invoke Aufruf an. Die PlatformFactory wird mit der lokalen Ollama Adresse erstellt, etwa 127.0.0.1 Port 11434. Für DSGVO sensible Projekte ist das ideal, weil keine Prompts den eigenen Server verlassen und kein API Key nötig ist.
Nein. Die Platform Component funktioniert auch standalone ohne das volle Framework. In einer Symfony Anwendung lohnt sich das AI Bundle trotzdem, weil es Platform, Agent und Store über Dependency Injection, Konfiguration und einen Profiler Panel integriert. Für ein reines Skript reicht die Komponente allein.
Das sind die drei Bausteine von Model Inference. Die MessageBag bündelt Message Objekte wie System und User Nachricht. Die Platform ist die Abstraktion über die Anbieter und nimmt den invoke Aufruf entgegen. Das Result kapselt die Antwort und liefert sie über Methoden wie asText, asObject, asFile, asStream oder asVector aus.
Die Platform ist die unterste Ebene für einen direkten Modellaufruf über invoke. Der Agent baut darauf auf und ergänzt Tools, Prozessoren und die Schleife aus Tool Aufruf, Ergebnis lesen und nächstem Schritt. Für eine einfache Anfrage nutzt du die Platform, für tool fähige und mehrstufige Aufgaben den Agent.
Für Streaming übergibst du dem invoke Aufruf die Option stream und liest das Ergebnis über asStream aus. Damit erhältst du die Antwort Token für Token und kannst sie sofort ausgeben, statt auf die vollständige Antwort zu warten. Das ergibt das typische Chat Gefühl wie bei ChatGPT und funktioniert mit jedem unterstützten Modell.
Symfony AI nutzt den models.dev Bridge. Ein Datenpaket liefert einen täglich aktualisierten Schnappschuss der Modellregistrierung als JSON Datei, ein Bridge macht daraus einen lebenden Modellkatalog. Neue Modelle kommen so per composer update dazu, ohne Laufzeit API Calls und ohne dass du Modelllisten von Hand pflegen musst.
Ja. Dank der Symfony Cache Component lässt sich eine Platform mit einer CachedPlatform dekorieren, die einen beliebigen Cache Adapter nutzt. Wiederkehrende Anfragen werden dann aus dem Cache bedient, was Aufrufe und Kosten reduziert. Das ist besonders bei deterministischen oder häufig identischen Prompts sinnvoll.
Für Integrationstests nutzt du den Symfony KernelTestCase und mockst die Modellantworten über den HttpClient MockResponse. So laufen die Tests schnell, deterministisch und ohne echte Anbieter Calls. Ergebnisse prüfst du anschließend mit PHPUnit. Auch lokale Modelle über Ollama eignen sich für günstige Testläufe ohne externe Kosten.
Never Code Alone baut KI Features anbieterunabhängig in bestehende Symfony und Sulu CMS Projekte. Wir setzen die Platform Component sauber auf, sichern sie mit PHPStan, Psalm und PHPUnit ab und betten sie in eine CI/CD Pipeline ein. Auf Wunsch DSGVO konform mit lokalen Modellen über Ollama. Die Abrechnung erfolgt transparent und minutengenau.
KI Antworten erscheinen Token für Token wie bei ChatGPT. Symfony AI streamt über die stream Option und asStream, mit jedem unterstützten Modell.
Typsichere PHP Objekte direkt aus dem LLM: Symfony AI generiert das JSON Schema aus deiner Klasse und befüllt sie. Beispiel Land zu Hauptstadt.