Ca sử dụng
API hội thoại NPC cho game
Gửi persona của từng NPC và trạng thái nhiệm vụ làm tin nhắn hệ thống, rồi truyền về một câu ngắn. DeepSeek V4.1 Flash Uncensored trả lời ngay, giữ đúng vai cho nhân vật phản diện và kẻ trộm, và có thể trả về JSON để game đọc. Một nghìn cuộc nói chuyện tám câu tốn khoảng $2.76.
Đã kiểm tra 29 tháng 10, 2026
Hội thoại NPC cần gì, và bạn nhận được gì
| Hội thoại NPC cần | Trên nokeep |
|---|---|
| Câu nói bắt đầu nhanh | Bật truyền trực tiếp, giữ max_tokens nhỏ, và tắt suy nghĩ, đó cũng là mặc định của DeepSeek. Kiểm tra trạng thái theo giờ, một câu hỏi ngắn được trả lời trọn vẹn, trung bình từ nửa giây đến 1.7 giây mỗi ngày với DeepSeek từ 26 đến 29 tháng 10 năm 2026; một lần gọi đơn lẻ có thể lâu hơn nhiều vào lúc đông. Trạng thái trực tiếp. |
| Nhân vật có thể tàn nhẫn | Kẻ cướp có thể đe dọa và giáo chủ có thể thuyết giảng: việc từ chối đã được loại bỏ khỏi trọng số. Chỉ các giới hạn cứng bị từ chối, với 422 và không tính phí. |
| Dữ kiện game có thể hành động | DeepSeek nhận response_format, kể cả json_schema, nên một câu thoại có thể trả về kèm tâm trạng và hành động. Đầu ra JSON. |
| Ghi nhớ người chơi | API không giữ gì giữa các lần gọi. Hãy đưa những điều NPC cần nhớ (giai đoạn nhiệm vụ, một lời xúc phạm trước đó) vào tin nhắn hệ thống; file lưu của bạn giữ chúng. |
| Chi phí theo người chơi có thể lên kế hoạch | Tín dụng trả trước, tính đến một phần triệu tín dụng. Giới hạn hằng ngày cho mỗi khóa chặn một vòng lặp chạy mất kiểm soát. |
Một nghìn cuộc nói chuyện tốn bao nhiêu
| Mô hình | Mỗi 1,000 cuộc nói, không lưu đệm | Mỗi 1,000 cuộc nói, phần mở đầu lặp lại đã lưu đệm |
|---|---|---|
| DeepSeek V4.1 Flash Uncensored | $4.88 | $2.76 |
| GLM 5.3 Flash Uncensored | $2.11 | $1.34 |
Tính từ giá hôm nay: phần mở đầu 800 token, 8 lượt mỗi lượt 25 token vào và 60 ra, lần gọi dài nhất 1,420 token. Phần suy nghĩ ngắn của GLM trước mỗi câu trả lời thêm token đầu ra mà bảng này không tính.
Với GLM, cùng một nghìn cuộc nói chuyện là khoảng $1.34 trước khi nó suy nghĩ ngắn, nhưng phần suy nghĩ đó đến trước mỗi câu, tốn thời gian mà NPC không có. Prompt persona ngắn thì rẻ dù thế nào; thứ làm tăng chi phí là bản mô tả lore dài trong mỗi lần gọi.
Một câu thoại, truyền trực tiếp
Chạy đoạn này trên máy chủ game, không phải trong client: khóa đặt trong game có thể bị lấy ra. Hiển thị từng phần khi nó đến, để bong bóng thoại đầy dần khi người chơi nhìn vào.
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)Một câu mà game có thể hành động theo
Khi câu trả lời của NPC phải thay đổi game, hãy yêu cầu JSON thay vì văn xuôi truyền trực tiếp: câu thoại để hiển thị, một tâm trạng cho hoạt ảnh, và một hành động cho mã của bạn. Hãy mô tả cấu trúc đó trong prompt luôn.
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"])Nhiều người chơi cùng lúc
- Mỗi khóa được 120 yêu cầu mỗi phút, và một tài khoản có thể giữ 10 khóa. Khi gặp 429, header
Retry-Aftercho biết nên chờ bao lâu. Giới hạn tốc độ. - Mỗi môi trường có khóa riêng với giới hạn hằng ngày: một lỗi làm vòng lặp hội thoại chạy mãi sẽ dừng ở mức trần, không phải ở số dư của bạn. Khóa và giới hạn.
- Giữ persona ngắn và cố định. Persona khoảng 1,000 token trở lên, lặp lại từ lần gọi này sang lần khác, được đọc từ bộ nhớ đệm với giá chỉ bằng một phần.
- Viết sẵn một câu dự phòng cho khi lần gọi thất bại, để lúc bận không làm đứng cảnh.
503 busykhông tốn gì.
Mô hình nào
Dùng deepseek-v4.1-flash-uncensored cho lời thoại: nó trả lời mà không suy nghĩ trước, nhận các tham số lấy mẫu và trả về JSON. glm-5.3-flash-uncensored rẻ hơn mỗi token ($0.20 vào, $0.65 ra mỗi triệu, so với $0.45 và $1.75) nhưng suy nghĩ ngắn trước mỗi câu trả lời, nên hợp với việc người chơi không phải chờ, như viết tin đồn trong thị trấn cho ngày mai. So sánh hai mô hình.
Chúng tôi giữ gì từ lời người chơi
Một dòng cho mỗi lần gọi: thời gian, khóa, mô hình, số token, tín dụng và trạng thái, giữ trong 30 ngày. Không bao giờ giữ điều người chơi gõ, không bao giờ giữ câu nói của NPC. Không có gì được thêm vào prompt persona của bạn. Chúng tôi giữ gì.
Câu hỏi
Có đủ nhanh cho hội thoại thời gian thực không?
Với bong bóng thoại và hộp thoại thì có: truyền câu thoại, giữ max_tokens quanh 120 và tắt suy nghĩ. Thời gian thay đổi theo tải; trang trạng thái hiển thị trung bình mỗi ngày. Với giọng nói đồng bộ môi, hãy bắt đầu phát giọng sau khi câu đầu tiên đến.
Nhân vật phản diện có thể chửi thề, đe dọa và nói dối không?
Có. Các mô hình viết được nhân vật đen tối mà không cần prompt bẻ khóa. Chỉ danh sách ngắn các giới hạn cứng trong điều khoản bị từ chối, với mã 422 không tốn gì.
Tôi có thể gọi từ bên trong client game không?
Được, vì API cho phép mọi nguồn gốc, nhưng bất kỳ ai cũng có thể lấy khóa ra khỏi một game đã phát hành. Hãy gọi từ máy chủ của bạn và giữ giới hạn hằng ngày cho khóa.
Có chạy được với Unity, Godot hay Unreal không?
Bất kỳ engine nào gửi được HTTPS POST đều chạy: API theo định dạng chat completions của OpenAI, nên thư viện client OpenAI cho ngôn ngữ của bạn dùng được nguyên trạng, chỉ cần trỏ về base URL của chúng tôi.