LLMUnity:在Unity 3D中使用大模型

news2024/10/9 15:36:45

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

免责声明:我是 LLMUnity 的作者。如果您有任何意见/建议,请通过打开 GitHub 问题告诉我🤗!

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 

1、为什么在游戏中使用 LLM?

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

以 Skyrim 为例,它是目前最成功的 RPG 之一。当您第一次遇到 Lydia 时,您可能会作为同伴一起度过大部分游戏时间的 NPC,您有三种可能的对话选项。如果您想了解更多关于她的事情或讨论其他事情怎么办?

与《天际》中的 NPC Lydia 互动。游戏截图

这就是 LLM 可以大放异彩的地方。您可以描述 AI 的角色及其对世界的了解(您已经将其作为游戏叙事的一部分),他们可以提升对话的水平。

与 Lydia 互动的对话示例

2、ChatGPT 怎么样?

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

  • 大规模使用 ChatGPT 需要付出代价 💸 。每次互动的成本都很小,但大规模使用时,对于成千上万的用户,每次互动都有成千上万次,成本不容忽视。
  • 它会产生依赖关系 🔗。如果由于任何原因 ChatGPT 停止工作或价格上涨,开发人员无法再负担得起,游戏就会崩溃。
  • 开源 LLM 的准确度与 ChatGPT 相当 🏎️。我还没有找到标准化的基准来证明这一点,但 Meta (Llama) 和 Mistral 发布的模型似乎在质量上与 ChatGPT 具有相似的准确度。
  • LLM 的尺寸越来越小 🤏。最新的 Mistral 7B 在许多基准测试中击败了 Llama2 13B,并优于 Llama 34B。量化方法通过将模型大小减小到可以在任何最新的 PC 和 GPU 上使用的程度,进一步突破了这一限制。使用 Q4_K_M 方法(模型、量化)量化的 Mistral 7B 最多需要 7GB RAM 才能运行!

3、欢迎使用 LLMUnity!

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

它建立在出色的 llama.cpp 库之上,该库允许使用没有外部软件依赖项的 LLM,以及以跨平台方式部署 llama.cpp 的 llamafile。

LLMUnity 提供以下功能:

  • 💻 跨平台!支持 Windows、Linux 和 macOS
  • 🏠 无需互联网访问即可在本地运行,但也支持远程服务器
  • ⚡ 在 CPU 和 GPU 上快速推理
  • 🤗 支持主要的 LLM 模型
  • 🔧 易于设置,只需一行代码即可调用
  • 💰 可免费用于个人和商业用途

3.1 工作原理

LLMUnity 架构

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

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

3.2 如何设置

LLMUnity 包可以使用 GitHub URL 作为自定义包安装,也可以作为 Unity 资源安装(等待资源商店批准)。说明在此处提供 🛠️。

开发人员可以创建 LLM 或 LLMClient 对象以使用 LLM 功能。LLMClient 类仅处理客户端功能,而 LLM 类继承 LLMClient 类并另外处理服务器功能。

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

  • 提示。这指定了 AI 的角色。
  • 玩家/AI 名称(可选)。可以为角色定义玩家和 AI 名称。
  • 流媒体功能(可选)。流媒体功能允许 Unity 应用程序实时接收模型生成的输出。如果禁用,Unity 应用程序将在模型完全生成时收到模型的回复。
  • 其他模型选项(可选)。还有更多模型选项可以由专家用户指定,直接由 llama.cpp 服务器使用。

以及仅 LLM 的属性:

  • 模型。这指定要使用哪个 LLM。TheBloke 量化的 Mistral 7B Instruct v0.2 模型可以直接在 Unity Inspector 中下载为默认模型。否则,可以加载 llama.cpp 支持的任何 LLM。llama.cpp 使用 gguf 格式并为 HuggingFace 模型提供转换脚本。如果您想避免安装 llama.cpp 并自行进行转换,您可以使用 TheBloke 💣 已经转换的模型。

llama.cpp 支持的模型

  • 运行资源(可选)。您可以指定用户应用程序可以使用的 CPU 线程数和/或 GPU 将运行的模型层数。如果不支持用户的 GPU,则将改用 CPU。

除非您想亲自动手,否则只需按“下载模型”并定义提示 😌!

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

4、如何使用LLMUnity

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

LLMUnity 的编写方式使得它可以用最少的代码使用。您所要做的就是构造一个 LLM 对象,然后使用以下方式与其交互:

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

其中:

  • message:包含用户输入的字符串对象
  • HandleReply:以字符串类型作为模型回复输入的方法。在此函数中,您可以指定如何处理回复。如果启用了流式传输功能(默认行为),则此函数将在模型生成时接收实时回复,否则将一次性接收整个回复。
  • ReplyCompleted(可选):没有参数的方法。当模型完成回复生成时,将调用此函数。

4.1 基本功能

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

using UnityEngine;
using LLMUnity;

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

当 HandleReply 函数完成(以流式或非流式方式)时,将调用 LLM 的 Chat 函数并异步接收回复。

要在 Unity 中创建应用程序,您需要创建一个场景,其中包含:

  • LLM 脚本的 GameObject。LLM 对象的属性在 Unity Inspector 中公开,可以按照上一节所述进行设置。
  • MyGame 脚本的 GameObject。在这里,您将在 Unity Inspector 中的 llm 属性中链接上面创建的 LLM GameObject。

就这样 ✨!

4.2 简单交互

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

简单交互示例

下面是一个场景:

  • LLM 脚本的 GameObject(与之前一样)
  • SimpleInteraction 脚本的 GameObject
  • 允许用户输入文本的 InputField(绿色)
  • 从模型获取回复的 Text 字段(蓝色)

SimpleInteraction 脚本可以按如下方式实现:

using UnityEngine;
using LLMUnity;
using UnityEngine.UI;

public class SimpleInteraction : 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 = "";
    }
}

该脚本定义了以下函数:

  • Start:场景开始时选择 playerText 输入字段,以便用户可以输入文本。playerText 上附加了一个侦听器,在提交文本时调用 onInputFieldSubmit 函数。
  • onInputFieldSubmit:当用户提交输入时,playerText 被禁用,直到模型回复。模型输出字段 AIText 被清空,然后调用 LLM 聊天函数。
  • SetAIText:当模型产生一些回复并将 AIText 文本设置为回复内容时调用此函数。
  • AIReplyComplete:当模型完成回复时调用此函数。playerText 再次被启用并清空,以便玩家可以输入下一个输入。

就这么简单,我们可以拥有成熟的 LLM 交互(我知道是成熟的,并不漂亮 🙃)。您可以在 SimpleInteraction 示例中找到此示例。

4.3 多个 AI 功能

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

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

多种 AI 功能

4.4 聊天机器人

创建更像游戏的东西的最后一步是增强 UI 方面,就像您希望它们在游戏中一样🏰。我不会在这里详细介绍,因为它超出了 LLM 集成范围。如果您对更复杂的 UI 感兴趣,您可以查看 ChatBot 示例,它可以创建类似于消息应用程序的更令人愉悦的交互。

消息应用程序风格的交互

5、结束语

就这些!在本指南中,我们了解了如何使用 LLMUnity 包将 LLM 集成到 Unity 中,并提供了几个实际示例。希望您觉得它有用!如果您有任何问题/意见/建议,请随时向我发送,以改进本文或 LLMUnity 包🙏。


原文链接:在Unity中使用大模型 - BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2199391.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32通用定时器TIM3的PWM输出实验配置步骤

通用定时器 PWM 输出实验 本小节我们来学习使用通用定时器的 PWM 输出模式。 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。我们可以让定时…

Linux 命令 netstat 的 10 个基本用法

Netstat 简介 Netstat 是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字。如果你想确认系统上的 Web 服务有没有起来…

(RAG)技术结合了大模型(LLM)与内部数据,从而实现更智能且相关性更高的 AI 应用

利用先进的生成式 AI 技术(如 RAG),释放数据的潜力,推动创新并获取战略优势 主要功能 使用向量数据库优化数据检索和生成 通过 AI 代理提升决策效率并自动化工作流程 克服实施真实 RAG 系统中的常见挑战 购买印刷版或 Kindle …

【C++】速通涉及 “vector” 的经典OJ编程题

【C】速通涉及 “vector” 的经典OJ编程题 一. 杨辉三角解题思路:代码实现: 二. 删除有序数组中的重复项解题思路:代码实现:【C/C】按位运算符使用规制 三. 只出现一次的数字解题思路:代码实现: 四. 只出现…

【D3.js in Action 3 精译_031】3.5.2 DIY实战:在 Observable 平台实现带数据标签的 D3 条形图并改造单元测试模块

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可…

PyQt5界面美化教程:一键切换四种风格

PyQt5界面美化教程:一键切换四种风格 关于作者 作者:小白熊 作者简介:精通python、matlab、c#语言,擅长机器学习,深度学习,机器视觉,目标检测,图像分类,姿态识别&#x…

【可答疑】基于51单片机的PWM控制智能台灯设计(含仿真、代码、报告、演示视频等)

✨哈喽大家好,这里是每天一杯冰美式oh,985电子本硕,大厂嵌入式在职0.3年,业余时间做做单片机小项目,有需要也可以提供就业指导(免费)~ 🐱‍🐉这是51单片机毕业设计100篇…

vue 同一个页面第二次跳转路由内容不更新

问题出现原因 在vue中相同路由之间跳转,默认在跳转路由时会采用缓存策略,并不会刷新当前路由组件。导致mounted(初始化),beforeDestory(销毁)等生命周期钩子函数并不会触发,从而产生路由跳转了,…

一文读懂Spring AOP的工作原理和机制(面试经)

导览 前言AOP(Aspect-Oriented Programming)必学必看1. 核心概念2. 主要原理3. 实践应用3.1 添加maven依赖3.2 定义切面Aspect3.3 定义Methods (join point) 切入点 结语精彩回顾 前言 在上文中,博主介绍了Spring IoC的核心原理和用法,相信你可以通过文…

Aria2Cloudreve任意文件写入到RCE

什么是Aria2 Aria2 是一个轻量级的命令行下载工具,支持多种下载协议,如 HTTP、FTP、SFTP、BitTorrent 和 Metalink。它以其强大的多源下载能力而著称,可以同时从多个服务器或对等节点下载文件,加快下载速度。Aria2 占用资源少&am…

UE4 材质学习笔记05(凹凸偏移和视差映射/纹理压缩设置)

一.凹凸偏移和视差映射 1.偏移映射 这需要一个高度图并且它的分辨率很低,只有256*256,事实上,如果高度图的分辨率比较低并且有点模糊,效果反而会更好 然后将高度图输出到BumpOffset节点的height插槽中, 之后利用得到…

JVM 内存模型与垃圾回收过程详解

JVM 内存模型与垃圾回收过程详解 文章目录 JVM 内存模型与垃圾回收过程详解1. JVM内存分区1.1 具体分区1.2 JVM内存分区的必要性 2. 垃圾回收2.1 CMS垃圾回收器2.2 G1垃圾回收器2.3 JVM垃圾回收从新生代到老年代 1. JVM内存分区 1.1 具体分区 Java虚拟机(JVM&#…

YOLOv10改进策略【注意力机制篇】| 蒙特卡罗注意力(MCAttn)模块,提高小目标的关注度

一、本文介绍 本文记录的是基于蒙特卡罗注意力(MCAttn)模块的YOLOv10目标检测改进方法研究。利用蒙特卡罗注意力(MCAttn)模块提高RepNCSPELAN4模块的跨尺度特征提取能力,使模型能够更好地传递和融合提取的多尺度特征&…

<Rust>iced库(0.13.1)学习之部件(三十二):使用markdown部件来编辑md文档

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 注:新版本已更新为0.13 概述 这是本专栏的第三十二篇,主要介绍一…

Matlab实现海鸥优化算法优化回声状态网络模型 (SOA-ESN)(附源码)

目录 1.内容介绍 2部分代码 3.实验结果 4.内容获取 1内容介绍 海鸥优化算法(Seagull Optimization Algorithm, SOA)是一种受海鸥觅食和飞行行为启发的群体智能优化算法。SOA通过模拟海鸥在空中搜寻食物、聚集和分散的行为模式,来探索和开发…

免费ppt模板从哪找?一文看这里

国庆假期结束,回工作岗位的你是不是正忙着准备汇报材料?别担心,一份精美的PPT能为你的工作汇报增色不少。 而一个吸引人的PPT背景模板,更是能让你的演示脱颖而出。 为了帮助你们快速找到高质量免费ppt模板背景,以下特…

C++:string(题目篇)

文章目录 前言一、字符串相加二、仅仅反转字母三、字符串中的第一个唯一字符四、字符串最后一个单词的长度五、检查字符串是否是回文六、反转字符串 II七、反转字符串中的单词 III八、字符串相乘总结 前言 学习了string后,我们来学习对应的习题。 一、字符串相加 …

SWIFT Payment

SWIFT stands for Society for Worldwide Interbank Financial Telecommunication SWIFT——环球银行金融电信协会 SWIFT Payment Useful Link ISO 20022https://www.iso20022.org/https://www.swift.com/standards/iso-20022MT and MX Equivalence Tableshttps://www2.swift…

Python验证码识别——前处理

目前不少系统的验证码做得越来越复杂,人眼都难以识别,尤其是QQ之类的验证码,想要识别,太难了。 现在有这样一个验证码: 一般的验证码识别,都是先进行前处理,然后分割,在进行识别。这…

Keysight 是德 EXR608A 实时示波器

Keysight 是德EXR608A 实时示波器 EXR608A、EXR604A EXR408A、EXR404A EXR258A、EXR254A EXR208A、EXR204A EXR108A、EXR104A EXR058A、EXR054A EXR608A Infiniium EXR 系列示波器:6 GHz,8 通道 全部 8 个通道均可提供 6 GHz 的带宽,…