PT ▾
Começar agora

Alternativa ao ChatGPT sem filtro: mude em duas linhas

Procurando uma alternativa ao ChatGPT sem filtro que você possa adotar sem reescrever o código? Se seu código já usa um SDK OpenAI, a mudança são duas linhas: a base URL e a chave de API, mais o nome do modelo. Aqui está o antes e depois, e o que muda de comportamento do outro lado.

Última atualização

Uma alavanca de desvio de ferrovia desviando uma trilha para uma estação aberta brilhante, ilustrando uma mudança de provedor em duas linhas

Resumo

  1. Altere base_url e api_key, depois defina o modelo para uncensored. Nada mais no cliente de chat básico precisa mudar.
  2. SDKs oficiais recentes também leem OPENAI_BASE_URL e OPENAI_API_KEY, então você pode mudar com variáveis de ambiente.
  3. O serviço é apenas texto, com um modelo e uma janela de contexto de 100.000 tokens.
  4. Espere palavras diferentes e limites diferentes, então reexecute seus prompts de teste antes de enviar.

Antes e depois

Aqui está um cliente OpenAI típico em 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."}],
)

E o mesmo cliente apontado para a alternativa sem 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."}],
)

Duas linhas alteradas no construtor, e a string do modelo alterada na chamada. O formato da mensagem, o objeto de resposta e a maneira de ler r.choices[0].message.content permanecem como eram. A alternativa é um modelo diferente executado por um provedor independente. Não é ChatGPT e não é uma API oficial da OpenAI ou de qualquer outro.

Mudando apenas com variáveis de ambiente

As versões mais recentes dos SDKs oficiais de Python e Node.js leem OPENAI_BASE_URL e OPENAI_API_KEY quando você cria um cliente sem argumentos. Isso significa que o código da aplicação pode permanecer inalterado:

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

Você ainda precisa garantir que o código passe model="uncensored". Se o nome do modelo estiver codificado em vários lugares, extraia-o para um único valor de configuração primeiro. Essa pequena refatoração torna qualquer troca futura igualmente barata, em qualquer direção.

A mesma ideia funciona em 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 e o formato Responses

Bibliotecas que envolvem o cliente OpenAI geralmente expõem uma configuração de URL base. No wrapper de chat OpenAI do LangChain, parece assim:

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)

Se você usar o formato Responses mais recente, POST /v1/responses é suportado assim como POST /v1/chat/completions. GET /v1/models lista o modelo, que é uma verificação rápida de que sua chave e URL estão corretas.

Diferenças a esperar

ÁreaO que você notará
Disposição para responderEle responde sem recusas de conteúdo para uso adulto legal. Prompts que um modelo com filtro recusaria geralmente obterão uma resposta.
Palavras e estiloModelo diferente, voz diferente. Tom, comprimento e hábitos de formatação não corresponderão ao seu modelo anterior.
Escolha de modeloUm modelo, ID uncensored. Sem planos para escolher.
EscopoApenas texto: sem geração de imagem, áudio ou vídeo, sem embeddings, sem fine-tuning.
Contexto100.000 tokens, prompt mais completion. max_tokens é opcional.
LimitesChave completa: 8 simultâneas, 300 por minuto. Chave de teste: 2 simultâneas, 60 por minuto. Corpo até 8 MB.
ErrosHTTP 429 com código rate_limited ou concurrency; sobrecarga temporária retorna 429 com Retry-After: 5.

Streaming, chamada de funções e modo JSON são suportados, assim como temperature, top_p, stop, seed e as penalidades. Os cabeçalhos de resposta incluem X-Request-Id, X-Balance-USD, X-RateLimit-Limit-Requests e X-RateLimit-Limit-Concurrency. A documentação tem os detalhes.

Duas diferenças adicionais merecem uma linha. Primeiro, um modelo diferente pode contar tokens de forma diferente, então as contagens para o mesmo texto podem diferir do que seu antigo provedor relata; use os números de uso nas respostas, não suas próprias estimativas. Segundo, recursos que dependem de ferramentas hospedadas pelo fornecedor, como busca na web integrada ou armazenamento de arquivos no lado do fornecedor, não fazem parte deste serviço. Chamada de funções: você define funções, e seu código as executa.

Um script de paridade para seus próprios prompts

Em vez de analisar visualmente algumas saídas, execute seu conjunto de prompts pelo novo endpoint em loop e salve tudo o que precisar 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])

Abra o CSV e revise uma coluna por vez. As colunas de tokens dão a você uma previsão de custo para o mesmo tráfego: multiplique as somas por $0,15 e $0,50 por 1M. Uma chave de teste permite 60 requisições por minuto e 2 ao mesmo tempo, então um conjunto de algumas centenas de prompts termina em minutos se você mantiver o loop sequencial.

Uma lista de verificação rápida de migração

  1. Obtenha uma chave. Na página da chave de API, entre com Google ou e-mail e resgate o crédito de teste de $0,50. Ele dura 7 dias e não precisa de cartão.
  2. Mova o nome do modelo e URL para a configuração. Um lugar, lido do ambiente.
  3. Reproduza seus prompts de teste. Use de 20 a 50 exemplos reais, incluindo aqueles que seu modelo anterior recusou, e leia os resultados.
  4. Ajuste o prompt do sistema. Remova o texto que existia apenas para fazer um modelo com filtros responder. Mantenha o que descreve papel, público-alvo e formato.
  5. Adicione um manipulador de 429. Aguarde 5 segundos e tente novamente. Limite a concorrência para corresponder à sua chave.
  6. Verifique o uso. Monitore X-Balance-USD nas respostas enquanto executa tráfego real.

Um auxiliar de retry que cobre o passo 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")

Mantenha as saídas salvas do modelo antigo por algumas semanas. Se um usuário reclamar que algo parece estranho após a mudança, você pode comparar com o que o modelo antigo teria dito e ver se a diferença é o prompt, o modelo ou a entrada.

Lançando sem risco

Não altere tudo de uma vez. Coloque a escolha do provedor atrás de configuração para que você possa mover uma porcentagem do tráfego e reverter em 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"]

Comece com 5%, monitore sua taxa de erro, contagens de 429 e feedback do usuário por alguns dias, depois aumente. Defina NEW_SHARE como 0 para reverter. Escolher por usuário ou por recurso é melhor do que escolher por requisição quando as conversas devem permanecer em um único modelo, pois trocar de modelo no meio do chat altera a voz.

Quanto custa, e quando manter o provedor atual

O preço é $0,15 por 1M de tokens de entrada e $0,50 por 1M de tokens de saída, a partir de crédito pré-pago. Uma requisição com 1.500 tokens de entrada e 400 de saída custa 1.500 x $0,15 / 1M = $0,000225, mais 400 x $0,50 / 1M = $0,0002, totalizando $0,000425, ou $0,425 por 1.000 requisições. Para outros fornecedores, verifique suas páginas de preços atuais; as taxas mudam e uma comparação de memória fica desatualizada rapidamente. Recargas são valores inteiros de $20 a $500, pagos em cripto, com bônus a partir de $50. Detalhes em preços.

Permanecer com seu provedor atual é a escolha certa se você precisar de imagens ou embeddings, se seu público precisar de moderação rigorosa ou se um modelo específico do fornecedor for um requisito obrigatório. Para entender melhor o que é essa classe de modelos, leia entendendo modelos ChatGPT sem censura. O limite rígido nunca muda: é proibido conteúdo sexual envolvendo menores de idade.

Também é perfeitamente válido executar ambos os provedores lado a lado. Muitas equipes direcionam requisições comuns para um modelo e as requisições que continuam sendo recusadas para outro. Como ambos falam o mesmo formato, esse roteamento consiste em algumas linhas de código e uma regra para quando usar cada um.

Perguntas frequentes

Quantas linhas preciso alterar?

Duas na configuração do cliente: a URL base e a chave de API, além do nome do modelo nas suas requisições. O formato da mensagem e a análise da resposta permanecem iguais.

É realmente o ChatGPT sem filtro?

Não. É um modelo de pesos abertos diferente, executado por um provedor independente e não afiliado à OpenAI. Ele é ajustado para responder sem recusas de conteúdo para uso adulto legal.

Posso continuar usando LangChain ou outro framework?

Sim, desde que permita definir uma URL base compatível com OpenAI. Defina a URL base, a chave e o ID do modelo uncensored.

O que eu perco ao mudar?

Tudo fora de texto: imagens, áudio, embeddings e fine-tuning não são oferecidos. Você também recebe apenas um modelo, não um menu.

Obtenha sua chave de API

Cadastre-se, copie o token e atualize sua URL base. É só isso.

Comece agora