Verse Wiki — 写给蓝图作者的 Verse 手册
技巧 · EXTRA

给 AI 描述 Verse 任务的提示词模板

主课讲了「怎么问才有用」的原则,这一页把原则做成模板。五个模板可以直接复制:新写一个功能、解释一段代码、定位一条编译错误、把一张蓝图翻译成 Verse、给代码列人工验收清单。每个都标了必须填的空。最后附一组反面例子——那些看着像提问、其实什么信息都没给的句子。

一、用法:方括号是必须填的空

下面五个模板里,【 】 里的内容是必须填的空——空着不填,模板就退化成一句普通的提问,效果和不用模板一样。除此之外的所有句子照抄即可,它们的作用是把「输出格式」和「验收标准」提前说死,省掉你后面来回追问的三五轮。

一个通用建议:模板里的编号列表不要删。给 AI 一个编号清单,它的回答通常也会按编号来——这对你逐条核对极有帮助,因为你可以直接说「第 3 条不对,重做第 3 条」,而不必让它整份重写。

二、五个模板

模板一:新写一个功能。最容易翻车的场景,因为「我要什么」这件事你自己往往也没想清楚。这个模板的一半作用是逼你先想清楚。

模板 · 新写一个功能
环境:【UEFN / Unreal Editor】,引擎版本【5.x】,语言 Verse。

我要的行为(不是写法):
【一句话说清「谁、在什么时候、会看到什么」。不要提任何具体语法。】

已有的东西:
【贴出相关的 .verse 代码全文;如果还没有代码,列出已经放进关卡的设备类型。】

边界与约束:
- 玩家中途退出时应该【…】
- 同一帧被触发两次时应该【…】
- 数据需要跨对局保留吗:【需要 / 不需要】

请这样回答:
1. 先给完整代码,再逐段解释。不要只给代码。
2. 把每一处失败上下文单独指出来,并说明为什么它必须待在 if 里。
3. 用到的每个 API,说明它属于哪个模块、需要哪一行 using。
4. 只实现这一个功能。不要顺带加 UI、音效或任何我没要求的东西。

必须填的空:环境与版本、行为(不是写法)、已有代码、至少一条边界情况。第三条尤其重要:没有已有代码,AI 会替你发明一套命名和结构,然后你得手工把它缝进项目里。

模板二:解释一段代码。用在你接手别人的 Verse、或者从文档里抄了一段却不确定它在干什么的时候。注意最后一句——明确禁止它改写。

模板 · 解释一段代码
这是一段 Verse 代码,来自【我的 UEFN 项目 / 官方文档 / 同事】:

【粘贴完整代码,连 using 和注释一起,不要只贴片段。】

请按这个顺序解释:
1. 整体在做什么,一句话。
2. 逐行说明,重点标出三类行:
   - 哪些行可能「走不通」(失败上下文),
   - 哪些行会挂起(suspends),
   - 哪些行会改变状态(set)。
3. 如果我把它放进【creative_device 的 OnBegin / 一个事件回调】里,有什么需要注意的。
4. 用蓝图的说法打个比方,帮我建立对应关系。

不要改写这段代码。我现在只想读懂它。

必须填的空:代码全文、代码来源、你打算把它放在哪。第三项决定了很多答案:同一段代码放在 OnBegin 里和放在按钮回调里,能不能挂起、会不会重入,结论完全不同。

模板三:定位一条编译错误。这个模板的关键在两个「一字不改」和「不要只粘出错那几行」。Verse 的报错经常指向的是症状发生的位置,而原因在别处。

模板 · 定位一条编译错误
环境:【UEFN / Unreal Editor】,引擎版本【5.x】。

编译报错原文(一字不改,含文件名与行号):
【粘贴完整报错。不要转述,不要「大概是说找不到什么东西」。】

出错文件的全文:
【粘贴整个 .verse 文件。不要只粘报错那几行 —— 原因常在别处。】

我想要的行为是:【一句话。】

请按这个顺序回答:
1. 这条报错在说什么,用我能听懂的话。
2. 它为什么出现在这一行。
3. 最小的修法。如果还有更好的结构性改法,放在后面说,先给最小的。
4. 我以后怎么一眼认出这一类报错。

必须填的空:报错原文、文件全文、你要的行为。第 4 条是白拿的:每问一次错误就顺手换一条「以后怎么认」,几轮下来你自己就不需要问了。

模板四:把一张蓝图翻译成 Verse。核心难题在第一节讲过——你没法把节点图粘进去。所以这个模板的做法是:把图按执行顺序口述成一份结构化清单。写清单本身就已经完成了一半翻译工作。

模板 · 把一张蓝图翻译成 Verse
我要把一段蓝图逻辑翻译成 Verse。节点图没法粘贴,所以我按执行顺序写出来:

入口事件:【Event BeginPlay / 某个 Event Dispatcher / 某个设备事件】

节点序列(按执行线顺序):
1. 【节点名】—— 输入引脚接了【…】,输出接到【…】
2. 【节点名】—— 【…】
3. 【Branch】条件是【…】;True 走【…】,False 走【…】

用到的变量:
- 【变量名】:类型【…】,默认值【…】,Instance Editable【是 / 否】

用到的资产或设备:【…】

请:
1. 给出等价的 Verse 实现。
2. 指出哪些节点在 Verse 里没有一一对应物,你是用什么替代的。
3. 指出哪些地方 Verse 的语义和蓝图不同,尤其是失败与并发。
4. 如果我的描述里有信息缺口,先列出你需要我补充的问题,不要自己填。

必须填的空:入口事件、按顺序列出的节点、变量清单(含类型与默认值)。最后一条「不要自己填」很关键:节点图口述必然有遗漏,让它主动问,比让它猜要省事得多。

模板五:给代码写测试用例。注意最后一句——你要的是一张能拿着在 UEFN 里一条条点的人工清单,不是一套测试框架代码。

模板 · 给代码写人工验收清单
这是我的 Verse 代码:

【粘贴全文。】

这个功能预期的行为是:【一句话。】

请列出我该手动验证的场景,分成三组:
1. 正常路径。
2. 边界情况:空容器、数量为 0、上下限、重复触发、同一帧多次触发。
3. 多人与并发:玩家中途加入、玩家中途退出、两名玩家同时触发、
   一条 race 分支被取消时另一条的状态。

每一条写成「操作 → 预期结果」两段式,我要照着在 UEFN 里一条条点。
不要写自动化测试框架代码,我需要的是人工验收清单。

必须填的空:代码全文、预期行为一句话。这个模板性价比最高:AI 列边界情况的能力比它写代码的能力更可靠,因为列举不需要它知道 Verse 的精确 API。

三、反面例子:为什么会得到垃圾答案

下面五句都是真实场景里高频出现的提问。它们的共同点是:看起来像个问题,实际上没给出任何可供判断的信息。

提问 你会得到什么 为什么
「Verse 怎么写?」 一篇语法概览,和你手头的问题毫无关系 这不是任务,是话题。AI 只能猜你想要什么,而它会猜最常见的那一种 —— 那多半不是你的情况
「这段代码有 bug,帮我看看」(附一张代码截图) 一堆「可能是…也可能是…」 截图里的代码要先被认成文字再被理解,而 Verse 的缩进是语法本身,认错一格结论就变了。永远粘文本,不要粘图
「别用 if,直接写就行。」 一段编译不过的代码,或者一段绕开了失败上下文的假代码 你在禁用这门语言的核心机制。AI 通常会顺从你的指令,然后交出一份跑不起来的东西 —— 它不会为了正确而反驳你
「顺便再加个排行榜、加个音效、再优化下性能。」 一份四不像,而且每一件都只做了三分之一 一次只问一件事。合并请求会让每一件事都只分到三分之一的注意力,而且出错时你没法定位是哪一段的锅
「上次那段代码又报错了。」(在一个新开的对话里) 完全不着边际的回答 新对话里模型没有任何关于你项目的记忆。每一轮都要重贴上下文 —— 这不是它偷懒,是它真的看不到

把五条反面例子倒过来读,就是五条正面规则:给任务不给话题、粘文本不粘图、不要禁用语言机制、一次一件事、每轮重贴上下文。这五条加起来,比换一个更强的模型管用得多。

四、小测验

五个模板里都有的「必须填的空」,是下面哪一类?