PP电子娱乐成立2年融资近9亿AI NPC引爆游戏行业巨变微软等大厂已经入局游戏行业真在加速拥抱大语言模型等AI技术,不论是大厂还是独立游戏制作人,都开始依靠LLM的技术创立全新的AI NPC体验。
因为大语言模型本身可解释性低,内容受到幻觉影响,很多专业度很高的行业,要真正用上大模型的能力,也许还有一段距离。
最近,微软宣布与AI初创公司inworld达成合作,一同开发Xbox工具,让游戏开发者能够创建由AI驱动的角色、故事和任务。
微软与inworld签订了一个持续多年的合作伙伴关系,将包括共同开发一个「AI 设计副驾驶」系统,Xbox开发人员可以使用该系统创建详细的脚本、对话树、任务线等。
根据微软官方的说法,nworld在使用生成式AI模型进行角色开发方面的专业知识、微软尖端的基于云的 AI 解决方案(包括 Azure OpenAI 服务)、微软研究院对未来游戏的技术见解,以及Team Xbox的游戏制作和发行方面的经验,为所有开发人员提供负责任的创建者工具。
合作目标是共同提供一个易于使用的多平台人工智能工具集,以协助和授权创作者进行对话、故事和任务设计。该工具集将包括:
AI游戏设计Copilot,可协助游戏设计师探索更多创意,将提示转化为详细的脚本、对话树、任务等。
集成到游戏客户端中的AI角色引擎,通过动态生成的故事、任务和对话来实现全新的故事和剧情,供玩家体验。
inworld作为一家由前谷歌员工成立的初创公司,已经为很多大型游戏公司提供了AI生成的NPC和故事线的解决方案。
公司成立两年多的时间,融资超过一亿两千万美元,已经和网易,迪士尼等游戏和动画行业的大厂完成了合作。
由NetEase旗下的工作室推出的Cygnus Enterprises, 就利用了inworld推出的AI NPC的功能,创制出来的AI伴侣不仅可以为玩家提供一个有趣的角色,让他们在收集资源时与之交谈,还可以在玩家通过语音命令要求 AI 同伴收集资源时,指示他们为玩家收集资源。
在2022年底推出了一款利用GPT-3来生成游戏NPC对话内容的工具,成为了OpenAI的官方宣传案例。
随后,Inworld推出了名为「角色引擎」的产品,专门帮助游戏开发人员创立个性化的AI NPC。
AI NPC 可以学习和适应,利用情商处理关系,具有记忆力和回忆能力,并且能够自主启动目标、执行行动并遵循自己的动机。
使用定义的触发器、意图识别和动机来触发角色对玩家行为的反应并驱动游戏中的交互。「角色引擎」的目标和行动功能让用户驱动NPC行为,以动态和自定义的方式响应玩家的输入PP电子最新。
角色通过从闪存和长期记忆中检索信息,以类似人类的记忆功能进行操作,从而创造出玩家返回的引人入胜的体验。
Inworld通过编排30多个机器学习模型来支持多模式角色表达,这些模型旨在模仿全方位的人类交流,包括语音变化和语调、面部表情和肢体语言等非语言线索。
世界中的角色能够根据与用户的互动来表达情感。情绪可以映射到动画、目标和触发器之上,呈现出性格丰富而真实的NPC。
「角色引擎」可以使用内置语音设置以最小化延迟,并配置角色的性别、年龄、音调和说话速度。或者,使用类似像「ElevenLabs」这样的第三方服务来创建自定义和复刻声音。
而大部分像「角色引擎」这种使用生成式AI提供AI NPC功能的工具,都可以使用几乎免费或者开源的技术替代。
最近,开发者Joe Gibbs,分享了自己在自己的电脑上自己通过开源大模型搭建智能NPC的本地框架:
起初,他将llama.cpp作为动态链接库(DLL)集成到了Unreal中,但过程并不顺利。于是,他转而构建了一个用Node.js脚本实现的解决方案。
至于语音部分,则使用mrfakename提供的StyleTTS2演示版Docker容器镜像,并通过Gradio的API接口与之进行交互。理想情况下,如果不必依赖Docker容器会更好,但我没能在我自己的电脑上直接运行 StyleTTS2 模型。
在Unreal中,通过调用FInteractiveProcess类来执行Node脚本。这个脚本将先前的对话历史作为命令行参数传入,然后逐句输出NPC的对话内容。为了提升性能,可以不等整个对话生成完毕,边播放当前句子边生成并发声下一句。
输出一个JSON对象,包含字幕所需的文本和相应音频文件的位置信息,Unreal会解析成结构体后进行播放。
性能方面意外地出色。生成新句子时会略微卡顿,但影响不大。StyleTTS2需要使用14GB的RAM,而Llama服务器需要3GB,因此运行它需要较大的内存空间。
生成新句子大约需要2-3秒。或许可以在生成句子期间播放一些动画,以减少等待时的不适感,但现状已经相当不错了。
如果搭配使用Whisper,可以在生成回应时稍微延迟玩家语音转录显示在屏幕上的速度,这种体验用户在使用Siri等服务时已经比较熟悉了。
容易跑题,而且还是会有幻觉问题的存在。例如,在一个测试中,它指引玩家前往几英里外的村庄,尽管玩家实际上已经处于那个村庄之中。
同样地,在视频中可以看到,它知道玩家名为John,这个信息实际上并未在对话中被提及,它还提到了Angers这个要在数百年之后才出现的地名。
此外,它对于游戏世界里可能发生和不可能发生的事情也缺乏现实感。比如,在演示视频中展示的训练村民的任务,实际上是不可能完成的,因为游戏内根本没有相关的机制支持。
StyleTTS2的语音合成效果也不够自然,仍然带有些许机械感。对于它不熟悉的单词,它的发音也不太准确,或者会根据上下文错误地发音。
目前,这只是一个初步的概念实验框架,如果要在本地良好的运行这个框架,还有许多方面可以进行优化。
- 首先,可以尝试将llama.cpp 作为动态链接库 (DLL) 集成到Unreal引擎中。这样可以避免使用Node.js脚本,从而大大简化游戏的分发流程。
- Mistral有时会跑题,因此最好针对游戏的背景进行调整。比如,目前似乎无法通过设定来完全避免它产生不符合时代背景的表述,当一个设定在12世纪的角色突然能解释如何使用AWS时,这会让玩家感到很出戏。
- 此外,调整算法这样能在文本输出中标注情感也是一个可能的选项。通过使用StyleTTS2,可以传入语音克隆的片段,这样只需让配音演员用不同的情感朗读一个句子,就可以根据这个特定的样本来生成语音。
- 还有一些其他的方法值得探索,比如StyleTTS2能与Unreal引擎更紧密地结合。如果能摆脱对特定Python版本和特定Python包的依赖,那将大有裨益。
在技术展示的其他方面,还有一些间接相关的改进措施。例如,NPC在对话时嘴唇不会动。可以使用类似于audio2face的技术来解决这个问题,而且不会对游戏性能产生太大的影响。
此外,还可以让大语言模型(LLM)通过返回包含动画指令的JSON数据,来控制 NPC的肢体动作,从而使得对话更加生动。
该数据库将储存关于玩家、NPC(包括他们的背景故事和目标)、世界等方面的信息,以此作为对话的基础。
系统会创建一个详尽的文件,记录玩家的所有任务历史(NPC 所知道的部分)、玩家身上的装备、当前天气、NPC 与其他 NPC 的互动、以及与玩家的聊天记录(包括日期、时间等,方便推测玩家提到的是过去的某个事件),接着在提交给大语言模型 (LLM) 前,对这份文件进行自然语言的查询分析。
可能会导致像《上古卷轴》中那样重复的任务,简单的重复「去某地做某事」是很难被游戏玩家接受的。
行业还需要精确训练的大语言模型,专注于其擅长的领域,并拒绝执行超出能力范围的任务。可以给它设定一个能力列表(如给予物品、取走物品、开始任务等),并让它拒绝执行列表之外的操作。
不过这篇分享的重点是展示如何在本地完整运行一个AI NPC角色框架,现在来看实现这目标并不复杂。