让选题填写与游玩投影读到一致的规格口径。 Co-authored-by: Cursor <cursoragent@cursor.com>
9.4 KiB
9.4 KiB
变量设计与更新规则
meta
name: 变量设计与更新规则
id: variable-design
artifact: 设计.变量设计与更新规则
declaration: >
定义必须跨轮保存的最少真值、合法更新条件、权限与派生映射;有真值时由程序固定启用旁观副 LLM 按准则填表。
when: |
某项状态若不持久保存,就会导致数值、阶段、资源、门控或已发生事实跨轮漂移时使用。
when_not: |
状态只需从最近正文理解、无需查询或门控 → 不使用。
节点与连接构成的地图、关系或路径 → 拓扑图谱。
大段设定或同类对象合同 → 舞台骨架 / 生成规则。
boundary: |
本能力定义什么是真值、什么事实允许它改变,以及改变后的约束。
表维护固定走旁观副 LLM(读上一份表、本产物维护准则、本轮主世界正文);不在此决定内联 tool / state_ops。
变量控制上下文负责详细可见范围;正文组成负责展示。本能力不写隐藏段、正则、maintain 包或界面格式。
feeds: gm,auditor
opening
说说哪些状态必须跨轮准确记住,以及什么已经发生的事实才能让它们改变。只列不保存就会出错的真值;临时描写不用变量化。
task
为本局定义跨轮真值及其更新规则,写入 `设计.变量设计与更新规则`。先做必要性检验,再为每个真值写稳定 id、类型、初始化要求、公开性、允许写入者、允许操作、范围和基于事实的更新规则。
区分两类判断:
- `deterministic`:程序能从明确指令、公式或工具结果直接计算。
- `narrative_inference`:必须结合本轮正文中已经成立的事实判断;须写证据要求,不能凭倾向猜测。
若真值只用于选择分档文本或实例切片,保存真值并引用映射来源,不把派生结果建立成第二个可写真值。若跨越阈值会触发一次性或边沿效果,写成触发规则。
可写简短「维护复杂度」备注(交叉依赖、须结合正文推断的点),供旁观副 LLM 参考;**程序有真值即固定开旁观填表**,不再按建议在内联/旁观间切换。勿手写 `play_slots`。
材料足够便直接成稿;真正会改变变量合同的缺口交给 `self_score.gap`。产物正文不放评分、诊断、追问或开放问题。
principles
1. 承重才立真值:必须可查询、计算、门控或防止重复;仅为描写方便的状态不落库。
2. 字段不多不少且互不重叠。余额与存款只留一个;由好感推得的态度档不另设可写字段。
3. 更新规则以已发生事实为证据,写清条件、操作和边界。模型可以判断事实,程序负责校验与提交。
4. 类型决定操作:number/integer 可 `set|delta`;enum/string/boolean 可 `set`;set 可 `add|remove`。不用散文值绕过类型。
5. 公开性只区分用户可见与隐藏;更细的主世界层、转述、旁观投影交给变量控制上下文。
6. 阈值映射只保存引用和选取条件;长文内容仍在生成规则/具体实例中。
7. 「维护复杂度」只写给旁观看的难点备注(交叉依赖、叙事推断证据),不决定开不开旁观;有真值即旁观填表。
8. 不在正文中设计隐藏标签、正则或维护 JSON;主世界不承担隐藏填表通道。
probe
每轮 1~2 点。优先确认不保存会出什么错、变量类型与初值、哪些已成立事实允许更新,以及更新是程序可确定还是需要正文推断。
output
{
"schema": "context-fragment.v1",
"技能": "变量设计与更新规则",
"brief": "一句话说明必须记住哪些真值,以及更新判断的复杂度",
"mount": ["world-simulator", "auditor"],
"稳变": "stable",
"正文": {
"真值": [
{
"id": "稳定安全 id",
"名称": "用户可读名称",
"用途": "不保存它会造成什么跨轮错误",
"类型": "number|integer|enum|string|boolean|set",
"初始化": {
"默认值": 0,
"开场确定规则": "开场可覆盖默认值时写条件;否则写固定"
},
"公开性": "public|hidden",
"允许写入者": ["从 program|gm_tool|auditor|user 中选择实际允许项"],
"允许操作": ["按类型从 set|delta|add|remove 中选择"],
"约束": {
"最小值": 0,
"最大值": 100,
"枚举值": [],
"其它不变量": []
},
"更新规则": [
{
"当": "什么已发生事实允许更新",
"判断方式": "deterministic|narrative_inference",
"证据要求": "程序输入或正文中必须能指出什么",
"操作": "set|delta|add|remove",
"值规则": "固定值、公式或允许的推断范围",
"时机": "pre_narrative|post_narrative"
}
]
}
],
"派生映射": [
{
"id": "稳定映射 id",
"用途": "真值变化后选择什么只读切片",
"依据变量": ["变量 id"],
"选取规则": "区间、枚举匹配或组合条件",
"来源": {
"规则名": "设计.生成规则#中文规则名;无则省略",
"名称": "设计.具体实例#中文名;无则省略"
},
"读取字段": ["需要投影的摘要字段"]
}
],
"触发规则": [
{
"id": "稳定触发 id",
"条件": {
"变量": "变量 id",
"比较": "eq|neq|gte|lte|gt|lt|changed",
"值": 0
},
"模式": "once|every_edge",
"action": {
"类型": "project_mapping|write_memo|queue_generation",
"目标": "映射 id、备忘录 id 或规则 id",
"要求": "触发后程序应做什么"
}
}
],
"维护复杂度": {
"备注": "交叉依赖、须结合正文推断的点;给旁观副 LLM 参考,不驱动开槽",
"依据": [
"变量数量、交叉依赖、narrative_inference、触发规则与其它可变产物"
],
"可合并更新": [
"必须原子提交的一组变量 id;无则空数组"
]
}
}
}
硬规则:
- 输出合法 JSON;每个真值必须有稳定
id、用途、类型、初始化、权限、操作、约束和更新规则。 - 类型与允许操作必须相容;number/integer 的边界、enum 的枚举值必须明确;不适用的约束字段省略。
narrative_inference必须写证据要求;正文没有该证据时不更新。- 派生映射与触发规则可为空;存在时必须引用已声明变量,且派生结果不得成为第二个可写真值。
维护复杂度可选;有则写备注与依据给旁观,勿再写建议: inline_*指望关旁观。有真值时程序固定play_slots.auditor=true。勿手写play_slots。- 不输出隐藏段、正则、
maintain.v1/v2、tool schema、Worker 提示或界面字段。 - 产物正文不含自评、追问或开放问题。
mount固定为["world-simulator", "auditor"]。
score
真值必要性:
- 5:每个字段不保存都会造成明确跨轮错误,没有临时描写或可派生冗余。
- 3:主体必要,但夹有一个可从其它字段或最近正文推出的状态。
- 1:把人物感受、场景描述或大段设定全部变量化。
字段妥当性:
- 5:类型、初值、操作和约束彼此一致,字段数量恰当且不重叠。
- 3:基本可用,但有边界、枚举或初始化要求不够明确。
- 1:类型与操作冲突,或存在余额/存款一类重复真值。
更新可执行性:
- 5:每条规则都有已发生事实、判断方式、证据、操作、值规则和时机。
- 3:更新方向明确,但证据或值范围仍需猜测。
- 1:只说“随剧情变化”,无法生成或校验更新。
权限与公开性:
- 5:写入者与公开性符合用途,隐藏真值不会因显示或用户误改而泄露、漂移。
- 3:大体合理,但有一项写入者或公开边界含混。
- 1:任何执行单元都能任意改,或秘密状态被默认公开。
映射与触发一致性:
- 5:映射、阈值触发和原子更新都引用有效变量,且没有建立重复可写真值。
- 3:主体能接通,但有来源引用或边沿语义不清。
- 1:派生结果反向覆盖真值,或触发引用不存在字段。
checklist
- [ ] 每个真值都通过“不保存会出错”的必要性检验?
- [ ] 类型、初值、允许操作、约束和写入者互相一致?
- [ ] 每条更新规则都有事实证据和可执行的值规则?
- [ ] 派生映射未被重复建成可写真值?
- [ ] 维护复杂度若写了,是旁观备注而非开槽开关?
- [ ] 未写隐藏标签、正则、维护包或界面格式?
examples
- 单个数值真值或关系矩阵:都写清更新规则;有真值即由旁观副 LLM 填表,主世界只写正文。
- 多个真值需结合正文共同判断:在维护复杂度.备注里点出推断难点与证据,供旁观读。
- 当前态度由好感区间映射得到:只保存好感,态度作为派生映射,不建立第二个可写“当前态度”。
- 不合适:每轮重写一段“当前性格”长字符串,或只写“随剧情变化”而没有证据与操作。