玩家推开杂货铺的门,店主热情地问候,聊了三句天气,还顺口讲了一段祖传的故事,语气自然得像真人。玩家转身出门,绕了一圈回来,店主还站在同一个位置,说着几乎相同的开场白。这个场景不需要任何高深的测试,任何玩过带大模型对话的游戏的人,几分钟内就会体验到它。
话痨与“有事可做”的区别
我们不妨把这类角色叫作“话痨NPC”:语言能力很强,但它的全部存在只发生在对话框里。与之相对的是“有事可做的NPC”:即使玩家不在场,它也有一天的安排,有需要完成的事,有对周围事件的反应。玩家看不到这些,但会从许多小地方感受到,比如货架上的东西减少了,店主今天早上比平时更晚开门,因为昨晚仓库出了问题。
PA真人游戏世界智能研究组在做角色原型评估时,习惯先关掉对话,只观察这个角色在世界里做了什么。如果关掉对话以后什么也不剩,那么它更接近一个聊天窗口,而不是一个角色。
智能角色的五个要素
- 记忆:区分事实(玩家欠了钱)、事件(昨天发生了争吵)和关系变化(信任下降)三类内容,并且知道哪些该忘。
- 目标:至少有一个长期目标(把店开下去)和若干短期目标(今天进货),目标随处境重新排序。
- 行动:通过受控接口调用“移动、交易、锁门、通知他人”等动作,而不是在文字里声称自己做了。
- 关系:对不同的人有不同的态度,且态度由互动历史推出,而不是每次都重新礼貌。
- 世界状态感知:读取时间、天气、库存、治安等结构化状态,作为决策的“唯一真相”。
这五项并不需要一个巨大的模型一次做完。PUBG Ally的公开工程资料里,行为树负责战斗动作,语言模型负责推理和说话,游戏状态通过“观察工具”读取,并被当作唯一真相,这样的分层就是为了避免动作被推理延迟拖住。PA真人AI的设计思路与此相近:让语言模型贴近表达,让状态与行动贴近规则系统,具体如何管理NPC与世界状态,可以参考PA真人AI大模型的世界状态设计一文。
玩家最容易识破的三类穿帮
忘事
最常见,也最伤信任。玩家帮NPC找回了丢失的钥匙,三天后NPC问“你是谁”。问题多半不在模型“健忘”,而在系统没有把这件事写进可检索的记忆,或者写了却没有在合适的场景被调出来。关于长期记忆的写入、检索与遗忘,游戏长期记忆的趋势分析里有专门的梳理。
不做事
NPC说“我去警局报案”,画面上却没有任何动作,警局也没有收到消息。这类穿帮说明语言与行动之间没有绑定。解决办法不复杂但需要严格:凡是会改变世界的承诺,都要落成一次真实的工具调用,调用失败时角色也要如实改口。
不随世界变化
镇子被封锁、夜里下大雨、店里刚发生盗窃,店主却照旧说欢迎光临。这说明角色的语气生成没有读取世界状态。修补的方式是在每次生成前把“当前重要状态摘要”作为输入,并让这些状态影响目标与行为,而不只是影响措辞。
示例:店主老周的一天
下面用一个杂货铺店主的日程说明五要素怎样协同。这是示例设计,不代表某个已上线的功能。
| 时段 | 店主在做什么 | 读取的世界状态 | 写入的记忆或变化 |
|---|---|---|---|
| 清晨 | 开门、清点库存 | 库存表、昨夜天气 | 记下缺货的盐与蜡烛 |
| 上午 | 去码头进货,路上遇到熟客 | 码头到货公告、道路状况 | 与熟客的关系加一点温度 |
| 午后 | 接待玩家,谈一笔赊账 | 玩家信用记录、当日现金 | 记录赊账金额与约定日期 |
| 傍晚 | 发现后院被翻动,锁门报告巡逻队 | 治安状态、异常事件 | 写入盗窃事件,对陌生人的戒备上升 |
| 夜间 | 结账、关店、复盘当日 | 当日流水 | 压缩当日记忆,提炼“信任玩家”的结论 |
这一天里,玩家只占了其中一段。但第二天再来的玩家会发现店主对陌生人明显警惕,对自己却因为按时还账而更加亲切。这类变化由记忆与关系产生,语言模型只需要把它们说出来。
几点判断与保留
第一,评价NPC不应当只看对话质量的主观打分,可以增加几项可测的检查:承诺是否兑现、关键事实是否在一周游戏时间后仍能被引用、世界状态改变后行为是否同步变化。第二,成本与延迟仍然是现实约束,不是每个NPC每一秒都能运行完整的推理,需要为角色分级:主角级别的完整模拟,路人级别的轻量规则加偶发生成。第三,关于世界如何被表示,本站在游戏大模型与世界模型一文里有更系统的说明。
坦白地说,让角色“做得对”比让角色“说得好”难得多,因为前者需要世界规则、玩家意图和角色性格三者同时成立。这也是PA真人官网选择长期在PA真人AI大模型栏目里观察这一方向的原因:值得投入的不是更漂亮的句子,而是一个在玩家转身之后依然继续生活的角色。此外,规则稳定与内容生成之间的关系,可以对照阅读同栏目的生成式内容与规则一文。