FR ▾
Obtenir une clé API

Codeur IA sans filtre : utilisez-le dans Cursor et Python

Certaines demandes de code reçoivent un refus ou une étiquette d'avertissement des assistants grand public : outils de sécurité, scrapers, ingénierie inverse, écrits d'exploits pour votre propre laboratoire. Voici comment connecter un modèle sans censure à votre éditeur et à vos scripts, et à quoi vous attendre.

Mis à jour le

Terminal isométrique avec des blocs de code s'écoulant vers des cubes connectés, illustrant une API de codage sans censure

Points clés

  • L'endpoint utilise le format de chat OpenAI, donc les éditeurs et frameworks acceptant une URL de base personnalisée peuvent l'utiliser.
  • L'appel de fonctions, le mode JSON et le streaming sont pris en charge, ce qui couvre la plupart des motifs d'agents de développement.
  • La fenêtre de 100 000 tokens contient une grande partie d'un dépôt en une seule requête.
  • C'est un modèle général, pas un modèle spécialisé dans le code, donc testez-le sur vos propres tâches en premier.

Ce qu'est un codeur sans filtre, et ce qu'il n'est pas

Un modèle sans censure est un modèle de langage qui répond aux demandes de programmation sans remettre en question vos motivations. Si vous écrivez un scanner de ports pour un réseau qui vous appartient, décompiliez un binaire legacy dont vous avez perdu le code source, ou construisez un scraper qui imite un navigateur, vous obtenez du code au lieu d'un paragraphe sur l'utilisation responsable.

Il est utile d'être précis sur ce qu'est ce service. Il s'agit d'un modèle à poids ouverts, ajusté pour répondre sans refus de contenu pour une utilisation adulte légale, hébergé par un fournisseur indépendant. Ce n'est pas l'API officielle d'aucun grand fournisseur et ce n'est pas un routeur qui choisit entre des modèles. L'ID du modèle est uncensored. Aucune affirmation n'est faite ici sur les scores de benchmark, car aucun n'est publié pour lui sur ce site. Un modèle avec moins de refus n'est pas automatiquement un meilleur programmeur, considérez donc la première semaine comme une période d'évaluation.

L'utilisation conforme à la loi est votre responsabilité. L'outil supprime les frictions pour les travaux de sécurité légitimes, la recherche et l'ingénierie inhabituelle. Ce n'est pas une licence pour attaquer des systèmes que vous ne possédez pas.

Appelez-le depuis Python ou curl

Le test le plus simple est une seule requête. Ce script Python demande un petit outil et affiche la réponse.

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)

Une température basse convient au code. Les valeurs entre 0,1 et 0,3 donnent une sortie plus stable, et seed vous permet de répéter un run lorsque vous comparez des prompts. La même requête depuis le shell ressemble à ceci.

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+"}
    ]
  }'

Vous pouvez lister ce que l'endpoint expose avec GET /v1/models. Obtenez une clé depuis la page des clés ; le crédit d'essai en un clic de 0,50 $ est suffisant pour de nombreuses centaines de petites demandes de programmation.

Configurez-le dans Cursor

Cursor vous permet de remplacer l'URL de base OpenAI dans les paramètres du modèle, ce qui vous permet de le pointer vers n'importe quel fournisseur compatible. Les noms exacts des menus varient selon les versions, suivez donc l'idée plutôt que les libellés.

  1. Ouvrez les paramètres de Cursor et trouvez la section des modèles.
  2. Collez votre clé dans le champ Clé API OpenAI.
  3. Activez l'option pour remplacer l'URL de base OpenAI et entrez https://api.nofilterai.cc/v1.
  4. Ajoutez un modèle personnalisé nommé uncensored et sélectionnez-le dans le panneau de chat.
  5. Envoyez un petit message de test avant d'essayer une modification sur plusieurs fichiers.

Cursor et les éditeurs similaires peuvent utiliser leurs propres serveurs pour certaines fonctionnalités, et certaines fonctionnalités peuvent ne pas accepter de modèles personnalisés. Si une fonctionnalité échoue, vérifiez si elle est liée aux modèles propres au fournisseur plutôt que de supposer que l'endpoint est cassé. Le chat avec un modèle personnalisé est la partie fiable.

D'autres outils qui acceptent un point de terminaison compatible OpenAI, tels que Continue ou Aider, utilisent les mêmes trois valeurs : URL de base, clé, nom du modèle.

Utilisez-le avec LangChain

La classe ChatOpenAI de LangChain prend un argument base_url, donc l'endpoint s'intègre sans adaptateur personnalisé.

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)

Les chains, les templates de prompt et les output parsers fonctionnent de la même manière qu'avec n'importe quel modèle de chat suivant le schéma OpenAI. Si vous construisez un agent, n'oubliez pas la limite de concurrence : une clé complète permet 8 requêtes simultanées et 300 par minute, une clé d'essai 2 et 60. Un agent parallèle qui diffuse dix appels d'outils obtiendra un HTTP 429 avec le code concurrency pour les supplémentaires. Limitez la diffusion ou réessayez avec un court délai.

Appel de fonctions et mode JSON pour les agents

Les agents de programmation dépendent de la sortie structurée. L'API prend en charge tools, tool_choice, les tool_calls en streaming, et les résultats d'outils envoyés en tant que messages role: "tool". Voici un aller-retour minimal avec une fonction qui lit un fichier.

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)

Validez toujours les arguments avant d'exécuter quoi que ce soit que le modèle demande. Un chemin, une chaîne de shell ou une URL provenant d'un modèle est une entrée non fiable, quel que soit le modèle qui l'a produit.

Pour une sortie que votre code doit analyser, définissez response_format sur {"type":"json_object"} et indiquez dans le prompt les clés que vous attendez. Le mode JSON rend la réponse JSON valide, mais vos vérifications de schéma appartiennent toujours à votre code.

Taille du contexte et coût d'un appel de codage

La fenêtre est de 100 000 tokens pour le prompt plus la réponse. À titre indicatif, cela permet de contenir plusieurs fichiers source à la fois, vous pouvez donc coller un module, ses tests et la traceback échouée en une seule fois au lieu de résumer. Les prompts plus volumineux coûtent plus cher, envoyez donc uniquement ce dont la question a besoin.

Le prix est de 0,15 $ par 1M de tokens d'entrée et de 0,50 $ par 1M de tokens de sortie. Exemples :

RequêteEntréeSortieCoût
Expliquer une fonction1,500500$0.000225 + $0.00025 = $0.000475
Réviser un module avec des tests30,0002,000$0.0045 + $0.001 = $0.0055
200 avis comme cela en une journée6,000,000400,000$0.90 + $0.20 = $1.10
Fenêtre complète en entrée, un appel100,0000$0.015

Les requêtes échouées ou refusées ne sont pas facturées. Le crédit est prépayé, n'expire jamais, et les recharges vont de 20 $ à 500 $ en tout montant entier, avec un bonus de 5 % à partir de 50 $, 10 % à partir de 100 $ et 15 % à partir de 200 $. Le paiement est uniquement en crypto : USDT sur TRC20 ou USDC sur Base. Consultez la page des tarifs pour les conditions actuelles.

Un prompt de révision efficace sur de vrais diffs

L'une des meilleures utilisations d'une grande fenêtre est la révision. Au lieu de demander « ce code est-il bon ? », collez le diff et les fichiers qu'il touche, puis demandez des résultats dans une forme fixe. Demandez une liste numérotée dans laquelle chaque élément nomme le fichier, la ligne, le problème et une correction en une ligne, et dites qu'une liste vide est une réponse valide. Cette dernière instruction est importante : un modèle chargé de trouver des problèmes en inventera parfois pour vous satisfaire.

Gardez la température proche de 0,2 pour l'évaluation, car vous voulez obtenir le même résultat lors d'une seconde exécution. Si vous lancez des évaluations dans un job d'intégration continue, définissez seed et journalisez l'en-tête X-Request-Id afin de pouvoir tracer un résultat surprenant plus tard. Combinez cela avec le mode JSON lorsqu'un script doit poster les résultats quelque part, et demandez des clés telles que file, line, severity et fix.

Lorsque la réponse est fausse ou vide

Trois problèmes couvrent la plupart des exécutions échouées. Si vous obtenez une erreur 401, la clé est manquante ou l'en-tête n'est pas Authorization: Bearer suivi de votre clé. Si un éditeur indique que le modèle n'existe pas, vérifiez que le nom est exactement uncensored et que l'URL de base se termine par /v1 sans chemin supplémentaire. Si le code se compile mais se comporte mal, donnez au modèle la sortie défaillante et demandez-lui d'expliquer l'erreur avant de réécrire quoi que ce soit ; les correctifs effectués après un diagnostic ont tendance à être plus petits et plus sûrs que les correctifs effectués à l'aveugle.

Où il s’adapte et où il ne s’adapte pas

Utilisez un endpoint sans censure pour les requêtes que les autres assistants refusent ou atténuent, et conservez votre outil habituel pour le reste s'il fonctionne mieux pour vous. De nombreux développeurs exécutent deux modèles côte à côte et envoient chaque tâche à celui qui y répond proprement.

  • Bonne adéquation : travaux de laboratoire de sécurité sur des systèmes que vous possédez, scripts de scraping et d'automatisation, rapports d'analyse de malware pour les défenseurs, notes d'ingénierie inverse, tâches étranges de traitement de données.
  • Attention : le code généré peut contenir des erreurs ou des fonctions de bibliothèque inventées. Exécutez-le, testez-le, lisez-le.
  • Non offert : génération d'images ou d'audio, embeddings et fine-tuning. Il s'agit uniquement d'un endpoint de chat textuel.
  • Confidentialité : les prompts ne sont pas utilisés pour l'entraînement, ce qui est important si vous collez du code propriétaire.

La limite du corps de la requête est de 8 Mo par requête, bien plus que ce que la fenêtre de contexte peut utiliser. Les en-têtes de réponse incluent X-Request-Id, X-Balance-USD et les valeurs de limite de débit, utiles dans les journaux. La documentation liste tous les paramètres qui sont transmis.

Questions et réponses

Un codeur IA sans filtre est-il meilleur en programmation que les autres modèles ?

Non, par défaut. Moins de refus modifie ce qu'il répond, pas sa qualité de codage. Testez-le sur vos propres tâches avant de vous y fier.

Quels éditeurs et frameworks fonctionnent avec lui ?

Tout ce qui permet une URL de base compatible avec l'API OpenAI, une clé et un nom de modèle. Cursor, LangChain et les SDK officiels OpenAI sont des exemples courants.

L'API prend-elle en charge l'appel de fonctions ?

Oui. L'API accepte les outils et tool_choice, retourne tool_calls (même en streaming), et prend les résultats en tant que messages role: tool. Le mode JSON est également disponible.

Que se passe-t-il lorsque je dépasse la limite de débit ?

Vous obtenez un HTTP 429 avec le code d'erreur rate_limited ou concurrency. En cas de surcharge temporaire, le 429 inclut un en-tête Retry-After de 5 secondes.

Votre clé est à un formulaire de vous

Créez un compte, copiez la clé, modifiez l'URL de base. C'est toute la configuration.