内容流水线

几十万字之后,设定得能被查出来

长篇设定膨胀后无法精确召回。通过分层存储和世界切片策略,把稳定约束与演进事实分离,实现定向检索而非全量向量搜索。

写长篇小说时,设定会不断膨胀。开篇两个势力、五个地点,写到中期变成十个势力、三十个地点,到高潮期可能累积上百个实体。传统做法是把所有设定平铺在一个大 wiki 或表格里,但这会带来两个致命问题:一是维护成本指数增长(修改一个地点的状态时,要手动检查有多少相关设定受影响),二是写作时精确召回成了噩梦(生成下一章内容时,模型必须在这一大堆设定里检索相关部分,但向量检索容易拉进大量噪音)。

正确的做法是把"设定"和"剧情"彻底分离成两套存储系统。设定层是稳定的约束与资源库,剧情层是演进的事实序列。两者各自维护,通过明确的接口连接。

设定与剧情分离的本质

很多人一开始会混淆这两个概念。设定是"世界允许什么、有什么资源、运行规则是什么",是相对稳定的。剧情是"当前故事中发生了什么、谁去了哪里、状态如何变化",是演进的。

把它们混在一起后会发生什么?假设你在世界设定里写了"某市立医院存在一个隐秘的观察病区"。这是世界资源。后来在故事中,主角突然进入了这个病区并发现了一个秘密。这是剧情事实。如果你把两者混在同一个数据层,那么"观察病区的状态"就陷入了模糊:它是世界设定的一部分(永远存在),还是这部故事特有的激活(只在这本书的这一刻才被触发)?

这不仅造成维护混乱,更会直接影响检索。当你写第 n 章内容时,AI 需要知道"当前可见的世界状态"。如果设定和剧情混在一起,模型很难判断某个势力是"世界中永远存在的"还是"仅在这部故事中被激活的"。检索就会变成一个低效的向量搜索,大量拉进无关内容。

分离之后,事情就清晰了。世界管理层只负责存储所有可能的资源。故事层维护当前这部故事激活了哪些资源、状态如何演进。检索时,AI 不是在整个世界里搜,而是在当前故事的有效切片里查。这会让信息密度大幅提升,噪音大幅降低。

世界管理的数据模型

世界管理层应该被结构化成五个层次,而不是一个混合大表单。

第一层是世界概要。这是入口级的元数据:世界名称、题材基底、时代背景、核心主题、整体基调。它的作用不是详细介绍世界,而是定调——让后续的所有资源围绕这个调性来设计。

第二层是世界规则。这是最关键的一层。它定义了世界"允许什么、不允许什么"。分五类:

  • 现实规则:世界稳定还是脆弱,现实会不会扭曲
  • 超常规则:异能是否存在、是否公开、普通人能否理解、使用是否有代价
  • 生死规则:死亡可逆性如何、复活是否允许、代价是什么
  • 信息规则:真相能否被完整获知、知识是否危险
  • 叙事规则:禁用的剧情方向、不建议的设定组合

这一层是整个系统后续所有生成的上位约束。角色能力不能超过这里定义的 power ceiling,剧情推进方向不能违反这里的禁忌。

第三层是资源库。分四类:

  • 阵营:抽象的立场与意识形态(守秘派 vs 公开派、扩张派 vs 保守派)
  • 势力:可直接参与剧情的具体组织(医院管理层、地方调查局、地下教团)。势力隶属于阵营,但一个阵营可以有多个势力
  • 地点:能触发事件与限制行动的叙事场景。必须定义"进入限制""离开代价""常见风险",否则就只是摆设
  • 特殊要素:物品、异常现象、禁忌知识、仪式、规则片段等。这些常常是剧情推进的机关和反转的触发器

关键点是,每个资源都必须有叙事价值。不能允许只填"背景介绍"。阵营要有"核心立场和长期目标",势力要有"具体的压迫手段"(行政压制、舆论操控、暗中渗透、经济挤压、猎杀清洗等),地点要有"限制性",要素要有"被激活时的风险与收益"。

第四层是关系网络。这是很多系统容易忽视的一层。光有资源还不够,资源之间的关系决定了世界是否"活"。包括:

  • 势力对立关系:某势力与另一势力的关系是敌对、同盟、渗透还是暂时中立
  • 地点控制关系:哪个地点被哪个势力控制、控制类型是公开、隐蔽还是有争议
  • 要素归属关系:特殊要素掌握在谁手中、是被拥有、封印、研究、崇拜还是压制

有了这层,系统就能自动推导冲突。设定者无需手动说"这两个势力会打起来",系统能从关系图里看出"这个势力威胁那个势力的核心利益"。

第五层是小说绑定接口。这是最后也是最关键的一层。世界管理的全量资源对于单本小说来说,绝大多数是噪音。一部小说通常只需要激活世界中 10% 到 20% 的资源。小说绑定接口的职责就是:给定当前小说的初始信息(题材、一句话 premise、风格倾向),从世界资源库里筛选出"本书最适合激活的部分",并将其压缩成一个标准输出对象。

世界切片:从全量设定到有效检索

这第五层就是我所说的"世界切片"(story world slice)。它是一个中间对象,标准结构化,专门为故事生成阶段设计。

一个完整的世界切片应该包含十个部分。

第一部分是核心世界框架。这不是完整的世界观介绍,而是给下游生成系统一个气质底板:体裁、时代、基调、核心主题、针对这部故事的世界总结。比如"现代都市克苏鲁悬疑背景,现实表层稳定但某些机构内存在异常污染"。

第二部分是应用规则。把世界规则翻译成"当前小说必须遵守的规则"。分三类:绝对不能违背的硬规则(超自然不能被大众公开验证、真相不可一次性完整揭示),建议遵守的软规则(叙事应以压迫感为主),明确禁止的方向(禁止直接写成全民超能力)。

第三、四、五部分是激活资源。不是把世界的所有势力、地点、要素全都列出来,而是输出"本书当前阶段建议激活的"。每个资源要做"叙事化翻译"。比如,不只说"市立精神康复中心管理层是一个势力",而是说"这个势力在表面上是主角的工作权威来源,暗地里是压制异常外泄的封锁力量,它的压迫手段是制度压制和信息封锁,它在故事前期应该以制造困局的角色出现,中期暴露遮掩真相的动机"。

第六、七部分是冲突与压力源。这是故事生成模块最直接需要的东西。冲突候选列出所有可能的冲突轴(外部冲突、内部冲突、关系冲突),每个都说清楚源头、性质、故事价值。压力源列出所有能对主角施加持续压力的元素——势力的压迫、地点的限制、要素的风险。这两个字段会直接用于生成有真实张力的故事。

第八部分是谜团来源。如果没有这个,故事很容易"冲突有了,但钩子不强"。你需要明确指出"这个世界里,哪些东西适合成为核心悬念"。比如"为什么某个地方从未出现在正式建筑图纸里"、"为什么某份记录会写到主角尚未经历的事件"。这些几乎可以直接变成故事的主钩子。

第九部分是故事轴。指出这个世界切片最适合沿哪几条轴展开:主线轴(现实秩序对异常真相的压制)、副线轴(主角对自身精神状态的怀疑)、暗线轴(某种更高层存在的渗入)。这会直接帮助故事生成模块理解"主线写什么、副线写什么、暗线藏什么"。

第十部分是作用域边界。这是为了防止故事开太大。明确说出"主舞台限制在医院及周边""前中期异常仅限少数角色察觉""不得在前期扩展到全国级公开灾变"。这个字段强制了后续所有内容生成的范围。

检索策略的转变

有了这个结构,检索策略就从"全量向量搜索"彻底转变成了"定向切片查询"。

原来的做法是:每次生成一章时,把整个世界设定作为上下文喂给模型,让模型自己做向量检索来找相关信息。这样做的问题是,距离度量本身不够精确。一个关于"医院走廊的灯光"的描写,向量上可能和"病患的精神崩坏"距离很近(都涉及感知失真),但叙事上它们是完全不同的东西。模型容易过度检索,导致上下文被无关设定噪音填满。

新做法是:系统在故事初始化时就运行一次"世界切片提取",生成 story_world_slice 对象。之后每一章的生成都基于这个切片。这个切片只包含三类信息:

第一类是"本书激活的资源"。系统明确知道"这部故事里只有这些势力会出现、只有这些地点是可达的、只有这些要素可以使用"。生成时不会去翻其他的。

第二类是"已建立的规则与关系"。这些是写到第 n 章时已经暴露给读者的信息,或者系统已经决定在这一章内暴露的信息。比如"医院管理层正在隐瞒某件事"这个关系已经确立,那么后续章节的生成就必须保持一致。

第三类是"未来可用的线索与反转"。这是还未在故事中激活、但被标记为"适合在后续章节用作推进机关"的要素。比如"某份病历的异常"这个要素被标记为"early reveal",系统就知道它应该在故事前期被发现,而不是突然蹦出来。

这三类信息加起来,大幅缩小了每一步生成的搜索空间。模型不再是在一个模糊的向量空间里摸索,而是在一个明确的、结构化的、经过筛选的知识空间里工作。信息密度飙升,内容一致性也显著提升。

流水线中的位置

这个模块在写作流水线中充当的角色很明确:从全量世界资源,产出单部小说的有效舞台

输入端连接世界管理系统(全量资源库)。输出端连接故事宏观规划系统(使用世界切片来生成故事引擎)。中间的处理包括:一次相关性筛选(根据小说的题材和 premise,判断哪些世界元素相关),一次叙事化翻译(把静态的资源数据转成"这个势力会怎样压迫主角"),一次冲突与压力的显式提取(让模型更容易理解这个世界的张力来自哪里)。

输入输出的契约很清晰。只要下游拿到了一个完整的 story_world_slice,它就能独立生成这部故事的框架,而无需再去翻世界库的原始资源。反过来,如果故事中期用户调整了"要激活某个新势力"或"某个地点现在被另一个阵营控制了",系统也能增量地更新 story_world_slice,而不需要重新计算整个世界。

失败处理的关键点在两个地方。一是筛选环节,如果小说的 premise 与世界的规则产生硬冲突(比如小说想要"全民都知道超自然现象",但世界规则禁止这个),系统应该明确报错,而不是默默尝试调和。二是叙事化翻译环节,如果某个世界资源无法被有意义地翻译成"叙事价值"(比如一个势力在这部故事中根本用不上),系统应该把它标记为"disabled",而不是硬行包含进去。

一致性检查应该在每次更新 story_world_slice 时运行:确保激活的资源之间的关系是一致的(如果 A 势力被标记为"active",而它隶属的阵营被标记为"inactive",就是矛盾),确保应用规则没有被活跃资源违反(如果"硬规则"说"真相不可一次性完整揭示",但某个要素被标记为"complete revelation marker",就是矛盾)。

最后的判断

建立这样一个系统的真正价值,在于它让"世界设定"变成了可机器读、可增量维护、可精确检索的知识。不是说必须从零开始设计这样的结构——许多作者的工作方法天然就接近这样的分离——而是说一旦显式地把它实现出来,维护和生成的效率会有质的跳变。特别是在 AI 辅助下,这种结构化会直接转化成更一致、更有张力的内容输出。

星野的头像

星野 XINGYE

一个人维护 AI 平台的工程师。这里记录 63 篇复盘:18 份故障档案、OTA、架构演进与工作流。