Benutzerdefinierte Anbieter
AISCouncil unterstützt jede LLM-API, die das OpenAI-Chat-Completions-Format implementiert. Dies ermöglicht Ihnen die Verbindung zu selbst gehosteten Modellen, Unternehmens-LLM-Gateways, alternativen Anbietern und lokalen Inferenz-Servern.
Was sind benutzerdefinierte Anbieter
Benutzerdefinierte Anbieter sind benutzerdefinierte LLM-Endpunkte, die das OpenAI-kompatible API-Format (/v1/chat/completions mit SSE-Streaming) verwenden. Die meisten modernen Inferenz-Server und LLM-Gateways implementieren dieses Format, was es zum De-facto-Standard für LLM-APIs macht.
Anwendungsfälle
- Selbst gehostete Modelle – Verbindung zu vLLM, Text Generation Inference oder LocalAI auf eigener Hardware
- Unternehmens-LLM-Gateways – Routing über den API-Proxy Ihres Unternehmens mit Authentifizierung und Logging
- Lokale Proxies – LiteLLM oder ähnliche Tools verwenden, um mehrere Anbieter hinter einem einzigen Endpunkt zu vereinen
- Alternative Anbieter – Verbindung zu jedem Anbieter, der noch nicht in die App eingebaut ist
- Feingetunte Modelle – Zugriff auf Ihre benutzerdefinierten feingetunten Modelle auf jeder kompatiblen Hosting-Plattform
- Air-gapped-Deployments – Modelle verwenden, die in einem lokalen Netzwerk ohne Internetzugriff laufen
Hinzufügen eines benutzerdefinierten Anbieters über Einstellungen
- Öffnen Sie Einstellungen (Zahnrad-Symbol klicken oder
Ctrl+Shift+Sdrücken) - Gehen Sie zum API-Schlüssel-Bereich
- Scrollen Sie zu Benutzerdefinierte Anbieter
- Füllen Sie die Felder aus:
| Feld | Erforderlich | Beschreibung |
|---|---|---|
| Anbieter-ID | Ja | Ein kurzer Bezeichner (z.B. my-llm). Muss eindeutig, kleingeschrieben, keine Leerzeichen sein |
| Anzeigename | Ja | Menschenlesbarer Name, der in der Anbieter-Dropdown angezeigt wird |
| Endpunkt-URL | Ja | Vollständige URL zum Chat-Completions-Endpunkt (z.B. https://my-api.example.com/v1/chat/completions) |
| API-Schlüssel | Nein | Bearer-Token für Authentifizierung (leer lassen wenn keins erforderlich) |
| Modelle | Ja | Kommagetrennte Liste von Modell-IDs, die an diesem Endpunkt verfügbar sind |
- Klicken Sie auf Speichern
- Der Anbieter erscheint in der Anbieter-Dropdown beim Erstellen oder Konfigurieren eines Bots
Programmatische Registrierung
Sie können benutzerdefinierte Anbieter über die Browser-Konsole oder aus einem Skript registrieren:
AIS.Providers.registerCustom("my-provider", {
name: "Mein Anbieter",
endpoint: "https://my-api.example.com/v1/chat/completions",
models: [
{ id: "my-model-7b", name: "Mein Modell 7B" },
{ id: "my-model-70b", name: "Mein Modell 70B" },
],
apiStyle: "openai",
});
Registrierungsoptionen
| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
name | string | Anbieter-ID | Anzeigename |
endpoint | string | Erforderlich | Vollständige URL zum Chat-Completions-Endpunkt |
models | array | [{id: 'default', name: id}] | Verfügbare Modelle |
apiStyle | string | 'openai' | API-Format (aktuell wird nur 'openai' unterstützt) |
extraHeaders | object | {} | Zusätzliche HTTP-Header, die in jede Anfrage eingefügt werden |
pricing | object | null | Preisinformationen (für Kosten-Tracking) |
maxInput | number | 0 | Max. Eingabekontextlänge (nur zur Anzeige) |
Zusätzliche Header
Wenn Ihr Endpunkt benutzerdefinierte Header erfordert (z.B. für Authentifizierungsschemata außer Bearer-Tokens):
AIS.Providers.registerCustom("corp-gateway", {
name: "Unternehmens-Gateway",
endpoint: "https://llm.corp.internal/v1/chat/completions",
models: [{ id: "gpt-4o", name: "GPT-4o (via Gateway)" }],
extraHeaders: {
"X-Corp-Token": "your-internal-token",
"X-Department": "engineering",
},
});
Persistenz
Benutzerdefinierte Anbieter werden automatisch unter dem Schlüssel ais-custom-providers im localStorage gespeichert. Sie werden bei jedem Laden der Seite wiederhergestellt, daher müssen Sie sie nur einmal registrieren.
Benutzerdefinierte Anbieter verwalten
Registrierte benutzerdefinierte Anbieter auflisten
const customIds = AIS.Providers.listCustom();
// ['my-provider', 'corp-gateway']
Einen benutzerdefinierten Anbieter entfernen
AIS.Providers.removeCustom("my-provider");
Dies entfernt ihn sowohl aus der Laufzeit-Registry als auch aus dem localStorage.
Alle Anbieter auflisten (eingebaut + benutzerdefiniert)
const all = AIS.Providers.list();
// [{ name: 'anthropic', models: [...] }, { name: 'my-provider', models: [...] }, ...]
Wie es intern funktioniert
Benutzerdefinierte Anbieter verwenden dieselbe openaiCompatible() SSE-Streaming-Factory, die die eingebauten OpenAI-, xAI-, OpenRouter-, DeepSeek-, Groq- und anderen Anbieter antreibt. Diese Factory:
- Baut einen Standard-OpenAI-Format-Request-Body (model, messages, temperature, max_tokens, stream, etc.)
- Sendet eine POST-Anfrage mit
Authorization: Bearer {apiKey}-Header - Parst den SSE-Stream (
data: {...}-Zeilen) nach Content-Deltas - Verarbeitet sowohl Streaming- (delta) als auch Nicht-Streaming- (message) Antwortformate
- Extrahiert die Token-Nutzung aus dem
usage-Feld falls vorhanden
Alle Konfigurationsfelder funktionieren mit benutzerdefinierten Anbietern: Temperatur, top_p, frequency_penalty, presence_penalty, Stop-Sequenzen, Antwortformat und Reasoning-Aufwand.
Kompatible Dienste
Die folgenden Dienste implementieren das OpenAI-kompatible API-Format und funktionieren als benutzerdefinierte Anbieter:
| Dienst | Endpunkt | Hinweise |
|---|---|---|
| LiteLLM | http://localhost:4000/v1/chat/completions | Proxy, der 100+ Anbieter vereint |
| LocalAI | http://localhost:8080/v1/chat/completions | Open-Source-Modelle lokal ausführen |
| vLLM | http://localhost:8000/v1/chat/completions | Hochleistungs-Inferenz-Server |
| Text Generation Inference | http://localhost:8080/v1/chat/completions | Hugging Face Inferenz-Server |
| Ollama | http://localhost:11434/v1/chat/completions | Bereits eingebaut, kann aber auch als benutzerdefiniert hinzugefügt werden |
| llama.cpp (Server-Modus) | http://localhost:8080/v1/chat/completions | Leichtgewichtige C++-Inferenz |
| Jan | http://localhost:1337/v1/chat/completions | Desktop-App mit lokalen Modellen |
| LM Studio | http://localhost:1234/v1/chat/completions | Desktop-App mit Modell-Verwaltung |
| Cloudflare Workers AI | https://api.cloudflare.com/client/v4/accounts/{id}/ai/v1/chat/completions | Eingebaut, aber anpassbar |
| Azure OpenAI | https://{resource}.openai.azure.com/openai/deployments/{deployment}/chat/completions?api-version=2024-02-01 | Erfordert api-key-Header |
Fehlerbehebung
CORS-Fehler
Wenn der Browser einen API-Endpunkt direkt aufruft, muss der Server CORS-Header in seiner Antwort enthalten. Ohne sie blockiert der Browser die Anfrage aus Sicherheitsgründen.
Wenn Sie einen CORS-Fehler in der Konsole sehen, muss Ihr benutzerdefinierter Endpunkt diese Header zurückgeben:
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Allow-Methods: POST, OPTIONS
Für lokale Dienste:
- Ollama: Setzen Sie die
OLLAMA_ORIGINS=*-Umgebungsvariable vor dem Starten - vLLM: Fügen Sie das
--allowed-origins '*'-Flag hinzu - LiteLLM: Fügen Sie das
--cors-Flag hinzu oder setzen SieLITELLM_ALLOW_ORIGINS=* - LocalAI: CORS ist standardmäßig aktiviert
Für Remote-Dienste hinter einem Reverse Proxy (Nginx):
location /v1/ {
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization' always;
add_header 'Access-Control-Allow-Methods' 'POST, OPTIONS' always;
if ($request_method = 'OPTIONS') {
return 204;
}
proxy_pass http://localhost:8000;
}
Verbindung verweigert
- Verifizieren Sie, dass die Endpunkt-URL korrekt ist und der Dienst läuft
- Für lokale Dienste stellen Sie sicher, dass der Server auf dem erwarteten Port lauscht
- Für
localhost-Dienste versuchen Sie127.0.0.1stattdessen (oder umgekehrt) - Prüfen Sie, dass keine Firewall den Port blockiert
Authentifizierungsfehler
- Verifizieren Sie, dass Ihr API-Schlüssel korrekt ist
- Einige Dienste verwenden verschiedene Auth-Header – verwenden Sie
extraHeaders, wenn der Dienst nicht das Standard-Authorization: Bearer-Format verwendet - Azure OpenAI verwendet
api-key-Header stattAuthorization
Leere oder verstümmelte Antworten
- Bestätigen Sie, dass der Endpunkt OpenAI-kompatibles SSE-Format zurückgibt (
data: {"choices":[{"delta":{"content":"..."}}]}) - Einige Dienste erfordern
stream: trueim Request-Body (die App sendet dies standardmäßig) - Prüfen Sie, dass die Modell-ID mit dem übereinstimmt, was der Dienst erwartet
- Öffnen Sie den Network-Tab der Browser-DevTools, um den rohen Request und die Antwort zu inspizieren