TYPO3-Extension · nr-llm

Die zentrale KI-Control-Plane für TYPO3.

Provider einmal anbinden, Zugriffe zentral steuern, Budgets begrenzen und KI-Funktionen für alle Extensions der Seite kontrolliert bereitstellen.

Unterstützte Anbieter
OpenAI Anthropic Claude Google Gemini Mistral AI Ollama + Groq, OpenRouter, Azure OpenAI
Reifegrad
Beta
Letzter Release
v0.32.0
Hauptzweig
0.32.0
Dokumentation beschreibt
0.32.0
Seite zuletzt geprüft
Voraussetzungen
TYPO3 13.4 / 14.3 · PHP 8.2+

Vier verschiedene Werte. Ein Unterschied zwischen ihnen ist kein Widerspruch: Der Release ist, was Sie installieren, der Hauptzweig ist, woran gebaut wird, und das Prüfdatum sagt, wann zuletzt jemand den Text dieser Seite geprüft hat.

Was sich für die Organisation ändert

Die technische Beschreibung steht weiter unten. Hier stehen die Wirkungen, die über eine Einführung entscheiden.

Eine Provider-Anbindung statt einer je Extension

Jede Extension, die KI nutzen will, ruft denselben Service. Die zweite KI-Funktion bedeutet nicht mehr die zweite Provider-Anbindung, die zweite Schlüsselablage und die zweite Fehlerbehandlung.

Anbieterwechsel ist eine Einstellung, kein Projekt

Konfigurationen benennen Provider und Modell. Der Wechsel von einer kommerziellen API auf einen selbst gehosteten Endpunkt ändert einen Datensatz im Backend, nicht den Code der nutzenden Extensions.

Schlüssel vermehren sich nicht mehr

API-Schlüssel liegen als Kennungen in nr-vault. Nicht im Klartext in der Datenbank, nicht in einer Konfigurationsdatei und nicht dreimal parallel in drei Extensions.

Kosten werden vor der Rechnung sichtbar

Die Nutzung wird je Provider, Modell, Service und Backend-Nutzer mit geschätzten Kosten erfasst. Budgets begrenzen sie je Nutzer und Zeitraum.

KI-Funktionen werden wiederverwendbar

Übersetzung, Alternativtexte, Embeddings und Retrieval sind Services, die andere Extensions injizieren statt nachzubauen.

Lokal und selbst gehostet bleiben möglich

Ollama, vLLM und LocalAI werden genauso konfiguriert wie eine kommerzielle API. Eine Vorgabe zum Verarbeitungsort erzwingt damit keine andere Architektur.

Governance und Kontrolle

Was eine Administratorin tatsächlich entscheiden kann – und wo die Software es durchsetzt.

Wer was nutzen darf

Berechtigungen werden je Fähigkeit an Backend-Gruppen vergeben. Das Konfigurationsmodul selbst ist auf Administratoren beschränkt.

Wie viel jede Person ausgeben darf

Budgets begrenzen Anfragen, Tokens oder geschätzte Kosten je Backend-Nutzer, täglich oder monatlich. Ein Lauf, der das Budget überschreiten würde, scheitert mit einer typisierten Ausnahme, statt still weiterzulaufen.

Welche Werkzeuge ein Modell aufrufen darf

Die eingebauten Werkzeuge sind in Gruppen zusammengefasst, jede Gruppe lässt sich einzeln aktivieren. Lesende Werkzeuge sind der Normalfall; die schreibenden sind ab Werk deaktiviert.

Was einen Menschen braucht

Ein freigabepflichtiges Werkzeug hält den Lauf an und wartet auf eine Entscheidung. Es gibt keine Zeitschranke, die stattdessen zustimmt.

Was protokolliert wird

Provider, Modell, Service, Nutzer, Token-Zahlen und geschätzte Kosten je Anfrage. Der Prompt-Inhalt gehört nicht zum Nutzungsdatensatz.

Was passiert, wenn ein Provider ausfällt

Eine Konfiguration kann Rückfälle benennen, die bei Verbindungsfehlern, HTTP-5xx und Rate-Limits in der angegebenen Reihenfolge versucht werden. Ist die Kette erschöpft, gibt es eine typisierte Ausnahme statt einer leeren Antwort.

Sicherheit →

Wohin die Daten gehen

Eine Anfrage, von Anfang bis Ende.

  1. Eine Extension ruft den Service Sie übergibt Nachrichten und Optionen. Sie weiß nicht, welcher Provider konfiguriert ist, und sieht nie einen Schlüssel.
  2. nr-llm löst die Konfiguration auf Konfiguration → Modell → Provider. Der Schlüssel wird über seine Kennung aus nr-vault geholt und nur für diese Anfrage verwendet.
  3. Guardrails prüfen die Nutzlast Eingabe, Ausgabe, Reasoning und Streaming-Fragmente durchlaufen eine Richtlinienkette, die redigieren kann. Secret-Muster werden auf dem Ausgangsweg abgewiesen.
  4. Der Provider erhält die Anfrage Genau der, den die Konfiguration benennt: eine kommerzielle API, ein in der EU gehosteter Anbieter, Ihr eigenes Azure-Deployment oder ein Endpunkt in Ihrem Netz.
  5. Die Antwort kommt zurück und wird erfasst Die Antwort geht an die aufrufende Extension. Der Nutzungsdatensatz behält Provider, Modell, Service, Nutzer, Tokens und geschätzte Kosten – nicht den Prompt.
  • Was übertragen wird: der Prompt, den die Extension gebaut hat, sowie Seiteninhalte, die ein Retrieval-Werkzeug beigelegt hat.
  • Wo Schlüssel liegen: in nr-vault, envelope-verschlüsselt, referenziert über eine Kennung. nr-llm speichert und protokolliert nie einen Schlüssel im Klartext.
  • Was lokal bleiben kann: alles, wenn die Konfiguration auf einen selbst gehosteten Endpunkt zeigt. Die Provider-Wahl gilt je Konfiguration, nicht je Seite.

Provider- und Betriebsmodelle

Alle werden gleich konfiguriert. Die Wahl ist eine administrative Entscheidung, keine architektonische.

Modell Wo verarbeitet wird Passt, wenn Preis dafür
Kommerzielle API (OpenAI, Anthropic, Google, Mistral, Groq) Beim Anbieter Modellqualität und -auswahl den Ausschlag geben Vertragliche und datenschutzrechtliche Prüfung je Anbieter
In der EU gehosteter Anbieter Beim Anbieter, in der EU Der Verarbeitungsort vorgegeben ist Kleinere Modellauswahl
Azure OpenAI oder OpenAI-kompatibler Endpunkt In Ihrem Cloud-Konto Ein Rahmenvertrag bereits besteht Bindung an die Plattform
Selbst gehostet (Ollama, vLLM, LocalAI) In Ihrer Infrastruktur Daten das Netz nicht verlassen dürfen Eigener Betrieb, eigene Hardware, eigene Modellpflege
Gemischt Je Konfiguration unterschiedlich Sensible und unkritische Fälle sich unterscheiden Mehr Konfiguration, mehr Erklärungsbedarf

Kostenkontrolle

Was die Extension tatsächlich gegen Kosten tut. Eine Einsparungszahl steht hier nicht – die hinge von Mengengerüsten ab, die wir nicht kennen.

Budgetarten

Anfragen, Tokens oder geschätzte Kosten. Jede Größe lässt sich täglich oder monatlich je Backend-Nutzer begrenzen.

Kosten je Modell und Service

Die Nutzungsauswertung schlüsselt die geschätzten Kosten nach Provider, Modell, Service und Nutzer über ein gleitendes Fenster auf.

Was am Limit passiert

Die Anfrage wird mit einer typisierten BudgetExceededException abgelehnt. Wie das dargestellt wird, entscheidet die aufrufende Extension.

Rückfall auf etwas Günstigeres

Eine Konfiguration kann Rückfälle benennen – ein kleineres Modell oder einen selbst gehosteten Endpunkt ohne Kosten je Token.

Wie geschätzt wird

Aus den im Backend hinterlegten Preisen je Modell, angewendet auf die Token-Zahlen, die der Provider zurückmeldet. Eine Schätzung, nicht die Rechnung des Anbieters.

Drei Wege, es zu evaluieren

Jeder klein genug, um ihn zu beenden, und konkret genug, um ihn zu bewerten.

Zentral gesteuerte Übersetzung

Einen Provider konfigurieren, der Redaktionsgruppe die Übersetzungsfähigkeit geben, ein Monatsbudget setzen, einen Seitenbaum übersetzen. Danach ist sichtbar, wer was mit welchem Modell zu welchen geschätzten Kosten übersetzt hat.

Prüft: Provider-Konfiguration, Berechtigungen, Budgets, Auswertung.

Alternativtexte für Bilder

Eine Konfiguration auf ein Modell mit Bildverständnis zeigen lassen und Alternativtexte für einen Medienordner erzeugen. Ein kommerzielles Modell und ein selbst gehostetes an denselben Bildern vergleichen.

Prüft: Vision-Service, Anbieterwechsel, Ergebnisqualität an eigenen Daten.

Redaktionelle Recherche mit Quellenangabe

Die Retrieval-Werkzeuggruppe aktivieren und Fragen zu eigenen Seiteninhalten stellen. Prüfen, ob jede Antwort die Seiten benennt, aus denen sie stammt.

Prüft: Retrieval, Werkzeuggruppen, Quellenangabe – und ob die Antworten für Ihre Redaktion gut genug sind.

KI-Faktenkarte

Auf jedem KI-Produkt von Netresearch dieselben Felder – damit sie vergleichbar sind und nicht nur beeindruckend.

Vorgesehener Zweck
Shared, administrator-controlled access to language models for TYPO3 extensions: one provider configuration, one set of permissions and budgets, reused by every extension on the site.
Ausdrücklich nicht dafür
  • Unattended decisions about people — hiring, credit, benefits, access or any other consequential outcome.
  • Autonomous content changes without a human approval.
  • A source of facts. Model output is untrusted content and is treated as such.
  • A compliance control in its own right. It supports controls; it does not make an organisation conformant.
Reifegrad
Beta
Modelle und Anbieter
OpenAI, Anthropic Claude, Google Gemini, Ollama (local), OpenRouter, Mistral, Groq, Azure OpenAI, any OpenAI-compatible endpoint (vLLM, LocalAI, LiteLLM)
Verarbeitete Daten
  • The prompt an extension sends, plus any site content a retrieval tool includes.
  • Usage metadata: provider, model, service, backend user, token counts and estimated cost.
  • No API keys — those stay in the vault as identifiers.
Verarbeitungsort
Eigener Server, Externer Anbieter
Menschliche Aufsicht
Writing tools ship disabled and, once enabled, suspend the run for an explicit approval. Everything else is read-only by default.
Berechtigungen
Per-capability backend-group permissions; the backend module is restricted to administrators.
Protokollierung
Requests are recorded with provider, model, service, user, token counts and estimated cost. Prompt content is not part of the usage record.
Aufbewahrung
Usage records live in the site's database and follow the site's own retention rules. nr-llm sets no expiry of its own.
Kostenkontrolle
Per-user budgets on requests, tokens or estimated cost, daily or monthly, with fallback to cheaper or local models.
Sicherheitskontrollen
  • API keys as vault identifiers, never plaintext
  • Guardrail pipeline across input, output, reasoning and streamed chunks
  • Secret-pattern denial on the egress path
  • Approval-gated writing tools
  • Signed releases with SBOMs and SLSA provenance
Bekannte Grenzen
  • Models produce wrong answers with confidence. Nothing here prevents that; the controls bound what a model may do, not what it may say.
  • Prompt injection through retrieved site content is possible. Tool permissions and the approval gate are the mitigation, not immunity.
  • Cost figures are estimates derived from the model's published pricing, not from the provider's invoice.
  • Streaming responses bypass parts of the output pipeline; the trade-off is documented in the ADRs.
  • Provider availability, model behaviour and pricing are outside this extension's control.
Zuletzt geprüft
· Netresearch DTT GmbH — nr-llm maintainers

Das Problem

Jede TYPO3-Extension, die heute KI-Funktionen möchte, muss dieselben Infrastrukturprobleme selbst lösen. Betreibt eine Website drei KI-Extensions, bedeutet das drei getrennte API-Key-Konfigurationen, drei Stellen zur Fehlersuche und keine Möglichkeit, den Provider global zu wechseln.

  • Eine eigene Provider-Anbindung bauen — HTTP-Aufrufe, Authentifizierung, Fehlerbehandlung, Streaming
  • API-Keys auf eigene Weise speichern, oft als Klartext in den Extension-Einstellungen
  • Eine eigene Backend-Oberfläche zur Konfiguration erstellen
  • Administratoren ohne zentralen Überblick über KI-Nutzung oder Kosten lassen

Die Lösung

nr-llm liefert die fehlende gemeinsame Schicht zwischen den Extensions und den LLM-Providern. Extension-Entwickler ergänzen KI in wenigen Zeilen Dependency Injection; Administratoren verwalten jede Verbindung, jeden Key und jedes Budget in einem einzigen Backend-Modul.

Extensions binden eine einzige Service-Schnittstelle ein und rufen Methoden für Chat, Completion, Übersetzung, Vision, Embeddings, Streaming und Tool Calling auf. Provider-Auswahl, API-Keys, Caching und Fehlerbehandlung übernimmt nr-llm.

Darunter bildet eine Provider-Abstraktionsschicht eine gemeinsame Schnittstelle auf OpenAI, Anthropic, Gemini, Ollama, OpenRouter, Mistral, Groq, Azure OpenAI und jeden OpenAI-kompatiblen Endpunkt ab. Der Provider-Wechsel ist eine Admin-Einstellung, keine Code-Änderung.

Das Backend-Modul Admin-Werkzeuge > LLM enthält verschlüsselte Keys, Nutzungs- und Kostenerfassung, benutzerbezogene Budgets und einen Einrichtungsassistenten — beschränkt auf Administratoren.

Deine Extensions Cowriter · SEO Assistant · …
nr-llm Service-Ebene Chat · Translation · Vision · Embeddings · Streaming · Tools · Caching
Provider-Abstraktion OpenAI · Anthropic · Gemini · Ollama · Mistral · Groq · …
Admin Tools > LLM Verschlüsselte Schlüssel · Nutzung/Kosten · Setup-Wizard
Extensions rufen die Service-Schicht von nr-llm auf (Chat, Übersetzung, Vision, Embeddings, Streaming, Tool Calling, Caching), die auf einer Provider-Abstraktionsschicht aufsetzt (OpenAI, Anthropic, Gemini, Ollama und weitere) und vom Backend-Modul Admin-Werkzeuge > LLM mit verschlüsselten Keys, Nutzungserfassung und Einrichtungsassistent gestützt wird.

Kernkonzepte

nr-llm ist um wenige Bausteine herum aufgebaut. Jeder löst ein Problem, das man sonst in jeder KI-Extension neu implementieren müsste.

Provider-Abstraktion

Alle Provider implementieren eine gemeinsame Schnittstelle. OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Mistral, Groq, Azure OpenAI und jeder OpenAI-kompatible Endpunkt (vLLM, LocalAI, LiteLLM) sind über dieselben Service-Aufrufe erreichbar. Der Provider-Wechsel erfolgt über eine einzige Konfigurationsänderung — ohne Code-Änderungen, ohne Vendor-Lock-in.

Zum Deep-Dive →

Verschlüsselte API-Keys über nr-vault

Jeder API-Key wird als Vault-Identifier (UUID) über die Envelope-Verschlüsselung von nr-vault gespeichert. nr-llm speichert oder protokolliert Rohschlüssel nie im Klartext. Fehlermeldungen werden bereinigt, sodass geheimnistragende Query-Parameter entfernt werden, bevor etwas protokolliert wird.

Zum Deep-Dive →

Dreistufige Konfiguration

Ein Provider hält einen Endpunkt, einen verschlüsselten Key und einen Adapter-Typ. Ein Model verweist auf einen Provider und definiert dessen Model-ID, Fähigkeiten und Preise. Eine Configuration verweist auf ein Model und ergänzt Einstellungen für den Anwendungsfall — System-Prompt, Temperatur, Token-Limits. So lassen sich mehrere Keys pro Provider vorhalten (Prod/Dev/Backup) und Model-Definitionen über Anwendungsfälle hinweg wiederverwenden.

Feature-Services

High-Level-Services decken gängige Aufgaben ab: CompletionService für Textgenerierung mit Steuerung von Format und Kreativität, TranslationService mit Unterstützung für Förmlichkeit und Glossar, VisionService für Alt-Texte und Bildanalyse sowie EmbeddingService für die Umwandlung von Text in Vektoren samt Ähnlichkeitsberechnung.

Streaming und Tool Calling

Antworten lassen sich Chunk für Chunk streamen — mit einer einzigen foreach-Schleife über streamChat() für Echtzeit-Oberflächen. Tool-/Function-Calling lässt das Model Funktionen anfragen, die der eigene Code ausführt, über chatWithTools() — die Antwort meldet, welche Tools aufgerufen wurden, sodass sie sich verarbeiten lassen.

Zum Deep-Dive →

RAG-Werkzeuge für die Website-Suche

48 eingebaute Function-Calling-Tools in 9 umschaltbaren Gruppen geben dem Model fundierten Zugriff auf die TYPO3-Instanz — Inhaltssuche, TCA-/FlexForm-Schema, TypoScript, Quellcode- und Exception-Zugriff, FAL-Dateien, Diagnose und Backend-Konten. 41 davon lesen ausschließlich. Die Gruppe rag liefert belegte Website-Inhalte aus dem installierten Suchindex (EXT:solr, ke_search, indexed_search oder einer Datenbank als Fallback); die Gruppe editing enthält die sieben schreibenden Tools, die deaktiviert ausgeliefert werden und den Lauf vor jeder Änderung für eine menschliche Freigabe anhalten.

Zum Deep-Dive →

Benutzerbezogene Budgets und Nutzungserfassung

Die Ausgaben pro Backend-Benutzer lassen sich über alle Presets hinweg nach Anfragen, Tokens oder geschätzten Kosten begrenzen — täglich oder monatlich. Die Analytics-Ansicht zeigt Kosten- und Nutzungstrends mit Aufschlüsselung nach Provider, Model und Service sowie den Verbrauch pro Benutzer gegenüber den Monatsbudgets.

Integration in das TYPO3-Caching-Framework

Antworten werden automatisch über das Caching-Framework von TYPO3 zwischengespeichert — mit dem Backend, das die Instanz konfiguriert (Redis, Valkey, Memcached oder dem Standard). Embedding-Ergebnisse werden deterministisch zwischengespeichert, standardmäßig 24 Stunden, und die Cache-Lebensdauer lässt sich pro Operationstyp konfigurieren.

Für wen es gedacht ist

nr-llm bedient drei Zielgruppen auf derselben gemeinsamen Grundlage.

Extension-Entwickler

KI-Funktionen ergänzen, ohne Provider-Anbindungen zu bauen, API-Keys zu verwalten oder Caching und Streaming zu implementieren. Eine Service-Schnittstelle einbinden und aufrufen. Eigene Provider registrieren, wenn nötig.

TYPO3-Administratoren

Jede KI-Verbindung, jeden verschlüsselten Key und jede Provider-Konfiguration aus einem einzigen Backend-Modul verwalten. Von OpenAI zu Anthropic wechseln, ohne Extension-Code anzufassen. Benutzerbezogene Budgets setzen und Kosten und Nutzung in einem Dashboard verfolgen.

Agenturen und Solution Architects

Den Integrationsaufwand über Kundenprojekte hinweg senken — mit einer einheitlichen KI-Architektur und ohne Vendor-Lock-in. Verschlüsselte Keys, ausschließlich administrativer Zugriff sowie SBOM und SLSA-Provenance bei jedem Release unterstützen die Compliance. Ollama bietet eine Local-First-Option für datensensible Umgebungen.

Entwickler

Kickstart für Entwickler

KI in wenigen Minuten in die eigene TYPO3-Extension ergänzen — ohne API-Key-Handhabung, ohne HTTP-Client-Code, ohne providerspezifische Logik.

Das Paket einbinden

Über Composer installieren. Anschließend in Admin-Werkzeuge > Erweiterungen aktivieren und Admin-Werkzeuge > LLM > Einrichtungsassistent ausführen.

bash
composer require netresearch/nr-llm

Den benötigten Service einbinden

LlmServiceManagerInterface per Constructor Promotion einbinden und aufrufen. Provider-Auswahl, API-Keys, Caching und Fehlerbehandlung übernimmt nr-llm.

php
use Netresearch\NrLlm\Service\LlmServiceManagerInterface;

class MyController
{
    public function __construct(
        private readonly LlmServiceManagerInterface $llm,
    ) {}

    public function summarizeAction(string $text): string
    {
        return $this->llm->complete("Summarize: {$text}")->content;
    }
}

Die benötigten Services nutzen

Chat, Completion, Streaming, Embeddings und Tool-Calling sind Methoden der injizierten LlmServiceManagerInterface. Übersetzung und Vision-Alt-Text sind eigene Feature-Services — injiziere sie genauso. Tool-Calling ist eine Schleife aus Anfrage, Ausführung und Antwort; das vollständige Beispiel steht im Deep-Dive „Streaming & Tool-Calling“.

php
use Netresearch\NrLlm\Domain\ValueObject\ChatMessage;

$messages = [
    ChatMessage::system('You are a helpful TYPO3 assistant.'),
    ChatMessage::user('Explain TYPO3 content elements in one paragraph.'),
];

// Chat & completion (LlmServiceManagerInterface)
$answer = $this->llm->chat($messages)->content;
$answer = $this->llm->complete('Summarize the TYPO3 release cycle.')->content;

// Streaming — yields string chunks
foreach ($this->llm->streamChat($messages) as $chunk) {
    echo $chunk;
}

// Embeddings — EmbeddingResponse carries the vector
$embedding = $this->llm->embed('semantic search query');

// Translation — dedicated service, returns a TranslationResult
$german = $this->translationService->translate('Hello world', 'de')->getText();

// Vision alt-text — dedicated service
$altText = $this->visionService->generateAltText($imageUrl);

Fehler mit typisierten Exceptions behandeln

Jeder Provider-Fehler ist eine typisierte Exception. Fange die ab, die dich interessieren, und zeige eine freundliche Meldung; die Fallback-Kette und die Retries sind bereits gelaufen, bevor diese auftauchen.

php
use Netresearch\NrLlm\Exception\BudgetExceededException;
use Netresearch\NrLlm\Provider\Exception\ProviderRateLimitException;
use Netresearch\NrLlm\Provider\Exception\ProviderConnectionException;
use Netresearch\NrLlm\Provider\Exception\FallbackChainExhaustedException;
use Netresearch\NrLlm\Provider\Exception\ProviderResponseException;

try {
    return $this->llm->complete("Summarize: {$text}")->content;
} catch (BudgetExceededException) {
    return 'The AI budget for this account is exhausted.';
} catch (ProviderRateLimitException) {
    return 'The AI provider is rate-limiting requests. Please retry shortly.';
} catch (FallbackChainExhaustedException | ProviderConnectionException) {
    return 'Could not reach any AI provider right now.';
} catch (ProviderResponseException $e) {
    $this->logger->warning('LLM provider error', ['status' => $e->httpStatus]);
    return 'The AI service returned an error.';
}

Ausgabe steuern und strukturiertes JSON erhalten

ChatOptions liefert abgestimmte Presets — factual, creative, balanced, json, code — plus fluente Overrides. CompletionService::completeJson() gibt ein dekodiertes Array zurück, sodass du Felder direkt ausliest.

php
use Netresearch\NrLlm\Service\Option\ChatOptions;

// Deterministic output, capped length
$options = ChatOptions::factual()->withMaxTokens(200);
$summary = $this->llm->complete('Summarize the changelog.', $options)->content;

// Decoded JSON straight from the model
$data = $this->completionService->completeJson(
    'Return {"title": ..., "tags": [...]} for this article: ' . $article,
);
$title = $data['title'];

Für Admins

Für Administratoren

Das Backend-Modul Admin-Werkzeuge > LLM gibt Administratoren die volle Kontrolle über KI auf der Website — Provider, Models, Configurations, Budgets und Analytics an einem Ort.

Providers, Models, Configurations

API-Verbindungen registrieren (OpenAI, Anthropic, Gemini, Ollama und weitere), festlegen, welche Models verfügbar sind und welche Fähigkeiten sie haben, und Presets für Anwendungsfälle mit Temperatur, System-Prompts und Token-Limits erstellen.

Einrichtungsassistent

Der Einrichtungsassistent erkennt den Provider-Typ automatisch anhand der Endpunkt-URL, ermittelt verfügbare Models und erzeugt in fünf geführten Schritten eine einsatzbereite Configuration. API-Key einfügen und loslegen.

KI-gestützte Assistenten

Der Task-Assistent und der Konfigurationsassistent erzeugen vollständige Tasks und Configurations — System-Prompt, Parameter und Model-Empfehlung — aus einer Beschreibung in normaler Sprache. Eine Schaltfläche „Models abrufen“ füllt Fähigkeiten und Preise automatisch aus der Provider-API.

Benutzerbudgets und Analytics

Die Ausgaben pro Backend-Benutzer nach Anfragen, Tokens oder Kosten begrenzen — täglich oder monatlich über alle Presets hinweg. Die Analytics-Ansicht zeigt geschätzte Kosten- und Nutzungstrends mit Aufschlüsselung nach Provider, Model und Service sowie den Verbrauch pro Benutzer gegenüber den Budgets.

Tools und RAG

48 Function-Calling-Tools in 9 umschaltbaren Gruppen lassen Models Inhalte, Schema, Konfiguration, Code, Dateien, Systemdiagnose und Konten inspizieren — wobei die Gruppe rag belegte Evidenz aus dem installierten Suchindex liefert. 41 lesen nur; die sieben schreibenden Tools sind deaktiviert und warten auf eine Freigabe.

Tool-Playground

Der ausschließlich Administratoren vorbehaltene Playground führt die begrenzte Agent-Schleife gegen jede Configuration aus und streamt den gesamten Dialog live — jede Anfrage, jede Antwort und jede Tool-Ausführung — samt Dry-Run-Modus, der den exakten Prompt zeigt, ohne das Model aufzurufen.

Ausfallsicherheit und Sicherheit

Configurations können Fallback-Configurations auflisten, die bei Verbindungsfehlern, HTTP-5xx oder Rate-Limits erneut versucht werden. Fähigkeitsbezogene Berechtigungen bilden sich auf native TYPO3-Backend-Gruppenoptionen ab. Keys werden über nr-vault verschlüsselt gespeichert, und das Modul ist auf Administratoren beschränkt.

On-Device-KI

nr-llm fragen

Stelle eine Frage zu nr-llm. Die Antwort entsteht vollständig in deinem Browser über die eingebaute KI von Chrome (Gemini Nano) und stützt sich auf die Inhalte dieser Website.

Architektur

Architektur

nr-llm nutzt eine dreistufige Konfigurationshierarchie, die Zuständigkeiten sauber trennt. Eine Configuration (Einstellungen für den Anwendungsfall wie System-Prompt, Temperatur und maximale Tokens) verweist auf ein Model (Model-ID, Fähigkeiten, Preise), das auf einen Provider verweist (Endpunkt, verschlüsselter API-Key, Adapter-Typ). So lassen sich mehrere API-Keys pro Provider-Typ vorhalten, eigene Endpunkte wie Azure OpenAI oder eine lokale Ollama- oder vLLM-Instanz ansprechen und Model-Definitionen über Configurations hinweg wiederverwenden. Anfragen durchlaufen eine Middleware-Pipeline, die Fallback-Ketten durchsetzt und die Nutzung nach jedem erfolgreichen Aufruf erfasst. Die Extension setzt PHP 8.2+ und TYPO3 v13.4 LTS oder v14.3 LTS voraus, mit einem PSR-18-HTTP-Client.

Architektur-Entscheidungen lesen (181)

Häufig gestellte Fragen

Welche TYPO3- und PHP-Versionen werden unterstützt?

TYPO3 v13.4 LTS oder v14.3 LTS und PHP 8.2 oder höher. Zusätzlich ist ein PSR-18-kompatibler HTTP-Client (etwa guzzlehttp/guzzle) erforderlich. Die Extension befindet sich derzeit in der Beta-Phase (Version 0.32.0).

Welche KI-Provider kann ich nutzen?

OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Mistral, Groq, Azure OpenAI und jeden OpenAI-kompatiblen Endpunkt (vLLM, LocalAI, LiteLLM). Die Fähigkeiten unterscheiden sich je nach Provider — so unterstützen etwa OpenAI, Gemini und OpenRouter Chat, Embeddings, Vision, Streaming und Tools, während Groq auf schnellen Chat und Streaming ausgerichtet ist.

Wo werden die API-Keys gespeichert?

Keys werden als Vault-Identifier (UUIDs) über die Envelope-Verschlüsselung von nr-vault gespeichert. nr-llm speichert oder protokolliert Rohschlüssel nie im Klartext, und das Backend-Modul ist auf Administratoren beschränkt. nr-vault ist eine erforderliche Abhängigkeit.

Ist es kostenlos und Open Source?

Ja. nr-llm steht unter der Lizenz GPL-2.0-or-later und wird von der Netresearch DTT GmbH entwickelt. Der Quellcode liegt auf GitHub, das Paket auf Packagist.

Funktioniert es offline mit Ollama?

Ja. Ollama führt Models lokal aus und benötigt keinen API-Key, sodass KI-Funktionen arbeiten können, ohne Daten an externe APIs zu senden — eine Local-First-Option für datensensible Umgebungen. Ollama unterstützt Chat, Embeddings und Streaming.

Wie ergänze ich KI in meiner eigenen Extension?

netresearch/nr-llm über Composer einbinden, LlmServiceManagerInterface (oder einen bestimmten Feature-Service) injizieren und dessen Methoden für Chat, Completion, Übersetzung, Vision, Embeddings, Streaming oder Tool Calling aufrufen. Zudem lassen sich eigene Provider registrieren. Siehe die Entwickler- und Integrationshandbücher.

Wie kontrolliere ich die Kosten?

Benutzerbezogene Budgets setzen, die die Ausgaben nach Anfragen, Tokens oder geschätzten Kosten begrenzen — täglich oder monatlich über alle Presets hinweg. Das Antwort-Caching über das TYPO3-Caching-Framework reduziert wiederholte Aufrufe, und die Analytics-Ansicht erfasst geschätzte Kosten und Nutzung pro Provider, Model, Service und Benutzer.

Wie steht es um den Datenschutz?

Der Provider ist frei wählbar, einschließlich einer lokalen Ollama-Instanz, die die Daten auf der eigenen Infrastruktur hält. Keys werden verschlüsselt gespeichert, der Zugriff ist auf Administratoren beschränkt, und Fehlermeldungen werden um Geheimnisse bereinigt. LLM-Antworten sind wie nicht vertrauenswürdige Inhalte zu behandeln, und Benutzereingaben sind vor dem Senden zu bereinigen — wie bei jeder KI-Integration.

Kann ich Provider ohne Code-Änderung wechseln?

Ja. Alle Provider implementieren eine gemeinsame Schnittstelle, sodass der Wechsel von OpenAI zu Anthropic oder zu einem lokalen Model eine Konfigurationsänderung im Backend ist, keine Code-Änderung. Configurations können zudem Fallback-Configurations auflisten, die bei Verbindungsfehlern, HTTP-5xx oder Rate-Limits erneut versucht werden.

Warum nr-llm nutzen statt ein Provider-SDK direkt aufzurufen?

Eine Eigenlösung bedeutet, Schlüsselverschlüsselung, Provider-Wechsel, Caching, Streaming, Tool-Calling, Kostenerfassung, Budgets, Guardrails und Fehlerbehandlung in jeder Extension neu zu bauen — und einen Anbieter fest zu verdrahten. nr-llm bündelt all das einmal, sodass Administratoren Provider und Keys in einem Backend-Modul verwalten und jede Extension der Website sie ohne Vendor-Lock-in wiederverwendet.

Ist nr-llm DSGVO-freundlich, und kann ich Daten in der EU halten?

Du wählst den Provider je Konfiguration. Ein lokal betriebenes Ollama oder ein anderer OpenAI-kompatibler Endpoint hält alle Prompt-Daten auf deiner eigenen Infrastruktur, ohne externe API-Aufrufe; bei gehosteten Providern kannst du EU-Region-Endpoints wie Azure OpenAI wählen. API-Keys sind über nr-vault verschlüsselt gespeichert, der Zugriff ist nur für Administratoren, und Fehlermeldungen werden um Secrets bereinigt.

Wie unterscheidet sich nr-llm von anderen TYPO3-KI-Extensions?

nr-llm ist kein Endnutzer-KI-Feature — es ist gemeinsame Infrastruktur, wie das TYPO3-Caching-Framework, auf der andere Extensions aufbauen. Es liefert eine Provider-Abstraktion über sieben und mehr Provider, verschlüsselte Schlüsselspeicherung und typisierte Dienste statt eines einzelnen gebündelten Anwendungsfalls.

Welche Governance- und Sicherheitskontrollen bietet nr-llm?

Verschlüsselte API-Keys über nr-vault, ein Backend-Modul nur für Administratoren mit kapabilitätsbezogenen Berechtigungen über Backend-Gruppen, eine Guardrail-Pipeline, die Secrets über Eingabe, Ausgabe und Streaming maskiert, optionale Human-in-the-Loop-Freigabe sowie Budgets pro Benutzer mit Nutzungsanalyse. 41 der 48 Built-in-Tools sind nur lesend; die sechs schreibenden werden deaktiviert ausgeliefert und halten den Lauf vor jeder Änderung für eine menschliche Freigabe an. Die Seite „Governance & Sicherheit“ beschreibt jede Kontrolle im Detail.

Sie prüfen KI in TYPO3?

Wir gehen mit Ihnen durch, welche Fähigkeiten Sie brauchen, welches Betriebsmodell zu Ihren Vorgaben passt und wie ein erster kontrollierter Schritt aussieht.