Minecraft NPC 法典

该原型使用 GPT-3 Codex 为 Minecraft 中的非玩家角色 (NPC) 提供支持。通过“即时工程”原则(请参阅下面的部分),我们向模型展示了如何使用 Minecraft SimulatedPlayer API 编写代码来导航世界、采矿、制作甚至进行对话。

Minecraft Codex gif

要求

请仔细阅读自述文件,以确保您获得正确的信息。此存储库适用于非常特定版本的 Minecraft、Minecraft 专用服务器和 Node,并且需要按特定顺序调用安装命令。

https://www.microsoft.com/store/productId/9PGW18NPBZV5 https://www.microsoft.com/store/productId/9MV0B5HZVK9Z(https://www.microsoft.com/store/productId/9P5X4QVLC2XR)(https://www.microsoft.com/store/productId/9P5X4QVLC2XR)(https:/ /nodejs.org/en/)https://mcpedl.com/clear-chat-tranparent-chat/

设置

导出 让 OPENAI_API_KEY = "";导出 让 OPENAI_ORGANIZATION_ID = "";导出 让 OPENAI_ENGINE_ID = "";导出让 DEBUG = false;

安装 Minecraft 基岩版专用服务器

npm 运行启用mcloopback
npm 运行启用mcpreviewloopback

构建和部署

吞咽手表

连接到专用服务器

/gametest 运行 codex:codex

调试

使用以下步骤进行调试:

狼吞虎咽

与NPC互动

现在您已将 NPC 生成到游戏中,您可以与它进行多回合对话!

  1. 单击“t”打开聊天并向 NPC 发送消息。如果您进行对话互动(例如“你在做什么?”或“生命的意义是什么?),NPC 应该用自然语言做出回应。如果给出命令(例如“看着我”、“向前走一点”)等)NPC 应该用代码响应并对其进行评估。
  2. NPC 能够进行多轮对话,在对话轮次中传递上下文。例子:

笔记:NPC 并不完美,有时对话可能会卡住或开始重复。键入“重置”以重置对话体验。

工作原理 - 快速工程

此示例中使用的 Codex 模型从未见过我们要求它使用的 SimulatedPlayer API(这是一个不在其训练集中的新 API)。为了让模型使用 SimulatedPlayer API,我们需要设计提示,为模型提供它将接收的命令类型以及应该编写的代码类型的示例。从一些自然语言到代码示例,我们可以使用该模型从新命令生成新代码。

我们通过称为即时工程的学科从 Codex 中获取正确的代码和自然语言。像 GPT-3 和 Codex 这样的大型语言模型经过训练可以猜测句子中的下一个单词,或者更一般地说,猜测序列中的下一个标记。他们可以不断地这样做来生成整个句子、段落、代码行和函数。为了从模型中提取非常具体的代码,最好给出传达我们意图的提示,并给出我们正在寻找的内容的示例。

请注意:NPC 的功能仅限于 SimulatedPlayer API 的功能以及我们为其提供的一些额外功能。它可以行走、与你聊天、四处走动、看着你、跟随你、挖掘方块和制作物品(等等)。它目前无法使用有关周围世界的视觉提示或处理 API 规范之外的功能。您可以自己编写新行为并更改提示,以使机器人能够执行您想要的操作,我们鼓励您这样做!

法典提示

这些交互可以作为 SimulatedPlayer API 模型的示例,也可以建议 Codex 应该编写的代码类型。当玩家使用另一个命令(例如“你好吗?”)调用模型时,我们将该命令作为另一个注释附加到提示上,并要求模型生成下一个代码块:

bot.chatbot.chat(“我做得很好!”)

随着交互(NL -> 代码)继续,我们继续将它们附加到提示上,以维护未来回合的上下文。当被要求做一些新的事情时,这使得 Codex 能够解析代词并理解过去的上下文(例如,当玩家说“停止那样做”时,知道“那个”正在看着玩家)。

它是如何工作的 - 评估代码

eval(codeString)evaluateCodescripts/CodexGameeval

它是如何工作的 - API 设计

bot.extendedNavTo(位置)

在设计 API 时同样重要的是具有一致的命名约定并限制模型预期编写代码的命名空间。与开发人员一样,该模型将更有效地使用抽象良好、命名一致的 API。我们已将自己的 API 添加到 SimulatedPlayer 的前端,以实现这种一致性。

扩展 NPC 能力

攻击实体(实体)

微调注意事项

此示例展示了我们如何通过提示工程,让 Codex 生成特定 API 的代码。在评估大型语言模型生成语言和代码的能力时,快速工程通常是一个很好的起点。但提示工程也有局限性——提示只能很大,随着更多概念的引入,模型性能会变差,更大的提示需要更长的时间来处理和使用更多的计算资源。

为了提高大型语言模型理解特定领域的能力,您可以微调模型 - 使用代码语料库、示例交互、文档和其他上下文有效地重新训练它。就 Minecraft 机器人而言,我们可以通过使用整个 SimulatedPlayer API 文档、玩家与 NPC 之间的交互示例、有关 Minecraft 的信息等来微调模型,从而显着提高机器人的能力。

有关 GameTest API 的重要信息

GameTest 是 Minecraft 团队的测试版 API,可能会随着更新而变化。我们将努力使此存储库与新版本保持同步。目前正在编写文档,因此需要注意一些事项,如下一节所述。

重要提示

  • 如果您编辑manifest.json文件,请忽略它向您提供的有关现有文件的任何警告
  • 另外,如果编辑manifest.json文件,请不要更改依赖项中的前两个条目,这些是必需的
  • 如果您的测试注册时出现错误(例如您没有导入 GameTest),您将不会收到任何有关错误的通知
  • 因此,在做大量疯狂的工作(就像我所做的那样)之前,请确保您可以验证您的入口点是否正常工作。最好的方法是在控制台中输入以下内容:
/gametest 运行 [你的班级]::[你的测试名称]

如果您没有看到控制台尝试自动完成您的测试,则说明您的入口点有问题。

代码结构

评估()

常问问题

我可以使用哪些 OpenAI 引擎?

您可能有权访问每个 OpenAI 组织的不同 OpenAI 引擎。要检查您可以使用哪些引擎,可以查询列表引擎 API 以获取可用的引擎。请参阅以下命令:

卷曲 https://api.openai.com/v1/engines \ -H '授权:持有者 YOUR_API_KEY' \ -H 'OpenAI-组织:YOUR_ORG_ID'