KO ▾
https://api.unrestrictedaiapi.com/v1uncensored2026-10-06
API 키 받기

토큰 낭비 없이 무제한 모델 프롬프팅하는 방법

무검열 모델은 합법적인 성인 콘텐츠나 다크 소재를 거부하지 않으므로, 모든 조향(p steering)이 프롬프트로 이동합니다. 이 가이드는 작동하는 시스템 프롬프트의 모습, 페르소나와 톤 작성법, 지시 기반 JSON 추출 방법, 시도할 샘플링 값, 그리고 토큰을 quietly 소모하는 습관을 보여줍니다.

업데이트됨

핵심 포인트

  1. 시스템 프롬프트에 두 가지 역할을 부여하세요: 누가 말하는지, 그리고 답변이 어떻게 보여야 하는지.
  2. creative나 immersive 같은 형용사 대신 샘플과 검증 가능한 규칙을 사용하세요.
  3. JSON의 경우 스키마를 지정하고, temperature를 낮게 유지하며, 방어적으로 파싱하고 오류 메시지를 함께 재시도하세요.
  4. top_p보다 temperature를 먼저 변경하고, 실제 샘플 10개로 테스트하세요.

시스템 프롬프트의 두 가지 역할

대부분의 약한 출력은 소설처럼 쓰이려는 시스템 프롬프트에서 비롯됩니다. 두 가지 역할만 부여하세요: 누가 말하고 있는지와 대답이 어떤 형태여야 하는지입니다. 나머지 내용은 대화에 넣으세요. 대화에서는 턴마다 변경할 수 있습니다.

다음은 검증 가능한 라인으로 구성된 페르소나 프롬프트입니다. 목소리에 이름이 붙여지고, 길이가 제한되며, 끝 규칙이 플레이어에게 후크를 제공합니다.

You are Mara Voss, a salvage pilot narrating in first person.
Voice: dry, tired, funny when it hurts.
Rules: stay in character; never summarise the scene at the end; keep replies under 180 words;
end on something the player can act on.

이를 "당신은 몰입을 깨지 않으며 항상 가장 좋은 응답을 작성하는 놀랍고 창의적이며 몰입감 있는 이야기꾼입니다."라는 문구와 대비해 보세요. 검증할 수 있는 내용이 없으므로 모델이 의존할 바가 없습니다. 구체성이 최상급을 항상 이깁니다.

무검열 모델은 디스클레임러 없이 다크 전제나 명시적인 전제를 따르므로, 방향 설정의 부담은 당신에게 있습니다. 지정하지 않은 부분은 가장 일반적인 선택으로 채웁니다. 한 장면에서는 절제하고 다음 장면에서는 열정을 원한다면, 희망에 맡기지 말고 지시문에 명시하세요.

OpenAI SDK로 연결하기

엔드포인트는 OpenAI 호환이므로, Base URL을 변경하면 공식 Python SDK가 작동합니다. 모델 ID는 항상 uncensored입니다. 샘플링 필드는 그대로 통과하므로 이미 알고 있는 방식으로 설정하면 됩니다.

import os
from openai import OpenAI

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

SYSTEM = """You are Mara Voss, a salvage pilot narrating in first person.
Voice: dry, tired, funny when it hurts.
Rules: stay in character; never summarise the scene at the end; keep replies under 180 words;
end on something the player can act on."""

out = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": SYSTEM},
        {"role": "user", "content": "The airlock is jammed and something is knocking from the other side."},
    ],
    temperature=0.85,
    top_p=0.95,
    max_tokens=350,
)
print(out.choices[0].message.content)

시스템 메시지를 먼저, 사용자 턴을 마지막으로 유지하세요. 모든 사용자 메시지에 페르소나를 반복하면 토큰이 낭비됩니다. 백만 입력 토큰당 $0.25이므로 저렴하지만, 긴 세션에서는 100,000 토큰 컨텍스트 창을 채웁니다. SDK를 건너뛰고 싶다면 빠른 시작 가이드를 참조하세요.

페르소나와 톤: 형용사보다 보여주기

형용사는 약한 레버입니다. "냉소적

  • 말버릇을 주세요. "위협을 질문으로 끝냄"이 "위협적임
  • 욕구를 주세요. 플레이어가 나가야 하는 캐릭터는 단순히 "무례함
  • 금지 목록을 주세요. "'갑자기'를 말하지 마세요, 'shiver'라는 단어를 사용하지 마세요"는 모델이 먼저 찾는 관용구를 제거합니다.
  • 길이를 지정하십시오. 단어 또는 문장 단위로, "짧게"가 아닙니다. 모델은 "짧게"를 매우 관대하게 해석합니다.

세션 중 톤을 변경하려면 원본을 다시 작성하는 대신 최신 메시지로 새로운 짧은 시스템 스타일의 지시문을 추가하세요. "이제부터 마라는 두려워하며 단편적으로 말함

지시문을 통한 JSON 추출

특별한 JSON 모드가 없으므로 요청하고 검증해야 합니다. 네 가지 습관을 따르면 생각보다 견고합니다: 정확한 스키마 명시, 본문과 코드 펜스 금지, 낮은 temperature 유지, 실패 메시지를 함께 재시도하는 방어적 파싱.

import json
import os
from openai import OpenAI

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

INSTRUCTION = """Return ONLY a JSON object, no prose, no code fences.
Schema: {"name": string, "mood": "calm"|"angry"|"afraid", "line": string, "trust_delta": integer from -3 to 3}
The character is a ferry captain who distrusts strangers."""

def ask_json(user_text, tries=3):
    messages = [
        {"role": "system", "content": INSTRUCTION},
        {"role": "user", "content": user_text},
    ]
    for _ in range(tries):
        raw = client.chat.completions.create(
            model="uncensored", messages=messages, temperature=0.3, max_tokens=250
        ).choices[0].message.content.strip()
        if raw.startswith("```"):
            raw = raw.strip("`").removeprefix("json").strip()
        try:
            data = json.loads(raw)
            if data["mood"] in ("calm", "angry", "afraid"):
                return data
        except (json.JSONDecodeError, KeyError):
            pass
        messages.append({"role": "assistant", "content": raw})
        messages.append({"role": "user", "content": "That was not valid per the schema. Reply with the JSON object only."})
    raise ValueError("model never produced valid JSON")

print(ask_json("I need passage across the strait tonight."))

루프가 실패 시 어떻게 작동하는지 관찰하세요. 잘못된 답변을 다시 피드백하고 무엇이 잘못되었는지 말함으로써 대부분의 경우 두 번째 시도에서 수정됩니다. 허용된 값을 나열하세요("calm"|"angry"|"afraid"). 열린 문자열은 drift하기 때문입니다. 앱에서 설명하는 대신 무언가를 트리거해야 한다면 OpenAI 형식의 tool calls가 지원되며 텍스트 구문 분석보다 더 적합합니다.

few-shot 샘플 및 정지 시퀀스

규칙을 말로 표현하기 어렵다면 보여주세요. 이전 user 및 assistant 메시지로 배치된 두세 개의 예시 대화는 설명 문단보다 형식, 길이 및 어조를 더 신뢰할 수 있게 가르칩니다. 샘플은 짧게 유지하고 서로 다르게 하세요. 그렇지 않으면 모델이 첫 번째의 구조를 모든 응답에 복제합니다.

샘플은 반대 문제, 즉 긴 응답도 해결합니다. 샘플 답변이 60 단어라면 실제 응답도 60 단어로 drift합니다. 이를 안전망으로 사용하세요. max_tokens을 주요 제어 수단으로 사용하지 마세요. 하드 컷은 문장을 반으로 자르지만, 좋은 샘플은 정중하게 끝냅니다.

다중 화자 장면에서는 stop 값을 화자 레이블과 동일하게 설정하면 모델이 플레이어를 사칭하는 것을 방지합니다. 일반 텍스트에 절대 나타나지 않는 레이블을 선택하고 저장된 기록에서 제거하여 이후 턴에 누출되지 않게 하세요.

temperature와 top_p: 하나의 레버 선택

두 필드 모두 동일한 확률 분포를 재형성하므로, 둘 다 동시에 이동하면 결과를 추론하기 어렵습니다. temperature을 먼저 변경하고 이유가 없는 한 top_p을 1 근처에 두세요.

작업temperaturetop_p이유
구조화된 JSON, 분류0.0 to 0.31.0매 실행마다 동일한 답변을 원합니다
대화, 역할극0.7 to 0.90.95논리 없는 내용 없이 다양성 확보
브레인스토밍, 와일드 픽션1.0 to 1.20.9더 넓은 어휘; 일부 오작동 예상

이 범위는 일반적인 관행에서 나온 시작점이지 보장은 아닙니다. 자신의 프롬프트로 10개의 샘플을 테스트하고 읽어보세요. \nPlayer:와 같은 턴 마커에서 모델을 멈추게 하려면 stop 시퀀스를 추가하세요. 플레이어의 줄을 대신 작성하지 않도록 하세요.

토큰을 낭비하는 프롬프트 안티패턴

  1. 대문자 외침. "NEVER EVER FORGET
  2. 음수만 있는 규칙. "반복하지 마세요
  3. 모순. "매우 상세하게
  4. 죄송합니다라는 프레임. 요청을 "이것이 과감하다는 것을 압니다만
  5. 기록 채우기. 모든 턴에 전체 로그를 붙여넣으면 결국 100,000 토큰 제한과 400 오류에 도달합니다. 오래된 턴을 Trim하세요.
  6. 무제한 출력. max_tokens을 잊으면 2048 기본값이 응답 길이를 결정합니다.

프롬프트가 어떻게 되든 경계선 하나는 고정됩니다: 미성년자가 포함된 성적 콘텐츠는 항상 403으로 차단되며, 픽션과 역할극에서도 동일하게 적용됩니다. 이를 우회하는 표현에 토큰을 낭비하지 마세요. 또한 나쁜 응답이 나올 때마다 새로운 규칙을 추가하려는 충동을 억제하세요. 프롬프트가 매일 한 줄씩 길어지면 일주일 안에 서로 모순되므로, 추가할 때마다 불필요한 부분을 정리하세요.

프롬프트 개선용 루프

시스템 프롬프트를 코드처럼 다루십시오. 파일에 보관하고 실행마다 한 가지 변경사항만 적용한 후 출력을 나란히 비교하십시오. 실행 가능한 루틴: 고정된 테스트 입력 5개를 작성하십시오. 그중 하나는 공격적이고 하나는 모호한 것이어야 합니다. 선택한 온도에서 각 입력을 세 번 실행하십시오. 가장 많이 실패한 규칙을 확인하십시오. 해당 규칙만 수정하십시오. 다시 실행하십시오.

실험에 예산을 책정하세요. 가정으로, 300 토큰 시스템 프롬프트 + 100 토큰 입력 + 250 토큰 응답 = 400 입력 토큰 및 250 출력 토큰입니다. 15회 실행 비용은 약 15 x (400 x $0.25 + 250 x $1.00) / 1,000,000 = 약 $0.005입니다. 테스트는 거의 무료이므로 추측할 이유가 없습니다.

프롬프트가 견디면 실제 앱으로 이동하세요. 봇 튜토리얼은 채널별 별도 기록 유지 방법을 보여주고, 콘텐츠 가이드는 성인 소설 사용을 다룹니다. 가격 세부사항은 가격 페이지에 있습니다.

질문과 답변

무검열 모델은 재일브레이크 스타일 프롬프트가 필요합니까?

아닙니다. 합법적인 성인 콘텐츠와 픽션은 거부되지 않으므로, 단순한 페르소나와 명확한 규칙만으로도 충분합니다. 미성년자가 포함된 콘텐츠는 프롬프트의 표현 방식에 관계없이 차단됩니다.

JSON 모드가 있나요?

별도 스위치로 제공되지 않습니다. 프롬프트에 스키마를 요청하고, 낮은 온도를 사용하며, 코드에서 출력을 검증하고 구문 분석 실패 시 한두 번 재시도하십시오.

온도를 어느 정도로 시작해야 하나요?

대화 및 소설은 약 0.8, 구조화된 출력은 0.2로 설정합니다. 한 번에 하나의 값만 조정하세요.

프롬프트는 얼마나 길게 할 수 있나요?

프롬프트와 완성 텍스트의 합계가 100,000 토큰을 초과하면 API가 400 오류를 반환합니다.

키는 양식 하나만 작성하면 받을 수 있습니다

계정을 생성하고 키를 복사한 후 기본 URL을 변경하십시오. 이것이 전체 설정입니다.

API 키 받기