LLMR//https://github.com/microsoft/llmr?locale=zh-cn
https://github.com/microsoft/llmr?locale=zh-cn
Introduction
这个 repo 包含 LLMR 中描述的代码,实现了混合现实框架的大型语言模型。
此软件包是“用语言创造世界”的原型,它允许通过自然语言实时创建具有视觉、行为和交互元素的对象、工具和场景。我们的框架将基于提示的生成与 Unity 相结合,使用户能够在运行时自发创建,这是 VR 自诞生以来的核心元素。该软件包附带几个演示场景供您尝试:一个空的游乐场,您可以在其中单独创建对象,以及让 Dall-E 和 CLIP 参与其中以查找在视觉和文本上与您的提示相似的 3D 模型的场景。
Example use cases:
1-对象创建:您可以使用 Unity 基元或 Sketchfab(3D 模型在线存储库)中的模型创建对象。例如,您可以让 GPT 使用 Unity 基元创建一辆汽车。
2-行为编程:您可以为对象赋予属性,以便用它们制作工具。例如,您可以用旋转立方体创建一个计时器,当倒计时达到 0 时,该计时器会停止移动。
3-场景编辑:您可以在运行时以创造性或有用的方式修改现有场景,例如更改各种物体的颜色以适合色盲人士。
Installation
Setting up a Unity Project
该项目已在 Unity 版本 2021.3.25f1 和 2022.3.11f1 上进行了测试,并且具有多个依赖项。其中最大的依赖项是 Roslyn C# 编译器。对于这个项目,我们使用了 Trivial Interactive 的实现,您必须在 Unity Asset store C# Compiler 上购买它。这个项目可以调整为依赖于 C# 的开源实现,但需要进一步实现将编译后的代码附加到此实现附带的 GameObjects。因此,要使这个项目正常运行,您需要向其中添加编译器。
添加编译器后,项目应该就可以正常使用了。请注意,LLM 生成的代码的运行时编译依赖于预加载的程序集 DLL,我们将其附加在 Assemblies 文件夹中。要让这些在应用程序中注册,您需要在 Trivial Interactive 包的帮助下创建程序集引用资产。
如果您想将此功能添加到现有项目中,则需要将所有元素导出为包(包括编译器),然后按照以下步骤操作。
- opy over the Assemblies folder to the root directory of your Unity project.
- For reference, it should be on the same level as the Asset folder.
- Copy over lines 3-4 in the manifest.json file
"com.siccity.gltfutility": "https://github.com/siccity/gltfutility.git",
"com.openai.unity": "4.3.0",
并将它们附加到 Unity 项目根目录中 Packages 文件夹下同名文件中的依赖项字段下。
Also copy over lines 48-59
,
"scopedRegistries": [
{
"name": "OpenUPM",
"url": "https://package.openupm.com",
"scopes": [
"com.openai",
"com.utilities",
"com.atteneder"
]
}
]
并将它们作为依赖项之后的新字段附加。
打开 Unity 项目。在您想要导入的 Unity 项目中,选择 Assets → Import Package → Custom Package,然后导航到正确的文件夹并选择之前导出的包。
Python flask app for CLIP-DallE integration
您的系统中需要安装 Python 3.9 或更高版本。您可以使用 python 或 conda 环境来安装所需内容。
cd CLIP-DallE-SketchFab-001
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
flask run
如果遇到任何导入或依赖问题,您可以运行 python app.py 来查看错误消息。根据需要安装任何缺失的依赖项。
Demo Scenes
Empty Playground
打开场景 Playground_new
在“游戏”窗口中,导航到底部的输入字段,用自然语言输入您的指令。完成后,按 Tab 键发送请求,让 GPT 进行处理。
例如,尝试:创建一个每秒改变颜色的旋转立方体。
GPT 完成后,查看控制台以查看其代码是否生成任何编译/运行时错误。
完成后,输入字段中将显示消息处理完成。请输入下一个请求。您可以检查结果并根据需要提出进一步的请求。
实际执行的代码以及对话历史记录可以在 Builder gameObject 上的公共字段 Output 和 History 中找到。
备注:
GPT 执行您的请求的能力可能取决于提示的措辞方式,因此如果 GPT 第一次出错,请尝试几种不同的方式。
聊天代理 Planner 可用于仔细规划和扩展最初简单的提示,以防有更多复杂的请求。
要使用计划器,请使用右侧 Control 键而不是 Tab 键发送键入的请求。
Dall-E 和 CLIP 细化用于 3D 对象创建
打开名为 Playground_DallE-CLIP_Refinement 的场景。它包含使用 Dall-E 和 CLIP 查找最接近您请求的 Sketchfab 模型所需的组件。
与上一个场景不同,您可以请求不是随机绘制的对象,而是类似于 Dall-E 可能生成的对象。
例如,在下图中,请求了不同的对象:“叉子”、“碗”、“手”、“书”。
但是,在使用此功能之前,您需要将单独的 repo 克隆到您的机器并运行 Python Flask 应用程序。向我们申请 GitHub 访问权限并按照下一步操作:“设置 CLIP-DallE-SketchFab-001 Flask 应用程序”。
Flask 应用程序还可以帮助您生成整个场景,例如“有 2 头牛和一匹马的农场”,并使用 GPT 深度推理器。未来版本应该包含一个使用此功能的场景。
Set Up for CLIP-DallE-SketchFab-001 Flask App
这款 Flask 应用集成了多种 AI 模型,可根据自然语言提示创建和搜索 3D 模型。它可以在 Unity 内部使用,根据文本描述生成场景或对象。该应用提供以下功能:
1-/get_scene_from_prompt:Dall-E 接收包含多个对象的场景提示,并生成包含指定对象的场景图像。Unity 可以使用此图像来确定 SketchFab 或原始模型在场景中的位置
/get_image_from_prompt:Dall-E 接收单个对象的提示并生成其 3D 版本的图像。此图像将成为应用程序尝试与 SketchFab 模型匹配的“目标”图像
/get_closest_skfb_model:应用程序查询 SketchFab API,从其免费集合中下载 N 个不同的模型。使用 CLIP,应用程序选择文本描述与提示最接近的 N 个子集模型。从这个子集中,应用程序将模型与目标图像进行视觉比较,并返回最接近匹配的 SketchFab UID。Unity 可以使用此 UID 下载并显示正确的 SketchFab 模型。
demo_use_app.py 文件演示了如何使用所有三个功能。
Remarks
该项目仍处于早期研究阶段。使用该框架时,请注意可能出现错误。
您的用例所需的某些 .dll 文件可能未包含在 Assemblies 文件夹中,这将导致运行时错误,例如无法找到所需的命名空间 xxx。您是否缺少程序集引用?如果发生这种情况,请联系我们!
Unity 中 OpenAI API 调用的实现基于优秀的存储库
GitHub - RageAgainstThePixel/com.openai.unity: A Non-Official OpenAI Rest Client for Unity (UPM)