Maieutic·Back to exercises
drift.solution.md×
Unit IV · Functions

drift改造

我填进去的题目就是@GitHub 关于我下一步的行动:我先搜集了三条资讯;1akinator“bilibili上最近很流行的“网络天才能否猜到”2drift(https://github.com/Zxy876/drift-opc-workflow-v3)宣称可以用极简的面板去制作游戏关卡,却连游戏机制都没有闭合3 midwife通过不断追问来闭合当前目标:这三条资讯有两条是较为成熟的产品,我们实际上需要维护解决是2drift声明能制作简单游戏却连游戏机制都没有闭合。举例:当玩家在面板输入游戏设想;五子棋游戏;往往面板内可展示文字的部分都生成的满满当当(可能是走了llm) 此时游戏区mc能够进入一个游戏开始的状态,在这个状态下玩家开始失去体验无法用传统/面板上指示的玩法通关,甚至游戏无法结束 关于我的假设;我在想正常的链路;比如midwife;它能够层层递进的原因是它的所有问题都在维护同一份文件(在里面是md)然而我们的drift很可能在运行过程中发生了“生成叠加”gap套gap这种链式反应,甚至没有耦合正确的文件,以至于需求没有送到:但是我们还要考虑另外的情况:1游戏有时间限制,却没有自然结束,2 玩法无法被检验验收,无法在通关层面上结束 关于这两种我们可能从本源上“它是不是个游戏”就此进行一个判断:所以我想到使用akinator这样的逻辑去做引导(它实际上和midwife有相同之处;非常相同)所以它引导的作用是什么?判断它是哪类游戏,我们应该分配那一类prompt?在维护的文件里我们要做那些控制(对应midwife的检验机制) 我认为“能不能生成选项”只有两种情况;就是能或不能。同时这是基于drift能力的,它查表,查矩阵都不准(或者像本机midwife似的一开始就把drift的情况写成一个承诺,将后续网络天才式引导缩小范围看作对这份承诺的补充;如果最后校对发现有分歧就将分歧输出;这也是不能生成游戏关卡的原因) 但是存在一个难点;如何维护一个“环境”?这个在网络上有没有成熟的技术解决方案? 我把上述提到的技术理解为“把环境当文件维护”的工具;如果它能起效果,我们可以像闭合midwife的phase1一样验证drift的关卡是否通关,而非去赌drift的造游戏能力我的解法是根据网络上现有的一些开源mod去写一些闭合的机制,甚至只保留一个mod的框架等判断玩家的游戏能做之后自动将玩家的输入自定内容载入到匹配的mod中。就等于一部分规则匹配+prompt载入这条线有问题;玩家说想法 -> Drift 追问并收敛 -> 判断能否映射到已闭合机制 -> 不能:拒绝并说明原因 -> 能:载入匹配机制容器 -> 注入主题/参数/世界内容 -> 跑闭合验证 -> 通过后发布到 Minecraft 其中玩家在一开始就说了想法,无论能不能做Drift 都追问并收敛,再说能做的情况,就不需要玩家再注入主题/参数/世界内容了

调研后补充的设计约束

进一步调研后,我暂时把 Drift 的目标收敛为两部分:

第一,生成前的能力自知。 Drift 不应先生成,再通过失败结果暴露“做不到”;而应先通过类似 Akinator / Midwife 的递进追问,把玩家的模糊想法收敛成一份冻结的需求承诺,再与 Drift 当前真实、已验证的能力进行比较。最终判断只有两种:

  • 能生成;
  • 不能生成,并明确输出玩家需求与 Drift 能力之间的分歧。

追问只是需求收敛过程,不是第三种最终状态。所谓降级,也应当是玩家接受一个新的、更小的需求后,重新冻结并重新判断,而不能由系统暗中改写原需求。

第二,生成后的关卡闭环。 Drift 不应把真实 Minecraft 世界本身“当文件”,而应维护三类可追踪对象:

  1. Frozen Environment Contract:冻结的环境承诺,包括对象、玩家动作、规则、状态、胜负、失败、超时与终局条件;
  2. Event Ledger:运行时事件账本,包括 world_loaded、trigger_registered、player_action、state_changed、rule_evaluated、terminal_entered;
  3. Environment Projection:由事件账本重放得到的当前环境状态。

Closure Gate 比较冻结承诺和真实运行轨迹,判断 Drift 是否兑现了承诺。它验证的不是“游戏是否好玩”,而是:

  • 世界是否成功构造;
  • 玩家动作是否可观测;
  • 合法动作是否被 Runtime 接收;
  • 状态是否按承诺变化;
  • 胜利、失败、超时是否可达;
  • 终局后是否锁定;
  • 面板、Runtime、模拟器和 Minecraft 插件是否读取同一版本的 contract;
  • 后续 LLM 是否越权覆盖原始规格。

因此 Drift 更准确的定位不是“任意游戏生成器”,而是:

Drift 负责生成自己能够维护、观测、验证和闭合的 Minecraft 环境任务。

缺失机制的补法

缺失的游戏机制不能靠 LLM 补充规则描述,而应沉淀为可执行、可验证的机制积木。每个 Mechanic Primitive 至少要声明:

  • 需要哪些世界对象;
  • 接受哪些玩家事件;
  • 维护哪些状态;
  • 如何进行状态转移;
  • 如何判断 win / lose / draw / timeout;
  • 如何进入并锁定 terminal;
  • 插件需要上报哪些 payload;
  • 模拟器如何验证它。

例如 collect_n_items 必须具备:

  • 可收集对象及稳定 ID;
  • item_collect 事件;
  • collected_ids 与 collected_count 状态;
  • 去重逻辑;
  • 达到数量后的胜利条件;
  • 终局后拒绝继续更新。

Drift 应维护 MechanicRegistry,将需求映射到已实现、已验证的机制容器。机制容器可以来自 Drift 自研模块,也可以由成熟开源 mod/plugin 适配,例如 BetonQuest、Denizen、Skript、BattleArena 等。但这些外部框架只能作为机制执行后端,不能把胜负、合法动作、状态转移和终局判断继续交给 Prompt 临时生成。

最终流程

更准确的生成链路是:

玩家提出想法 → Drift 递进追问并收敛需求 → 形成 Frozen Requirement Contract → 将需求拆成所需机制 → 对照 MechanicRegistry 判断是否可完整映射 → 不能:拒绝,并输出能力缺口 → 能:自动选择机制容器 → 自动把冻结需求中的主题、参数和世界内容装配进机制槽位 → 生成 world_patch → 运行闭合验证 → 通过后发布到 Minecraft

这里生成阶段只消费 Frozen Requirement Contract,不能再次开启新的需求入口。 也就是说,不能出现:

追问阶段得到 A → 生成 Prompt 补成 B → Runtime 执行 C

而应当保持:

冻结 A → 将 A 映射进机制容器 → Runtime 执行 A → Closure Gate 验证 A

如果生成阶段发现槽位缺失,说明前面的需求收敛没有闭合,应回到追问阶段,而不是由 Prompt 临时补全。

核心不变量

可以把系统目标压缩成:

只有当冻结需求能够完整映射到已实现、已验证的机制容器,并且生成后的真实运行轨迹满足冻结承诺时,Drift 才允许发布关卡。

也可以形式化写成:

PublishAllowed(level) iff RequirementClosed(level) and CapabilityCovered(level) and ContractFrozen(level) and ClosureVerified(level)

Problem Understanding Gate:我知道怎么做

请在进入完整作答前写清你的解题理解计划:

  1. 题目中的数学对象、变量、参数是什么
  2. 定义域、假设或限制条件是什么
  3. 题目要求证明或求出的目标结论是什么
  4. 你计划使用哪些定义、定理、工具或变换
  5. 是否需要分情况、分支、参数讨论
  6. 由方程或计算得到的候选结果如何验证为有效结果
  7. 最后如何检查答案闭合、无遗漏、无无效解

这些点帮助你检查计划是否清楚;可以先修改,也可以在计划足够后进入解题过程。

✓ llm-readyphase 1 · specification
纯理论证明 · Unit IV · Functions