NPC Dialogue System

LLM-Driven Game Characters

Design a service that lets game characters hold open conversations with players: in character, aware of the game world, remembering past meetings, fast enough to feel live, and never able to change game state on their own.

Overview

In most games, a non-player character (NPC) speaks from a dialogue tree: designers write every line and every branch. Players exhaust it quickly, and the character cannot answer anything the writers did not foresee. A large language model (LLM) can answer anything, in the character's voice, and can mention what the player did last week. This problem is the service that makes that work inside a game.

A game is harder than a chat app in four ways. Speed: a character who stays silent for three seconds feels broken, so replies must start almost at once. Consistency: a medieval blacksmith must not talk like a chatbot or know about events far away. Memory: the character should remember the player, but a model only knows what is in its prompt. Control: the model must never be able to hand out gold or finish a quest just because a player asked cleverly; the game server owns game state.

Questions to ask first

  • Text, voice, or both? — Text first; voice adds speech-to-text before and text-to-speech after
  • How many talk at once? — 100,000 conversations at peak, a player line every 20 seconds
  • How fast must a reply start? — First words on screen within 1 second (our target)
  • What should a character remember? — Facts and events with each player, across sessions
  • Can a character act in the game? — It may propose actions from a fixed list; the game server decides
  • Who writes characters? — Game designers, through a tool, without writing prompts by hand

What you will be able to do

  • Set a latency budget for one line of dialogue and meet it with streaming and prompt caching.
  • Build the prompt for each line from persona, knowledge limits, game state, memory and recent turns.
  • Store and retrieve a character's memories of a player, and explain the scoring.
  • Keep the model from changing game state: structured actions, validated by the game server.
  • Degrade gracefully when the model is slow, unsafe or down.

Key concepts

  • Latency budget
  • Streaming tokens
  • Prompt assembly
  • Prompt caching
  • Memory retrieval
  • Knowledge boundaries
  • Structured game actions
  • Output guardrails
  • Graceful fallback

Functional requirements

  • A player sends a line to a character and sees the reply appear as it is generated
  • Each character speaks from a persona (voice, backstory, what it knows and does not know) written by designers
  • Characters remember facts and events with each player across sessions
  • Replies reflect current game state: location, time of day, active quests, the player's standing with the character
  • Characters may propose game actions (offer a quest, open the shop, refuse to talk) from an allowed list; the game server applies or rejects them
  • Unsafe or out-of-character replies are blocked and replaced
  • When the model is slow or unavailable, the character answers with a written fallback line

Non-functional requirements

  • First words on screen within 1 second at p95, full reply within about 3 seconds (targets we chose)
  • The model can never change game state directly
  • No player can read another player's memories or conversation
  • The game keeps running if the dialogue service fails
  • Cost per line tracked and bounded; prompts kept short

Interview questions

  • How do you make a reply feel instant when the model takes seconds?
  • How does a character remember a player across sessions?
  • How do you stop the character from knowing things it should not?
  • Can the character give the player items or quests?
  • How many model calls and tokens do you need to plan for?
  • What happens when the model provider fails?
  • How do you keep characters in character over time?

Sign up free to read the full topic

More System Design topics

Start free on Cariara · Coding problems · System design studio