MVU 会让 AI 变蠢吗?#
回顾教程, MVU 只做三件事:
在新开聊天时, 读取关闭状态的世界书条目
[initvar]
, 将里面设置的变量初始化到第 0 层消息楼层变量中 (不涉及 AI)在 AI 回复完成后, 尾附
<StatusPlaceHolderImpl/>
, 便于正则替换来显示纯变量状态栏 (不涉及 AI)在 AI 回复完成后, 解析回复中的
_.set
等命令, 更新消息楼层变量 (不涉及 AI)
提示
<%_ _%>
和 <%= _%>
是提示词模板语法, 不是 MVU! 问问题时请注意, 方便回答者知道你的问题出在哪.
也就是说, MVU 只负责管理变量而不与 AI 直接交互. 它唯一与 AI 相关的部分是你所写下的变量提示词——变量列表、变量更新规则和输出规则.
由于 MVU 通过尾附 <StatusPlaceHolderImpl/>
方便了书写状态栏. 与 MVU 变量相对应的往往是状态栏里记录好感度等数据, 因此让我们来仅从 token 占用对比一下两种方法:
- 变量列表
假设 initvar 里设置了好感度变量, 而我们简单地用
{{get_message_variable::stat_data}}
作为变量列表将所有变量发给 ai, 则变量列表对应于不使用 MVU 变量框架时 AI 所输出的状态栏:变量列表只会发送最新版本, 且可以放在 D4 等更后的位置发送
默认情况下, 每楼 AI 回复的状态栏都会发送; 你可以用正则不发送之前的状态栏, 但如果完全不发送之前的状态栏且状态栏提示词没调整好, 则可能面临掉格式问题.
- 变量更新规则
例如
根据角色对<user>当前行为的态度增减好感度
. 这对应于状态栏提示词中对好感度的更新要求, 无论如何都得写. 当然对于好感度这种要求, 如果只是很常见地使用, 无论 MVU 变量框架还是状态栏都没必要写太多要求.- 输出规则
例如
_.set('${path}', ${old value}, ${new value}); // ${reason}
. 它对应于状态栏提示词中对好感度的输出要求, 无论如何都得写. 而显然 MVU 变量框架所要输出的格式比起状态栏更简单, 至于<update_analysis>
即思维链部分, 其实部分用状态栏的角色卡也会使用思维链来稳定格式和更新好感度, 也只是可选项.
除非有新的思路规避上面三种提示词:
让 AI 知道有什么变量的变量列表
让 AI 知道变量该如何更新的变量更新规则
让 AI 知道该输出什么来表达变量发生变化的输出规则
即, 省去 有什么变量 -> AI 分析怎么更新变量 -> 输出变量更新结果
中任何一个部分, 否则不可能做出更好的方法.
当然, 我们可以在负责剧情的 AI 输出完毕后, 再另外调用 AI 来进行这一过程, 从而避免剧情 AI 受到影响……但这和 MVU 完全不冲突, 是正交关系.