مورد استفاده
یک API دیالوگ NPC برای بازی
پرسونای هر NPC و وضعیت مأموریت را بهعنوان پیام سیستم بفرست و یک خط کوتاه را بهصورت استریم برگردان. DeepSeek V4.1 Flash Uncensored فوراً جواب میدهد، در نقش شرور و سارق میماند، و میتواند JSON برگرداند که بازیات بخواند. هزار گفتگوی هشتخطی حدود $2.76 میشود.
بررسیشده در ۷ آبان ۱۴۰۵
دیالوگ NPC چه میخواهد و چه میگیری
| دیالوگ NPC چه میخواهد | در nokeep |
|---|---|
| خطوطی که سریع شروع شوند | استریم کن، max_tokens را کوچک نگه دار و تفکر را خاموش بگذار، که پیشفرض DeepSeek است. بررسی وضعیت ساعتی، یک پرسش کوتاه که کامل پاسخ داده میشود، از 26 تا 29 اکتبر 2026 برای 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 توکنی، 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 بخواه: خطی که نشان داده میشود، یک حالت برای انیمیشن و یک کنش برای کدت. شکل آن را در پرامپت هم توضیح بده.
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 هر مبدأی را میپذیرد؛ ولی هر کسی میتواند کلید را از بازی منتشرشده بیرون بکشد. آن را از سرور خودت صدا بزن و روی کلید سقف روزانه بگذار.
با Unity، Godot یا Unreal کار میکند؟
هر موتوری که بتواند یک POST از نوع HTTPS بفرستد کار میکند: API قالب chat completions از OpenAI را دارد، پس هر کتابخانهٔ کلاینت OpenAI برای زبانت، بدون تغییر و با آدرس پایهٔ ما، کار میکند.