3作者: mavdol043 个月前原帖
嘿!我构建了这个系统,通过使用Rust和机器学习来赋予NPC情感,使其更具人性化。<p>该系统根据文本输入或动作提供情感坐标(基于拉塞尔的圆周模型),并为每个实体提供持久的情感记忆。想象一下,NPC能够记住他们对特定玩家或事件的感受。<p>我在大约1000个视频游戏对话(如《上古卷轴:天际》、《赛博朋克》等)上预训练了一个DistilBERT模型,并计划很快提取和评估超过10万个对话。不过,工作室/团队可以手动添加对话,以丰富他们自己的数据集。<p>这个矩阵并不生成对话,它只是分析内容。当你传入文本或动作时,它会返回在愉悦度(愉快/不愉快)和唤醒度(精力充沛/平静)尺度上的情感坐标。<p>例如:<p>- [0.00, 0.00] = 中立<p>- [0.29, 0.80] = 兴奋<p>- [-0.50, -0.30] = 悲伤/疲惫<p>我在这里制作了一个快速可视化工具,以帮助理解 <a href="https://valence-arousal-visualizer.vercel.app/" rel="nofollow">https://valence-arousal-visualizer.vercel.app/</a><p>该系统根据情感状态帮助选择要播放的对话/动作:<p>- 玩家对NPC说了一些不好的话 → 系统检测到负面愉悦度 → 游戏从“愤怒对话池”中选择<p>- NPC记得过去的积极互动 → 系统返回正面愉悦度 → 可用更友好的回应<p>因此,开发者仍然编写对话或选择下一个动作,但这个矩阵有助于动态管理NPC的情感状态和记忆。<p>以下是项目结构,以便更好地理解其工作原理:<p>- src/config: NPC配置设置的辅助工具<p>- src/module: 核心引擎,包含情感预测、记忆存储和实体管理<p>- src/api: FFI层,使用pub extern "C"将我们的模块与C/C++游戏引擎和修改工具(如Unity、Unreal等)连接起来<p>要实现它,只需调用`build.sh`,它将创建DLL文件,你可以在C++/C/C#中直接调用矩阵函数。<p>我很想听听关于代码质量和整体架构的反馈。<p>欢迎诚实地分享好的、坏的和丑陋的方面。如果你想贡献代码,欢迎提交PR!