Перейти к содержанию
Вся документация

Случай использования

API для диалогов NPC в играх

Отправьте персонажа NPC и состояние квеста как системное сообщение, и модель потоком вернёт короткую реплику. DeepSeek V4.1 Flash Uncensored отвечает сразу, остаётся в роли для злодеев и разбойников и может вернуть JSON, который читает ваша игра. Тысяча разговоров по восемь реплик стоит около $2.76.

Проверено 29 октября 2026 г.

Что нужно диалогу NPC и что вы получаете

Что нужно диалогу NPCЧто есть в nokeep
Реплики, которые начинаются быстроВключайте потоковую передачу, держите max_tokens небольшим и не включайте размышление, это значение по умолчанию у DeepSeek. Почасовая проверка статуса, один короткий вопрос с целым ответом, в среднем занимала от полсекунды до 1.7 секунды в день для DeepSeek с 26 по 29 октября 2026; один запрос в загруженный момент может идти намного дольше. Статус сейчас.
Персонажи, которые могут быть жестокимиРазбойник может угрожать, а глава культа может проповедовать: отказы убраны из весов модели. Отклоняются только жёсткие ограничения, с 422 и без списания.
Факты, на которые может опереться играDeepSeek принимает response_format, включая json_schema, поэтому реплика может прийти с настроением и действием. Вывод JSON.
Память об игрокеAPI ничего не хранит между запросами. Положите то, что NPC должен помнить (стадию квеста, прошлое оскорбление), в системное сообщение; ваш файл сохранения его и хранит.
Стоимость на игрока, которую можно спланироватьПредоплаченные кредиты, списываемые с точностью до миллионной доли кредита. Дневной лимит на ключ останавливает вышедший из-под контроля цикл.

Сколько стоят тысяча разговоров

МодельНа 1,000 разговоров, без кэшаНа 1,000 разговоров, повторяющееся начало в кэше
DeepSeek V4.1 Flash Uncensored$4.88$2.76
GLM 5.3 Flash Uncensored$2.11$1.34

Расчёт по сегодняшним ценам: начало в 800 токенов, 8 ходов по 25 токенов на входе и 60 на выходе, самый длинный запрос 1,420 токенов. Короткое размышление GLM перед каждым ответом добавляет выходные токены, которые здесь не учтены.

На GLM те же тысяча разговоров стоят около $1.34 без учёта его короткого размышления, но оно идёт перед каждой репликой и отнимает время, которого у NPC нет. Короткие описания персонажа в любом случае дешевы; дорого становится длинный лорный текст в каждом запросе.

Реплика диалога, потоком

Запускайте это на вашем игровом сервере, а не в клиенте: ключ, вшитый в игру, можно из неё вытащить. Показывайте каждый кусок по мере поступления, чтобы облачко с речью заполнялось на глазах у игрока.

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://nokeep.ai/v1",
    api_key=os.environ["NOKEEP_API_KEY"],
)

persona = "You are Brannoc, the blacksmith of Hollowmere: gruff, superstitious, owes the thieves guild money. The player has the quest \"Missing ore\" and has not yet found the mine. Speak only as Brannoc, in one to three short sentences. Never mention game mechanics."

stream = client.chat.completions.create(
    model="deepseek-v4.1-flash-uncensored",
    messages=[
        {"role": "system", "content": persona},
        {"role": "user", "content": "Have you seen any ore carts come through town?"},
    ],
    stream=True,
    max_tokens=120,
    temperature=0.8,
)
for chunk in stream:
    if chunk.choices:
        print(chunk.choices[0].delta.content or "", end="", flush=True)

Реплика, на которую может опереться игра

Когда ответ NPC должен менять игру, запросите JSON вместо потоковой прозы: реплику для показа, настроение для анимации и действие для вашего кода. Опишите структуру и в промпте тоже.

Python
import json

reply = client.chat.completions.create(
    model="deepseek-v4.1-flash-uncensored",
    max_tokens=200,
    response_format={"type": "json_object"},
    messages=[
        {"role": "system", "content": persona + ' Answer as JSON: {"line": string, "mood": "calm" | "angry" | "afraid", "action": "none" | "give_map" | "attack"}.'},
        {"role": "user", "content": "Tell me where the mine is or I tell the guild you skipped town."},
    ],
)
npc = json.loads(reply.choices[0].message.content)
print(npc["line"], npc["mood"], npc["action"])

Много игроков одновременно

  • Каждый ключ принимает 120 запросов в минуту, а на аккаунт можно завести 10 ключей. После ответа 429 заголовок Retry-After указывает, сколько ждать. Лимиты запросов.
  • Дайте каждой среде свой ключ с дневным лимитом: ошибка, которая зацикливает диалог, остановится на лимите, а не на вашем балансе. Ключи и лимиты.
  • Держите описания персонажей короткими и неизменными. Персонаж около 1,000 токенов и больше, который повторяется от запроса к запросу, читается из кэша по доле от цены.
  • Заготовьте запасную реплику на случай сбоя, чтобы загруженный момент не замораживал сцену. Ответ 503 busy ничего не стоит.

Какая модель

Для реплик, которые озвучиваются, используйте deepseek-v4.1-flash-uncensored: он отвечает без предварительного размышления, принимает настройки сэмплирования и возвращает JSON. glm-5.3-flash-uncensored дешевле за токен ($0.20 на входе и $0.65 на выходе за миллион против $0.45 и $1.75), но перед каждым ответом коротко размышляет, поэтому подходит для работы, которую игрок не ждёт, например для написания завтрашних городских слухов. Сравните их.

Что мы храним из слов игроков

Одна строка на запрос: время, ключ, модель, число токенов, кредиты и статус, хранится 30 дней. Никогда не хранятся слова игрока и никогда реплика NPC. В описание персонажа ничего не добавляется. Что мы храним.

Вопросы

Это достаточно быстро для диалога в реальном времени?

Для облачков с речью и окон диалога — да: выводите реплику потоком, держите max_tokens около 120 и не включайте размышление. Время зависит от нагрузки; страница статуса показывает среднее за каждый день. Для голосовой реплики с синхронизацией губ запускайте голос, когда придёт первое предложение.

Могут ли злодеи ругаться, угрожать и лгать?

Да. Модели пишут тёмных персонажей без промпта-взлома. Отклоняется только короткий список жёстких ограничений из условий, с ответом 422, который ничего не стоит.

Можно ли вызывать это из игрового клиента?

Можно, так как API принимает запросы с любого источника, но любой может вытащить ключ из выпущенной игры. Вызывайте API со своего сервера и держите на ключе дневной лимит.

Работает ли это с Unity, Godot или Unreal?

Любой движок, который умеет отправить HTTPS POST, подойдёт: API использует формат chat completions от OpenAI, поэтому клиентская библиотека OpenAI для вашего языка работает как есть, если указать наш базовый URL.