KO ▾
계정 열기

무검열 채팅봇 API: 5분 만에 첫 요청

Python이 이미 설치되어 있다면 무검열 채팅봇 API를 5분 만에 시도해 볼 수 있습니다. 키, OpenAI SDK의 두 가지 설정 변경, 그리고 하나의 요청이 필요합니다. 그 후 시스템 프롬프트와 스트리밍을 추가하면 채팅봇이 됩니다.

마지막 업데이트

키 모양의 발사대에서 등대 쪽으로 말풍선을 운반하는 유리 종이비행기

주요 내용

1~2분: 키 받기

API 키 페이지로 이동하여 Google 또는 이메일과 비밀번호로 회원가입하세요. 회원가입 후 키 페이지에 무료 체험 크레딧 청구 버튼이 표시됩니다: $0.50, 인원당 1회, 7일 유효, 카드 불필요.

키를 복사하여 환경 변수에 넣으세요. 실수로 커밋하는 파일 안에 키가 있으면 크레딧을 잃을 가능성이 가장 큽니다.

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

체험 키는 동시 요청 2개와 분당 60개의 요청을 허용합니다. 이 튜토리얼에는 이러한 제한이 충분합니다.

3분: 첫 번째 요청

서비스는 OpenAI 호환이므로 base_url과 키를 변경하면 공식 SDK가 작동합니다. 모델 ID는 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)

python first.py로 실행하세요. 이름 목록과 토큰 수가 표시되면 모든 것이 정상입니다. 인증 오류가 발생하면 변수를 확인하세요. 연결이 실패하면 Base URL이 /v1로 끝나는지 확인하세요.

응답은 OpenAI 채팅 형식을 따릅니다: 메시지 목록인 choices, 토큰 수가 포함된 usage 블록, 그리고 생성이 중단된 이유를 알려주는 종료 사유가 포함됩니다. 잘린 답변은 보통 max_tokens이 낮음을 의미합니다. 비용 측면에서 입력 토큰 500개와 출력 토큰 300개로 이루어진 요청의 비용은 $0.000075 + $0.00015 = $0.000225입니다. 이 튜토리얼의 5개 요청 총 비용은 10분의 1센트 정도이므로 체험 크레딧은 거의 소모되지 않습니다.

4분: 시스템 프롬프트 및 설정 추가

기본 요청은 기본 어시스턴트 음성을 제공합니다. 채팅봇을 위해서는 캐릭터를 정의하는 시스템 메시지를 추가하고, 그에 맞는 샘플링 설정을 전달하세요.

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과 top_p은 다양성을 제어합니다. 높은 값은 더 생동감 있고 예측하기 어려운 텍스트를 제공합니다.
  • seed은 테스트를 더 쉽게 반복할 수 있게 합니다. 전달되므로 프롬프트 수정을 비교하는 데 사용하세요.
  • max_tokens은 선택 사항입니다. 이 설정이 없으면 완성 텍스트는 100,000토큰 창의 남은 부분을 사용할 수 있습니다.
  • 잔액 헤더는 각 호출 후 남은 크레딧을 알려줍니다.

프롬프트가 핵심 제품입니다. 간결하고 구체적으로 작성하세요. 캐릭터의 정체, 말투, 스토리, 길이를 명시하세요. API는 호출 간에 아무것도 기억하지 않으므로 이 모든 내용을 시스템 메시지에 한 번에 넣고 모든 요청에서 다시 보내야 합니다.

5분: 스트리밍

스트리밍은 생성되는 텍스트를 출력합니다. 요청에서 한 단어 변경과 청크를 읽기 위한 루프만 추가하면 됩니다.

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

스트리밍 요청은 스트림이 끝날 때까지 동시 요청 슬롯 중 하나를 점유합니다. 체험 키의 경우 열린 스트림 2개만으로도 모든 슬롯이 사용되며, 세 번째 요청은 HTTP 429와 함께 코드 concurrency을 반환합니다. 기다렸다가 다시 시도하세요.

스트림 이후 사용량을 확인하려면 마지막 청크에 usage 블록이 포함됩니다.

계획에 따라 샘플링 값 선택

샘플링 설정은 대부분의 사람들이 예상하는 것보다 봇의 느낌을 더 크게 바꿉니다. 아래 값을 시작점으로 사용하고 한 번에 하나씩 변경하세요.

목표설정이유
생동감 있는 스토리텔링temperature 0.9~1.0, top_p 0.95실행 간 더 많은 다양성
일관된 캐릭터temperature 0.6~0.7예상치 못한 결과 감소
반복 가능한 테스트seed 고정, temperature 0동일한 프롬프트는 동일한 유형의 답변을 생성합니다.
반복 감소빈도 또는 존재 페널티 약 0.3루프 방지
표시로 응답 잘라내기문자열이 포함된 stop출력이 나타나면 출력 종료

temperature과 top_p는 다양성을 조절하고 패널티는 모델에 전달됩니다. 하나의 값을 변경한 후 동일한 프롬프트를 다섯 번 실행하고, 다음 값을 변경하기 전에 다섯 가지 답변을 읽어보세요.

대화로 전환하기

API는 기록을 유지하지 않습니다. Rook이 기억하도록 하려면 목록을 유지하고 모든 턴 후에 양쪽을 모두 추가하세요.

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

두 번째 질문은 첫 번째 교환이 목록에 있기 때문에만 작동합니다. 이것이 채팅 비용이 길이에 따라 증가하는 이유이기도 합니다: 각 턴마다 모든 것이 다시 전송됩니다. 비용 및 트레이드오프 분석이 효과를 자세히 설명하며, 가격 페이지에서는 토큰 1M당 $0.15 및 $0.50의 요금을 보여줍니다.

목록이 길어질 때 두 가지 주의사항이 있습니다. 첫 번째는 비용입니다. 긴 대화 내역은 모든 턴의 가격을 높입니다. 두 번째는 창입니다. 프롬프트와 응답에 100,000개의 토큰을 할당하는 것은 넉넉하지만, 수주 동안 이어지는 역할극은 이 한도에 도달할 수 있습니다. 목록이 길어지면 시스템 메시지를 유지한 채 가장 오래된 턴들을 삭제하거나, 짧은 요약으로 대체하세요.

일반적인 문제 및 다음 단계

문제잠재적 원인해결 방법
인증 오류잘못되었거나 빈 키변수 길이를 출력하고 공백 제거
찾을 수 없음Base URL에 /v1 누락이 페이지의 정확한 Base URL 사용
429 rate_limited분당 60개 이상의 요청 (체험)속도를 줄이거나 전체 키 사용 (분당 300개)
429 및 Retry-After: 5일시적 과부하5초 대기 후 재시도
이상하거나 평평한 응답약한 시스템 프롬프트말투, 설정, 길이 제한 추가

실패하거나 거부된 요청에는 요금이 부과되지 않습니다. 다음 단계로 API 문서를 읽고 도구 및 JSON 모드에 대해 알아보세요. 이 모델은 텍스트 전용이므로 이미지, 오디오 또는 임베딩이 없습니다. 충전은 암호화폐(USDT on TRC20 또는 USDC on Base)로 $20부터 $500까지 가능하며 크레딧은 만료되지 않습니다. 귀하가 구축하는 모든 것에 대한 성인 전용 접근 및 모더레이션에 대해 책임을 집니다.

테이블에 없는 문제가 있는 경우, 요청을 가장 작은 작동 사례로 줄이세요: 사용자 메시지 하나, 시스템 프롬프트 없음, 추가 매개변수 없음. 그런 다음 고장 날 때까지 조각을 다시 추가하세요. 첫 통합의 거의 모든 문제는 URL의 오타, 뒤에 공백이 있는 키 복사 또는 잘못된 모양의 messages 목록에서 비롯됩니다.

코드에서 오류 처리

한 번 작동하는 스크립트는 봇이 아닙니다. API가 대기하라고 지시하는 경우에 대해 재시도를 추가하세요.

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

SDK는 HTTP 429에서 RateLimitError을 발생시킵니다. 일시적인 과부하 시 API는 Retry-After: 5을 보내므로 5초 기다리는 것이 올바른 첫 단계입니다. 반복되는 concurrency 오류의 경우 더 빠르게 재시도하기보다 클라이언트 측에서 요청을 큐에 넣으세요.

자주 묻는 질문

무검열 채팅봇 API는 OpenAI API와 동일한가요?

프로토콜은 동일하므로 OpenAI SDK가 작동합니다. 모델은 다릅니다: 독립적인 제공업체의 오픈 웨이트 모델로, 합법적인 성인 사용에 대한 콘텐츠 거부 없이 답변하도록 조정되었습니다.

어떤 Base URL과 모델을 사용해야 하나요?

Base URL https://api.chatbotunfiltered.com/v1 및 모델 ID uncensored.

시도하려면 비용을 지불해야 하나요?

아니요. $0.50 체험 크레딧에는 결제 정보가 필요하지 않습니다. 유료 충전은 암호화폐로만 가능합니다.

응답을 스트리밍할 수 있나요?

네. stream을 true로 설정하세요. 스트리밍 요청은 스트림이 끝날 때까지 동시 요청 슬롯을 점유합니다.

잔액을 어떻게 확인하나요?

모든 응답에서 X-Balance-USD 헤더를 읽거나 GET /v1/balance를 호출하세요.

API 키를 즉시 얻으세요

등록하고, 키를 복사한 후 Base URL을 업데이트하세요. 설정이 완료되었습니다.