news 2026/9/2 21:01:52

如何在 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/8/26 8:24:34

清华镜像站使用指南:全面加速PyTorch生态安装

清华镜像站使用指南:全面加速PyTorch生态安装 在人工智能项目开发中,最让人头疼的往往不是模型设计或调参,而是环境配置——尤其是当你面对 pip install torch 卡住半小时、CUDA 版本不匹配导致 torch.cuda.is_available() 返回 False 的时候…

作者头像 李华
网站建设 2026/8/25 10:13:14

PyTorch-CUDA镜像支持Knowledge Graph Embedding吗?

PyTorch-CUDA镜像支持Knowledge Graph Embedding吗? 在当今知识密集型AI应用的浪潮中,如何高效地从海量结构化数据中提取语义关系,已成为自然语言处理与智能推理系统的核心挑战。知识图谱(Knowledge Graph, KG)作为组…

作者头像 李华
网站建设 2026/8/26 5:38:48

GitHub Insights分析PyTorch项目流量趋势

GitHub Insights 视角下的 PyTorch-CUDA 镜像使用趋势与技术实践 在深度学习项目日益复杂、算力需求持续攀升的今天,一个稳定、高效且可复现的开发环境几乎决定了整个研发流程的成败。你有没有经历过这样的场景:好不容易写完模型代码,一运行…

作者头像 李华
网站建设 2026/8/25 21:06:57

CUDA out of memory错误排查与镜像资源配置建议

CUDA out of memory错误排查与镜像资源配置建议 在现代深度学习开发中,一个看似简单的训练脚本突然抛出 RuntimeError: CUDA out of memory,可能直接打断连续数小时的实验进程。这种“显存爆炸”现象不仅令人沮丧,还常常让开发者陷入“到底是…

作者头像 李华
网站建设 2026/8/25 19:00:54

Git Show显示提交详情:查阅PyTorch代码变更记录

Git Show 显示提交详情:深入解析 PyTorch 代码变更与环境复现 在深度学习项目日益复杂的今天,一个常见的困扰是:同样的模型代码,在不同环境中训练结果却不一致。你可能在一个实验室的服务器上跑得完美收敛,但换到另一台…

作者头像 李华