Генератор историй без цензуры через API
Генератор историй, который останавливается на полуслове из-за мрачного поворота сюжета, — плохой инструмент для писателя. В этой статье показано, как создать такой инструмент на базе совместимого эндпоинта, с кодом, который можно запустить прямо сейчас.

Ключевые моменты
- Направьте любой SDK OpenAI на базовый URL, используйте идентификатор модели uncensored, и у вас будет движок для историй примерно в двадцати строках кода.
- Системный промпт, задающий жанр, тон и правила, важнее любых настроек сэмплирования.
- Окно на 100 000 токенов позволяет держать в одном запросе целую библию сюжета и несколько глав.
- Глава на 1 200 токенов стоит около одной десятой цента, поэтому стоимость редко является ограничением.
Что такое генератор историй без фильтров
генератор историй без фильтров — это текстовая модель, которая пишет художественную литературу, не читая вам лекций, не превращая злодея в хорошего парня и не отказывая в сцене из-за мрачной темы. Криминальные триллеры, военная проза, хорроры, морально неоднозначные протагонисты и зрелая романтика между взрослыми требуют модели, которая воспринимает тёмный материал как материал, а не как повод для предупреждения.
Сервис, стоящий за этим сайтом, предоставляет одну модель с открытыми весами, настроенную на ответы без отказов по содержанию для законного использования взрослыми. Она работает у независимого провайдера и доступна через стандартный API в стиле OpenAI. Вы отправляете список сообщений, получаете текст. Вам не нужно осваивать веб-редактор или заполнять шаблоны, и в этом суть: вы решаете, как работает инструмент для историй, а модель предоставляет текст.
Одно правило фиксировано. Сексуальный контент с участием несовершеннолетних никогда не разрешён, и ни один промпт это не изменит. Всё остальное в законной взрослой прозе — ваше для написания. Общее сравнение с хостинговой платформой для персонажей есть на странице NoFilter AI против Character AI.
Ваша первая история за двадцать строк на Python
Поскольку API следует формату OpenAI, официальный пакет openai работает без изменений. Вам нужно только заменить базовый 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)
Идентификатор модели — 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."}
]
}'Структура промпта для создания пригодной прозы
Большое разочарование от вывода модели историй вызвано не самой моделью, а размытыми инструкциями. Три части промпта выполняют основную работу.
Системное сообщение задаёт автора, а не тему
Укажите здесь правила повествования: точку зрения, время, ритм предложений, чего следует избегать. Например, фраза «не заканчивайте сцены размышлениями о смысле всего происходящего» устраняет привычку, которой обладают многие языковые модели. Сохраняйте это сообщение неизменным в рамках всего проекта, чтобы главы звучали единообразно.
Сообщение пользователя задаёт ритм
Давайте по сцене за раз. Назовите персонажей, место, что изменится к концу сцены и целевую длину. «Напишите 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 соответственно. Потоковый запрос удерживает слот параллельности до завершения потока, поэтому медленный клиент на веб-странице может блокировать слот дольше, чем вы ожидаете. При превышении лимита вы получите HTTP 429 с кодом ошибки rate_limited или concurrency. При кратковременной перегрузке вы также получите 429 с заголовком Retry-After: 5, и правильная реакция — подождать пять секунд перед повторной попыткой.
Почему сгенерированные истории становятся скучными и как это исправить
Даже без отказов модель может писать скучную прозу. Обычные причины легко исправить, как только вы их узнаете.
Первая проблема — рефлекс обобщения. Если не направлять модель, она сжимает события в аккуратный пересказ. Попросите описать одну сцену, укажите её длину и запретите пересказы в системном сообщении. Вторая проблема — однообразие: все персонажи говорят в одном вежливом регистре. Дайте каждому говорящему персонажу двухстрочную заметку о характере, например «обрывистый, никогда не заканчивает фразы» или «формальный, использует титулы даже для друзей». Третья проблема — отсутствие напряжения. Фраза «они обсуждают план» создаёт воду, тогда как «ей нужно, чтобы он согласился до рассвета, и он это знает» создаёт напряжение.
Наконец, читайте вывод как редактор. Если одна и та же структура предложения открывает четыре абзаца подряд, сообщите об этом модели в следующем запросе и попросите переписать. Вы управляете процессом, а не принимаете всё, что пришло. Писатели, которые относятся к первому выводу как к черновику, получают гораздо лучшие главы, чем те, кто ожидает готовый продукт.
Сколько стоит история
Тарификация: $0,15 за 1M входных токенов и $0,50 за 1M выходных токенов, списывается с предоплаченного баланса без подписки. Баланс не сгорает. Цифры ниже рассчитаны из этих двух цен.
| Задача | Входные токены | Выходные токены | Стоимость |
|---|---|---|---|
| Одна глава с библией и предыдущим текстом | 3,000 | 1,200 | $0.00045 + $0.0006 = $0.00105 |
| 100 таких глав | 300,000 | 120,000 | $0.045 + $0.06 = $0.105 |
| Интерактивная сессия: 50 ходов, контекст по 20 000 токенов каждый, ответы по 1 000 токенов | 1,000,000 | 50,000 | $0.15 + $0.025 = $0.175 |
| Один запрос, заполняющий окно входными данными | 100,000 | 0 | $0.015 |
Даже сто глав стоят около десяти центов. Пополнение начинается с $20 и достигает $500 любой целой суммой, с бонусом +5% от $50, +10% от $100 и +15% от $200. Оплата только криптовалютой: USDT в сети TRC20 или USDC в сети Base. Текущие детали указаны на странице с ценами.
Дорогая привычка — отправлять очень длинную историю на каждом ходу интерактивной истории. Сводите старые ходы, и ваши входные токены резко упадут.
Практические советы и ограничения
Несколько пунктов сэкономят время, когда вы начнёте разработку.
- Только текст. Сервис не генерирует изображения, аудио или видео и не предлагает эмбеддинги или дообучение. Для обложки или озвучки используйте другой инструмент.
- JSON-режим помогает со структурой. Запросите
response_format: {"type":"json_object"}, когда хотите, чтобы модель вернула лист персонажа или список сцен, которые ваш код сможет распарсить. - Ваши промпты не используются для обучения. Это важно, если ваше произведение ещё не опубликовано.
- Редактируйте в несколько этапов. Создайте черновик при высокой температуре, затем отправьте его обратно с инструкцией сократить диалоги или убрать наречия при более низкой температуре.
- Проверяйте вывод. Модель без отказов будет следовать вашему направлению, поэтому тон, который вы получите, — это именно тот тон, который вы запросили.
Модель — это общая модель с открытыми весами, а не официальное API вендора, поэтому протестируйте её на своём жанре, прежде чем строить продукт. Начните с пробного баланса и нескольких реальных глав.
Дополнительные руководства
Вопросы и ответы
Можно ли бесплатно попробовать генератор историй без фильтров через API?
Новые пользователи могут получить $0.50 пробного баланса в один клик на странице API-ключа после регистрации. Для этого не нужна оплата, срок действия — 7 дней, лимит — один на человека.
Какова максимальная длина запроса на одну историю?
Контекстное окно составляет 100 000 токенов, которые делятся между промптом и ответом. Ответ может использовать всё, что осталось свободным в промпте, а параметр max_tokens необязателен.
Можно ли использовать его с инструментами, которые уже поддерживают OpenAI?
Да. Любой клиент, позволяющий задать базовый URL и ключ, работает с использованием идентификатора модели uncensored. Поддерживаемые методы: POST /v1/chat/completions и GET /v1/models.
Есть ли контент, который модель не будет писать?
Сексуальный контент с участием несовершеннолетних никогда не разрешён. Во всём остальном модель настроена отвечать без отказов в выдаче контента для законного использования взрослыми.
Храните ли вы мои истории или обучаетесь на них?
Промпты не используются для обучения.
Ваш ключ — в одной форме от вас
Создайте аккаунт, скопируйте ключ, измените базовый URL. Это вся настройка.