oh-my-muse/design-docs/架构-02-核心数据结构与双轨模型.md
zizi 0d0e1d4473 添加产品设计文档
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-20 10:38:31 +08:00

12 KiB
Raw Blame History

架构-02核心数据结构与双轨模型

  • 版本v5
  • 更新日期2026-05-10
  • 目标读者:架构/后端/前端/产品
  • 阅读时间30-45 分钟
  • 边界说明:这里只定义模型层概念、不变式和归属边界;本文件描述目标模型,不代表当前代码都已实现。精确表结构以 后端-04-统一数据库Schema-v1.md 为准,精确接口(API)以 后端-05-统一API契约-v1.md 为准,精确状态机以 架构-04-状态机与约束清单.md 为准。

1. 双轨模型:规范数据(Canonical) / 待审层(Shadow) / 归档层(Archive)

1.1 定义

  • 规范数据(Canonical):用户认可的真实数据。正文、已确认作品知识、已确认规划项和叙事状态都必须能追溯来源。
  • 待审层(Shadow):系统或人工智能(AI)产出的候选、知识草稿、解析结果和风险标记。它是临时层,默认不可信。
  • 归档层(Archive):已接受、已拒绝、已过期、被替代或失败的历史对象。它用于审计和回看,不再作为当前待审对象。

一句话:AI 只能写待审层(Shadow);只有用户确认、用户保存正文或章节级确认,才能让内容进入规范数据(Canonical)。

1.2 必须保留的硬边界

  • 所有 AI 生成、提取、规划、检查结果都先进待审层(Shadow)。
  • 待审对象不能进入正式检索、正式图查询或下一次生成事实。
  • 修改后合并必须让旧知识草稿失效,并基于最终正文重新提取。
  • 全书解析(Full Parse)的批量确认边界固定为 parse_job_id + chapter_id,同章节内 all-or-nothing不做跨章节一次性写入。
  • 待审层(Shadow)活跃区只保存待审对象;终态对象进入归档层(Archive)或审计记录。

2. 模型层分区

产品入口增加后,模型层不能按 UI 面板膨胀。Muse 的核心模型分为五类:

模型分区 归属 负责什么 不负责什么
系统级模板与配置 管理员(Admin) / Admin BC 元结构定义(MetaSchema)、字段定义、Prompt 版本、Agent 配置、上下文策略、全局知识库访问策略、评测集和 New-API 同步配置 不保存某个普通用户作品的正文或创作取舍
用户级作品数据 普通用户(User) / Content BC 作品(Work)、章节(Chapter)、文本块(Block)、导入状态、正文版本、作品级绑定 不保存系统级 Prompt、Agent 和全局授权规则
作品级知识数据 单个作品 / Knowledge BC 世界状态(World State)、叙事状态(Narrative State)、实体、关系、事件、属性变化、来源追溯 不跨作品共享正式事实,不直接替代全局知识库
全局知识库与访问策略 管理员(Admin) / Admin BC + Knowledge BC 全局知识库(Global Knowledge Base)、资料集版本、启停、用户或用户组授权、可见/可检索/可生成策略 不自动写入任何作品的局域知识库
局域知识库与用户可见投影 单个作品 / Knowledge BC 局域知识库(Local Knowledge Base)的内部完整知识、用户可见投影(User-visible Projection)、投影水位和来源解释 不把系统内部全部事实默认展示给普通用户

2.1 用户级作品数据

作品(Work)、章节(Chapter)、文本块(Block)是普通用户创作的内容骨架:

  • 作品(Work):单个作品的根对象,绑定作品级模板、导入状态、解析状态和授权上下文边界。
  • 章节(Chapter):作品内的顺序结构,承载章节摘要、章节目标和文本块集合。
  • 文本块(Block):正文的最小编辑、保存、候选合并和冲突处理单元。

不变式:

  • 文本块(Block)级修订号(revision)是强制并发保护。
  • 用户保存正文后,正文就是规范数据(Canonical),后续提取失败不得回滚正文。
  • 导入正文可以初始化 Canonical 正文;导入后的解析结果仍必须进入 Shadow 等待章节级确认。

2.2 作品级知识数据

作品级知识数据不是一个泛泛的“知识库表单”,而是当前作品的正式事实和叙事运行态:

  • 世界状态(World State):人物、地点、物品、组织、规则、事件、时间线、因果链和实体关系。
  • 叙事状态(Narrative State):作品、章节或实体维度上的弧线进度、章节意图、角色目标、悬念、张力、节奏和叙事策略。
  • 来源追溯:正式知识必须能追溯到文本块(Block)、章节确认、规划项或用户手动操作。

世界状态(World State)和叙事状态(Narrative State)可以被用户通过作品规划台和知识与一致性工作区理解和修正,但底层状态载体仍以 后端-04架构-04 为准。

2.3 全局知识库与局域知识库

全局知识库(Global Knowledge Base)和局域知识库(Local Knowledge Base)的边界如下:

类型 写入归属 进入生成上下文的条件 普通用户看到什么
全局知识库(Global Knowledge Base) 管理员维护和授权 管理员授权为可用于生成,且当前用户/用户组/作品满足访问策略 被授权全局资料的摘要、来源和可用范围
局域知识库(Local Knowledge Base) 当前作品自动维护,来自正文、导入解析、规划和用户确认 内容已经进入规范数据(Canonical),且元数据允许进入 AI 上下文 作品知识、角色设定、世界设定、来源追溯和允许展示的摘要
用户可见投影(User-visible Projection) Knowledge BC 从局域知识生成 仅作为读模型,不反向成为事实源 元数据允许展示、编辑、检索、导出的实体、关系、字段和摘要

全局知识库不会因为参与生成就成为作品事实。局域知识库也不会因为用户能看见某些字段,就把系统内部完整知识全部暴露出来。

3. 元结构定义(MetaSchema)边界

3.1 MetaSchema 的角色

元结构定义(MetaSchema)是模板、字段、校验规则、表单渲染和上下文注入的模型边界。普通用户界面里的“创作规则 / 作品模板 / 字段模板”,在底层都映射到 MetaSchema 或其字段定义。

MetaSchema 负责:

  • 定义字段类型、必填、枚举、引用和校验规则。
  • 定义字段所属领域、作用范围和目标类型。
  • 决定哪些字段能进入 UI、AI 上下文、检索、导出或用户编辑。
  • 给作品规划、提取、校验和投影提供结构约束。

MetaSchema 不负责:

  • 保存 Narrative State 的运行态值。
  • 替代作品正文、实体关系、事件时间线或用户确认记录。
  • 直接表达每个 UI 面板。

3.2 领域、范围和目标类型

模型层继续使用三维分类:

  • 领域(domain):内容(content)、世界(world)、叙事(narrative)。
  • 范围(scope):作品(work)、章节(chapter)、实体(entity)、关系(relation)、事件(event)。
  • 目标类型(targetType):具体实体、事件、章节或模板类型。

叙事领域(narrative)的字段可以定义“角色弧光、章节意图、悬念、张力、节奏、叙事视角”等结构,但运行态值必须落到叙事状态(Narrative State)等真实载体中,不能只靠 MetaSchema 自身承载。

3.3 元数据可见性字段边界

元数据对象需要表达普通用户可见性和系统使用边界。模型层至少保留这些语义:

控制项 含义
uiVisible 是否在普通用户界面展示
aiContext 是否允许进入 AI 上下文
userEditable 普通用户是否可以编辑
userSearchable 普通用户是否可以检索
exportable 是否允许随作品导出

这些控制项的精确字段名、表结构和接口参数不在本文件定义。这里的模型约束是:

  • uiVisible=false 不等于不能参与 AI 生成;是否进入上下文由 aiContext 决定。
  • aiContext=true 不等于普通用户可见;是否展示由 uiVisible 决定。
  • userEditable=true 不等于越过待审层(Shadow);用户编辑正式知识仍需记录来源和变更。
  • exportable=true 只能在用户拥有导出权限且对象属于可导出范围时生效。

4. 作品规划台到模型边界的映射

作品规划台(Planning Desk)是产品入口,不是新的一级模型集合。规划项需要映射到已有的世界状态(World State)、叙事状态(Narrative State)、元结构定义(MetaSchema)、作品(Work)、章节(Chapter)或文本块(Block)边界。

规划维度 用户语言 模型落点 说明
作品方向 题材、类型、主题、读者承诺、基调、禁区、结局方向 Work + MetaSchema + Narrative State(work) 作为作品级方向和后续生成约束
作品结构 章节顺序、章节摘要、当前字数、完成状态、近期目标 Work + Chapter + Narrative State(work/chapter) 章节骨架归 Content推进状态归 Narrative State
世界实体 角色、地点、物品、组织、规则、关系 World State + MetaSchema(world/entity/relation) 正式事实进入局域知识库
事件时间线 重大事件、发生章节、参与角色、因果效果、长期影响 World State(event/relation) + Narrative State(chapter/entity) 连接世界事实和剧情推进
角色弧光 目标、动机、弱点、秘密、变化阶段、关系变化 Narrative State(entity) + World State(entity/relation) 角色档案事实和弧线进度分层保存
剧情结构 卷、幕、章节、主线、支线、伏笔与回收 Narrative State(work/chapter) + MetaSchema(narrative) 约束长期推进,不单独建剧情表单模型
章节叙事规划 章节目标、情节节拍、冲突、结果、下一步钩子 Chapter + Narrative State(chapter) + Block 上下文 近程控制面,承接产品语言里的“情节节拍 / 场景推进”
张力节奏 利害关系、阻力、反转、悬念问题、信息释放、高潮密度 Narrative State(work/chapter) + 风险标记 作为检查和生成约束,不做重表单
叙事策略 叙事视角、时态、叙事距离、多视角切换、信息遮蔽 MetaSchema(narrative) + Narrative State(chapter/work) 约束章节生成和风格一致性
文风与质量检查 作者声音、句式、节奏、描写密度、风格漂移、一致性风险 MetaSchema(content/narrative) + 风险标记 + Usage/Audit 评估结果 检查结果提示和定位,不自动写正式事实

4.1 小说场景(Scene)边界

当前阶段不把小说场景(Scene)升成独立一级模型,也不采用 Outline / Scene 作为两个并列一级模型。产品可以使用“情节节拍 / 场景推进”这类作者语言,但模型归入章节叙事规划,并通过 Chapter、Block 上下文和 Narrative State(chapter)承载。

如果未来需要让 Scene 成为独立模型,必须先补 架构决策记录(ADR),并同步检查表结构、接口、前端状态和章节级确认边界;不能在产品或前端文档里先行假定已经存在。

5. 数据流转规则(模型视角)

5.1 Shadow -> Canonical

待审层(Shadow)进入规范数据(Canonical)的最小条件:

  • 待审对象存在、未过期、未被替代。
  • 正文合并必须通过文本块(Block)修订号保护。
  • 知识草稿必须通过来源快照(Source Snapshot)校验。
  • 需要用户确认的对象必须有明确用户决策。
  • 成功后待审对象必须迁出活跃区,进入归档层(Archive)或审计历史。

5.2 外部内容 -> Canonical 与 Shadow

  • 导入正文是用户动作,可以初始化 Canonical 正文。
  • 导入后的全书解析结果仍是待确认知识草稿,必须先进 Shadow。
  • 章节确认成功后,该章节范围内可确认对象一次性进入 Canonical失败时不得部分写入。

5.3 冲突与一致性

  • 内容冲突:文本块(Block)修订号不匹配,交给前端冲突处理和重试。
  • 知识冲突:新提取事实和已确认事实不一致,只能生成待确认知识或风险标记,由用户取舍。
  • 投影不一致:外部检索或图查询投影未追平时,不得把投影结果当事实源;需要通过 PostgreSQL 事实源和覆盖层补齐。

6. 关联阅读

  • 系统边界与 BC架构-01-系统全貌与边界上下文.md
  • ADR架构-03-关键决策与原则(ADR).md
  • 生命周期与状态机:架构-04-状态机与约束清单.md
  • 系统处理流程:流程-02-系统处理流程(系统视角).md
  • 统一数据库表结构:后端-04-统一数据库Schema-v1.md
  • 统一 API 契约:后端-05-统一API契约-v1.md