KO ▾
API 키 받기

API를 통한 무검열 AI 스토리 생성기

플롯이 어두워지는 순간에 멈추는 스토리 생성기는 훌륭한 글쓰기 도구가 아닙니다. 이 기사에서는 OpenAI 호환 엔드포인트 위에 이를 구축하는 방법을 소개하며, 오늘 바로 실행해 볼 수 있는 코드와 함께 설명합니다.

업데이트

API 스토리 생성을 나타내는 터미널로 흐르는 빛나는 리본으로 변하는 페이지가 있는 열린 책

주요 포인트

  • OpenAI SDK를 Base URL에 연결하고 모델 ID uncensored를 사용하면 약 20줄로 스토리 엔진을 구축할 수 있습니다.
  • 장르, 톤 및 규칙을 설정하는 시스템 프롬프트는 어떤 샘플링 설정보다 중요합니다.
  • 100,000 토큰의 컨텍스트 창을 사용하면 전체 스토리 바이블과 여러 장을 하나의 요청에 유지할 수 있습니다.
  • 1,200 토큰 분량의 장은 약 10분의 1센트의 비용이 들므로, 비용은 거의 제한 요소가 아닙니다.

무검열 스토리 생성기의 실제 의미

필터 없는 AI 이야기 생성기는 당신에게 교훈을 주거나 악역을 친근한 존재로 바꾸거나, 소재가 어둡다는 이유로 장면을 거부하지 않고 소설을 작성하는 텍스트 모델입니다. 범죄 스릴러, 전쟁 소설, 호러, 도덕적으로 회색적인 주인공과 성인의 성숙한 로맨스는 어두운 소재를 경고로 보지 않고 소재로 취급하는 모델이 필요합니다.

이 사이트의 서비스는 콘텐츠 거부 없이 답변하도록 튜닝된 하나의 오픈 웨이트 모델을 제공합니다. 독립적인 제공업체에서 실행되며 표준 OpenAI 스타일 API를 통해 접근할 수 있습니다. 메시지 목록을 보내면 텍스트가 반환됩니다. 배울 웹 편집기도 채울 템플릿도 없습니다. 이것이 핵심입니다: 이야기 도구가 어떻게 작동할지 당신이 결정하고, 모델이 텍스트를 제공합니다.

한 가지 규칙은 고정되어 있습니다. 미성년자가 등장하는 성적인 콘텐츠는 항상 금지되며, 어떤 프롬프트도 이를 변경할 수 없습니다. 합법적인 성인 소설의 나머지 부분은 당신이 작성할 수 있습니다. 이 서비스가 호스팅된 캐릭터 플랫폼과 어떻게 비교되는지에 대한 일반적인 그림을 원하시면 NoFilter AI versus Character AI 페이지를 참조하세요.

파이썬 20줄로 첫 스토리 만들기

API가 OpenAI 형식을 따르므로 공식 openai 패키지는 변경 없이 작동합니다. Base URL과 키만 교체하면 됩니다. pip install openai로 설치한 후 다음을 실행하세요.

from openai import OpenAI

client = OpenAI(
    base_url="https://api.nofilterai.cc/v1",
    api_key="YOUR_KEY",
)

resp = client.chat.completions.create(
    model="uncensored",
    temperature=0.9,
    messages=[
        {"role": "system", "content": (
            "You are a fiction author. Write in third person, past tense. "
            "Use concrete detail and subtext. Never summarise the scene, "
            "never moralise, never address the reader."
        )},
        {"role": "user", "content": (
            "Genre: noir crime. Setting: a flooded harbour town. "
            "Write the opening 600 words. A smuggler finds a body in his net."
        )},
    ],
)
print(resp.choices[0].message.content)

모델 ID는 uncensored입니다. 키는 API 키 페이지에서 가져옵니다. 아직 가입하지 않았다면 새로운 사용자는 한 번의 클릭으로 $0.50의 무료 체험 크레딧을 받을 수 있으며, 이는 7일 동안 유효하므로 첫 번째 스크립트는 비용이 들지 않습니다.

프롬프트를 코드에 감싸기 전에 테스트하려면 curl에서도 동일한 호출이 작동하므로 편리합니다.

curl https://api.nofilterai.cc/v1/chat/completions \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [
      {"role": "user", "content": "Write a 200 word horror scene set in a lighthouse."}
    ]
  }'

사용 가능한 소설을 생성하는 프롬프트 구조

스토리 모델에서 가장 실망스러운 출력은 모델이 아니라 모호한 지시에서 비롯됩니다. 프롬프트의 세 가지 부분이 주요 작업을 수행합니다.

시스템 메시지는 주제가 아닌 작가를 설정합니다

여기에 voice rules를 입력하세요: 시점, 시제, 문장 리듬, 피해야 할 것들. "장면을 의미에 대한 성찰로 끝내지 마세요"와 같은 한 줄은 많은 언어 모델이 공유하는 습관을 제거합니다. 전체 프로젝트에 걸쳐 이 메시지를 안정적으로 유지하여 장이 서로 비슷하게 들리도록 하세요.

사용자 메시지는 박자를 설정합니다

장면별로 하나씩 제공하세요. 캐릭터 이름, 장소, 장면 끝에 변화할 사항, 목표 길이를 명시하세요. "이야기를 계속해"보다는 "700단어를 작성하세요. 마라는 누락된 장부에 대해 형과 대립합니다. 그녀는 답을 얻지 못합니다"가 훨씬 낫습니다.

스토리 바이블을 함께 유지하세요

캐릭터 사실, 지금까지의 타임라인 및 미해결 사건을 포함한 짧은 블록을 유지하고 모든 요청과 함께 보내세요. 800 토큰의 바이블은 거의 비용이 들지 않으며 모델이 눈 색깔을 바꾸거나 캐릭터를 부활시키는 것을 방지합니다.

  • 초안 작성에는 temperature를 0.8에서 1.0 사이로, 편집 단계에는 0.5에서 0.7 사이로 설정하세요.
  • 고정된 형식으로 생성할 때 stop 시퀀스를 사용하세요. 예를 들어 "END SCENE"이 있는 줄에서 중단합니다.
  • 모델이 좋아하는 구문을 반복할 때 presence_penalty과 frequency_penalty을 가볍게 사용하세요. 둘 다 모델에 전달됩니다.
  • 두 프롬프트 버전을 동등한 조건에서 비교하려면 seed을 사용하세요.

장편 스토리의 일관성 유지

컨텍스트 창은 프롬프트와 응답을 합쳐 100,000 토큰입니다. 이는 단일 요청으로 전체 스토리 바이블, 이전 여러 장과 새로운 출력 장을 위한 공간입니다. 대부분의 소설 프로젝트에서는 오랫동안 메모리 트릭을 걱정할 필요가 없습니다.

간단한 루프가 직렬화된 스토리를 처리합니다. 메시지 목록을 계속 유지하고 모델이 작성한 각 장을 추가한 후 다음 지시를 추가하세요. 목록이 제한에 가까워지면 가장 오래된 장을 짧은 요약으로 대체하세요. 이 요약도 모델에게 작성하도록 요청합니다.

from openai import OpenAI

client = OpenAI(base_url="https://api.nofilterai.cc/v1", api_key="YOUR_KEY")

bible = "Mara Voss, 34, ferry pilot. Brother Teo owes money. Setting: Harbor Nine, rain every night."
history = [{"role": "system", "content": "Fiction author. Third person, past tense. No moralising.\nBible: " + bible}]

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

print(write("Chapter 1, 700 words: Mara finds Teo's boat adrift."))
print(write("Chapter 2, 700 words: she searches the cabin and finds a second ledger."))

제한에 도달하면 조용히 잘라내지 마세요. 스토리의 시작 부분을 잃은 모델은 줄거리는 유지하지만 작은 사실은 잊어버립니다. 시스템 메시지 뒤에 삽입되는 500~800 토큰의 서면 요약은 작은 비용으로 이러한 사실을 활성화된 상태로 유지합니다.

실패하거나 거부된 요청은 요금이 부과되지 않으므로 오류 후 재시도는 청구 금액을 두 배로 만들지 않습니다. 전체 매개변수 목록은 API 문서에 있습니다.

스트리밍과 인터랙티브 픽션

텍스트 어드벤처나 실시간 글쓰기 어시스턴트의 경우 도착하는 대로 화면에 단어를 표시하고 싶을 것입니다. stream: true을 설정하고 서버 전송 이벤트를 읽으세요. 사용량 데이터는 스트림의 끝에 도착합니다.

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.nofilterai.cc/v1",
  apiKey: process.env.NOFILTER_KEY,
});

const stream = await client.chat.completions.create({
  model: "uncensored",
  stream: true,
  messages: [
    { role: "system", content: "You are the narrator of a survival horror text adventure. Second person, present tense." },
    { role: "user", content: "I open the cellar door." },
  ],
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

두 가지 실용적인 제한이 적용됩니다. 전체 키는 8개의 동시 요청과 분당 300개의 요청을 허용합니다. 체험 키는 각각 2개와 60개를 허용합니다. 스트리밍 요청은 스트림이 끝날 때까지 동시 요청 슬롯을 유지하므로 웹 페이지의 느린 리더가 예상보다 오래 슬롯을 점유할 수 있습니다. 제한을 초과하면 오류 코드 rate_limited 또는 concurrency와 함께 HTTP 429를 받습니다. 짧은 과부하 시에도 429와 Retry-After: 5를 받으며, 재시도 전에 5초를 기다리는 것이 올바른 대응입니다.

생성된 스토리가 평평해지는 이유와 해결책

거부가 없더라도 모델은 지루한 소설을 작성할 수 있습니다. 일반적인 원인은 알면 쉽게 수리할 수 있습니다.

첫 번째는 요약 본능입니다. 방치하면 모델은 사건을 깔끔한 요약으로 압축합니다. 한 장면을 요청하고 길이를 명시하며 시스템 메시지에서 요약을 금지하세요. 두 번째는 유사성입니다: 모든 캐릭터가 같은 정중한 어조로 대화합니다. 각 대화 캐릭터에게 두 줄 분량의 목소리 메모를 제공하세요. 예를 들어 "간결함, 문장을 끝까지 말하지 않음" 또는 "격식 있음, 친구에게도 호칭 사용"과 같이요. 세 번째는 갈등의 부재입니다. "그들이 계획에 대해 이야기한다"는 구절은 여백을 생성하지만, "그녀는 새벽 전에 그의 동의를 얻어야 하며, 그는 그 사실을 안다"는 구절은 긴장감을 생성합니다.

마지막으로 편집자처럼 출력을 읽어보세요. 같은 문장 형태가 연속으로 네 개의 단락을 시작하면 다음 요청에서 모델에게 알리고 다시 쓰도록 요청하세요. 당신은 받아들이는 것이 아니라 이끄는 역할을 합니다. 첫 번째 출력을 초안으로 취급하는 작가들은 완성된 것을 기대하는 사람들보다 훨씬 나은 장을 얻습니다.

스토리 비용

가격은 선불 크레딧 기준 입력 토큰 100만 토큰당 $0.15, 출력 토큰 100만 토큰당 $0.50이며 구독이 없습니다. 크레딧은 만료되지 않습니다. 아래 숫자들은 이 두 가격으로 계산된 것입니다.

역할입력 토큰출력 토큰비용
바이블과 이전 텍스트가 포함된 한 장3,0001,200$0.00045 + $0.0006 = $0.00105
이러한 장 100개300,000120,000$0.045 + $0.06 = $0.105
인터랙티브 세션: 50 턴, 각 20,000 토큰 컨텍스트, 1,000 토큰 응답1,000,00050,000$0.15 + $0.025 = $0.175
입력으로 창을 채우는 하나의 요청100,0000$0.015

심지어 100개의 장도 약 10센트 비용이 듭니다. 충전은 $20부터 시작하여 $500까지 전체 금액 단위로 가능하며, $50부터 5%, $100부터 10%, $200부터 15%의 보너스가 제공됩니다. 결제는 암호화폐로만 가능하며, TRC20의 USDT 또는 Base의 USDC를 사용합니다. 현재 세부 사항은 가격 페이지에서 확인할 수 있습니다.

대화식 소설에서 매 턴마다 긴 대화 기록을 다시 보내는 것은 비용이 많이 듭니다. 이전 턴을 요약하면 입력 토큰이 크게 줄어듭니다.

실용적인 조언과 제한 사항

빌드하기 시작할 때 시간을 절약할 수 있는 몇 가지 포인트가 있습니다.

  • 텍스트 전용. 이 서비스는 이미지, 오디오, 비디오를 생성하지 않으며, 임베딩이나 파인튜닝도 제공하지 않습니다. 표지 아트나 음성 생성에는 다른 도구를 사용하세요.
  • JSON 모드는 구조화에 도움이 됩니다. 코드에서 파싱할 캐릭터 시트나 장면 목록을 모델이 반환하게 하려면 response_format: {"type":"json_object"}를 요청하세요.
  • 프롬프트는 학습에 사용되지 않습니다. 미출판 원고라면 이것이 중요합니다.
  • 단계별로 편집하세요. 높은 temperature에서 초안을 작성한 후, 더 낮은 temperature로 대화 강화 또는 부사 삭제를 지시하며 초안을 다시 보내세요.
  • 출력을 확인하세요. 거절 없는 모델은 당신의 리드를 따르므로, 요청하는 어조가 바로 얻는 어조입니다.

이 모델은 벤더의 공식 API가 아닌 일반적인 오픈 웨이트 모델이므로, 제품 구축 전에 자체 장르에서 테스트하세요. 무료 체험 크레딧과 몇몇 실제 장으로 시작하세요.

질문과 답변

API를 통해 필터 없는 AI 스토리 생성기를 무료로 체험할 수 있나요?

새로운 사용자는 API 키 페이지에서 한 번의 클릭으로 $0.50의 무료 체험 크레딧을 받을 수 있습니다. 결제가 필요 없으며, 7일 동안 유효하고 인원당 하나만 제한됩니다.

단일 스토리 요청의 길이는 얼마나 될 수 있나요?

컨텍스트 창은 프롬프트와 응답을 합쳐 100,000 토큰입니다. 응답은 프롬프트가 남긴 여유 공간을 모두 사용할 수 있으며, max_tokens은 선택 사항입니다.

OpenAI를 이미 지원하는 도구와 함께 사용할 수 있나요?

네. 사용자 지정 Base URL과 키를 설정할 수 있는 모든 클라이언트가 모델 ID uncensored를 사용하여 작동합니다. 지원되는 메서드는 POST /v1/chat/completions과 GET /v1/models입니다.

모델이 작성하지 않을 콘텐츠가 있나요?

미성년자가 관련된 성적 콘텐츠는 절대 허용되지 않습니다. 그 외에도 모델은 합법적인 성인 사용을 위해 콘텐츠 거부 없이 답변하도록 튜닝되었습니다.

저의 스토리를 저장하거나 학습에 사용하나요?

프롬프트는 학습에 사용되지 않습니다.

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

계정을 생성하고 키를 복사한 후 기본 URL을 변경하세요. 설정은 이것으로 끝입니다.