Skip to content

Unity × Agent:一次关于现实边界的系统搭建实验

让 Unity 接入 AI 的相关能力,实现一个基于 Unity 的 Agent 框架。 它需要具备理解、记忆、故事执行和回应能力——不只是回应,更是「情感化」的回应。


初始抉择:Unity 工具 vs Python 后端

起点的问题本质是两个维度的权衡:

  • 第一,智能模块是在 Unity 内部构建(C#)还是外部构建(Python 后端)?
  • 第二,是调用在线 API,还是本地部署模型?

最终选择

Python 后端 + API 模型。这不是因为其他方式不可行,而是经过大量测试后,这是唯一能快速落地的路径。

作为小公司开发者,我无法在框架开发上投入太多时间。归根结底,外部的时间和工具还没到位

Unity 的智能生态远不成熟,支持有限,很多功能只是「能跑」而已(比如 LLM Unity,光是找它的 API 文档就费了不少功夫)。本地模型方面,主流选择是 LLaMA2,但一方面性能不足,另一方面小模型输出中英文混杂,体验很差。真正做到质量、速度、成本平衡的只有 Qwen 2.5 3B,但其许可证(Qwen Research)不允许商用。限制太多。

现实是,不缺技术路径,缺的是可落地的组合。


逐项击破:从"能用"到"像人"

这个系统的目标,从来不只是对话,而是"有记忆"、"带情绪"、"像个活人"、"能选择"。

整个迭代过程,是一场持续削减延迟、压缩上下文、模拟心理模型的过程。


问题一:RAG 准确率过低

传统的文本分段 + 向量化检索(即 RAG)在本地环境中效果极差:切片难以控制语义边界,匹配召回也经常错漏。虽然这种方案的复杂度低,同时也是市面上最为常见的解决方案,但准确性不足一点使得其在游戏开发的环境中几乎不可用。

解决方案

放弃 RAG,转向结构化数据:直接使用 CSV 文件作为信息载体。Unity 将信息记录写入 CSV,Python 后端通过 AI 自主的工具调用进行搜索,检索结果直接拼接进 prompt。

这样,Agent 不再"模糊猜测",而是"明确调用,轻易得到信息"。

待优化

整体耗时来到了 7s(首 Token 2.5s),可以进一步优化。可以考虑开发一种通用的提示词,做成 CSV 与 RAG 的融合。


问题二:响应速度太慢

等待是一种用户焦虑。一定要拼尽全力减少等待。

  • 硬指标:3s 之内,第一个字必须出来
  • 软指标:像人一样交流——可以迟疑,但是我要知道你在做什么

最初版本的延迟有 3s,体验能用。大部分本地模型尝试下来响应时间普遍在 11 秒以上,尤其在需要工具调用或复杂上下文拼接时。这就直接否决了本地部署模型的尝试。

解决方案

API 流式输出 + 动态函数调用:先说话,后做事。即优先返回前几句"我明白了,我来查一下",随后在后台执行函数,拉取检索数据并且同时告诉用户我在思索些什么,再继续完整回答。

结果是延迟压缩到 最快 2 秒,常态 3 秒内,几乎消除了用户端的空等感。这个 2s 几乎是网络延迟以及 Cache 处理的所有!


问题三:情感缺失

角色说话太像机器,不像人。放在游戏中就是不像我的朋友——张飞,俺一定要报效祖国、今天不喝两碗,俺不睡!

尝试路径包括:提示词固定化与微调的 user query 变换之间的平衡:角色情绪预设、人格 Prompt 微调。

惊人效果

角色不但能在合理上下文中表现出"担忧""讽刺""温柔"等情绪,还能针对玩家的历史行为做出八卦式的调侃,比如:"上次你不是也说过要戒糖?"

情感化不再是"多用感叹号",而是具体而生动的语言选择以及在实际情况下的反问反应。

这让我不禁反思:GPT-4.5 试图通过预训练来实现情感化的方法,是否走错了方向?当然,我也不完全确定。但可以肯定的是,这种方式成本太高,而且情感化本身就是信息量很低的数据——想要一步到位,难度极大。


问题四:事件记忆不足

简单记忆系统无法追踪上下文事件链,角色始终是"失忆的 NPC"。

解决方案

基于结构化 CSV 文件。所有事件通过 Unity 的行为触发后写入 CSV,Python 后端则在需要时通过搜索读取内容,再补充到 prompt 中。

这种机制避免了上下文无节制地膨胀,也让 Agent 在需要"回忆"的时候才去"想起"玩家的历史行为,实现了低成本的记忆系统。


结语:不是因为做得到才做,而是因为做了才知道可行

这个系统不是为了炫技,也不是为了追热点,更不是为了强调个人。

只是为了看看,现实中的边界在哪里,Unity + AI Agent,到底可以做到什么程度。

答案

的确是可以做到"像人"。

不完美,但已经足够惊人。情感、记忆、理解、调侃、迟疑——这些都可以构建。而最终呈现在玩家面前的,是一个真正意义上"会活的角色"。

这不是未来,而是现在。