Symfony AI Model Inference
Model Inference in Symfony AI: Mit einem invoke Aufruf jedes KI Modell ansprechen. Anbieter wechseln ohne Code Änderung, von OpenAI bis Ollama lokal.
Mehr erfahren
Streaming bezeichnet in Symfony AI die Ausgabe einer KI Antwort Token für Token in Echtzeit. Statt auf die vollständige Antwort zu warten, zeigst du den Text an, während er generiert wird, genau wie bei ChatGPT. Aktiviert wird das über die Option stream beim invoke Aufruf, ausgelesen wird der Datenstrom über die Methode asStream.
Streaming nutzt dieselbe Schnittstelle wie jeder andere Modellaufruf. Du baust eine MessageBag, rufst invoke mit der Option stream auf und iterierst über das Ergebnis. Jeder Chunk kommt an, sobald das Modell ihn produziert. Das funktioniert mit jedem unterstützten Modell und Anbieter, von OpenAI über Mistral bis zu lokalen Modellen über Ollama.
Der Nutzen ist vor allem die wahrgenommene Geschwindigkeit: Nutzer sehen sofort eine Reaktion, statt auf einen langen Block zu warten. Never Code Alone setzt Streaming in Symfony und Sulu CMS Projekten ein, um KI Antworten in Chat Oberflächen und Assistenten flüssig darzustellen, auf Wunsch DSGVO konform mit lokalen Modellen.
Never Code Alone entwickelt seit über 15 Jahren mit Symfony und betreibt die eigene Plattform auf Sulu CMS. Streaming ist für uns der Schlüssel zu KI Oberflächen, die sich schnell anfühlen. Es baut direkt auf Model Inference auf und lässt sich mit Structured Output kombinieren.
Für die Anzeige im Browser nutzen wir das Symfony UX Ökosystem mit Turbo Stream Actions. Wir begleiten Teams beim Vibe Coding Consulting und sichern KI Features über CI/CD Pipelines mit PHPStan, Psalm und PHPUnit ab. Für sensible Daten setzen wir auf self hosted KI mit Ollama.
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 rufst invoke mit der Option stream auf true auf und iterierst anschließend über das Result mit asStream. Jeder Chunk wird verarbeitet, sobald er ankommt, statt am Ende als ein großer Block.
$result = $platform->invoke('gpt-5-mini', $messages, [
'stream' => true,
]);
foreach ($result->asStream() as $chunk) {
echo $chunk; // process chunks as they arrive
}
Mehr Code ist nicht nötig. Der einzige Unterschied zum normalen Aufruf sind die Option stream und das Auslesen über asStream statt asText. Damit bleibt die Anwendungslogik schlank, während die Ausgabe deutlich reaktiver wirkt. Im Symfony Bundle lässt sich stream zudem direkt in der Agent Konfiguration setzen.
Auf der Serverseite liefert asStream die Chunks. Damit sie live im Browser erscheinen, brauchst du einen Weg, die Stücke an das Frontend zu schieben. Im Symfony Stack bietet sich dafür das Symfony UX Ökosystem an. Mit Turbo Stream Actions aktualisierst du gezielt Teile der Seite, während die Antwort eintrifft.
So entsteht eine Chat Oberfläche, die sich anfühlt wie die großen KI Assistenten, aber vollständig im eigenen Symfony Backend läuft. Der Vorteil gegenüber reinem JavaScript: Die Logik bleibt im PHP Stack, ist testbar und über den Symfony Profiler nachvollziehbar. Bei NCA kombinieren wir Streaming, Turbo und lokale Modelle zu reaktiven Oberflächen ohne externe Abhängigkeiten.
Streaming funktioniert auch mit lokalen Modellen. Über die Ollama Bridge sprichst du ein Modell auf eigener Hardware an und erhältst die Tokens im selben asStream Muster. Für DSGVO sensible Anwendungen ist das ideal, weil weder Prompt noch generierter Text 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, [
'stream' => true,
]);
foreach ($result->asStream() as $chunk) {
echo $chunk;
}
In der NCA Produktion nutzen wir lokale Modelle über Ollama mit Qwen und Llama. Streaming macht hier einen spürbaren Unterschied, weil lokale Modelle je nach Hardware etwas langsamer antworten. Token für Token bleibt die Oberfläche trotzdem reaktiv. Die Platform Abstraktion erlaubt es, lokal zu entwickeln und in Production bei Bedarf auf ein stärkeres Modell zu wechseln.
Streaming lohnt sich überall dort, wo ein Mensch auf eine längere KI Antwort wartet. Typische Einsatzfelder:
Wenig sinnvoll ist Streaming dagegen, wenn die Antwort als Ganzes weiterverarbeitet wird, etwa bei Structured Output, wo ein vollständiges typsicheres Objekt gebraucht wird. Hier wartest du sinnvollerweise auf das komplette Result. Die richtige Wahl hängt also davon ab, ob ein Mensch zuschaut oder eine Maschine weiterrechnet.
Im NCA Stack ist Symfony die Basis und Sulu CMS das produktive Content System. Die Platform landet als Service im Container, der Stream wird mit Turbo an das Frontend geschoben und jeder Aufruf ist über den Symfony Profiler nachvollziehbar. Getestet wird mit PHPUnit, für Integrationstests nutzen wir den Symfony KernelTestCase und mocken Antworten über den HttpClient MockResponse.
So wird aus einer schicken Demo ein getestetes Feature, das 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 erleben wir oft, dass eine KI Funktion technisch funktioniert, sich aber träge anfühlt, weil Nutzer mehrere Sekunden auf einen Block warten. Streaming löst genau dieses Wahrnehmungsproblem. Die Antwort ist nicht schneller fertig, aber sie beginnt sofort, und das verändert das Nutzungserlebnis spürbar.
Unser Ansatz: Streaming serverseitig über asStream, Anzeige über Turbo Stream Actions, abgesichert mit PHPStan, Psalm und PHPUnit in einer CI/CD Pipeline. Wer Symfony AI weiter erkunden will, findet im Model Inference Eintrag die Grundlage und im Structured Output Eintrag die typsichere Variante.
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 Streaming, die stream Option und asStream sowie die Anzeige im Frontend mit Symfony UX im Überblick.
Streaming ist die Ausgabe einer KI Antwort Token für Token in Echtzeit. Statt auf die vollständige Antwort zu warten, verarbeitest du jeden Chunk, sobald er ankommt. In Symfony AI aktivierst du das über die Option stream beim invoke Aufruf und liest den Datenstrom über die Methode asStream aus.
Du übergibst dem invoke Aufruf die Option stream auf true und iterierst danach mit einer foreach Schleife über das Ergebnis von asStream. Jeder Chunk wird ausgegeben, sobald er eintrifft. Der einzige Unterschied zum normalen Aufruf sind diese Option und das Auslesen über asStream statt asText.
Streaming funktioniert mit jedem unterstützten Modell und Anbieter, von OpenAI über Mistral bis zu lokalen Modellen über Ollama. Da die Platform die Anbieter abstrahiert, bleibt der Code gleich, egal welches Modell den Stream liefert. Voraussetzung ist nur, dass der jeweilige Anbieter Streaming für das gewählte Modell anbietet.
Ja. Über die Ollama Bridge streamst du lokale Modelle auf eigener Hardware mit demselben asStream Muster. Gerade bei lokaler Inferenz, die je nach Hardware etwas langsamer ist, sorgt Streaming für eine reaktive Oberfläche. Für DSGVO sensible Projekte ist das ideal, weil keine Daten den eigenen Server verlassen.
Serverseitig liefert asStream die Chunks. Um sie live anzuzeigen, schiebst du die Stücke an das Frontend, im Symfony Stack am besten über das Symfony UX Ökosystem mit Turbo Stream Actions. Damit aktualisierst du gezielt Teile der Seite, während die Antwort eintrifft, und erhältst eine Chat Oberfläche wie bei großen KI Assistenten.
asText liefert die vollständige Antwort als einen String, nachdem das Modell fertig ist. asStream liefert einen iterierbaren Datenstrom, über den du die Antwort Token für Token erhältst, während sie generiert wird. asText eignet sich für die Weiterverarbeitung, asStream für die sofortige Anzeige in einer Oberfläche.
In der Regel nicht sinnvoll. Structured Output liefert ein vollständiges typsicheres Objekt, das erst dann nutzbar ist, wenn die komplette Antwort vorliegt. Streaming ergibt Sinn, wenn ein Mensch den Text wachsen sieht. Wird die Antwort maschinell weiterverarbeitet, wartest du besser auf das vollständige Result statt zu streamen.
Wenn die Antwort als Ganzes weiterverarbeitet wird, etwa für Datenextraktion, Klassifikation oder Structured Output, bringt Streaming keinen Vorteil. Auch in reinen Hintergrundprozessen ohne wartenden Nutzer ist es unnötig. Die Faustregel: Streaming lohnt sich, wenn ein Mensch zuschaut, nicht wenn eine Maschine weiterrechnet.
Ja, Streaming ist auf Platform Ebene angesiedelt und lässt sich auch in agentischen Abläufen nutzen. Im Symfony Bundle kannst du stream direkt in der Agent Konfiguration aktivieren. Bei Tool aufrufenden Agenten ist allerdings zu beachten, dass Zwischenschritte wie Tool Calls die reine Token Ausgabe unterbrechen können.
Für Tests mockst du die Modellantworten über den Symfony HttpClient MockResponse und prüfst, dass dein Code die Chunks korrekt verarbeitet. Mit dem Symfony KernelTestCase laufen die Tests im Container, ohne echte API Calls. So bleiben sie schnell und deterministisch. Die zusammengesetzte Ausgabe vergleichst du anschließend mit PHPUnit.
Nein, die Gesamtdauer bis zur fertigen Antwort bleibt gleich. Streaming verbessert aber die wahrgenommene Geschwindigkeit deutlich, weil sofort Text erscheint, statt nach mehreren Sekunden ein kompletter Block. Für die Nutzererfahrung ist dieser Effekt oft wichtiger als die tatsächliche Antwortzeit.
Never Code Alone baut streamende KI Oberflächen in bestehende Symfony und Sulu CMS Projekte, serverseitig über asStream und im Frontend über Symfony UX Turbo. Wir sichern das Feature mit PHPStan, Psalm und PHPUnit ab und betten es in eine CI/CD Pipeline ein. Auf Wunsch DSGVO konform mit lokalen Modellen über Ollama. Abrechnung transparent und minutengenau.
Ein Methodenaufruf, jedes Modell: Die Platform Component spricht OpenAI, Anthropic, Mistral und lokale Modelle über dieselbe invoke Schnittstelle an.
Typsichere PHP Objekte direkt aus dem LLM: Symfony AI generiert das JSON Schema aus deiner Klasse und befüllt sie. Beispiel Land zu Hauptstadt.