12k
All articles

So betreiben Sie Ihren eigenen KI-Modell-Router mit 9router

Betreiben Sie 9router als selbst gehosteten KI-Modell-Router: Installation mit npm oder Docker, Modelle per curl prüfen, Coding-Tools verbinden und die OpenAI-kompatible API absichern.

OpenReplay Team
OpenReplay Team
So betreiben Sie Ihren eigenen KI-Modell-Router mit 9router

9router ist ein quelloffener, MIT-lizenzierter Routing-Proxy, der auf Ihrem eigenen Rechner oder Server läuft. Er stellt alle angebundenen KI-Anbieter hinter einem einzigen OpenAI-kompatiblen Endpunkt unter http://localhost:20128/v1 bereit.

Wenn Sie Claude Code in einem Terminal, Cline in Ihrem Editor und das OpenAI SDK in einem Nebenprojekt nutzen, haben Sie vermutlich drei Sätze von Schlüsseln und drei Base-URLs. Bei jedem Modellwechsel muss außerdem jedes Tool einzeln umkonfiguriert werden. 9router ersetzt das durch einen einzigen lokalen Endpunkt. Dieser Leitfaden zeigt, wie Sie 9router per npm oder Docker installieren und mit curl prüfen. Außerdem erfahren Sie, wie Sie Ihre Tools darauf ausrichten und die Instanz absichern, bevor sie von außerhalb von localhost erreichbar ist.

Das Wichtigste in Kürze

  • 9router wird mit npm install -g 9router installiert und mit 9router gestartet. Das Dashboard und die OpenAI-kompatible API lauschen standardmäßig beide auf Port 20128.
  • Ein GET-Request an http://localhost:20128/v1/models listet alle Modelle und Combos auf, die der Router bedienen kann. Damit lässt sich am schnellsten prüfen, ob ein Anbieter verbunden ist.
  • Eine Combo ist eine benannte, geordnete Liste von Modellen, die Sie als model-Wert übergeben. Der Router wechselt zum nächsten Modell, wenn das aktuelle sein Kontingent ausgeschöpft hat, einem Rate-Limit unterliegt oder einen Fehler zurückgibt.
  • Ist INITIAL_PASSWORD nicht gesetzt, verwendet die erste Anmeldung am Dashboard das Passwort 123456. Legen Sie ein eigenes Passwort fest und lassen Sie die Dashboard-Einstellung „Require API key“ aktiviert, bevor Sie die Instanz über localhost hinaus erreichbar machen.

Was ist 9router?

9router ist ein selbst gehosteter Proxy, der Requests im OpenAI-Format entgegennimmt und an den jeweils konfigurierten Upstream-Anbieter weiterleitet. Bei Bedarf übersetzt er dabei zwischen den Request-Formaten von OpenAI, Claude und Gemini. Laut README des Projekts werden über 40 Anbieter unterstützt. Die CLI wird als npm-Paket 9router ausgeliefert.

Der Hauptunterschied zwischen 9router und OpenRouter liegt darin, wo der Router läuft. OpenRouter ist ein gehosteter Dienst, an den Sie Ihre Requests senden. 9router ist Software, die Sie selbst betreiben. OpenRouter taucht dabei in der Anbieterliste von 9router auf, sodass Sie auch ein OpenRouter-Konto hinter Ihrem eigenen Router einbinden können.

OpenRouter9router
AusführungsortCloud des AnbietersIhr Rechner oder Server
Verwaltung der Anbieter-ZugangsdatenDurch den Dienst, hinter einem OpenRouter-SchlüsselDurch Ihre lokale 9router-Instanz
Base-URL für Toolshttps://openrouter.ai/api/v1http://localhost:20128/v1

Warum ein selbst gehosteter Modell-Router?

Ein lokaler Router stellt allen Tools denselben Endpunkt bereit und hält die Anbieter-Zugangsdaten an einem zentralen Ort. So können Sie Modelle wechseln, ohne Tool-Konfigurationen oder Anwendungscode anzupassen.

  • Ein Endpunkt. Alle OpenAI-kompatiblen Clients verwenden dieselbe Base-URL.
  • Schlüssel an einem Ort. Sie hinterlegen Anbieterkonten einmalig im Dashboard. Jedes Tool benötigt nur noch einen 9router-API-Schlüssel.
  • Modellwechsel per String. Um das Modell zu wechseln, ändern Sie lediglich den model-Wert.
  • Combos. Eine Combo ist eine benannte, geordnete Liste von Modellen, die Sie als Modellnamen verwenden. Hat das erste Modell sein Kontingent ausgeschöpft, greift ein Rate-Limit (429) oder tritt ein Fehler auf, versucht der Router das nächste Modell.

Üblicherweise steht Ihr bevorzugtes Modell an erster Stelle, gefolgt von günstigeren Modellen. Um vor der Auswahl der Fallbacks die Preise pro Token zu vergleichen, können Sie den LLM-API-Kostenrechner nutzen.

9router installieren und starten

9router wird mit npm install -g 9router als globale npm-CLI installiert und mit dem Befehl 9router gestartet. Der Server lauscht auf Port 20128.

npm install -g 9router
9router
# Dashboard: http://localhost:20128
# API:       http://localhost:20128/v1

Wenn Sie auf eine globale Installation verzichten möchten, führt npx 9router das Tool einmalig aus.

Für den Betrieb in Docker verwenden Sie das offizielle Image decolua/9router, das auch unter ghcr.io/decolua/9router veröffentlicht wird:

docker run -d --name 9router \
  -p 20128:20128 \
  -v "$HOME/.9router:/app/data" \
  -e DATA_DIR=/app/data \
  -e INITIAL_PASSWORD='change-me' \
  decolua/9router:latest

Durch das Volume-Mount bleibt die SQLite-Datenbank (im Container unter /app/data/db/data.sqlite) bei einem Neustart des Containers erhalten. Neue Releases erscheinen häufig, und der Tag latest wandert jeweils mit. Für reproduzierbare Deployments sollten Sie daher einen konkreten Versions-Tag festlegen.

Nach dem Start von 9router schließen Sie die Einrichtung im Dashboard ab:

  1. Öffnen Sie http://localhost:20128 und melden Sie sich am Dashboard an.
  2. Fügen Sie mindestens ein Anbieterkonto hinzu.
  3. Erstellen Sie einen API-Schlüssel für Ihre Tools.

Router mit curl überprüfen

Am schnellsten prüfen Sie die Funktion von 9router mit einem GET-Request an /v1/models, noch bevor Sie ein Tool konfigurieren. Die Antwort ist eine JSON-Liste aller Modelle und Combos, die der Router bedienen kann, im standardmäßigen OpenAI-Listenformat.

curl http://localhost:20128/v1/models

Die Modellliste wird ohne Schlüssel ausgeliefert. Bei Chat-Requests ist das anders: Die Dashboard-Einstellung „Require API key“ ist standardmäßig aktiviert, daher benötigen sie einen im Dashboard erstellten Schlüssel. Es empfiehlt sich, den Schlüssel auch beim Abruf der Modellliste mitzusenden. Ein auf bestimmte Modelle beschränkter Schlüssel sieht nämlich nur diese Modelle:

curl http://localhost:20128/v1/models \
  -H "Authorization: Bearer $NINE_ROUTER_API_KEY"

Erscheint eine Modell-ID Ihres Anbieters in der Liste, funktioniert das Routing. Ist die Liste leer, ist der Anbieter noch nicht verbunden.

Tools auf 9router ausrichten

Jeder Client, der eine benutzerdefinierte OpenAI-Base-URL akzeptiert, kann 9router verwenden. Setzen Sie die Base-URL auf http://localhost:20128/v1 und hinterlegen Sie einen im Dashboard erstellten API-Schlüssel.

OpenAI SDK

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "http://localhost:20128/v1",
  apiKey: process.env.NINE_ROUTER_API_KEY, // created in the 9router dashboard
});

const res = await client.chat.completions.create({
  model: "<an id or combo name from /v1/models>",
  messages: [{ role: "user", content: "Say hello" }],
});
console.log(res.choices[0].message.content);

Um zu einem anderen Modell oder einer Combo zu wechseln, ändern Sie den model-String. Der übrige Code bleibt unverändert.

Coding-Agents

Wählen Sie in Cline OpenAI Compatible als API-Provider und tragen Sie drei Werte ein: die Base-URL http://localhost:20128/v1, Ihren API-Schlüssel aus dem Dashboard und eine aus /v1/models kopierte Modell-ID. Terminal-Agents, bei denen Sie einen eigenen Anbieter einbinden können, etwa OpenCode, erwarten dieselben drei Werte.

Pi mit pi-9router-ext

Die Erweiterung pi-9router-ext verbindet den Coding-Agent Pi über zwei Umgebungsvariablen mit 9router:

pi install npm:pi-9router-ext
NINE_ROUTER_BASE_URL=http://localhost:20128 NINE_ROUTER_API_KEY=<key> pi
# inside Pi:
/9router-models

Beim Start liest die Erweiterung die Chat-Modelle aus /v1/models aus. Ab Release 0.2.4 fragt sie zusätzlich /v1/models/web ab, um die Routen für Websuche und Web-Fetch von 9router zu ermitteln. Mit /9router-models sehen Sie in Pi, was gefunden wurde.

Wie sichern Sie 9router ab, bevor Sie es extern erreichbar machen?

Bevor ein anderer Rechner auf 9router zugreifen kann, sollten Sie ein Dashboard-Passwort sowie die Secrets für JWT und API-Schlüssel festlegen und „Require API key“ aktiviert lassen. Die Standardwerte genügen für localhost, darüber hinaus jedoch nicht. Ist INITIAL_PASSWORD nicht gesetzt, verwendet die erste Anmeldung am Dashboard 123456, bis ein Passwort gespeichert wird. Setzen Sie die folgenden Werte gemäß der offiziellen .env.example, bevor Sie einen Port öffnen oder auf einem öffentlichen Host deployen:

INITIAL_PASSWORD=<long-random-string>   # first login otherwise uses 123456
JWT_SECRET=<long-random-string>         # listed under "Required" in .env.example
API_KEY_SECRET=<long-random-string>     # the example default is publicly known
AUTH_COOKIE_SECURE=true                 # set when serving behind an HTTPS reverse proxy

Die Prüfung des API-Schlüssels selbst ist eine Dashboard-Einstellung. Öffnen Sie die Seite „Endpoint“ und vergewissern Sie sich, dass Require API key aktiviert ist. Dann werden Requests ohne gültigen Schlüssel abgewiesen. Die Option ist standardmäßig aktiviert, und das Dashboard zeigt eine Warnung an, wenn der Endpunkt ohne sie von einem entfernten Host aus erreichbar ist.

Setzen Sie AUTH_COOKIE_SECURE=true nur, wenn TLS vor 9router terminiert wird. Über reines HTTP sendet der Browser das Auth-Cookie sonst nicht zurück.

Fazit

Ein selbst gehosteter Router wie 9router bietet allen Ihren Tools einen gemeinsamen Endpunkt und einen zentralen Satz von Zugangsdaten. Ein Modellwechsel beschränkt sich auf die Änderung des model-Strings. Installieren Sie 9router und prüfen Sie, ob /v1/models die Modelle Ihres Anbieters auflistet. Richten Sie anschließend ein erstes Tool auf http://localhost:20128/v1 aus. Legen Sie Passwort und Secrets fest und lassen Sie „Require API key“ aktiviert, bevor der Router über localhost hinaus erreichbar wird.

FAQs

Wie betreibe ich 9router auf einem anderen Port als 20128?

Starten Sie die npm-CLI mit 9router --port 8080, um einen benutzerdefinierten Port zu verwenden. Beim Betrieb aus dem Quellcode setzen Sie die Umgebungsvariable PORT und zusätzlich NEXT_PUBLIC_BASE_URL auf denselben Port. In Docker ändern Sie die hostseitige Angabe im Port-Mapping, zum Beispiel -p 8080:20128. Anschließend benötigt jedes Tool die neue Base-URL, etwa http://localhost:8080/v1.

Wo speichert 9router Konfiguration und Daten?

9router speichert seine Daten in dem über DATA_DIR festgelegten Verzeichnis, standardmäßig ~/.9router. Die SQLite-Datenbank liegt dort unter db/data.sqlite. Ist JWT_SECRET nicht gesetzt, wird dort außerdem ein automatisch generiertes Signing-Secret unter ~/.9router/jwt-secret abgelegt. Das offizielle Docker-Image setzt DATA_DIR auf /app/data, sodass ein unter /app/data eingebundenes Volume sämtliche Daten persistiert.

Wie richte ich Tools auf einem anderen Rechner auf einen entfernten 9router-Server aus?

Führen Sie auf dem Client-Rechner npx 9router connect http://server-host:20128 aus. Der Befehl startet keinen lokalen Server. Er meldet sich mit dem Dashboard-Passwort an, verwendet einen API-Schlüssel mit dem Namen cli- gefolgt vom Hostnamen wieder oder legt ihn neu an und schreibt die Konfiguration für jedes ausgewählte Tool. Jede ursprüngliche Konfiguration wird einmalig mit dem Suffix .bak-9router gesichert. Mit --tools claude,codex wählen Sie die Tools vorab aus, mit --reset machen Sie die Änderungen rückgängig.

Kann 9router mehrere Konten desselben Anbieters nutzen?

Ja. 9router unterstützt mehrere Konten pro Anbieter und verteilt Requests per Round-Robin oder prioritätsbasiertem Routing auf diese. Erreicht ein Konto sein Kontingent, wechselt der Router zum nächsten Konto. Das ist unabhängig von Combos: Bei der Kontorotation bleibt das Modell gleich und nur die dahinterliegenden Zugangsdaten wechseln, während eine Combo zu einem anderen Modell wechselt.

DevTools for the frontend

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers.

Star on GitHub12k

We use cookies to improve your experience. By using our site, you accept cookies.