Ключевые моменты
- Один базовый URL и один ID модели, uncensored, работают с любым SDK или клиентом OpenAI.
- Поддерживаются потоковая передача, вызов функций и JSON-режим с контекстным окном на 100 000 токенов.
- Полный ключ позволяет 8 параллельных запросов и 300 в минуту, поэтому спланируйте небольшую очередь для загруженных приложений.
- Биллинг составляет $0,15 за 1 млн входных токенов и $0,50 за 1 млн выходных токенов из предоплаченного баланса, промпты не используются для обучения.
Что вы получаете от одного эндпоинта
Uncensored LLM Hub ищут, когда нужна модель, которая отвечает без отказов в выдаче контента для законного использования взрослыми, но не хочется запускать GPU. Сервис — это обычный HTTPS API. Вы указываете клиент OpenAI на https://api.uncensoredllmhub.com/v1, отправляете идентификатор модели uncensored и аутентифицируетесь с помощью Authorization: Bearer YOUR_KEY. Существуют два метода: POST /v1/chat/completions для диалогов и GET /v1/models для списка моделей.
Важно понимать, что стоит за этим эндпоинтом. Это одна модель с открытыми весами, запущенная независимым провайдером и настроенная на обход фильтров. Это не официальный API крупного вендора и не роутер, выбирающий между моделями. Она обрабатывает только текст: без изображений, аудио, видео, эмбеддингов или дообучения. Одно строгое правило применяется без исключений: нет сексуального контента с участием несовершеннолетних.
Такой узкий охват — это суть. Один стабильный эндпоинт легко использовать как основу для архитектуры. Разделы ниже показывают небольшой чат-бэкенд, затем цикл агента, а затем ограничения, которые нужно учитывать при проектировании.
Шаг 1: подключение существующего клиента
Поскольку API следует формату OpenAI, вам редко нужно писать новый клиентский код. Откройте свой SDK или инструмент, измените базовый URL и ключ, и укажите модель на uncensored. Сначала зарегистрируйтесь на странице API-ключ (через Google или по email и паролю), затем получите пробный баланс $0.50 в один клик. Для пробного баланса не нужна карта, срок действия — 7 дней, лимит — один на человека.
Минимальный запрос на Python:
from openai import OpenAI
client = OpenAI(
base_url="https://api.uncensoredllmhub.com/v1",
api_key="YOUR_API_KEY",
)
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You are a concise assistant for a writing tool."},
{"role": "user", "content": "Give me three opening lines for a mystery set on a ferry."},
],
temperature=0.9,
top_p=0.95,
)
print(resp.choices[0].message.content)
Параметры сэмплирования, такие как temperature, top_p, stop, seed и штрафы за частоту и присутствие, передаются модели, поэтому настройки, знакомые вам от других провайдеров, работают так же. Этот же вызов работает в инструментах, принимающих пользовательский эндпоинт, совместимый с OpenAI, например SillyTavern или Open WebUI: вставьте базовый URL, добавьте ключ, введите ID модели вручную.
Шаг 2: потоковая передача ответов в интерфейс чата
Чат-приложения кажутся медленными, если пользователь смотрит на пустое поле, пока не придет полный ответ. Потоковая передача решает эту проблему. Установите stream: true, и API отправит ответ в виде событий, отправляемых сервером (SSE), с отчетом об использовании в конце потока. Вот версия для Node, которая передает токены по мере их поступления:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.uncensoredllmhub.com/v1",
apiKey: process.env.API_KEY,
});
export async function streamReply(history, onToken, signal) {
const stream = await client.chat.completions.create(
{ model: "uncensored", messages: history, stream: true },
{ signal }
);
let text = "";
for await (const chunk of stream) {
const piece = chunk.choices[0]?.delta?.content ?? "";
if (piece) {
text += piece;
onToken(piece);
}
}
return text;
}
Две привычки избавят от проблем в будущем. Во-первых, всегда передавайте сигнал отмены и отменяйте его, когда пользователь закрывает вкладку или нажимает стоп. Запрос с потоковой передачей занимает слот параллельных запросов до конца потока, поэтому брошенные потоки сокращают вашу квоту. Во-вторых, сохраняйте полный собранный текст, так как вы добавите его в историю как сообщение ассистента для следующего хода.
Если вы видите неясные ошибки во фронтенде при потоковой передаче, наша заметка о диагностике сбоев потоковой передачи охватывает обычные причины, такие как неверный базовый URL, прокси, буферизирующий события, и два кода 429.
Шаг 3: целенаправленное использование длинного контекста
Контекстное окно составляет 100 000 токенов, которые разделяются промптом и завершением. Для инструмента написания историй, чата с персонажами или помощника по документам это оставляет место для длинной истории, крупного системного промпта и справочных материалов одновременно. Вам не нужно задавать max_tokens; завершение может использовать всё, что осталось.
Использовать длинный контекст дёшево при таких ценах. Заполнение всего окна входными данными стоит 0,1 × $0,15 = $0,015 за 100 000 входных токенов. Добавьте ответ на 2 000 токенов (0,002 × $0,50 = $0,001), и почти полный запрос обойдётся в $0,016. Вам всё равно придётся управлять окном по трём причинам: задержка растёт с размером промпта, каждый ход повторно отправляет историю, так что расходы накапливаются в течение сессии, а очень длинные истории размывают инструкции в начале.
Простая политика работает хорошо:
- Держите системный промпт и любой фиксированный справочный текст в начале.
- Сохраняйте самые последние ходы дословно.
- Когда история превышает выбранный вами порог, например 60 000 токенов, попросите модель кратко пересказать самую старую часть в короткую заметку и замените эти ходы ею.
- Читайте
usage.prompt_tokensиз каждого ответа, чтобы знать, насколько большим будет следующий запрос, вместо оценки по символам.
Шаг 4: инструменты и структурированный вывод для агентов
Агентам нужны от модели две вещи: способ вызывать функции и вывод, который можно парсить. Оба поддерживаются. Вызов инструментов использует стандартные параметры tools и tool_choice, вызовы инструментов можно получать потоком, а результаты возвращаются как сообщения с role: "tool". Один цикл запрос-ответ выглядит так:
import json
from openai import OpenAI
client = OpenAI(
base_url="https://api.uncensoredllmhub.com/v1",
api_key="YOUR_API_KEY",
)
tools = [{
"type": "function",
"function": {
"name": "lookup_order",
"description": "Find an order by its number.",
"parameters": {
"type": "object",
"properties": {"order_id": {"type": "string"}},
"required": ["order_id"],
},
},
}]
messages = [{"role": "user", "content": "Where is order A-1042?"}]
first = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
msg = first.choices[0].message
if msg.tool_calls:
call = msg.tool_calls[0]
args = json.loads(call.function.arguments)
result = {"order_id": args["order_id"], "status": "shipped"} # your real lookup goes here
messages.append(msg)
messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps(result)})
final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
print(final.choices[0].message.content)
Всегда проверяйте аргументы перед выполнением чего-либо с побочными эффектами. Модель может выдать некорректное или неожиданное значение, и ваш код — последняя линия защиты.
Для чистого структурированного вывода без инструментов используйте JSON-режим с параметром response_format, установленным в {"type": "json_object"}. Опишите нужную структуру в промпте, а ответ парсите внутри блока try, чтобы при ошибке срабатывала повторная попытка, а не сбой.
curl https://api.uncensoredllmhub.com/v1/chat/completions -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d '{
"model": "uncensored",
"response_format": {"type": "json_object"},
"messages": [
{"role": "system", "content": "Reply with JSON: {"title": string, "tags": [string]}"},
{"role": "user", "content": "Describe a noir story set in a rainy port city."}
]
}'
Ограничения, которые нужно учитывать
Полный ключ позволяет 8 одновременных запросов и 300 запросов в минуту. Пробный ключ позволяет 2 и 60. Тело запроса может занимать до 8 МБ. Каждый ответ содержит X-Request-Id, X-Balance-USD, X-RateLimit-Limit-Requests и X-RateLimit-Limit-Concurrency, что полезно для логирования.
При превышении лимита API возвращает HTTP 429. Код ошибки rate_limited означает слишком много запросов в минуту, а concurrency — слишком много одновременно. Временная перегрузка также возвращает 429 с заголовком Retry-After: 5. Для многопользовательского приложения поставьте перед API небольшую очередь: семафор размером ниже лимита одновременности и повторную попытку, которая учитывает Retry-After. Для агента, который разветвляется на параллельные вызовы инструментов, ограничьте разветвление тем же числом.
Полный список параметров и формат ошибок находятся в API-документации.
Стоимость, пополнение и обработка данных
Тарификация составляет $0,15 за 1 млн входных токенов и $0,50 за 1 млн выходных токенов из предоплаченного баланса. Подписки нет, кредит никогда не сгорает, а неудачные или отклоненные запросы не оплачиваются. Ход чата из 1 500 входных и 500 выходных токенов стоит 0,0015 × $0,15 + 0,0005 × $0,50 = $0,000225 + $0,00025 = $0,000475, так что $20 кредита покрывают около 42 000 таких ходов.
Вы можете пополнить любую целую сумму от $20 до $500. Бонус составляет +5% от $50, +10% от $100 и +15% от $200. Оплата картой (Visa, Mastercard, Apple Pay, Google Pay) или криптовалютой (USDT на TRC20, USDC на Base). Текущая таблица цен доступна на странице тарифов.
Что касается данных: промпты не используются для обучения. Прочитайте политику конфиденциальности для полного текста. Вы несете ответственность за то, что строите с помощью модели, и сервис предназначен только для законного использования взрослыми.
