No Filter AI Coder: So nutzt du es in Cursor und Python
Einige Code-Anfragen erhalten von Mainstream-Assistenten eine Ablehnung oder Warnung: Security-Tooling, Scraper, Reverse Engineering, Exploit-Beschreibungen für dein eigenes Labor. Hier siehst du, wie du ein unzensiertes Modell in deinen Editor und deine Skripte einbindest und was du erwarten kannst.

Wichtige Punkte
- Der Endpunkt spricht das OpenAI-Chat-Format, sodass Editoren und Frameworks, die eine benutzerdefinierte base URL akzeptieren, ihn nutzen können.
- Function Calling, JSON-Modus und Streaming werden unterstützt, was die meisten Coding-Agent-Muster abdeckt.
- Das 100.000-Token-Fenster passt einen großen Teil eines Repositories in eine einzige Anfrage.
- Es ist ein allgemeines Modell, kein Code-spezialisiertes, also teste es zuerst bei deinen eigenen Aufgaben.
Was ein No-Filter-Coder ist und was nicht
Ein No Filter AI Coder ist ein Sprachmodell, das Programmieranfragen beantwortet, ohne deine Gründe zu hinterfragen. Wenn du einen Port-Scanner für ein eigenes Netzwerk schreibst, eine Legacy-Binärdatei decompilierst, für die du die Quelle verloren hast, oder einen Scraper baust, der einen Browser imitiert, erhältst du Code statt eines Absatzes über verantwortungsvolle Nutzung.
Es hilft, genau zu definieren, was dieser Dienst ist. Es ist ein Open-Weight-Modell, abgestimmt darauf, bei rechtmäßiger Nutzung für Erwachsene ohne Inhaltsablehnungen zu antworten, betrieben von einem unabhängigen Anbieter. Es ist nicht die offizielle API eines großen Anbieters und es ist kein Router, der zwischen Modellen wählt. Die Modell-ID ist uncensored. Es gibt hier keinen Anspruch auf Benchmark-Werte, da keine dafür auf dieser Website veröffentlicht sind. Ein Modell mit weniger Ablehnungen ist nicht automatisch ein besserer Programmierer, also betrachte die erste Woche als Evaluierung.
Die rechtmäßige Nutzung liegt in deiner Verantwortung. Das Tool entfernt Reibungspunkte für legitime Sicherheitsarbeit, Forschung und ungewöhnliche Ingenieursaufgaben. Es ist keine Lizenz, Systeme anzugreifen, die dir nicht gehören.
Aufruf aus Python oder curl
Der einfachste Test ist eine einzelne Anfrage. Dieses Python-Skript fragt ein kleines Tool ab und gibt die Antwort aus.
from openai import OpenAI
client = OpenAI(base_url="https://api.nofilterai.cc/v1", api_key="YOUR_KEY")
resp = client.chat.completions.create(
model="uncensored",
temperature=0.2,
messages=[
{"role": "system", "content": "You are a senior engineer. Reply with code first, then at most five lines of notes."},
{"role": "user", "content": "Write a Python script that scans TCP ports 1-1024 on a host I own, using asyncio, with a 0.5 s timeout."},
],
)
print(resp.choices[0].message.content)
Niedrige Temperaturen eignen sich gut für Code. Werte zwischen 0,1 und 0,3 liefern stabilere Ausgaben, und seed ermöglicht es dir, einen Lauf zu wiederholen, wenn du Prompts vergleichst. Dieselbe Anfrage über die Shell sieht so aus.
curl https://api.nofilterai.cc/v1/chat/completions \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"temperature": 0.2,
"messages": [
{"role": "user", "content": "Explain this regex and rewrite it without lookbehind: (?<=id=)\\d+"}
]
}'
Du kannst auflisten, was der Endpunkt mit GET /v1/models bereitstellt. Hol dir einen Schlüssel von der Schlüsselseite; das Ein-Klick-Testguthaben von $0,50 reicht für viele hundert kleine Coding-Anfragen.
Einrichtung in Cursor
Cursor ermöglicht es dir, die OpenAI-Base URL in den Modelleinstellungen zu überschreiben, wodurch du es auf jeden kompatiblen Anbieter richten kannst. Die genauen Menünamen ändern sich je nach Version, also folge der Idee und nicht den Bezeichnungen.
- Öffne die Cursor-Einstellungen und suche den Abschnitt für Modelle.
- Füge deinen Schlüssel in das Feld für den OpenAI-API-Schlüssel ein.
- Aktiviere die Option zum Überschreiben der OpenAI-Base URL und gib
https://api.nofilterai.cc/v1ein. - Füge ein benutzerdefiniertes Modell namens
uncensoredhinzu und wähle es im Chat-Panel aus. - Sende eine kleine Testnachricht, bevor du eine Bearbeitung über mehrere Dateien hinweg versuchst.
Cursor und ähnliche Editoren können für einige Funktionen ihre eigenen Server nutzen, und einige Funktionen akzeptieren möglicherweise überhaupt keine benutzerdefinierten Modelle. Wenn eine Funktion fehlschlägt, überprüfe, ob sie an die Modelle des Anbieters gebunden ist, anstatt anzunehmen, der Endpunkt sei defekt. Der Chat mit einem benutzerdefinierten Modell ist der zuverlässige Teil.
Andere Tools, die einen OpenAI-kompatiblen Endpunkt akzeptieren, wie Continue oder Aider, verwenden dieselben drei Werte: Base URL, Schlüssel, Modellname.
Nutzung mit LangChain
LangChain's ChatOpenAI-Klasse nimmt ein base_url-Argument entgegen, sodass der Endpunkt ohne benutzerdefinierten Wrapper sofort einsetzbar ist.
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="uncensored",
base_url="https://api.nofilterai.cc/v1",
api_key="YOUR_KEY",
temperature=0.2,
)
print(llm.invoke("Write a bash one-liner that lists the 10 largest files under /var/log.").content)
Chains, Prompt-Vorlagen und Output-Parsers funktionieren genauso wie bei jedem Chat-Modell, das dem OpenAI-Schema folgt. Wenn du einen Agenten baust, denke an das Concurrency-Limit: Ein vollständiger Schlüssel erlaubt 8 Anfragen gleichzeitig und 300 pro Minute, ein Test-Schlüssel 2 und 60. Ein paralleler Agent, der zehn Tool-Aufrufe ausbreitet, erhält für die Extras HTTP 429 mit dem Code concurrency. Begrenze die Ausbreitung oder wiederhole mit einer kurzen Verzögerung.
Function Calling und JSON-Modus für Agents
Coding-Agents leben von strukturierter Ausgabe. Die API unterstützt tools, tool_choice, gestreamte tool_calls und Tool-Ergebnisse, die als role: "tool"-Nachrichten zurückgesendet werden. Hier ist eine minimale Round-Trip mit einer Funktion, die eine Datei liest.
import json
from openai import OpenAI
client = OpenAI(base_url="https://api.nofilterai.cc/v1", api_key="YOUR_KEY")
tools = [{
"type": "function",
"function": {
"name": "read_file",
"description": "Read a UTF-8 text file from the project",
"parameters": {
"type": "object",
"properties": {"path": {"type": "string"}},
"required": ["path"],
},
},
}]
messages = [{"role": "user", "content": "Open main.py and tell me what it does."}]
first = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
call = first.choices[0].message.tool_calls[0]
messages.append(first.choices[0].message)
messages.append({
"role": "tool",
"tool_call_id": call.id,
"content": open(json.loads(call.function.arguments)["path"]).read(),
})
final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
print(final.choices[0].message.content)
Validiere immer die Argumente, bevor du irgendetwas ausführst, was das Modell anfordert. Ein Pfad, eine Shell-Zeichenfolge oder eine URL, die von einem Modell stammt, sind nicht vertrauenswürdige Eingaben, egal welches Modell sie erzeugt hat.
Für Ausgaben, die dein Code parsen muss, setze response_format auf {"type":"json_object"} und gib im Prompt an, welche Schlüssel du erwartest. Der JSON-Modus macht die Antwort zu gültigem JSON, aber deine Schema-Prüfungen gehören trotzdem in deinen Code.
Kontextgröße und Kosten einer Coding-Anfrage
Das Fenster umfasst 100.000 Token für Prompt plus Antwort. Als grobe Richtlinie fasst das viele Quelldateien gleichzeitig, also kannst du ein Modul, seine Tests und die fehlerhafte Traceback auf einmal einfügen, statt zusammenzufassen. Größere Prompts kosten mehr, also sende nur das, was die Frage benötigt.
Der Preis beträgt $0,15 pro 1M Input-Token und $0,50 pro 1M Output-Token. Beispiele:
| Anfrage | Eingabe | Ausgabe | Kosten |
|---|---|---|---|
| Eine Funktion erklären | 1,500 | 500 | $0.000225 + $0.00025 = $0.000475 |
| Ein Modul mit Tests reviewen | 30,000 | 2,000 | $0.0045 + $0.001 = $0.0055 |
| 200 Bewertungen wie diese an einem Tag | 6,000,000 | 400,000 | $0.90 + $0.20 = $1.10 |
| Gesamtes Fenster als Input, ein Aufruf | 100,000 | 0 | $0.015 |
Fehlgeschlagene oder abgelehnte Anfragen werden nicht berechnet. Das Guthaben ist prepaid, verfällt nie und Aufladungen laufen von $20 bis $500 in beliebigen ganzen Beträgen, mit einem Bonus von 5 % ab $50, 10 % ab $100 und 15 % ab $200. Die Zahlung erfolgt nur per Krypto: USDT auf TRC20 oder USDC auf Base. Siehe die Preise-Seite für die aktuellen Bedingungen.
Ein Review-Prompt, der bei echten Diffs funktioniert
Eine der besten Anwendungen eines großen Fensters ist die Review. Statt zu fragen „Ist dieser Code gut?“, füge den Diff und die Dateien ein, die er betrifft, und bitte um Ergebnisse in einer festen Struktur. Fordere eine nummerierte Liste, in der jeder Eintrag die Datei, die Zeile, das Problem und einen einzeiligen Fix benennt, und sage, dass eine leere Liste eine gültige Antwort ist. Diese letzte Anweisung ist wichtig: Ein Modell, das angewiesen wird, Probleme zu finden, erfindet manchmal welche, um dir zu gefallen.
Halte die Temperatur für die Überprüfung bei ca. 0,2, damit du bei einer zweiten Ausführung das gleiche Ergebnis erhältst. Wenn du Überprüfungen in einem Continuous-Integration-Job ausführst, setze seed und protokolliere den X-Request-Id-Header, damit du ein überraschendes Ergebnis später nachverfolgen kannst. Kombiniere dies mit dem JSON-Modus, wenn ein Skript die Ergebnisse irgendwo posten muss, und fordere Schlüssel wie file, line, severity und fix an.
Wenn die Antwort falsch oder leer ist
Drei Probleme verursachen die meisten fehlgeschlagenen Ausführungen. Wenn du einen 401 erhältst, fehlt der Schlüssel oder der Header ist nicht Authorization: Bearer gefolgt von deinem Schlüssel. Wenn ein Editor sagt, das Modell existiere nicht, überprüfe, ob der Name genau uncensored lautet und die Base URL mit /v1 endet, ohne zusätzlichen Pfad. Wenn der Code kompiliert, sich aber falsch verhält, gib dem Modell die fehlerhafte Ausgabe und bitte es, den Fehler zu erklären, bevor es etwas umschreibt; Korrekturen nach einer Diagnose sind tendenziell kleiner und sicherer als blinde Korrekturen.
Wo es passt und wo nicht
Nutze einen unzensierten Endpunkt für die Anfragen, die andere Assistenten ablehnen oder abschwächen, und behalte dein übliches Tool für den Rest bei, wenn es für dich besser funktioniert. Viele Entwickler betreiben zwei Modelle parallel und senden jede Aufgabe an dasjenige, das sie sauber beantwortet.
- Gute Passform: Sicherheitslaborarbeit an Systemen, die dir gehören, Scraping- und Automatisierungsskripte, Malware-Analyse-Berichte für Verteidiger, Reverse-Engineering-Notizen, ungewöhnliche Datenbearbeitungsaufgaben.
- Vorsicht: generierter Code kann Fehler oder erfundene Bibliotheksfunktionen enthalten. Führe ihn aus, teste ihn, lies ihn.
- Nicht angeboten: Bild- oder Audio-Generierung, Embeddings und Fine-Tuning. Dies ist ein reiner Text-Chat-Endpunkt.
- Datenschutz: Prompts werden nicht zum Training verwendet, was wichtig ist, wenn du proprietären Code einfügst.
Die Begrenzung des Body-Contents beträgt 8 MB pro Anfrage, weit mehr, als das Kontextfenster nutzen kann. Die Antwort-Header enthalten X-Request-Id, X-Balance-USD und die Ratenlimit-Werte, die in Logs nützlich sind. Die Dokumentation listet jeden Parameter auf, der durchgereicht wird.
Weitere Anleitungen
Fragen und Antworten
Ist ein No-Filter-AI-Coder besser im Programmieren als andere Modelle?
Nicht standardmäßig. Weniger Ablehnungen ändern, was es antwortet, nicht wie gut es codet. Teste es bei deinen eigenen Aufgaben, bevor du dich darauf verlässt.
Welche Editoren und Frameworks funktionieren damit?
Alles, das eine benutzerdefinierte OpenAI-kompatible Base URL, einen Schlüssel und einen Modellnamen erlaubt. Cursor, LangChain und die offiziellen OpenAI SDKs sind gängige Beispiele.
Unterstützt es Function Calling?
Ja. Es akzeptiert Tools und tool_choice, gibt tool_calls zurück (auch beim Streaming) und nimmt Ergebnisse als role: tool Nachrichten entgegen. Der JSON-Modus ist ebenfalls verfügbar.
Was passiert, wenn ich das Ratenlimit erreiche?
Du erhältst HTTP 429 mit dem Fehlercode rate_limited oder concurrency. Bei temporärer Überlastung enthält die Antwort 429 einen Retry-After-Header mit 5 Sekunden.
Dein Schlüssel ist nur einen Schritt entfernt
Erstelle ein Konto, kopiere den Schlüssel, ändere die base URL. Das ist die gesamte Einrichtung.