跳到正文
全部文档

使用场景

游戏 NPC 对话 API

把每个 NPC 的人设和任务进度作为系统消息发送,流式返回一句短台词。DeepSeek V4.1 Flash Uncensored 立即作答,能为反派和强盗保持角色,还能返回游戏可读取的 JSON。一千次八句的对话约花费 $2.76。

核对于 2026年10月29日

NPC 对话需要什么,以及你能得到什么

NPC 对话需要在 nokeep 上
台词要快速出现使用流式输出,保持 max_tokens 较小,并关闭思考(这是 DeepSeek 的默认设置)。每小时的状态检查(一个简短问题的完整回答)显示,2026 年 10 月 26 日至 29 日,DeepSeek 的平均响应时间每天在半秒到 1.7 秒之间;在繁忙时刻,单次调用可能慢得多。实时状态。
角色可以很凶狠强盗可以威胁,邪教领袖可以布道:拒绝回答已从模型权重中移除。只有硬性限制会被拒绝,返回 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 token,8 轮,每轮输入 25 token、输出 60 token,最长一次调用 1,420 token。GLM 每次回复前的简短思考会增加输出 token,这里未计入。

在 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 头会说明需要等待多久。速率限制。
  • 为每个环境配置带每日上限的独立密钥:有 bug 导致对话循环时,会在上限处停止,而不是把余额耗尽。密钥与上限。
  • 人设保持简短且固定。约 1,000 token 或以上、每次调用都重复的人设会从缓存读取,价格只是一小部分。
  • 为调用失败时准备一句备用台词,这样繁忙时刻也不会让场景卡住。503 busy 不收费。

选哪个模型

对白请使用 deepseek-v4.1-flash-uncensored:它不需要先思考就能作答,支持采样参数,并能返回 JSON。glm-5.3-flash-uncensored 每个 token 更便宜(每百万输入 $0.20、输出 $0.65,而 DeepSeek 分别为 $0.45 和 $1.75),但每次回答前都会简短思考,因此适合玩家不用等待的工作,比如编写明天的镇上流言。比较两者。

我们如何处理玩家的话

每次调用保存一行记录:时间、密钥、模型、token 数、积分和状态,保留 30 天。绝不保存玩家输入的内容,也不保存 NPC 的台词。不会添加到你的人设提示词中。我们保存的内容。

常见问题

速度够快,能用于实时对话吗?

对于对话气泡和对话框,可以:流式输出台词,把 max_tokens 保持在 120 左右,并关闭思考。耗时随负载变化;状态页会显示每天的平均值。若是口型同步的语音台词,可以在第一句到达后开始播放语音。

反派能骂人、威胁和撒谎吗?

可以。模型无需越狱提示词,就能写出黑暗的角色。只有条款中简短列出的硬性限制会被拒绝,返回 422,且不收费。

能在游戏客户端内部调用吗?

可以,因为 API 允许任何来源访问,但任何人都能从已发布的游戏中提取密钥。请从你的服务器调用,并为密钥设置每日上限。

支持 Unity、Godot 或 Unreal 吗?

任何能发送 HTTPS POST 的引擎都可以。API 采用 OpenAI 的聊天补全格式,因此适用于你所用语言的 OpenAI 客户端库,只需指向我们的基础 URL,无需修改。