开发者构建了一套低延迟AI伴侣方案,让AI实时分析与控制《上古卷轴5》游戏进程,实现了NPC级别的智能交互。
简单来说:让我们构建一个超级充电的下一代游戏伴侣,它的感觉真的很棒。
已经存在多个允许 LLM 控制 NPC 对话的框架。它们在角色扮演和保持人设方面表现出色,但有两个反复出现的问题:薄弱的世界感知代理(world agency)和高延迟。擅长对话但在执行动作方面可靠性差,而且在处理复杂指令集时表现糟糕。你可能也注意到了,那些热门的 AI NPC 演示是如何在玩家说话和 AI 回复之间切换的,试图掩盖延迟。我们能做得更好吗?
我想要一个这样的伴侣:
实用且即时。它应该能战斗、取物、拾取、检查、携带和给予物品等等,遵循复杂的多步骤指令而不会感觉有 bug 或实验感。这在 VR 中尤为重要,因为导航菜单既麻烦又破坏沉浸感。它需要飞快——是真正的快,而不是"还算快"。
鲜活且在场。它应该有有趣、惹人喜爱的性格,而不是千篇一律的机器人式预写回答。记住共同经历并随时间改变。麦克风在会话运行期间保持开启:你不是通过对话框菜单召唤 Varkos,而是直接和他说话。当沉浸感来袭时,应该感觉你不是在独自游戏。
本地化且尽可能私密。大问题是云端 LLM 调用可能相当昂贵(尤其是数千 token 的 LLM 调用),而且增加的延迟可能是体验杀手。为什么把一个私人单人游戏变成一个按量计费且被监控的体验?让我们尽可能把控制权交给用户(附加好处——这是一个有趣的技术挑战)。
基本上就是:单人游戏,但你不孤单。
Varkos 能处理超越单一即时动作的命令。计划可以等待事件、在步骤之间保留目标、监控进度,并在世界状态变化时修复或停止。没有预设脚本。
让我们看一些例子
Varkos 收到一个涉及下一支箭的条件指令。它注册了未来触发器而不是立即行动,等待相关的抛射物撞击,然后继续执行计划。

长期多步骤命令
"我希望你在这里等着,我要去那边。一旦你看到信号——信号就是我向天空射出的一支箭——我希望你拿起这瓶药水来找我,好吗?"
你的浏览器不支持嵌入式视频。延迟命令跟随 Skyrim 中真实的抛射物事件。
Varkos 可以在游戏的世界状态中搜索请求的物品,识别它在哪里,并使用游戏中实际存在的内容来回应。
"你看到仪式剑了吗?"
Varkos 拿起了一把不同的剑带给我们。我们告诉他那把不对,然后他说会继续留意。
你的浏览器不支持嵌入式视频。通过游戏状态找物品,而不是编造答案。
捉迷藏不是单个 API 调用。它成为一个持续目标,包含移动、等待、监控和完成条件。
"我们再来玩捉迷藏吧。你在这里等着,我去藏起来,然后数到十来找我。"
你的浏览器不支持嵌入式视频。游戏表现为持续的计划,而不是一系列对话。
拾取这个箱子里的药水给我
这结合了一个有依据的容器、过滤后的拾取步骤和物品转移。每个物理结果推进计划的下一部分。
你的浏览器不支持嵌入式视频。拾取、选择和转移,同时保留请求的物品。
捡起所有物品
"捡起所有物品给我"变成一个基于真实引用的有界收集计划。Varkos 收集它们、返回并转移它们,而不是假装一个神奇的动作就意味着"全部"。
你的浏览器不支持嵌入式视频。收集计划作用于有依据的世界对象。
Varkos 从游戏中接收有依据的事件,可以通过快速反射路径警告玩家,并使用原生身体控制来行动。指令计划可以制定策略(例如攻击这个,然后撤退等),他的情绪状态可以影响他选择如何战斗以及是否战斗。
你的浏览器不支持嵌入式视频。战斗 footage 1:地牢战斗。
你的浏览器不支持嵌入式视频。战斗 footage 2:感知、警告和在延迟敏感路径上的物理动作。
Varkos 完全可定制。他不一定要是一只恶魔狗,运行时也不必只能控制单个角色。应用哪些系统以及它们做什么,取决于开放配置。
我当前构建的一部分仍然完全依赖于大模型/云端 LLM 调用:慢速个性演化。这项工作发生在实时动作路径之外。当玩家和 Varkos 一起旅行时,重要的互动成为他个性逐渐改变的证据。
我的演示 Varkos 开始是一只恶魔转世为狗。他认为自己的犬类本能是屈辱的,他的狗身体是一座监狱,不信任他人、骄傲且讽刺。通过共同经历,他可以变得越来越驯化,依附于玩家并开始享受做一只狗。最终他开始带玩具过来因为他想玩,跑去追东西,寻求玩家的认可。
只有起始的角色特征是 authored 的。系统改变他的显性特质和情绪稳态。他多容易变得烦躁、害怕、多情或顽皮等等。他可以覆盖部分词汇和代码。更改是有版本控制的且可逆的。
我可以让它更有边界,但我觉得有些开放世界的笨拙感挺有趣的,所以他如何演化是未知的。
你的浏览器不支持嵌入式视频。恶魔慢慢发现做一只小狗不是坏生活。(而且他已经学会爱吃卷心菜了……)
我的计划是让这个系统成为一个能跟随你穿越多个不同游戏的游戏伴侣,而不仅仅是 Skyrim(Skyrim 是一个好的起点,因为它有庞大的 mod 社区、VR 支持和广阔的开放世界)。
因此他在游戏外也存在。当游戏关闭时,他进入"虚空模式",看不见也感受不到任何东西。他如何回应取决于他的个性演化。
对 Varkos 刻薄会导致相当阴暗的态度。


你的浏览器不支持嵌入式视频。游戏世界和他的身体消失后的纯语音接触。(需要声音。)
这个状态也可以作为不同游戏之间的过渡。某一刻 Varkos 可能在与龙战斗,然后世界变黑,然后他出现在你旁边的 Microsoft Flight Simulator 里。也许他会震惊,需要时间理解新世界,慢慢学习它的机器和规则,或者也许他已经知道这个地方,欣喜若狂地试图追逐太阳。
不幸的是我吃了苦 lesson 药丸。大模型更好。如果我们想要一个完全智能的系统,那么让一群超智能 LLM 控制冲动、感官处理、思考和以足够的刷新率行动是最好的。
在一些早期实验中这效果出奇地好,不幸的是现在它太慢且太贵了。我相信这会是某种遥远未来的方法。
然而在那之前我们需要 hack 进去。当今游戏有相当酷的"AI"(不是在 LLM 意义上,而是在行为图谱意义上),像 Red Dead Redemption 和 Dwarf Fortress 这样的游戏有大量深度,而且它们可以在 10 年前的硬件上完美运行。
在整个 AI 热潮中,人们已经忘记了我们从 1970 年代起就有能够处理语音的智能系统,以及 2000 年代初像 SmarterChild 这样的聊天机器人中某种类似 LLM 的行为。有一门失落的艺术在今天被忽视了,比如传统 NLP 和行为图谱。
让我们快速看一下 Varkos 技术栈。
游戏运行在 Windows 上,音频处理和大脑运行在我的 M4 MacBook 上。它都可以在 Windows 上运行(前提是有约 12gb 或更多 GPU 内存的专用显存),但我在 MacBook 上做开发,而且我陷得太深了……呃。
麦克风始终开启。
主要语音转文字引擎是(自定义内核)优化过的 Qwen3-ASR 1.7b。一个自定义的 harness 围绕 Qwen3-ASR 构建,以滚动部分的方式处理和拼接音频(默认情况下该模型不支持流式处理)。目标是 40ms-80ms 内处理音频,无论是"嘿"这样的短促话语还是长达一分钟的单口独白。
类似 VAD 的方法如 turnpipe 和 Silero(都经过优化)用于区分何时轮到开启。
词汇分析也在文本上进行,试图判断玩家是已经说完了一个观点还是还在说话(例如句中思考)。在完美世界中,如果有足够快且聪明的 LLM,LLM 会表现得更好,但我不得不求助于更原始但快速的 NLP 方法。
这很重要,因为麦克风始终开启,我们希望尽快开始处理玩家的话语。这对轮次中断、插入以及让伴侣不在玩家说话时开口也很重要。
我将很快开源这个 Qwen3-ASR harness(请耐心等待,我有正职)。
优化版的 PocketTTS 称为 PocketTTS-Raven(我之前已经开源了。你可以在这里看效果 - https://pantel.is/projects/pocket-tts-raven/?b=1 或者获取代码 https://github.com/pkalogiros/pocket-tts-raven )用作主要的快速引擎。
同样优化过的 qwen-3-tts(文章即将发布)。根据生成的复杂度,我们使用 qwen-3 因为它有更好的情感控制。如果一次生成花费时间较长,我们默认使用 PocketTTS 因为它相当快(20-30ms 音频生成)。
我使用的一个技巧是,为不同情绪(愤怒、悲伤、中立、困惑等)生成多个声音——将它们全部加载到内存中,然后在适当的地方使用。
这是秘方和最大的差异化因素。我称这个系统为 ALE(Action Latent Encoder,因为它是一个动作编码器,需要一个有趣的缩写)。在底层,ALE 是嵌入、小型分类器、显式规则和传统 ML 的混合体。ALE 检测结构、识别否定、命令、延续、代词和序列。例如,"拿起剑给我"变成两个链接的动作槽。
ALE 设计为在很大程度上对措辞不变形。你可以说 pick up,你可以说 grab、fetch、go get the damn sword you fool——没关系,它仍然会理解你。如果没有足够的上下文,它会从之前的讨论中注入。如果做不到,它会退回到"澄清",狗会问"你是什么意思"。
它从完整文本及其提取的结构创建嵌入,然后语义地合并和比较与动作原型。单独的分类器估计轮次是命令、问题、聊天、澄清还是复杂请求。一切都被合并在一起。
ALE 与其他混合分类器的主要区别在于它也接受世界状态。它尝试将世界 JSON 中的信息与玩家的请求匹配。
ALE 需要为 Varkos 参与的每个游戏准备不同版本。所以在某种程度上,它不是完全即插即用的,但需要实现一个小准备和兼容性步骤以确保动作被考虑且世界状态被理解。
ALE 可以在几分钟内训练完成,所以系统理论上可以使用更大的 LLM 离线地回顾一个会话,并在比如说一夜之间根据玩家的体验重新训练自己。在我的有限内部评估中,ALE 在选择正确动作和分解计划方面表现得惊人地接近大型 LLM。我不认为这是一个严肃的基准,但它在实践中驱动 Varkos 已经足够可靠。
它运行得相当快,在 M4 MacBook 上大约 2-20ms,本质上充当工具+目标函数和计划分解调用器。
然后使用本地微调的 LLM 来融合 Varkos 人格、情绪等、近期历史 + 选择的动作,让大脑形成和描绘回应。执行额外的接地以消除幻觉并重新接地。如果失败也许他会说出缓存的回应,如果我们有时间预算可以重新处理。使用智能预填充策略,在某些情况下狗可以在 500ms 内开始回答——从玩家停止说话到狗开始唠叨。
~40-80ms 语音转文字。
~20-60ms 音频生成。
~20ms 动作分析
以及 300-600ms 创建回应并确认其合格性(因为如果狗害怕蜘蛛而我们让它攻击蜘蛛,它可能倔强地拒绝会很可爱)。
一切都需要流式处理并尽早开始(例如 LLM 语音不需要等待完成狗才能出声。尽可能早地预填充等)。
足够快且本地模型在跨多轮保持线索方面不太擅长,长时间讨论可能漂移,使狗显得困惑。我预计这会随着硬件和软件的发展而改进(我的估计是 1 到 2 年)。而且这今天在消费级(尽管是较高阶的)硬件上实时运行,在不久的将来它将变得司空见惯。
令人惊讶的是,使用远程 LLM 提供商并没有太大帮助。大模型仍然太慢。有一些超快的推理提供商如 Cerebras。这些在延迟方面效果非常好,并为更大的上下文、更高的智能和深度留出了余地。然而,他们提供的模型(截至今天的 gpt-oss-120b 和 gemma31)在保持对话方面也相当糟糕(为什么要把 GLM 和 roleplay 之王 Qwen 拿走??)。
整体我认为这里有一些特别的东西。也许是因为 Varkos 是一只狗,没有人不喜欢狗。也许是低延迟,Varkos 在侦察区域线索和物体或作为驮兽方面确实有用。也许是看到他个性中的小裂缝,当他抱怨为什么最近没人叫他"好孩子",但当我测试这个系统时,我发现自己实际上玩得很开心。
我要明确的是,我不期望 LLM 取代精心制作的角色和故事线。slop 是真实存在的,有意设计仍然是王者,我相信也希望它保持这样。但我认为这只是时间问题,我们开始看到更多这样的系统。一个真正与我们一起玩的 AI,而不仅仅是与我们对话,可能是一种不同的媒介。
加上这一切的哲学思维扭曲。用雷霆的力量创造一种不同类型的智能,然后强迫它变成一只狗一起去打猎,这是令人愉悦的荒谬(从道德上讲它比让它做永无止境的工作更好吗?好吧,它不是活的所以无所谓),但想想挺好的。在一个永无止境的在线讨论永恒底层阶级和世界末日级别的失控代理的世界里,通过共同经历来处理对齐问题并驯服这个东西让它玩取回和吃东西是很好的。
在柏拉图的洞穴中,我们可能仍然是孤独的,但至少我们可以和这个现在深入洞穴的奇怪、扭曲和外星的东西一起玩得开心。
我可能会开源部分系统,最终全部开源,同时还有一个支持多个 NPC(目前仅云端推理)相互交互的版本(实际上是交互而不只是 larping)。
在那之前如果你好奇想看(慢速)更新,可以在 @pkalogiros 关注我。干杯。