news 2026/4/23 19:26:31

如何在 Unity 中使用 LLM

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何在 Unity 中使用 LLM

原文:towardsdatascience.com/how-to-use-llms-in-unity-308c9c0f637c?source=collection_archive---------3-----------------------#2024-01-09

在 Unity 引擎中集成大语言模型与 LLMUnity

https://benuix.medium.com/?source=post_page---byline--308c9c0f637c--------------------------------https://towardsdatascience.com/?source=post_page---byline--308c9c0f637c-------------------------------- Antonis Makropoulos

·发布于Towards Data Science ·8 分钟阅读·2024 年 1 月 9 日

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/0df94a0bf1fe6c6416fbd5c27060b0e9.png

图片改编自Life is Strange Steam 页面,包含了游戏中的对话。

在本文中,我们将展示如何在 Unity 引擎中使用 LLM(大语言模型)🎮。我们将使用LLMUnity包,并展示如何用几行代码设置对话交互的示例!

免责声明:我是 LLMUnity 的作者。如果你有任何评论或建议,请通过打开一个GitHub issue🤗!

为什么在游戏中使用 LLM?

目前几乎所有 PC 游戏的互动都基于多选对话。这是自 PC 游戏早期时代以来建立的一种非常原始的互动方式。LLM 在游戏中的应用可以构建更具沉浸感的体验,因为它们允许与 PC 游戏元素或角色(NPC)进行智能互动。

以《上古卷轴 5:天际》为例,这是目前最成功的 RPG 之一。当你第一次遇到 Lydia 时,这位 NPC 可能会成为你游戏中的重要伙伴,你会有三种可能的对话选项。如果你想了解更多关于她的背景或讨论其他话题怎么办?

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8d1d4f4241ff69ccda616049d069b88a.png

与《上古卷轴 5:天际》中的 NPC Lydia 进行互动。截图来自游戏。

这正是 LLM 能够大显身手的地方。你可以描述 AI 的角色以及他们对世界的理解(这些内容通常是游戏叙事的一部分),并且它们可以提升对话的质量。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/36cf9f3201e12cbde430204cacd2785b.png

与 Lydia 的对话互动示例

那么 ChatGPT 呢?

访问此页面的大多数人应该对 OpenAI 发布的 ChatGPT 有一定了解,并且见证了与 LLM 的互动是多么自然和强大。那么,为什么不直接在游戏中使用 ChatGPT 呢?

欢迎使用 LLMUnity!

LLMUnity 是一个允许在 Unity 引擎中运行和分发 LLM 模型的包。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/3ea583c2f9450e8db48e31bca9d5ed9b.png

它基于强大的 llama.cpp 库构建,使得使用 LLM 不需要外部软件依赖,同时利用 llamafile 以跨平台方式部署 llama.cpp。

LLMUnity 提供以下功能:

工作原理

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/a810f2e39d21e0c9a20835e5ed5232a0.png

LLMUnity 架构

LLMUnity 在后台使用 llama.cpp 服务器。该服务器接收 POST 请求,在 LLM 上运行推理并返回回复。服务器通过 llamafile 编译为可执行文件,可以在不同操作系统(Windows、Linux、MacOS)上使用,基于 cosmopolitan 库。

LLMUnity 实现了一个客户端,发送 POST 请求并将结果传递给你的 Unity 应用程序。

如何设置

可以通过 GitHub URL 作为自定义包安装 LLMUnity,或者作为 Unity 资产(待资产商店批准)安装。详细说明请参考此处 🛠️。

开发者可以创建一个LLMLLMClient对象来使用 LLM 功能。LLMClient类仅处理客户端功能,而LLM类继承了LLMClient类,并额外处理服务器功能。

然后,开发者可以指定LLMClient/LLM属性:

另外还有LLM特有的属性:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/985354ae67566a44b03ff00e491da154.png

llama.cpp 支持的模型

除非你想弄脏双手,否则你可以简单地按“下载模型”并定义提示😌!

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/dbfe8dcc18f10859f4e1b3e784fc2986.png

在 LLM 脚本中可以参数化的不同选项

如何使用

现在让我们进入有趣的部分🎢!

LLMUnity 的编写方式是可以用最少的代码进行使用。你只需要构造一个LLM对象,然后通过以下方式与之交互:

_=llm.Chat(message,HandleReply,ReplyCompleted);

其中:

基本功能

下面展示了一个最小示例🚂。在这里,我们发送一条消息“Hello bot!”并在控制台中显示模型的回复:

using UnityEngine;using LLMUnity;publicclassMyGame:MonoBehaviour{public LLM llm;void HandleReply(string reply){Debug.Log(reply);}void Start(){_=llm.Chat("Hello bot!",HandleReply);}}

调用LLMChat函数,回复将在完成时通过 HandleReply 函数异步接收(无论是流式还是非流式的)。

要在 Unity 中创建应用程序,您需要创建一个包含以下内容的场景:

而且……就这些了 ✨!

简单交互

现在让我们看看一个展示基本交互的示例:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/b432cbc591f1476685a3167e11d47645.png

简单交互示例

这里我们有一个场景,其中包含:

SimpleInteraction脚本可以如下实现:

using UnityEngine;using LLMUnity;using UnityEngine.UI;publicclassSimpleInteraction:MonoBehaviour{public LLM llm;public InputField playerText;public Text AIText;void Start(){playerText.onSubmit.AddListener(onInputFieldSubmit);playerText.Select();}void onInputFieldSubmit(string message){playerText.interactable=false;AIText.text="...";_=llm.Chat(message,SetAIText,AIReplyComplete);}public void SetAIText(string text){AIText.text=text;}public void AIReplyComplete(){playerText.interactable=true;playerText.Select();playerText.text="";}}

脚本定义了以下函数:

就这么简单,我们就能拥有一个功能完备的 LLM 交互(功能完备,虽然不美观我知道 🙃)。你可以在 SimpleInteraction 示例 中找到这个示例。

多个 AI 功能

到目前为止,我们已经看到了与单个 AI 的交互。在实践中,游戏中会有多个 NPC 🤖。解决方案是创建如上所述的一个LLM对象来处理服务器,但还需要额外的LLMClient对象,使用不同的提示词为 AI 定义额外的行为。

展示此功能的示例可以在 ServerClient 示例 中找到。这是上面代码的扩展,使用一个LLM对象作为第一个 AI,并使用带有不同提示词的LLMClient对象作为第二个 AI(与第一个 AI 使用相同的服务器)。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/87a99c2753883f8c8cd96f75bc7f2a33.png

多个 AI 功能

聊天机器人

创建更具游戏性元素的最终步骤是根据你希望在游戏中拥有的方式来增强 UI 方面的设计🏰。这里不再详细讨论,因为这超出了 LLM 集成的范围。如果你对更复杂的 UI 感兴趣,可以查看聊天机器人示例,它创建了一个类似于消息应用程序的更愉悦的互动体验。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/aeefb617616d1b50f95b84def8f3efe4.png

一种消息应用程序风格的互动

结束

就是这样!在本指南中,我们了解了如何使用 LLMUnity 包将 LLM 集成到 Unity 中,并提供了一些实际示例。希望你觉得有用!如果你有任何问题/评论/建议,欢迎随时告诉我,以帮助改进本文或 LLMUnity 包🙏。

注:除非另有说明,所有图片均由作者创建。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:11:36

SSH隧道转发实现安全访问远程Jupyter服务

SSH隧道转发实现安全访问远程Jupyter服务 在深度学习和人工智能开发中,越来越多的团队与个人选择将计算密集型任务部署在配备高性能 GPU 的远程服务器上。然而,如何安全、便捷地访问这些资源,尤其是在使用交互式工具如 Jupyter Notebook 时&a…

作者头像 李华
网站建设 2026/4/23 12:10:30

如何在PyTorch-CUDA-v2.8中使用wandb记录训练指标?

如何在 PyTorch-CUDA-v2.8 中使用 wandb 记录训练指标? 在深度学习项目中,一个常见的尴尬场景是:你启动了一个长达数小时的训练任务,却只能靠打印 loss 值来“盲猜”模型是否收敛。等训练结束一看结果,才发现早早就过…

作者头像 李华
网站建设 2026/4/23 13:33:36

Anaconda环境下切换不同CUDA版本运行多个PyTorch项目

Anaconda环境下切换不同CUDA版本运行多个PyTorch项目 在深度学习开发中,一个常见的痛点是:你刚接手的旧项目依赖 PyTorch 1.12 和 CUDA 11.6,而新实验又想用上 PyTorch 2.8 的最新特性。如果直接升级全局环境,老项目可能瞬间“罢…

作者头像 李华
网站建设 2026/4/23 12:11:41

同或门真值表到FPGA烧录的全过程解析

从同或门到FPGA:一次完整的数字逻辑实战之旅你有没有试过,只用两个开关和一个LED,就能验证整个数字世界的“相等”逻辑?这听起来像是某种极客玩具,但实际上,它正是我们每天使用的计算机、通信系统乃至人工智…

作者头像 李华
网站建设 2026/4/23 10:43:51

diskinfo批量查询多台GPU服务器磁盘状态

diskinfo批量查询多台GPU服务器磁盘状态 在AI训练集群规模不断扩大的今天,一次模型训练动辄持续数天甚至数周,任何硬件异常都可能造成不可估量的时间与算力损失。我们曾遇到这样一个案例:某团队在A100服务器上训练大语言模型,第14…

作者头像 李华