跳到主要内容

检查世界

一个世界即使格式正确,也可能有别的问题:角色设定只有一行、导入漏掉了卡片中的事实,或者两个数值追踪的是同一件事。检查套件用来查找这些问题。你可以在世界的创作聊天里输入命令来运行它,创作助手也能通过工具调用。每次角色卡导入和更新都会自动运行快速检查。

检查不会修改世界的创作内容,只会把最近一次结果保存在 .checks/results.json。助手会用平常的编辑工具修复发现的问题,每次修改仍会照常先征得你的同意。

命令​

在世界的创作聊天里输入:

命令运行内容
/check 或 /check-all四个检查包全部运行
/check-world一致性检查包
/check-card对照检查包(需要这个世界导入时用的角色卡)
/check-quality质量检查包
/check-play可玩性检查包

命令后面加的内容会交给助手。加上 deep(/check-quality deep)会让模型参与;不加时只运行由程序判定的检查,当快速检查的结果显示世界内容单薄时,助手也会自己打开 deep。助手会运行检查、阅读发现的问题、修正明显有误之处、对需要做选择的先询问你,然后再运行同一项检查加以确认,最后告诉你发现了什么、改了什么、还剩什么。

四个检查包​

一致性由程序判定,成本很低,始终可以运行:

  • world-valid:每个文件都能读取,每处指向某样东西的引用都指向确实存在的东西,与开始故事时的检查完全一样。它会指出世界中第一个有问题的部分,所以修好之后可能会显示下一部分的问题。
  • world-graph:无人能到达或离开的地点、没有返程的通路、钥匙不存在的锁、同名的角色、地点或物品。
  • duplicate-values:对同样的对象含义相同的追踪数值(hp 和 health)。保留哪一个需要选择,所以这条发现只列出两者,不做改动。
  • name-clashes:某个别名恰好是另一个角色的名字,两个组织或两个背景条目同名。
  • duplicate-values-meaning(deep):用不同说法或另一种语言写成的同一个追踪数值(生命值 和 vigor),duplicate-values 背后的对照表认不出它们。
  • name-near(deep):可能是同一个条目被用不同名称写了两遍的两个角色、地点、组织或物品(The Mill 和 Old Mill)。
  • lore-conflict(deep):说法无法同时成立的两个背景条目。日期不重叠的条目不会被比较;发现会引用两个条目里各自冲突的那段原文,引文不在条目里就会被拒绝。
  • unread-fields:角色、地点、组织、物品或背景文件里没有任何东西会读取的字段,例如格式里是 start.location 却写成了 starting_location。这些内容永远进不了故事,所以发现会指出字段名,助手再把内容移到真正承载它的字段里。助手自己的写入(create_world_element、replace_world_element)会拒绝这样的字段,并列出格式会读取的字段,所以这种字段一开始就写不进去。

上面标了 deep、用来找“换了说法的同一件事”的三个检查分两步:已选择嵌入提供方时,由它找出含义最接近的配对,并按“比每个条目与其近邻更接近多少”排序,使同一主题的世界里重复的那一份也能排到前面(每个检查 12 对,世界较大时更多,至多 30 对;name-near 对每一类事物分别取),因为接近只说明两段文字谈的是同一个主题——信任和好感很接近,却不是同一个数值。随后由决策模型对每一对回答是非;它没有把握的交给语言模型。lore-conflict 里决策模型只有非常确定时才能排除一对,因为随后的语言模型本来就要引用两个条目里的原文。没有嵌入提供方时,duplicate-values-meaning 会询问它能取到的前几对,name-near 仍按名称比较,lore-conflict 会被跳过。向量按文本保存在世界的 .checks 文件夹里,所以再次运行只会嵌入有变化的内容。

  • world-prompts:世界自带的提示词必须是产品里有的提示词、不能为空,并且只使用该提示词被提供的变量。

对照把世界与它导入时用的角色卡(保存在世界的 .import 文件夹里)对照,或与等待更新这个世界的较新角色卡对照(/check-card 和 check_card 工具可以用 version: new):

  • card-coverage:导入为世界读取的每个片段都变成了某样东西。没有任何内容来自的片段,是被悄悄丢掉或略去了。运行时有模型也有嵌入提供方的话,与世界里任何内容都没有共同词语的片段(卡用另一种语言写成,或被改写过)会先按含义去找:让最接近的几份文档回答它们是否说了这个片段所说的内容,只有没有任何文档说到的片段才会被报告。
  • card-names:世界里的每个角色、地点、组织和物品,在卡里的某处都有出现。如果大多数名字都找不到,它只会说一次:世界很可能用的语言与卡不同。
  • card-numbers:片段中给出的数字(年龄、年份、数量)出现在由它生成的内容里。
  • card-update:有较新的卡等待时,新卡改动或新增了、而世界里还没有写到的内容,以及只由已被删除的片段生成的内容。
  • card-fidelity(deep):对由卡生成的每份文档,模型列出卡里陈述而文档丢失的事实,以及文档陈述而卡里没有给出的事实。每条事实都附带一段引文,引文如果不在它声称出自的文本里就会被拒绝。随后每条事实还会作为是非题交给另一份文本去核对(先由判定模型回答,拿不准时交给语言模型),所以换了说法或换了语言仍然写着的事实不会被报告。一次运行至多对比 40 份文档,先比对来源最多的,并说明漏掉了多少。

质量根据现有内容,判断这个世界是否足以游玩:

  • quality-cast:有人可以扮演,重要的角色不止有简介和说话方式,没有两个角色共用同一段简介。
  • quality-places:没有描述、或只有一行描述且没有特征的地点。
  • quality-world:简介、标签和开场。
  • sheet-playable(deep):对每个主要和次要角色,设定是否说明了他是谁、怎么说话、想要什么。导入设置选用了决策模型、并且它有把握时,可以由决策模型回答;它没有把握的交给语言模型。
  • world-gaps(deep):模型阅读世界的概要,指出要玩得好还缺什么:无事可做的地点、无人承担的冲突。每个缺口都指明它涉及的角色、地点或条目,以及补上什么。它不会用来源里没有的内容去填补缺口。

可玩性针对玩家可扮演的每个角色,看故事如何开始:

  • first-scene:角色从世界里的某个地点开始,该地点有出路,并且有其他人、物品或特征可供行动。没有出路的开局是警告;独自开局只会被提及。
  • opening-playable(deep):模型阅读开场白和这个第一场景,判断玩家是否知道自己身在何处、是否有事可做。决策模型有把握时可以回答,与 sheet-playable 相同。它最多读前三个可扮演角色。

每条发现都有严重程度(error、warning 或 info)、代码、位置、说明,以及(修法明确时的)提示。error 是需要修复的;warning 是需要去看的线索;info 只需一提。

试玩​

检查读的是文件。世界编辑器顶部的 试玩 会真正玩一遍:用该世界以其中一个可扮演的角色开一个存档,玩 1 到 10 个回合,其中试玩者选取故事自己给出的建议(没有建议时就做一个普通动作),然后给出报告:

  • 试玩者走到了哪里:到过和没到过的地点,以及已触发和仍在等待的触发器;
  • 从开始到结束发生了什么变化(位置、谁拿着什么、被追踪的数值、线索、关系、约定),以及每个回合用了多久,明显慢于其他回合的会被点名;
  • 不需要模型的检查对这个世界的结论(一致性、质量、可玩性);
  • 途中出了什么问题,例如某个回合没有结束,或某个回合没有建议。

开始之前,对话框会说明代价:每个回合都是用你所选模型的完整回合,一个接一个地进行,所以耗时与实际玩这几个回合相同,使用相同的模型和限制。同一时间只会运行一次试玩,本回合结束后停止 可以提前结束。试玩用的存档和其他存档一样创建,试玩结束后删除,因此不会留在你的存档里;世界只会被读取。如果程序在试玩期间停止,它的存档会以“Playtest”开头的名字留在存档列表里,可以在那里删除。

一个试玩者玩几个回合并不能覆盖整个世界:它只能说明开场是否通向某处,以及前几个场景里的一条路径是否走得通。

导入时会做什么​

角色卡导入、无模型导入以及从新卡更新,都会对世界现在所依据的角色卡运行全部由程序判定的检查,并保存结果。导入设置选用了决策模型时,是非类检查(sheet-playable、opening-playable、duplicate-values-meaning、name-near、lore-conflict)也会运行,card-coverage 也会按含义去找丢失的片段,因为它能低成本地回答。审阅导入的助手会读到这些发现,并决定是否值得运行 deep 检查:卡很长、很多片段被改写成了背景条目、或者快速检查显示有事实丢失或角色单薄时。从新卡更新快要完成时,助手会在调用 card_update_finish 之前,用 version: new 运行 check_card。

结果保存在哪里​

每项检查最近一次的发现保存在世界的 .checks/results.json。下一次运行会说明有多少条是新的、哪些已经消失。与 .import 一样,这个文件夹属于创作状态:它是点开头的文件夹,不属于你发布的世界,翻译也不会复制它。可以随时删除,下一次运行会从头开始。

助手可用的工具是 check_world、check_card、check_quality、check_play 和 check_list;check_list 会列出每项检查属于哪个检查包、由程序还是模型判定,以及它需要什么。