DE ▾
Jetzt starten

Unzensierte ChatGPT-Alternative: Wechsel in zwei Zeilen

Suchst du eine unzensierte ChatGPT-Alternative, die du ohne Rewrite übernehmen kannst? Wenn dein Code bereits ein OpenAI SDK nutzt, ist der Wechsel in zwei Zeilen erledigt: die Base URL und der API-Schlüssel, plus der Modellname. Hier ist der Code vor und nach dem Wechsel und was sich auf der anderen Seite anders verhält.

Zuletzt aktualisiert

Ein Weichenhebel, der eine Strecke zu einer leuchtenden offenen Station leitet, illustriert den Anbieterwechsel in zwei Zeilen

Zusammenfassung

  1. Ändere base_url und api_key, setze dann das Modell auf uncensored. Nichts anderes in einem einfachen Chat-Client muss angepasst werden.
  2. Neueste offizielle SDKs lesen auch OPENAI_BASE_URL und OPENAI_API_KEY, sodass du mit Umgebungsvariablen wechseln kannst.
  3. Der Dienst ist nur Text, mit einem Modell und einem 100.000-Token-Kontextfenster.
  4. Erwarte andere Formulierungen und andere Limits, also führe deine Test-Prompts vor dem Release erneut aus.

Vorher und Nachher

Hier ist ein typischer OpenAI-Client in Python:

import os
from openai import OpenAI

client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

r = client.chat.completions.create(
    model="your-current-model",
    messages=[{"role": "user", "content": "Draft a tense dialogue between two rivals."}],
)

Und derselbe Client, der auf die unzensierte Alternative zeigt:

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.chatgptunfiltered.com/v1",
    api_key=os.environ["UNFILTERED_API_KEY"],
)

r = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Draft a tense dialogue between two rivals."}],
)

Zwei Zeilen im Konstruktor wurden geändert, und der Modell-String in der Anfrage wurde geändert. Das Nachrichtenformat, das Antwortobjekt und die Art, wie du r.choices[0].message.content liest, bleiben unverändert. Die Alternative ist ein anderes Modell, betrieben von einem unabhängigen Anbieter. Es ist kein ChatGPT und keine offizielle API von OpenAI oder sonst jemandem.

Nur mit Umgebungsvariablen wechseln

Neuere Versionen der offiziellen Python- und Node-SDKs lesen OPENAI_BASE_URL und OPENAI_API_KEY, wenn du einen Client ohne Argumente erstellst. Das bedeutet, der Anwendungscode bleibt unverändert:

export OPENAI_BASE_URL="https://api.chatgptunfiltered.com/v1"
export OPENAI_API_KEY="YOUR_KEY"
python app.py

Du musst weiterhin sicherstellen, dass der Code model="uncensored" übergibt. Wenn der Modellname an vielen Stellen fest codiert ist, zieh ihn zuerst in einen Konfigurationswert um. Dieser kleine Refactoring-Schritt macht jeden zukünftigen Wechsel in beide Richtungen genauso kostengünstig.

Die gleiche Idee funktioniert in Node:

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.chatgptunfiltered.com/v1",
  apiKey: process.env.UNFILTERED_API_KEY,
});

const r = await client.chat.completions.create({
  model: "uncensored",
  messages: [{ role: "user", content: "Give me five villain names." }],
});
console.log(r.choices[0].message.content);

Frameworks und das Responses-Format

Bibliotheken, die den OpenAI-Client umschließen, bieten meist eine Einstellung für die Base URL. In LangChains OpenAI-Chat-Wrapper sieht das so aus:

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="uncensored",
    base_url="https://api.chatgptunfiltered.com/v1",
    api_key="YOUR_KEY",
)
print(llm.invoke("Name three moods for a chase scene.").content)

Wenn du das neuere Responses-Format verwendest, werden sowohl POST /v1/responses als auch POST /v1/chat/completions unterstützt. GET /v1/models listet das Modell auf, was eine schnelle Überprüfung ist, dass dein Schlüssel und deine URL korrekt sind.

Zu erwartende Unterschiede

BereichWas dir auffallen wird
Bereitschaft zu antwortenEs antwortet ohne Inhaltsabweisungen für die rechtmäßige Nutzung durch Erwachsene. Prompts, die ein Modell mit Filtern ablehnt, erhalten normalerweise eine Antwort.
Formulierung und StilAnders Modell, andere Stimme. Tonfall, Länge und Formatierungsgewohnheiten werden nicht mit deinem vorherigen Modell übereinstimmen.
ModellauswahlEin Modell, ID uncensored. Keine Auswahl zwischen verschiedenen Stufen.
UmfangNur Text: keine Bild-, Audio- oder Videoerzeugung, keine Embeddings, kein Fine-Tuning.
Kontext100.000 Token, Prompt plus Completion. max_tokens ist optional.
LimitsVollständiger Schlüssel: 8 parallel, 300 pro Minute. Test-Schlüssel: 2 parallel, 60 pro Minute. Body bis zu 8 MB.
FehlerHTTP 429 mit Code rate_limited oder concurrency; temporäre Überlastung gibt 429 mit Retry-After: 5 zurück.

Streaming, Tool Calling und JSON-Modus werden unterstützt, ebenso Temperatur, top_p, Stop, Seed und Penalties. Response-Header enthalten X-Request-Id, X-Balance-USD, X-RateLimit-Limit-Requests und X-RateLimit-Limit-Concurrency. Details findest du in der Dokumentation.

Zwei weitere Unterschiede sind erwähnenswert. Erstens kann ein anderes Modell Token anders zählen, sodass die Zählungen für denselben Text von den Werten deines alten Anbieters abweichen können; nutze die Nutzungszahlen in den Antworten, nicht deine eigenen Schätzungen. Zweitens sind Funktionen, die auf den gehosteten Tools eines Anbieters basieren, wie integrierte Websuche oder Dateispeicher auf der Anbieterseite, nicht Teil dieses Dienstes. Function Calling: Du definierst Funktionen, und dein Code führt sie aus.

Ein Paritäts-Skript für deine eigenen Prompts

Statt eine Handvoll Ausgaben mit dem Auge zu prüfen, führe deinen Prompt-Satz in einer Schleife durch den neuen Endpunkt und speichere alles, was du zur Überprüfung brauchst.

import csv, json

with open("prompts.json", encoding="utf-8") as f:
    prompts = json.load(f)  # a list of strings

with open("results.csv", "w", newline="", encoding="utf-8") as out:
    w = csv.writer(out)
    w.writerow(["prompt", "reply", "in_tokens", "out_tokens"])
    for p in prompts:
        r = client.chat.completions.create(
            model="uncensored",
            temperature=0.7,
            messages=[{"role": "user", "content": p}],
        )
        w.writerow([p, r.choices[0].message.content, r.usage.prompt_tokens, r.usage.completion_tokens])

Öffne die CSV und überprüfe eine Spalte nach der anderen. Die Token-Spalten geben dir eine Kostenprognose für denselben Traffic: Multipliziere die Summen mit $0,15 und $0,50 pro 1M. Ein Test-Schlüssel erlaubt 60 Anfragen pro Minute und 2 gleichzeitig, sodass ein Satz von einigen hundert Prompts in Minuten abgeschlossen ist, wenn du die Schleife sequenziell hältst.

Eine kurze Migrations-Checkliste

  1. Hole einen Schlüssel. Auf der API-Schlüssel-Seite registriere dich mit Google oder E-Mail und sichere dir das Testguthaben von $0,50. Es gilt 7 Tage und benötigt keine Karte.
  2. Verschiebe Modellname und URL in die Konfiguration. Ein Ort, gelesen aus der Umgebung.
  3. Wiedergabe deiner Test-Prompts. Nutze 20 bis 50 echte Beispiele, darunter die, die dein vorheriges Modell abgelehnt hat, und lies die Ergebnisse.
  4. Passe den System-Prompt an. Entferne Text, der nur dazu diente, ein gefiltertes Modell zur Antwort zu bewegen. Behalte das, was Rolle, Zielgruppe und Format beschreibt.
  5. Füge einen 429-Handler hinzu. Warte 5 Sekunden und versuche es erneut. Begrenze die Parallelität, um sie an deinen Schlüssel anzupassen.
  6. Nutzung prüfen. Beobachte X-Balance-USD in den Antworten, während du echten Traffic abwickelst.

Ein Retry-Helper, der Schritt 5 abdeckt:

import time
from openai import RateLimitError

def create_with_retry(**kwargs):
    for _ in range(4):
        try:
            return client.chat.completions.create(**kwargs)
        except RateLimitError:
            time.sleep(5)
    raise RuntimeError("rate limited after 4 tries")

Bewahre die gespeicherten Ausgaben des alten Modells für ein paar Wochen auf. Wenn ein Benutzer sich beschwert, dass nach dem Wechsel etwas seltsam wirkt, kannst du gegen das vergleichen, was das alte Modell gesagt hätte, und sehen, ob der Unterschied am Prompt, am Modell oder am Input liegt.

Risikoarm ausrollen

Schalte nicht alles auf einmal um. Packe die Anbieterwahl hinter eine Konfiguration, sodass du einen Prozentsatz des Traffics verschieben und in Sekunden zurückrollen kannst.

import os, random
from openai import OpenAI

old = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
new = OpenAI(base_url="https://api.chatgptunfiltered.com/v1", api_key=os.environ["UNFILTERED_API_KEY"])

SHARE = float(os.environ.get("NEW_SHARE", "0.05"))

def pick():
    if random.random() < SHARE:
        return new, "uncensored"
    return old, os.environ["OLD_MODEL"]

Starte bei 5 %, beobachte deine Fehlerquote, 429-Zählungen und Benutzerfeedback für ein paar Tage und erhöhe es dann. Setze NEW_SHARE auf 0, um zurückzurollen. Die Auswahl nach Benutzer oder Feature ist besser als die nach Anfrage, wenn Unterhaltungen auf einem Modell bleiben müssen, da ein Modellwechsel mitten im Chat die Stimme verändert.

Was es kostet, und wann du bleiben solltest

Die Preise betragen $0,15 pro 1M Input-Token und $0,50 pro 1M Output-Token, bezahlt vom Prepaid-Guthaben. Eine Anfrage mit 1.500 Token Input und 400 Output kostet 1.500 x $0,15 / 1M = $0,000225, plus 400 x $0,50 / 1M = $0,0002, also $0,000425 oder $0,425 pro 1.000 Anfragen. Für andere Anbieter prüfe deren aktuelle Preislisten; die Preise ändern sich und ein Vergleich aus dem Gedächtnis veraltet schnell. Aufladungen sind in ganzen Beträgen von $20 bis $500, bezahlt in Krypto, mit Boni ab $50. Details auf Preise.

Bei deinem aktuellen Anbieter zu bleiben ist der richtige Schritt, wenn du Bilder oder Embeddings brauchst, wenn dein Publikum strenge Moderation benötigt oder wenn ein herstellerspezifisches Modell eine harte Anforderung ist. Für den Hintergrund, was diese Klasse von Modellen ist, lies Verständnis unzensierter ChatGPT-Modelle. Die harte Grenze ändert sich nie: keine sexuellen Inhalte mit Minderjährigen.

Es ist auch in Ordnung, beide Anbieter parallel zu betreiben. Viele Teams leiten normale Anfragen an ein Modell und die Anfragen, die weiterhin auf Ablehnungen stoßen, an ein anderes. Da beide dasselbe Format sprechen, ist dieses Routing nur wenige Codezeilen und eine Regel dafür, wann welches Modell verwendet wird.

Häufig gestellte Fragen

Wie viele Zeilen muss ich ändern?

Zwei in der Client-Konfiguration: die Basis-URL und der API-Schlüssel, plus der Modellname in deinen Anfragen. Das Nachrichtenformat und das Parsen der Antwort bleiben gleich.

Ist das wirklich ChatGPT ohne den Filter?

Nein. Es ist ein anderes Open-Weight-Modell, betrieben von einem unabhängigen Anbieter und nicht mit OpenAI verbunden. Es ist darauf abgestimmt, ohne Inhaltsablehnungen für die legale Nutzung durch Erwachsene zu antworten.

Kann ich LangChain oder ein anderes Framework weiter nutzen?

Ja, solange es dir erlaubt, eine benutzerdefinierte OpenAI-kompatible Basis-URL zu setzen. Setze die Basis-URL, den Schlüssel und die Modell-ID uncensored.

Was verliere ich beim Wechsel?

Alles außerhalb von Text: Bilder, Audio, Embeddings und Fine-Tuning werden nicht angeboten. Du erhältst auch ein Modell, kein Menü.

Erhalte deinen API-Schlüssel

Registriere dich, kopiere den Token, aktualisiere deine Base URL. Das ist alles.

Jetzt starten