ES ▾
Abrir cuenta

API de chatbot sin filtros: primera petición en cinco minutos

Una API de chatbot sin filtros se puede probar en cinco minutos si ya tienes Python. Necesitas una clave, dos ajustes cambiados en el SDK de OpenAI y una petición. Después, un prompt de sistema y streaming lo convierten en un chatbot.

Última actualización

Avión de papel de vidrio que lleva una burbuja de chat desde una base de lanzamiento con forma de clave hacia un faro

Puntos clave

Minuto 1 a 2: obtener una clave

Ve a la página de clave de API y regístrate con Google, o con correo electrónico y contraseña. Después del registro, la página de claves muestra un botón para reclamar el crédito de prueba: $0,50, uno por persona, válido por 7 días, sin necesidad de tarjeta.

Copia la clave y ponla en una variable de entorno. Una clave en un archivo que confirmas por error es la forma más común de perder crédito.

# model ID for later requests: uncensored
export UF_API_KEY="paste-your-key-here"
pip install openai

Una clave de prueba permite 2 peticiones simultáneas y 60 peticiones por minuto. Esos límites son suficientes para este tutorial.

Minuto 3: la primera petición

El servicio es compatible con OpenAI, por lo que el SDK oficial funciona en cuanto cambies base_url y la clave. El ID de modelo es uncensored.

import os
from openai import OpenAI

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

resp = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Give me three names for a cyberpunk bar."}],
)

print(resp.choices[0].message.content)
print("tokens in/out:", resp.usage.prompt_tokens, resp.usage.completion_tokens)

Ejecútalo con python first.py. Una lista de nombres y un número de tokens significa que todo funciona. Si ves un error de autenticación, verifica la variable. Si la conexión falla, verifica que la URL base termine en /v1.

La respuesta sigue el formato de chat de OpenAI: una lista choices con el mensaje, un bloque usage con recuentos de tokens y, en ese formato, una razón de finalización que te dice por qué se detuvo la generación. Una respuesta cortada suele significar un max_tokens bajo. En cuanto al costo, una petición con 500 tokens de entrada y 300 tokens de salida cuesta $0.000075 + $0.00015 = $0.000225. Las cinco peticiones en este tutorial cuestan aproximadamente una décima de centavo en total, por lo que el crédito de prueba apenas se toca.

Minuto 4: añadir un prompt de sistema y ajustes

Una petición básica te da un tono de asistente predeterminado. Para un chatbot, añade un mensaje de sistema que defina un personaje y pasa parámetros de muestreo que le convengan.

import os
from openai import OpenAI

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

raw = client.chat.completions.with_raw_response.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "You are Rook, a smuggler with a dry sense of humor. Stay in character. Keep replies under 80 words."},
        {"role": "user", "content": "Can you get me across the border tonight?"},
    ],
    temperature=0.9,
    top_p=0.95,
    max_tokens=200,
    seed=7,
)

resp = raw.parse()
print(resp.choices[0].message.content)
print("balance:", raw.headers.get("x-balance-usd"))
print("request id:", raw.headers.get("x-request-id"))
  • temperature y top_p controlan la variedad. Valores más altos dan texto más animado y menos predecible.
  • seed facilita repetir las pruebas. Se reenvía, así que úsalo para comparar ediciones de prompt.
  • max_tokens es opcional. Sin él, la finalización puede usar el resto de la ventana de 100.000 tokens.
  • El encabezado de saldo te dice tu crédito restante después de cada llamada.

El prompt es lo principal aquí. Mantenlo corto y específico. Di quién es el personaje, cómo habla, cuál es la historia y cuál debería ser la longitud. Todo eso va en el mensaje de sistema una vez, y lo envías de nuevo con cada petición, ya que la API no recuerda nada entre llamadas.

Minuto 5: streaming

El streaming imprime texto a medida que se genera. Es un cambio de una palabra en la petición, más un bucle para leer fragmentos.

import os
from openai import OpenAI

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

stream = client.chat.completions.create(
    model="uncensored",
    stream=True,
    messages=[
        {"role": "system", "content": "You are Rook, a smuggler with a dry sense of humor."},
        {"role": "user", "content": "Tell me about the worst job you ever took."},
    ],
)

for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
print()

Una petición en streaming ocupa una de tus ranuras de concurrencia hasta que finalice el streaming. Con una clave de prueba, dos flujos abiertos ya utilizan todas ellas, y una tercera petición devuelve HTTP 429 con el código concurrency. Espera e inténtalo de nuevo.

Si quieres confirmar el uso después de un streaming, el último fragmento incluye un bloque de uso.

Elige valores de muestreo con un plan

Los ajustes de muestreo cambian el estilo del bot más de lo que la mayoría espera. Comienza con los valores a continuación y muévete de uno en uno.

ObjetivoAjustePor qué
Narración animadatemperature 0.9 a 1.0, top_p 0.95Más variedad entre ejecuciones
Personaje consistentetemperature 0.6 a 0.7Menos sorpresas
Pruebas repetiblesseed fijo, temperature 0El mismo prompt da el mismo tipo de respuesta
Menos repeticiónPenalización de frecuencia o presencia alrededor de 0.3Desalienta bucles
Corta una respuesta en un marcadorstop con una cadenaDetiene la salida cuando aparece

Los controles de temperatura y top_p ajustan la variedad, y las penalizaciones se pasan al modelo. Cambia un valor, ejecuta el mismo prompt cinco veces y lee las cinco respuestas antes de cambiar el siguiente.

Conviértelo en una conversación

La API no guarda historial. Para que Rook recuerde, mantén una lista y añade ambos lados después de cada turno.

import os
from openai import OpenAI

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

messages = [{"role": "system", "content": "You are Rook, a smuggler with a dry sense of humor."}]

def talk(text):
    messages.append({"role": "user", "content": text})
    r = client.chat.completions.create(model="uncensored", messages=messages)
    answer = r.choices[0].message.content
    messages.append({"role": "assistant", "content": answer})
    return answer

print(talk("Where are we headed?"))
print(talk("And what did I just ask you?"))

La segunda pregunta funciona solo porque el primer intercambio está en la lista. Esto también es por lo que el coste del chat crece con la longitud: cada turno reenvía todo. El análisis de coste y compensación analiza ese efecto en profundidad, y la página de precios muestra las tarifas de $0,15 y $0,50 por 1M de tokens.

Dos precauciones a medida que la lista crece. La primera es el coste, ya que los historiales largos elevan el precio de cada turno. La segunda es la ventana: 100.000 tokens para el prompt más la respuesta es generoso, pero un roleplay que dure semanas lo alcanzará. Elimina los turnos más antiguos, manteniendo el mensaje del sistema, una vez que la lista sea larga, o reemplázalos con un resumen corto.

Problemas comunes y próximos pasos

ProblemaCausa probableSolución
Error de autenticaciónClave incorrecta o vacíaImprime la longitud de la variable, elimina espacios
No encontradoURL base que falta /v1Usa la URL base exacta de esta página
429 rate_limitedMás de 60 peticiones por minuto (prueba)Ralentiza o usa una clave completa (300 por minuto)
429 con Retry-After: 5Sobrecarga temporalEspera 5 segundos y reintenta
Respuestas extrañas o planasPrompt del sistema débilAñade voz, configuración, límite de longitud

Las peticiones fallidas o rechazadas no se cobran. Para los siguientes pasos, lee la documentación de la API para herramientas y modo JSON. El modelo es solo de texto, por lo que no hay imágenes, audio ni embeddings. Las recargas son desde $20 hasta $500 en cripto (USDT en TRC20 o USDC en Base), y el crédito no caduca. Eres responsable del acceso exclusivo para adultos y la moderación en todo lo que construyas sobre la API.

Si un problema no está en la tabla, reduce la petición al caso funcional más pequeño: un mensaje de usuario, sin prompt del sistema, sin parámetros extra. Luego añade piezas de nuevo hasta que falle. Casi todos los problemas en una primera integración provienen de un error tipográfico en la URL, una clave copiada con un espacio al final o una lista de mensajes con la forma incorrecta.

Maneja errores en el código

Un script que funciona una vez no es un bot. Añade un reintento para los casos en los que la API te indique que esperes.

import os, time
from openai import OpenAI, RateLimitError

client = OpenAI(
    base_url="https://api.chatbotunfiltered.com/v1",
    api_key=os.environ["UF_API_KEY"],
    max_retries=0,
)

def ask(messages, tries=4):
    for i in range(tries):
        try:
            r = client.chat.completions.create(model="uncensored", messages=messages)
            return r.choices[0].message.content
        except RateLimitError:
            time.sleep(5 * (i + 1))
    raise RuntimeError("still rate limited after retries")

El SDK lanza RateLimitError en HTTP 429. Para sobrecargas temporales, la API envía Retry-After: 5, por lo que esperar cinco segundos es el primer paso correcto. Para errores de concurrency repetidos, cola las peticiones de tu parte en lugar de reintentar más rápido.

Preguntas frecuentes

¿Es una API de chatbot sin filtros lo mismo que la API de OpenAI?

El protocolo es el mismo, por lo que el SDK de OpenAI funciona. El modelo es diferente: un modelo de pesos abiertos de un proveedor independiente, ajustado para responder sin rechazos de contenido para uso adulto legal.

¿Qué base URL y modelo debo usar?

Base URL https://api.chatbotunfiltered.com/v1 y el ID de modelo uncensored.

¿Necesito pagar para probarlo?

No. El crédito de prueba de $0,50 no requiere detalles de pago. Las recargas pagadas son solo por cripto.

¿Puedo hacer streaming de las respuestas?

Sí. Establece stream a true. Una petición en streaming ocupa una ranura de concurrencia hasta que finalice el stream.

¿Cómo veo mi saldo?

Lee el encabezado X-Balance-USD en cualquier respuesta, o llama a GET /v1/balance.

Obtén tu clave de API al instante

Regístrate, copia tu clave, actualiza tu base URL. La configuración está completa.