☰
我做了一个3D场景的 通用AI NPC认知架构:大模型提议,代码裁决(已开源)
2026/10/24 4:14:48 网站建设 项目流程

本文已开源。完整代码、架构文档与实测日志:github.com/watchsky123/cognitive-core
市面上的 AI NPC,玩过几个之后你会发现一个共同的"出戏点":它永远在等你说话。
你说,它答;你不说,它就站在那里,像一个被拔了电源的客服。它记得你说过的每一句话,却不知道自己接下来要干嘛;它能陪聊一百轮,却没有一秒钟是"它自己想做什么"。
本质上,这是聊天机器人套了一层 3D 皮——玩家的话对它来说是一个必须响应的触发器,而不是世界里发生的一件事。
我一直想做一个真正"利用 AI"的游戏:不是把大模型当客服,而是把算力花在角色的"心智"上。
过去一年,我用业余时间做出了一个目前还很简陋、但勉强能跑的系统:给 3D 虚拟人装一颗真正意义上的"大脑"。他能感知、会掂量、有自己的目标——而且最近一次实测里,我把目标系统升级成了"活的":他的心事会自己演化、自己竞争地盘,脑子里的注意力,是省着用的。
这次实测的角色,是公元前 522 年、被困在昭关的伍子胥——一个有历史原型的人。父亲伍奢被费无忌构陷下狱,王命召他兄弟入郢都,去了就是斩草除根。你扮演连夜来报信的申包胥。


他是什么样子的:一场 15 轮的真实审讯

先不讲原理,讲这次实测里的真实片段(全部有日志可查,不是挑出来的运气)。

  • 我开门就说"是我,包胥"。他没有寒暄,第一句就是反问:“你能托人碰诏狱的门,能熟昭关的险路——这线是从哪片地界牵过来的?”——对"深夜来客"的怀疑,是他的第一反应。
  • 我报情报"北门守卒全换了"。他不谢你,身体前倾、紧盯着你:“你怎会比我先探得?”——情报越重要,他越要查你的来源。这一轮他的内心台账里,"看局"这条心事悄悄推进了一环。
  • 我提"你兄长那边,我托人递了信"。踩到逆鳞了。他的表情连续四轮是怒的,台词一层压一层:“费无忌的人连我案头辩词都摸过,这线怎还没断?”
  • 我后来问了两个无关痛痒的问题:“府里酒还够吗?”"你案上读的什么简?"他两天没理你。不是卡死——日志里看得清清楚楚:他此刻的心事是救父、备逃、排查眼线,酒和简根本排不进注意力。但他的身体还在演戏:一轮低头,一轮沉思手势。沉默是有理由的,而且沉默时人还是活的。
  • 连续两轮沉默触发了保底强开。第三轮他一开口,一句话同时回收了两个悬空话题:"你不说酒的事,我倒忘了——前几日你送的那坛,还藏在马厩草堆后头。这案上的简是《太甲》,刚从太傅案头抄来的残本。"冷处理之后,账他都记着。
    15 轮下来统计:13 轮开口、2 轮有理由的沉默;29 个身体/表情行为里 86% 是模型自己出的(不是脚本),漏出时代码自动兜底,静默时走待机动作库;首字延迟中位数 2.4 秒——心事涨到 8 条,延迟红线不动。

概念层:这颗大脑是怎么想的

实现细节不在本文展开,完整代码与架构文档已开源:github.com/watchsky123/cognitive-core。这里只聊设计概念。

1. 玩家的话是"事件",不是"命令"

传统方案里,用户输入 = 触发器 = 必须生成回复。在这颗大脑里,玩家说话只是他世界里发生的一件事,地位和"门响了一声"相同。他听完后自己决定:回应、只做个动作、或者不理你。当然有保底机制防止他永远装聋,但"说不说",本质上是他的事。

2. 先掂量,再开口

他的每个回合分内外两层:内层先对这件事做评估——重要吗?有威胁吗?和我的目标有关系吗?——外层才决定怎么表达。内层的权衡永远不会被说出口。这正是他"有城府感"的来源:你能从行为里读出他想过,但你看不到他想的过程。

3. 他的目标不是常量,是活物

多数 AI NPC 的"目标"是配置文件里写死的三行字。他的目标链是活的:

  • 会长:申包胥每带来一条消息,他的相关心事就实打实地加深一分;事情做完了,心思自然转到下一步。玩到最后,他的心事和你开场见到的已经不是同一张清单。
  • 会取舍:这次实测我故意把他的心事加到 8 条。结果他像人一样——最要紧的几件摆在眼前,其余的压在心里,“另有三念在心”。惦记得多,不代表件件都挂嘴上。
  • 记得住:冷落过的话题、推进过的心思,他全都记着。上一节那句"你不说酒的事,我倒忘了"——他其实没忘。
    效果在台词里是可见的:他的注意力全程聚焦在最要紧的心事上,一次都没跑偏去聊无关琐事;压在心底的念头,又会偶尔自然冒头。焦点是取舍出来的,不是概率飘出来的。

4. 快反射,慢决策

被触摸的反应是毫秒级的本地反射,不过大脑——拍肩会缩,冒犯会躲。而"要不要原谅你"这种语义问题走慢通路,可以想上几秒。像人一样:身体比嘴快。

5. 他只知道他看到的

局部感知,不是全知上帝视角。他只知道自己感知范围内、并且注意到了的信息。这让"信息不对称"第一次成为可能——你可以瞒他,他也可以试探你。这次实测里他反复盘问申包胥"你怎会知道昭关渡口",就是信息不对称在台词里的自然生长:你给的信息越全,他越怀疑你的来路。

6. 意外比日常更抓注意力

符合他预期的事情低权重掠过;偏离预期的事情会强行抓住他的注意力,而且越意外记得越牢。他当下的心情,会直接改变"什么算意外"的门槛。

7. 世界是有语义的

房间里的物件不是 3D 模型,而是带着语义、用途、以及"他的态度"的存在。他知道酒藏在哪里、简上写的是什么、哪些新仆不能信——所以他的台词里全是这些具体的东西,而不是"我会小心"这种空话。

和斯坦福小镇比,我为什么选"轻"

做之前我认真研究过斯坦福小镇(Generative Agents)。它更有名、更完善,但它"重":25 个 agent 活在自己的心跳循环里,没人交互也在持续感知、检索、调用大模型——按原论文数据,25 个 agent 跑 2 天烧掉超过 $1,000 API 费(2023 年价格)。高算力支出明显限制了它的传播和落地。
我的架构取向相反——只在他"值得思考的时刻"花钱:

斯坦福小镇本项目
思考触发心跳循环,持续运行事件驱动,无刺激零调用
即时反射每次都过 LLM前端行为树 <50ms,0 token
记忆检索消耗 token本地嵌入模型,毫秒级零成本
目标演化每次 LLM 反思评价轮一次调用内完成,代码护栏钳制
单轮对话成本链式多次调用仅 2 次大模型调用
目标链的演化几乎不额外花钱:心事的加减和取舍全是本地代码干的活,大模型只在每轮对话里顺带捎几句"内心旁白"。这就是"8 条心事、延迟红线不动"的底气——注意力是省出来的,不是算出来的。
实测伍子胥场景 15 轮,首字中位数 2.4 秒;此前密室场景 30 轮,约四成刺激被快通路/沉默策略拦截,根本没到大模型。单 NPC 成本压到"每天几毛钱"量级。

真正的杀手锏:三个配置文件 = 一个完整故事

这套架构最值钱的地方其实不是"聪明",而是量产能力。
换一个故事需要做什么?改三个文件:

  1. 他是谁—— 性格、口癖、底线、秘密;
  2. 他在哪—— 世界背景、物件的语义、关系网;
  3. 他想要什么—— 目标链的"种子":救父、备逃、看局……初始权重和阶段。
    核心代码,零改动。注意第三条只给种子——前面说了,目标链落地之后自己长。
    我自己做过双重验证:从"温柔陪伴"场景切到"密室逃生"场景,只换这三个配置,角色的行为逻辑、试探节奏、信息披露的克制感整个变了;这次又从零搭出"伍子胥过昭关"——历史人物、历史压力、历史话语方式,照样只靠配置进组。像是同一个舞台上换了一个演员进组,而剧本是历史书。
    这意味着内容的边际成本趋近于零:写故事 ≈ 写三个文件。

这套东西未来能长成什么

它指向的是这样一个平台:
一个"故事本"平台。平台里是无数个故事本,每个故事本是一个世界——带语义道具的故事房间,一到三颗这样的"独立大脑"作为 NPC。玩家进去之后,可以和 NPC 互动、游玩、执行任务,或者干脆,重演一段历史。
旧版文章里,"历史情景重演"还只是我的想象。现在它是已交付的实测:伍子胥会审讯报信人,会因为被触碰逆鳞而连续动怒,会因为心事排不开而冷落你的闲聊——而这些全部源自三个配置文件加一颗会自己长心事的大脑。
想象一下这些故事本:

  • 历史情景重演:你站在公元前 522 年的昭关,面前的 NPC 不是在背百科词条,而是一个"活着"的、有自己立场和秘密的伍子胥。你想劝他走或留——他会掂量该不该听你的,他的心事还会因为你的话变体重排。
  • 沉浸式剧本杀:DM 不再是人力瓶颈。每个 NPC 都有自己的目标和信息边界,真·千人千面。
  • 互动叙事游戏:剧情不再是分支树穷举,而是角色根据自己的目标,自然长出来的。
    教育、文旅、游戏,三条线都有真实的预算在等"不蠢的 NPC"。而上面所有的故事本,生产成本都只是"三个文件"。

最后:它已经开源了

说直白一点。
这个项目做的是认知核——角色的心智。它不包含美术、运营,也不是游戏成品。精美的躯壳和平台化的运营,应该交给有内容、有渠道、有美术能力的团队。
所以这次不藏着——源码、架构文档、实测日志全部开源:

👉 github.com/watchsky123/cognitive-core

里面有什么:

  • 一套确定性护栏,六个功能层,两处 LLM 席位——反射、运动几何、效用、决策、表达、记忆,各层职责与实现方式在docs/ARCHITECTURE.md里写全了;
  • 两个已验收场景(伍子胥审讯 / 零输入自主行动链),换三个 YAML 就是一个新故事;
  • 全部实测证据:15 轮对话原始日志、逐轮延迟、E2E transcript,都在evidence/里,可以自己核对,不用信我说的;
  • 不需要 API Key 就能验证架构的三条命令,跑通只要几分钟;
  • 完整架构图,一屏看懂主数据流。
    已经打了第一个版本 v0.1.0,有讨论区可以提问:github.com/watchsky123/cognitive-core/discussions
    适合谁:想研究 AI NPC / 智能体架构的开发者(对照斯坦福小镇论文看另一条更轻的实现路线);想给 NPC 加记忆和自主性的独立游戏开发者;做相关毕设/课设的学生;做 AI 陪伴、互动叙事、数字人、AI 剧本杀、文旅情景重演的团队。
    关于许可:学习、教学、科研、毕设、个人 Demo 全部免费,可改可再分发。商业使用需授权,邮件2734658696@qq.com。
    如果你的 NPC"会聊天但没有灵魂",先去看看它会不会在该沉默的时候沉默——那是这个项目和套壳方案最大的区别。

评论区欢迎聊技术理念和架构取舍。代码在这里:github.com/watchsky123/cognitive-core,有问题走 Discussions,商业授权走邮箱2734658696@qq.com。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询