如何在 Godot 4 中构建带记忆和个性的 AI NPC
学习如何在 Godot 4 中利用 AI 创建能记住玩家、保持人设并动态反应的 NPC。
大多数游戏里的 NPC 都是状态机。它们沿着路线巡逻,发现玩家,切换到攻击模式,再循环回去。这套对敌人管用,但对那些本该让人觉得活生生的角色来说就撑不住了。
一个铁匠铺老板,不管你在游戏里做过什么事,都只会说那三句台词。一个任务发布者,完全不认你上周救过他的村子。一个同伴,每段对话一结束就把所有内容忘个精光。
AI 在这里改变了可能性的边界。并不是说要用聊天机器人去取代游戏设计,而是在传统 NPC 系统之上叠加记忆、个性和动态反应这些层次。
AI NPC 到底是什么
AI NPC 并不是把一个聊天机器人塞进游戏世界里。这是最常见的误解,也正是它让那些 NPC 感觉和它们所在的游戏完全脱节。
一个做得好的 AI NPC 把语言模型和游戏系统结合在一起。它具备:
- 一段人设提示词,定义它怎么说话,在意什么,以及面对不同情境时如何反应。一个粗犷的铁匠和一个紧张的学徒说话方式就不一样。
- 一套记忆系统,用来记录和玩家的互动。说过什么话,交易过什么东西,给过哪些任务、完成了哪些。
- 目标和动机,影响行为方式。商人想赚钱。卫兵想保护城镇。小偷想不被逮到。
- 对游戏世界的感知能力,这样它才能引用真实发生过的事件、物品、地点和其他角色。“我听说你把东边路上的强盗清了”这句话,只有当 NPC 能查询游戏状态时才说得通。
最终的结果是一个前后一致、记得上下文、对玩家的反应自然又扎根于游戏世界的角色。
AI NPC 的三个层次
每一个 AI NPC 都可以拆成三个清晰的层次。你可以三层都实现,也可以只从其中一到两层开始。
第 1 层:行为
这就是传统的游戏 AI。巡逻路线、反应触发器、战斗逻辑、日常作息。一棵行为树或一台状态机负责处理 NPC 在世界里的物理动作。
这一层在本地运行,不需要联网。它是确定的、可预测的。铁匠白天站在锻炉旁,晚上回家。卫兵在城墙上巡逻。商人在黎明时开店。
在 Godot 4 里,你通常会用 AnimationTree 处理状态切换,用 Area3D 节点做检测区域,再加一段脚本来管理状态机或行为树。
enum State { IDLE, WORKING, SLEEPING, TALKING }
var current_state: State = State.IDLE
var schedule: Dictionary = {
6: State.WORKING,
20: State.IDLE,
22: State.SLEEPING
}
这一层是地基。即使你再加上 AI 对话和记忆,行为层依然用一致、可靠的动作把 NPC 稳稳钉在游戏世界里。
第 2 层:对话
LLM 就是在这一层登场的。NPC 不再是从预先写好的台词里挑一句来说,而是基于自己的人设、当前的上下文以及对话历史,现场生成回复。
人设提示词是最关键的一块。它定义了这个角色的语气、知识范围和边界:
You are Tormund, a blacksmith in the village of Ashford.
You are gruff but fair. You take pride in your craft.
You charge reasonable prices and give discounts to repeat customers.
You have a side quest: you need rare ore from the northern mines
to forge a legendary blade. You will ask trusted customers for help.
You know about: village gossip, weapon quality, mining locations.
You do not know about: magic, politics, events outside Ashford.
对话层需要一个 AI 模型。可以是云端 API(OpenAI、Anthropic、Google),也可以是通过 Ollama 运行的本地模型。本地模型延迟更高,但没有持续成本,并且完全保护隐私。
一个关键的设计决策:NPC 的回复必须有边界。一个不受约束的聊天机器人会幻觉出根本不存在的地点、引用游戏里没有的物品,甚至彻底跳出人设。人设提示词配合一套把当前游戏状态注入进去的系统,能把回复牢牢拴在现实里。
第 3 层:记忆
记忆,才是把一个令人信服的 AI NPC 和一个只是新奇玩意的 NPC 区分开的东西。没有记忆,每次对话都是从零开始。NPC 完全不知道玩家是谁,也不知道之前发生过什么。
一套记忆系统会追踪:
- 互动历史:玩家说了什么,NPC 回了什么,以及何时发生。
- 关系状态:NPC 信任这个玩家吗?他们是友好、中立还是敌对?
- 关键事件:玩家给这个 NPC 做完了一个任务。玩家偷了他们的店。玩家从危险中救下了他们的孩子。
- 共享知识:玩家透露过的信息。“我在找那座失落的神殿”后来就成了 NPC 可以回头引用的东西。
记忆存储可以非常简单。一个 JSON 文件或一个 SQLite 数据库对大多数游戏来说都够用。真正关键的部分是记忆怎么被检索出来、又怎么被注入到对话上下文里。
var memories: Array[Dictionary] = []
func add_memory(event: String, importance: float) -> void:
memories.append({
"event": event,
"importance": importance,
"timestamp": Time.get_unix_time_from_system(),
})
func get_relevant_memories(context: String, limit: int = 5) -> Array:
# Sort by importance and recency, return top memories
var sorted = memories.duplicate()
sorted.sort_custom(func(a, b):
return a.importance * _recency_weight(a.timestamp) > \
b.importance * _recency_weight(b.timestamp)
)
return sorted.slice(0, limit)
当玩家和 NPC 说话时,相关的记忆会被拉出来,加到提示词里。“玩家三天前帮你找到了稀有矿石。你心怀感激,给了他折扣。”LLM 会利用这段上下文,生成一个能呼应共同经历的回复。
记忆要跨会话保存。玩家下次读档进来时,NPC 依然记得一切。这正是让 AI NPC 和脚本化 NPC 感觉截然不同的地方。
在 Summer Engine 里构建 AI NPC
Summer Engine 把这个过程变成了对话式的。你不再需要一层一层手动去连线,只要描述你想要的 NPC:
“加一个叫 Tormund 的铁匠 NPC。他粗犷但公道,价格合理,有一个支线任务,是要在北边矿场找稀有矿石。他会记得过去的交易,并给回头客打折。”
引擎会创建:
- 带 CharacterBody3D、碰撞形状和网格的 NPC 节点
- 带每日作息的行为树(白天在锻炉干活,晚上回家)
- 一套根据你的描述生成人设提示词的对话系统
- 一个记忆存储,用来记录玩家互动和交易历史
- 一个带定价逻辑、会根据关系状态调整价格的商店界面
这些组件里的任何一个,你都可以通过对话继续打磨。“让 Tormund 对陌生人更多疑”会调整人设提示词和初始关系状态。“加一个战斗反应,如果被攻击他会还击”会扩展行为树。
因为 Summer Engine 兼容 Godot 4,生成出来的系统用的是标准的 Godot 节点和 GDScript。你可以检查和修改引擎创建的任何东西。AI NPC 不是一个黑箱;它就是一堆属于你的节点、脚本和资源。
AI NPC 与脚本化 NPC 的对比
两种方式都有合理的用途。选哪种取决于你的游戏。
脚本化 NPC:
- 完全可预测。他们说的每一个字都由你掌控。
- 可以离线运行,运行时成本为零。
- 更容易做测试和 QA,因为行为是确定的。
- 扩展性好。一百个脚本化 NPC 和一个的成本差不多。
- 受限于你写的内容。玩家很快就会把对话耗尽。
AI NPC:
- 动态且有回应。每次对话都是独一无二的。
- 跨互动记住上下文。
- 可以优雅地处理意料之外的玩家输入。
- 运行时成本更高(API 调用或本地模型推理)。
- 更难测试,因为回复会有变化。
- 如果没有适当的护栏,有脱离人设或生成不当内容的风险。
对大多数游戏而言,混合方案效果最好。 用脚本化行为作为基础层:巡逻路线、战斗逻辑、日常作息以及关键剧情节点。用 AI 来做对话层和记忆层,动态回复在这两层能带来最大价值。
一个承载关键任务的 NPC,可以在关键剧情节拍上用脚本化对话,而在其他地方使用 AI 驱动的回复。玩家永远能拿到推进所需的信息,同时也有自由去提问、去和角色建立关系。
如何开始
Summer Engine 里的 RPG 模板 自带可定制的 AI NPC 系统。描述你想要的角色,引擎会把带人设、记忆和游戏世界感知能力的 NPC 一起做出来。
如果你想探索 AI NPC 的生成,可以看看 AI NPC 生成器,或者 下载 Summer Engine 来构建你的第一批 AI 角色。
Related guides
- How to Make AI in Godot 4: A Step-by-Step Guide (2026)A practical guide to building AI in Godot 4, from enemy state machines and pathfinding to LLM-driven NPCs, with copy-paste GDScript and a faster AI-assisted path.Read guide
- How to Use Cursor AI with Godot (2026 Step-by-Step Setup)A working step-by-step guide to using Cursor AI with Godot in 2026: open the project, set up the GDScript language server, add a Godot MCP server, write your first AI edit, and the runtime limit you need to know.Read guide
- The Best AI Coding Assistant for Godot in 2026 (Ranked by Real GDScript Work)Which AI coding assistant is best for Godot in 2026? An honest ranking of the assistants that write and edit GDScript and C# inside your project: Cursor, Copilot, Claude Code, Ziva, MCP, and Summer Engine.Read guide
- The Best AI for GDScript in 2026 (Honest Model and Tool Roundup)Which AI writes the best GDScript in 2026? A real comparison of the models that produce clean Godot 4 code and the tools that wire them into your project, ranked by what they actually do.Read guide