RU ▾
Открыть аккаунт

API без фильтров: первый запрос за пять минут

API без фильтров можно попробовать за пять минут, если у вас уже установлен Python. Вам нужен ключ, две изменённые настройки в SDK OpenAI и один запрос. После этого системный промпт и потоковая передача превращают его в чат-бота.

Последнее обновление

Стеклянный бумажный самолетик, несущий пузырь чата от стартовой площадки в форме ключа к маяку

Ключевые моменты

Минуты 1–2: получение ключа

Перейдите на страницу API-ключа и зарегистрируйтесь через Google или по электронной почте и паролю. После регистрации на странице ключа появится кнопка для получения пробного баланса: $0,50 на человека, срок действия — 7 дней, карта не требуется.

Скопируйте ключ и поместите его в переменную окружения. Ключ в файле, который вы случайно закоммитите, — самый частый способ потерять баланс.

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

Пробный ключ позволяет выполнять 2 параллельных запроса и 60 запросов в минуту. Этих лимитов достаточно для этого руководства.

Минута 3: первый запрос

Сервис совместим с OpenAI, поэтому официальный SDK работает сразу после изменения base_url и ключа. Идентификатор модели — 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. Список имен и количество токенов означают, что всё работает. Если видите ошибку аутентификации, проверьте переменную. Если соединение не устанавливается, убедитесь, что базовый URL заканчивается на /v1.

Ответ следует формату чата OpenAI: список choices с сообщением, блок usage с количеством токенов и, в этом формате, причина завершения, указывающая, почему генерация остановилась. Ответ, который был обрезан, обычно означает, что значение max_tokens было низким. Что касается стоимости, запрос с 500 входными токенами и 300 выходными токенами стоит $0.000075 + $0.00015 = $0.000225. Пять запросов в этом руководстве стоят в общей сложности около одной десятой цента, поэтому пробный кредит практически не затрачивается.

Минута 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()

Потоковый запрос занимает один из ваших слотов параллельных запросов до завершения потока. С пробным ключом два открытых потока уже используют все слоты, и третий запрос возвращает 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?"))

Второй вопрос работает только потому, что первый обмен включён в список. Именно поэтому стоимость чата растёт с длиной: каждый ход отправляет всё заново. В разделе анализ стоимости и компромиссов этот эффект рассматривается подробно, а на странице тарифов указаны ставки: $0,15 и $0,50 за 1 млн токенов.

Два предупреждения по мере роста списка. Первое — стоимость: длинные истории повышают цену каждого хода. Второе — контекстное окно: 100,000 токенов на промпт и ответ — это много, но ролевая игра, длящаяся неделями, может его исчерпать. Удаляйте самые старые реплики, оставляя системное сообщение, или заменяйте их кратким саммари.

Распространённые проблемы и дальнейшие шаги

ПроблемаВероятная причинаИсправление
Ошибка аутентификацииНеверный или пустой ключВыведите длину переменной, удалите пробелы
Не найденоВ базовом URL отсутствует /v1Используйте точный базовый URL с этой страницы
429 rate_limitedБолее 60 запросов в минуту (пробный период)Уменьшите частоту запросов или используйте полный ключ (300 в минуту)
429 с Retry-After: 5Временная перегрузкаПодождите 5 секунд и повторите попытку
Странные или однообразные ответыСлабый системный промптДобавьте голос, сеттинг, ограничение по длине

Неудачные или отклонённые запросы не оплачиваются. Для дальнейших шагов прочитайте документацию API по инструментам и JSON-режиму. Модель поддерживает только текст, поэтому изображений, аудио или эмбеддингов нет. Пополнение от $20 до $500 криптовалютой (USDT в сети TRC20 или USDC в сети Base), и баланс никогда не истекает. Вы несёте ответственность за доступ только для взрослых и модерацию всего, что вы строите поверх этой модели.

Если проблема не описана в таблице, сведите запрос к минимальному рабочему случаю: одно сообщение пользователя, без системного промпта, без дополнительных параметров. Затем постепенно добавляйте параметры, пока ошибка не появится. Почти все проблемы при первой интеграции возникают из-за опечатки в 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 генерирует RateLimitError при HTTP 429. При временной перегрузке API возвращает заголовок Retry-After: 5, поэтому подождать пять секунд — правильный первый шаг. При повторяющихся ошибках concurrency ставьте запросы в очередь на своей стороне, а не ускоряйте повторные попытки.

Часто задаваемые вопросы

Является ли API чат-бота без фильтров тем же, что и API OpenAI?

Протокол одинаковый, поэтому SDK OpenAI работает. Модель другая: модель с открытыми весами от независимого провайдера, настроенная на ответы без отказов по контенту для законного использования взрослыми.

Какой базовый URL и модель использовать?

Базовый URL https://api.chatbotunfiltered.com/v1 и идентификатор модели uncensored.

Нужно ли платить, чтобы попробовать?

Нет. Пробный баланс $0,50 не требует данных для оплаты. Платные пополнения только криптовалютой.

Можно ли использовать потоковую передачу?

Да. Установите stream в true. Потоковый запрос занимает слот параллельных запросов до завершения потока.

Как посмотреть баланс?

Прочитайте заголовок X-Balance-USD в любом ответе или вызовите GET /v1/balance.

Получите API-ключ мгновенно

Зарегистрируйтесь, скопируйте ключ, обновите базовый URL. Настройка завершена.