KO ▾
지금 시작하기

ChatGPT 무검열 대안: 두 줄로 전환

코드 수정 없이 채택할 수 있는 ChatGPT 무검열 대안을 찾고 계신가요? 이미 OpenAI SDK를 사용하는 코드라면, 베이스 URL과 API 키, 모델 이름을 변경하는 두 줄로 전환할 수 있습니다. 전환 전후의 코드와 전환 후 다르게 동작하는 부분을 확인하세요.

최종 업데이트:

빛나는 오픈 스테이션으로 트랙을 전환하는 철도 스위치 레버, 두 줄 제공업체 전환을 나타내는 이미지

요약

  1. base_url과 api_key를 변경한 후 모델을 uncensored로 설정하세요. 기본 채팅 클라이언트에서는 다른 변경 사항이 필요하지 않습니다.
  2. 최근 공식 SDK는 OPENAI_BASE_URL과 OPENAI_API_KEY도 읽으므로 환경 변수를 사용하여 전환할 수 있습니다.
  3. 서비스는 텍스트 전용이며, 단일 모델과 100,000토큰 컨텍스트 창을 제공합니다.
  4. 다른 어휘와 다른 제한 사항이 예상되므로 출시 전에 테스트 프롬프트를 다시 실행하세요.

전환 전후

Python의 일반적인 OpenAI 클라이언트 예시입니다:

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

그리고 동일한 클라이언트가 무검열 대안을 가리켰습니다:

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

생성자에서 두 줄이 변경되고, 호출에서 모델 문자열이 변경됩니다. 메시지 형식, 응답 객체와 r.choices[0].message.content을 읽어내는 방식은 그대로 유지됩니다. 이 대안은 독립적인 제공자에 의해 운영되는 다른 모델입니다. ChatGPT도 아니고 OpenAI나 기타 제공자의 공식 API도 아닙니다.

환경 변수만으로 전환하기

공식 Python 및 Node SDK의 최신 버전에서는 인자 없이 클라이언트를 생성할 때 OPENAI_BASE_URL 및 OPENAI_API_KEY을 읽습니다. 즉, 애플리케이션 코드를 수정할 필요가 없습니다:

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

코드에 model="uncensored"를 전달하는지 반드시 확인해야 합니다. 모델 이름이 여러 곳에 하드코딩되어 있다면 먼저 설정 값 하나로 추출하세요. 이 작은 리팩토링은 향후 어느 방향으로든 전환 비용을 동일하게 낮춥니다.

동일한 아이디어는 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);

프레임워크 및 Responses 형식

OpenAI 클라이언트를 감싸는 라이브러리는 일반적으로 베이스 URL 설정을 노출합니다. LangChain의 OpenAI 채팅 래퍼에서는 다음과 같이 표시됩니다:

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)

새로운 Responses 형식을 사용한다면, POST /v1/responses는 POST /v1/chat/completions과 함께 지원됩니다. GET /v1/models은 모델을 나열하며, 키와 URL이 올바른지 빠르게 확인할 수 있습니다.

예상되는 차이점

영역주의해야 할 사항
답변 의지법적인 성인 사용에 대해 콘텐츠 거부 없이 응답합니다. 필터링된 모델이 거부할 프롬프트는 보통 응답을 얻습니다.
어휘와 스타일서로 다른 모델, 다른 목소리입니다. 어조, 길이 및 서식 습관은 이전 모델과 일치하지 않습니다.
모델 선택ID uncensored인 모델이 하나 있습니다. 선택할 티어가 없습니다.
범위텍스트 전용: 이미지, 오디오 또는 비디오 생성, 임베딩, 파인튜닝 없음.
컨텍스트100,000 토큰, 프롬프트와 생성된 응답의 합계입니다. max_tokens은 선택 사항입니다.
제한 사항전체 키: 동시 요청 8개, 분당 300개. 체험 키: 동시 요청 2개, 분당 60개. 요청 본문 최대 8 MB.
오류rate_limited 또는 concurrency 코드와 함께 HTTP 429가 반환되며, 일시적 과부하 시 Retry-After: 5와 함께 429가 반환됩니다.

스트리밍, 함수 호출 및 JSON 모드가 지원되며, temperature, top_p, stop, seed 및 페널티도 지원됩니다. 응답 헤더에는 X-Request-Id, X-Balance-USD, X-RateLimit-Limit-Requests 및 X-RateLimit-Limit-Concurrency이 포함됩니다. 문서에 세부 정보가 있습니다.

추가적인 두 가지 차이점을 한 줄로 설명합니다. 첫째, 다른 모델은 토큰을 다르게 세는 경우가 있으므로 동일한 텍스트의 토큰 수는 이전 제공자가 보고한 것과 다를 수 있습니다. 자체 추정치가 아닌 응답의 사용량 숫자를 사용하세요. 둘째, 내장 웹 검색이나 제공자 측 파일 저장소와 같은 벤더 호스팅 도구에 의존하는 기능은 이 서비스에 포함되지 않습니다. 함수 호출은: 함수를 정의하고 코드가 이를 실행합니다.

자체 프롬프트용 패러티 스크립트

출력물을 눈으로 확인하는 대신 프롬프트 집합을 새 엔드포인트에서 루프로 실행하고 검토가 필요한 모든 데이터를 저장하세요.

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

CSV 파일을 열고 열을 하나씩 검토하세요. 토큰 열은 동일한 트래픽에 대한 비용 예측을 제공합니다: 합계를 1M당 $0.15 및 $0.50에 곱하세요. 체험 키는 분당 60개 요청과 동시에 2개까지 허용하므로, 루프를 순차적으로 유지하면 몇백 개의 프롬프트 세트가 몇 분 안에 완료됩니다.

짧은 마이그레이션 체크리스트

  1. 키를 얻으세요. API 키 페이지에서 Google 또는 이메일로 가입하고 $0.50 체험 크레딧을 청구하세요. 7일 동안 유효하며 카드가 필요하지 않습니다.
  2. 모델 이름과 URL을 설정 파일로 이동합니다. 한 곳에서 환경 변수에서 읽습니다.
  3. 테스트 프롬프트를 다시 실행합니다. 이전 모델이 거부한 것을 포함해 20~50개의 실제 예제를 사용하고 결과를 읽어보세요.
  4. 시스템 프롬프트를 조정합니다. 필터링된 모델을 설득하기 위해 존재했던 텍스트를 제거합니다. 역할, 대상 및 형식을 설명하는 내용만 유지합니다.
  5. 429 핸들러를 추가합니다. 5초 대기 후 재시도합니다. 키에 맞게 동시 요청 수를 제한하세요.
  6. 사용량을 확인합니다. 실제 트래픽을 실행하는 동안 응답의 X-Balance-USD을 모니터링하세요.

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

이전 모델의 저장된 출력을 몇 주 동안 보관하세요. 전환 후 사용자가 뭔가 이상하다고 불만이라면, 이전 모델이 어떤 응답을 했을지 비교하여 차이가 프롬프트, 모델 아니면 입력에서 비롯된 것인지 확인하세요.

위험 없이 출시하기

모든 설정을 한 번에 변경하지 마세요. 제공업체 선택을 구성 뒤에 두어 트래픽의 일부를 전환하고 몇 초 내에 롤백할 수 있도록 하세요.

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

5%로 시작하여 며칠 동안 오류율, 429 횟수 및 사용자 피드백을 관찰한 후 증가시키십시오. 롤백하려면 NEW_SHARE을 0으로 설정하십시오. 대화에서 모델을 변경하면 음성이 변하므로, 요청별 선택보다 사용자별 또는 기능별 선택이 더 좋습니다.

비용 및 유지가 적합한 경우

가격은 선불 크레딧 기준 입력 토큰 100만 토큰당 $0.15, 출력 토큰 100만 토큰당 $0.50입니다. 입력 1,500 토큰, 출력 400 토큰 요청의 비용은 1,500 x $0.15 / 1M = $0.000225, 그리고 400 x $0.50 / 1M = $0.0002이므로 총 $0.000425이며, 이는 1,000회 요청당 $0.425에 해당합니다. 다른 벤더의 경우 현재 가격 페이지를 확인하십시오; 요금은 변경되며 기억에 의존한 비교는 빠르게 낡습니다. 충전은 $20에서 $500까지의 전체 금액으로 암호화폐로 결제하며, $50 이상의 보너스가 제공됩니다. 가격 페이지에서 자세히 확인하십시오.

이미지나 임베딩이 필요하거나, 사용자에게 엄격한 검열이 필요하거나, 벤더별 모델이 필수 요구사항인 경우 현재 제공업체를 유지하는 것이 올바른 선택입니다. 이 모델 클래스의 배경에 대해 알아보세요 무검열 ChatGPT 모델 이해하기. 하드 리미트는 절대 변하지 않습니다: 미성년자가 관련된 성적 콘텐츠는 금지됩니다.

두 제공자를 함께 실행해도 좋습니다. 많은 팀은 일반 요청은 한 모델로, 거부 응답이 계속 발생하는 요청은 다른 모델로 라우팅합니다. 둘 다 동일한 형식을 지원하므로, 이 라우팅은 몇 줄의 코드와 어떤 경우에 어떤 모델을 사용할지 결정하는 규칙만으로 가능합니다.

자주 묻는 질문

변경해야 할 코드는 몇 줄인가요?

클라이언트 설정에서 Base URL과 API 키 두 가지, 그리고 요청에 포함되는 모델 이름만 변경하면 됩니다. 메시지 형식과 응답 파싱은 동일하게 유지됩니다.

정말 필터 없는 ChatGPT인가요?

아닙니다. 이는 독립적인 제공자가 운영하는 OpenAI와 무관한 오픈 웨이트 모델입니다. 합법적인 성인 사용에 맞게 콘텐츠 거부 없이 답변하도록 조정되었습니다.

LangChain이나 다른 프레임워크를 계속 사용할 수 있나요?

네, 사용자 지정 OpenAI 호환 Base URL을 설정할 수 있는 한 가능합니다. Base URL, API 키 및 모델 ID uncensored를 설정하세요.

전환 시 어떤 기능이 손실되나요?

텍스트 외부의 모든 것: 이미지, 오디오, 임베딩 및 파인튜닝은 제공하지 않습니다. 메뉴가 아닌 단일 모델만 제공됩니다.

API 키 받기

회원가입 후 토큰을 복사하고 Base URL을 업데이트하세요. 그뿐입니다.

지금 시작하기