Zum Hauptinhalt springen

Symfony

mittwald AI Hosting mit Symfony AI verwenden​

Symfony AI ist eine Sammlung von PHP-Komponenten, die KI-Funktionen in deine Anwendung bringen. Die Platform-Komponente bietet dir eine herstellerneutrale API für die Kommunikation mit KI-Modellen: Du baust eine MessageBag, rufst $platform->invoke(...) auf und liest die Antwort aus einem Result-Objekt — unabhängig davon, wer das Modell tatsächlich betreibt. Darauf aufbauend decken die Komponenten Agent, Chat und Store die Themen Agenten, Gesprächsverläufe und Vektor-Stores ab, und das AI Bundle integriert das Ganze in eine Symfony-Anwendung.

Der Adapter, der einen konkreten Anbieter an die Platform-API anbindet, heißt Bridge. mittwald/symfony-ai-platform ist die offizielle Bridge für mittwald AI Hosting. Nach der Installation stehen die bei mittwald gehosteten Modelle über die Standard-Schnittstellen von Symfony AI zur Verfügung — für Chat und Embeddings funktioniert derselbe Code, der auch mit der OpenAI- oder Anthropic-Bridge läuft; nur der Factory-Aufruf und die Modell-ID ändern sich.

Diese Anleitung behandelt Installation und Verwendung der Bridge. Alles rund um Symfony AI selbst — Agenten, Tool Calling, RAG-Stores und das AI Bundle — findest du in der offiziellen Symfony-AI-Dokumentation.

Voraussetzungen​

Bevor du die Bridge installierst, stelle sicher, dass deine Umgebung diese Anforderungen erfüllt:

  • PHP 8.2 oder höher
  • Composer
  • Ein API-Schlüssel für mittwald AI Hosting

Die Bridge benötigt symfony/ai-platform (^0.13), symfony/http-client und symfony/mime; Composer installiert diese Pakete automatisch mit. Du brauchst keine vollständige Symfony-Anwendung — das Paket funktioniert in jedem PHP-Projekt mit Composer-Autoloading.

Falls du noch keinen API-Schlüssel hast, folge der mittwald AI Hosting Zugangsanleitung, um einen über dein mStudio-Dashboard zu generieren.

Installation​

Füge die Bridge zu deinem Projekt hinzu:

user@local $ composer require mittwald/symfony-ai-platform

Dieser eine Befehl installiert die Bridge und ihre Abhängigkeiten. Es gibt kein Bundle zu aktivieren und keine Konfigurationsdatei anzulegen.

Konfiguration​

Die Bridge liest von sich aus nichts aus der Umgebung — du übergibst den API-Schlüssel an die Factory. Halte den Schlüssel aus der Versionsverwaltung heraus und lies ihn aus einer Umgebungsvariable oder einem Secrets-Store.

Standalone-PHP​

In einem reinen PHP-Projekt erzeugst du die Platform direkt:

use Mittwald\Symfony\AI\Platform\Bridge\Factory;
use Symfony\AI\Platform\Message\Message;
use Symfony\AI\Platform\Message\MessageBag;

$platform = Factory::createPlatform(getenv('MITTWALD_AI_API_KEY'));

$result = $platform->invoke('gpt-oss-120b', new MessageBag(
Message::ofUser('Erkläre in einem Satz, was eine Symfony-AI-Platform-Bridge ist.'),
));

echo $result->asText();

Symfony-Anwendung​

In einer Symfony-Anwendung registrierst du die Platform als Service und injizierst PlatformInterface überall dort, wo du sie brauchst:

# config/services.yaml
services:
Symfony\AI\Platform\PlatformInterface:
factory:
- 'Mittwald\Symfony\AI\Platform\Bridge\Factory'
- createPlatform
arguments:
$apiKey: "%env(MITTWALD_AI_API_KEY)%"

Setze anschließend MITTWALD_AI_API_KEY in deiner Umgebung, zum Beispiel über ein Symfony-Secret oder eine Umgebungsvariable in deinem Hosting.

Factory-Optionen​

Factory::createPlatform() akzeptiert dieselben optionalen Überschreibungen wie die anderen Symfony-AI-Bridges, in dieser Reihenfolge nach $apiKey: $httpClient, $modelCatalog, $dispatcher, $contract, $name (Standard mittwald), $modelRouter und $baseUrl. Übergib sie als benannte Argumente, so wie in den folgenden Beispielen.

Factory::createProvider() liefert stattdessen das reine ProviderInterface zurück — für Aufrufer, die ihre eigene Platform zusammensetzen oder Bridges über die Factory-Konvention von Symfony AI entdecken, wie es b13/aim für TYPO3 tut. Die Methode akzeptiert dieselben Überschreibungen mit Ausnahme von $modelRouter.

Unterstützte Operationen​

Du wählst nie selbst einen Endpunkt aus. Die Modell-ID, die du an invoke() übergibst, wird im Modellkatalog der Bridge nachgeschlagen. Dieser entscheidet, ob aus dem Aufruf eine Chat Completion, ein Embedding, eine Transkription, ein Reranking oder eine Sprachsynthese wird — und damit auch, welche as*()-Methode das Result versteht.

OperationUnterstützt
Chat Completions✅
Embeddings✅
Speech-to-Text✅
Text-to-Speech✅
Reranking✅
Text-to-Image⏸️ nicht von mittwald AI Hosting angeboten
Moderation⏸️ nicht von mittwald AI Hosting angeboten

Alle folgenden Beispiele setzen ein $platform voraus, das wie unter Konfiguration gezeigt erzeugt wurde.

Chat​

use Symfony\AI\Platform\Message\Message;
use Symfony\AI\Platform\Message\MessageBag;

$result = $platform->invoke('gpt-oss-120b', new MessageBag(Message::ofUser('Hallo!')));
echo $result->asText();

Chat unterstützt Streaming, Tool Calling sowie Vision- und Reasoning-Modelle. Um die Antwort zu streamen, übergibst du die Option stream und iterierst über das Result:

$result = $platform->invoke('gpt-oss-120b', new MessageBag(Message::ofUser('Hallo!')), ['stream' => true]);
foreach ($result->asStream() as $chunk) {
echo $chunk;
}

Embeddings​

$result = $platform->invoke('Qwen3-Embedding-8B', 'Text, der eingebettet werden soll');
$vectors = $result->asVectors();

In Kombination mit der Store-Komponente von Symfony AI baust du darauf semantische Suche oder RAG-Funktionen auf. mittwald AI Hosting stellt das Embedding-Modell bereit, aber keine gemanagte Vektordatenbank; eine solche kannst du selbst in deinem mStudio-Projekt über Container-Hosting betreiben — pgvector, Qdrant und ChromaDB stehen dort als Container-Templates zur Verfügung.

Speech-to-Text​

$result = $platform->invoke('whisper-large-v3-turbo', '/pfad/zu/audio.mp3');
echo $result->asText();

Reranking​

$result = $platform->invoke('Qwen3-VL-Reranker-2B', [
'query' => 'Was ist die Hauptstadt von Frankreich?',
'documents' => ['Paris ist die Hauptstadt von Frankreich.', 'Berlin ist die Hauptstadt von Deutschland.'],
]);

foreach ($result->asReranking() as $entry) {
echo $entry->getIndex() . ': ' . $entry->getScore() . PHP_EOL;
}

Text-to-Speech​

$result = $platform->invoke('Qwen3-TTS-12Hz-1.7B-CustomVoice', 'Hallo und herzlich willkommen!', ['voice' => 'ryan']);
$result->asFile('/pfad/zu/output.mp3');

Verfügbare Modelle​

Die Bridge bringt einen Katalog der ihr bekannten Modell-IDs mit, darunter gpt-oss-120b, die Chat-Modelle der Ministral- und Qwen3.x-Familien, GLM-OCR, Qwen3-Embedding-8B, whisper-large-v3-turbo, Qwen3-VL-Reranker-2B und Qwen3-TTS-12Hz-1.7B-CustomVoice.

Maßgeblich dafür, was die API aktuell ausliefert, ist die Dokumentation der verfügbaren Modelle — inklusive der Fähigkeiten und Kontextgrößen der einzelnen Modelle. Modelle, die mittwald AI Hosting nach einem Bridge-Release hinzufügt, sind möglicherweise noch nicht im Katalog enthalten. Aktualisiere in diesem Fall das Paket — oder registriere das Modell selbst, indem du einen erweiterten Katalog als $modelCatalog übergibst:

use Mittwald\Symfony\AI\Platform\Bridge\ChatModel;
use Mittwald\Symfony\AI\Platform\Bridge\ModelCatalog;
use Symfony\AI\Platform\Capability;

$catalog = new ModelCatalog([
'some-new-model' => [
'class' => ChatModel::class,
'capabilities' => [
Capability::INPUT_MESSAGES,
Capability::INPUT_TEXT,
Capability::OUTPUT_TEXT,
Capability::OUTPUT_STREAMING,
],
],
]);

$platform = Factory::createPlatform(getenv('MITTWALD_AI_API_KEY'), modelCatalog: $catalog);

Die von dir übergebenen Modelle werden mit denen zusammengeführt, die die Bridge bereits kennt.

Dedicated AI Hosting​

Standardmäßig spricht die Bridge mit https://llm.aihosting.mittwald.de. Wenn du Dedicated AI Hosting nutzt, wird deine reservierte Kapazität über eine kundenspezifische Subdomain ausgeliefert — übergib diese als $baseUrl:

$platform = Factory::createPlatform(getenv('MITTWALD_AI_API_KEY'), baseUrl: 'https://dein-unternehmen.llm.aihosting.mittwald.de');

Gib die Basis-URL ohne das Suffix /v1 an; die Bridge hängt API-Version und Pfad selbst an.

Fehlerbehandlung​

API-Fehler werden in die gemeinsamen Platform-Exceptions von Symfony AI übersetzt — nach derselben Konvention wie bei den anderen Bridges:

HTTP-StatusException
400BadRequestException
401AuthenticationException
429RateLimitExceededException
5xxServerException

Was die einzelnen Fehlerantworten bedeuten, erfährst du in der Fehlerreferenz.

Nutzungslimits​

Der mittwald AI Hosting-Dienst hat Nutzungslimits basierend auf deiner Kontostufe.