ES ▾
Empezar ahora

Alternativa sin filtros a ChatGPT: cambia en dos líneas

¿Buscas una alternativa sin filtros a ChatGPT que puedas adoptar sin reescribir? Si tu código ya usa un SDK de OpenAI, el cambio son dos líneas: la base URL y la clave de API, más el nombre del modelo. Aquí tienes el antes y el después, y qué se comporta diferente una vez que estás en el otro lado.

Última actualización

Una palanca de cambio de vía que desvía una vía hacia una estación abierta brillante, ilustrando un cambio de proveedor en dos líneas

Resumen

  1. Cambia base_url y api_key, luego establece el modelo en uncensored. Nada más en un cliente de chat básico tiene que cambiar.
  2. Los SDK oficiales recientes también leen OPENAI_BASE_URL y OPENAI_API_KEY, así que puedes cambiar con variables de entorno.
  3. El servicio es solo de texto, con un modelo y una ventana de contexto de 100.000 tokens.
  4. Espera diferente redacción y límites diferentes, así que vuelve a ejecutar tus prompts de prueba antes de enviar.

Antes y después

Aquí tienes un cliente de OpenAI típico en 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."}],
)

Y el mismo cliente apuntando hacia la alternativa sin filtros:

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."}],
)

Dos líneas cambiadas en el constructor, y la cadena del modelo cambiada en la llamada. El formato de los mensajes, el objeto de respuesta y la forma en que lees r.choices[0].message.content permanecen como antes. La alternativa es un modelo diferente gestionado por un proveedor independiente. No es ChatGPT ni una API oficial de OpenAI ni de nadie más.

Cambiar solo con variables de entorno

Las versiones recientes de los SDK oficiales de Python y Node leen OPENAI_BASE_URL y OPENAI_API_KEY cuando creas un cliente sin argumentos. Eso significa que el código de la aplicación puede permanecer sin cambios:

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

Aún debes asegurarte de que el código pase model="uncensored". Si el nombre del modelo está codificado en muchos lugares, extrae primero el valor a una configuración. Ese pequeño refactor hace que cualquier cambio futuro sea igual de barato, en cualquier dirección.

La misma idea funciona en 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 y el formato de respuestas

Las bibliotecas que envuelven el cliente de OpenAI suelen exponer una configuración de URL base. En el adaptador de chat de LangChain para OpenAI se ve así:

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)

Si usas el formato Responses más nuevo, POST /v1/responses es compatible además de POST /v1/chat/completions. GET /v1/models lista el modelo, lo cual es una verificación rápida de que tu clave y URL son correctos.

Diferencias a esperar

ÁreaLo que notarás
Disposición a responderResponde sin rechazos de contenido para uso adulto lícito. Los prompts que un modelo con filtros rechazaría normalmente obtendrán una respuesta.
Redacción y estiloModelo diferente, voz diferente. El tono, la longitud y los hábitos de formato no coincidirán con tu modelo anterior.
Elección del modeloUn modelo, ID uncensored. Sin niveles que elegir.
AlcanceSolo texto: sin generación de imágenes, audio o video, sin embeddings, sin ajuste fino.
Contexto100.000 tokens, prompt más respuesta. max_tokens es opcional.
LímitesClave completa: 8 simultáneas, 300 por minuto. Clave de prueba: 2 simultáneas, 60 por minuto. Cuerpo hasta 8 MB.
ErroresHTTP 429 con código rate_limited o concurrency; la sobrecarga temporal devuelve 429 con Retry-After: 5.

Son compatibles el streaming, las llamadas a funciones y el modo JSON, así como temperature, top_p, stop, seed y las penalizaciones. Los encabezados de respuesta incluyen X-Request-Id, X-Balance-USD, X-RateLimit-Limit-Requests y X-RateLimit-Limit-Concurrency. La documentación tiene los detalles.

Dos diferencias adicionales merecen una línea. Primero, un modelo diferente puede contar tokens de manera diferente, por lo que los conteos para el mismo texto pueden diferir de lo que reporta tu proveedor anterior; usa los números de uso en las respuestas, no tus propias estimaciones. Segundo, las funciones que dependen de herramientas alojadas por un proveedor, como búsqueda web integrada o almacenamiento de archivos en el lado del proveedor, no forman parte de este servicio. Las llamadas a funciones: defines funciones y tu código las ejecuta.

Un script de paridad para tus propios prompts

En lugar de inspeccionar visualmente un puñado de salidas, ejecuta tu conjunto de prompts a través del nuevo endpoint en un bucle y guarda todo lo que necesites revisar.

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])

Abre el CSV y revisa una columna a la vez. Las columnas de tokens te dan una previsión de coste para el mismo tráfico: multiplica las sumas por $0,15 y $0,50 por 1M. Una clave de prueba permite 60 peticiones por minuto y 2 a la vez, así que un conjunto de unos cientos de prompts termina en minutos si mantienes el bucle secuencial.

Una breve lista de verificación de migración

  1. Consigue una clave. En la página de clave de API, regístrate con Google o correo electrónico y reclama el crédito de prueba de $0,50. Dura 7 días y no requiere tarjeta.
  2. Mueve el nombre del modelo y la URL a la configuración. Un solo lugar, lee desde el entorno.
  3. Reproduce tus prompts de prueba. Usa de 20 a 50 ejemplos reales, incluyendo los que tu modelo anterior rechazó, y lee los resultados.
  4. Ajusta el prompt del sistema. Elimina el texto que solo existía para convencer a un modelo con filtros de que respondiera. Mantén lo que describe el rol, la audiencia y el formato.
  5. Añade un manejador de 429. Espera 5 segundos y reintenta. Limita la concurrencia para que coincida con tu clave.
  6. Revisa el uso. Vigila X-Balance-USD en las respuestas mientras ejecutas tráfico real.

Un auxiliar de reintento que cubre el paso 5:

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")

Mantén las salidas guardadas del modelo antiguo durante unas semanas. Si un usuario se queja de que algo se siente raro después del cambio, puedes comparar contra lo que habría dicho el modelo antiguo y ver si la diferencia es el prompt, el modelo o la entrada.

Despliegue sin riesgos

No cambies todo a la vez. Pon la elección del proveedor detrás de la configuración para que puedas mover un porcentaje del tráfico y revertir en segundos.

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"]

Empieza con un 5%, vigila tu tasa de errores, los conteos de 429 y la retroalimentación del usuario durante unos días, luego aumentala. Establece NEW_SHARE a 0 para revertir. Elegir por usuario o por función es mejor que elegir por petición cuando las conversaciones deben permanecer en un modelo, ya que cambiar de modelo a mitad del chat cambia la voz.

Qué cuesta y cuándo quedarse

La tarifa es de $0,15 por 1M de tokens de entrada y $0,50 por 1M de tokens de salida, desde el crédito prepago. Una petición con 1.500 tokens de entrada y 400 de salida cuesta 1.500 x $0,15 / 1M = $0,000225, más 400 x $0,50 / 1M = $0,0002, es decir $0,000425, o $0,425 por 1.000 peticiones. Para otros proveedores, revisa sus páginas de precios actuales; las tarifas cambian y una comparación de memoria se desactualiza rápidamente. Las recargas son montos enteros desde $20 hasta $500, pagados en cripto, con bonificaciones desde $50. Detalles en precios.

Quedarse con tu proveedor actual es la decisión correcta si necesitas imágenes o embeddings, si tu audiencia necesita moderación estricta, o si un modelo específico del proveedor es un requisito indispensable. Para información de fondo sobre qué es esta clase de modelos, lee entendiendo los modelos de ChatGPT sin censura. El límite estricto nunca cambia: está prohibido el contenido sexual que involucre a menores de edad.

También es válido ejecutar ambos proveedores lado a lado. Muchos equipos enrutan las solicitudes habituales a un modelo y las solicitudes que siguen generando denegaciones a otro. Como ambos hablan el mismo formato, ese enrutamiento son unas pocas líneas de código y una regla para saber cuándo usar cada uno.

Preguntas frecuentes

¿Cuántas líneas necesito cambiar?

Dos en la configuración del cliente: la base URL y la clave de API, más el nombre del modelo en tus solicitudes. El formato de mensajes y el procesamiento de respuestas permanecen iguales.

¿Es realmente ChatGPT sin filtros?

No. Es un modelo de pesos abiertos diferente, ejecutado por un proveedor independiente y no afiliado a OpenAI. Está ajustado para responder sin denegaciones de contenido para uso adulto lícito.

¿Puedo seguir usando LangChain u otro framework?

Sí, siempre que te permita configurar una base URL personalizada compatible con OpenAI. Configura la base URL, la clave y el ID del modelo uncensored.

¿Qué pierdo al cambiar?

Todo lo que no sea texto: imágenes, audio, embeddings y fine-tuning no se ofrecen. También obtienes un solo modelo, no un menú.

Obtén tu clave de API

Regístrate, copia el token, actualiza tu base URL. Eso es todo.

Comenzar ahora