2. 让照料改变故事
从第 1 课的完成稿开始,也可以直接使用本课下载包中的完整 start 目录。本课增加两个公开整数:moisture 和 trust,范围均为 0 到 2。这里的 trust 表示已完成的共同照料,不是对 Rowan 内心感受的秘密推测。
区分观察与规则
Section titled “区分观察与规则”在 runtime.state.schema.properties 中添加这两个字段,将它们列入 required,在 defaults 中设为 0,并为 /moisture 与 /trust 提供易读的显示标签。Schema 定义允许的值,默认值定义新一次来访的起点。
将完成稿中的 action 选项观察和 record_care 更新规则复制到 runtime.observations 与 runtime.rules。保持 ID 和路径准确对应。观察询问读者完成了什么,答案为 none 或 tend。只有答案为 tend 时,规则才给两个状态各加 1;limit: 2 防止反复照料超出上限。
notice_care 引导要求在湿润度达到 1 时,让后续文字注意到湿润的土壤和 Rowan 的感谢。引导影响下一次生成,但自身不修改状态。具体行动的识别由服务中的模型完成,因此观察问题需要写清楚。
试玩之前先演练
Section titled “试玩之前先演练”| 提供给状态引擎的作者指定观察值 | 湿润度 | 共同照料 |
|---|---|---|
| 初始状态 | 0 | 0 |
none:“我也许晚点再浇水” |
0 | 0 |
tend:完成一次照料 |
1 | 1 |
tend:再完成一次照料 |
2 | 2 |
tend:继续照料 |
2 | 2 |
站点测试会直接输入这些观察值,验证确定性的状态变化。这不表示模型已经在真实试玩中正确理解了表格里的示例句子。私有试玩时,要同时查看识别出的观察值和状态结果。
将修订号设为 3,使用第 1 课的命令检查修改后的文件。将路径误写为 /moisturee 可能通过基本 JSON 结构检查,却被服务的语义检查拒绝。遇到“结构通过、服务拒绝”时,对照 ID、JSON Pointer 和状态定义。不要把秘密写进这些公开字段。
在本地检查作品
在解压目录中创建环境并安装一次固定版本的依赖,然后检查两份文件。修改之后再次检查起始稿。每课都可以使用相同命令。
macOS / Linux
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python check.py start/pack.json
.venv/bin/python check.py finished/pack.jsonWindows PowerShell
py -3 -m venv .venv
.venv\Scripts\python.exe -m pip install -r requirements.txt
.venv\Scripts\python.exe check.py start/pack.json
.venv\Scripts\python.exe check.py finished/pack.json完成稿的预期输出: Structural check passed: Creator Pack 0.3 随后显示确切 Schema SHA-256。这是结构检查,不代表服务准入或真实试玩通过。
完成稿中的可用片段
此片段直接取自经过检查的下载文件,并非完整 Pack。请在 start/pack.json 中修改相应字段,或对照 finished/pack.json。
{
"state": {
"schema": {
"type": "object",
"properties": {
"scene": {
"enum": [
"greenhouse"
]
},
"moisture": {
"type": "integer",
"minimum": 0,
"maximum": 2
},
"trust": {
"type": "integer",
"minimum": 0,
"maximum": 2
}
},
"required": [
"scene",
"moisture",
"trust"
],
"additionalProperties": false
},
"defaults": {
"scene": "greenhouse",
"moisture": 0,
"trust": 0
},
"display": {
"/scene": {
"label": "地点"
},
"/moisture": {
"label": "土壤湿润度"
},
"/trust": {
"label": "共同照料"
}
}
},
"observations": [
{
"id": "action",
"type": "choice",
"question": "读者在这一轮完成了哪项行动?忽略打算、建议、引用和回忆。若没有完成列出的行动,选择 none。",
"choices": {
"none": "未完成列出的行动。",
"tend": "读者与 Rowan 完成了一次小型浇水或照料任务。"
}
}
],
"rules": [
{
"kind": "update",
"id": "record_care",
"when": {
"op": "observed",
"id": "action",
"value": "tend"
},
"effects": [
{
"op": "increment",
"path": "/moisture",
"by": 1,
"limit": 2
},
{
"op": "increment",
"path": "/trust",
"by": 1,
"limit": 2
}
]
},
{
"kind": "guidance",
"id": "notice_care",
"when": {
"op": "gte",
"path": "/moisture",
"value": 1
},
"instruction": "注意湿润的土壤与 Rowan 的感谢。不要把建议中的行动写成已完成。"
}
]
}查询相关字段: runtime