7.8 KiB
旧知识记录分流
本文定义混合知识记录的迁移规则。输入是隔离快照中的旧表、结构版本、作品用途映射和确认依据;不查询或改写正式库。迁移不使用模型推断归属,也不以 work_id=0 或 draft_type=entity 单独确定业务含义。
先固定源身份
每条输入保留来源数据库、表、主键、revision、完整 payload、源哈希、删除状态、来源状态、授权策略及确认引用。映射键包含来源命名空间,PG 与 SQLite 中同号记录不能合并。
先建立显式 legacy_work_map:作者作品映射 B01 work,参考作品映射 B03 source;同一本书同时具有两种用途时分别登记两个对象和关联。example_reference_work 等档案是用途证据,歧义需要列入差异清单;不按书名、作品号大小或当前脚本入口猜测。work_id=0 是旧公共范围哨兵,目标中使用作者方法库作用域,不创建“作品 0”。
字段归一
| 旧载体 | 规范含义与目标 | 冲突处理 |
|---|---|---|
| payload.type / 型 | type_id;按固定旧结构身份和已登记别名解析 | 两键同时存在但不同,或未知类型,记录歧义,不按取值优先级吞掉另一键 |
| name / 名称 | 名称与独立别名集合 | 保留原字符串及规范值;不同记录同名不据此合并 |
| brief / 一句话摘要 | 描述 | 原值保留;不同键冲突进入差异记录 |
| fields / 字段 / 正式实体 attributes | 按固定结构版本映射的动态值 | 未知字段、类型不符或缺必填保留在迁移隔离记录,不丢弃、编造或直接启用 |
| 别名、出场章、字段.演变历程 | 名称索引、来源位置、时点事实或参考分析轨迹 | 章号通过源作品与顺序映射到稳定章节/来源定位;缺章或冲突不能补猜 |
| source / 来源 / 出处 / 实例 | 来源版本、定位与引文;字符串“拆书@…”只作来源提示 | 不把字符串变成已验证引用;实例中的“书”单独解析,不能全部绑定 source_id 指向的第一本书 |
| 状态、目标库、可见范围、_work_id | 旧描述信息与一致性校验线索 | 不覆盖表级确认、作品映射和当前用途授权;冲突留在差异记录 |
旧 payload 原样随迁移来源保存;归一后的字段使用 S04 结构绑定。原文、不确定字段、归并审计和被合并卡的全文不能因没有目标字段就被静默丢弃。
业务分流矩阵
按明确用途、具体类型和来源共同匹配;多条冲突或无匹配均进入隔离清单。
| 规则 | 旧记录条件 | 目标模块、类型与作用域 |
|---|---|---|
| K01 | draft_type=entity,source_type=parse_book,work_id=0,型为 craft/combat/emotion/scene_pattern/trope | B04 方法候选,保留原 type_id;source_id 映射 B03 原书,出处/实例映射来源定位。公共范围不等于已批准或无限制可用 |
| K02 | 作者作品中的 entity;type 为 character/location/item/faction/power_system/event;来源与作品一致 | B02 的实体或事件提案;固定作者作品、原来源及结构。pending 不直接变成正式事实 |
| K03 | 参考作品中的相同六型,来源为 upgrade_book/parse_book 等已登记抽取来源 | B03 的分析版本和分析项,仍为参考知识;不得落成当前创作作品的已知事实 |
| K04 | draft_type=entity 且 type=character_relation | 这是旧升格管线的关系卡。根据作品用途进入 B02 关系提案或 B03 关系分析;端点从字段.甲方/乙方、原 draft ID 或明确名称解析,不作为普通实体保存 |
| K05 | draft_type=relation,端点为 source/target 或甲方/乙方,关系类型为 type/关系类型 | 同样进入 B02 或 B03 的关系对象;先解析端点再写关系,不能与 K04 因行类型不同而重复建立同一来源对象 |
| K06 | 已确认 muse_knowledge_entity / relation 及对应草稿的 entity_id / target_object_id | 根据用途进入 B02 正式对象、B03 已确认分析或 B04 方法版本;草稿保留确认历史并指向同一个目标对象,不能再次复制为新候选 |
| K07 | character 公共写法、style/pacing 或其他可复用模具 | 只有明确方法用途及证据才进入 B04;本书 style 属 B06 声音,pacing 规划属 B01。类型名本身不足以判定用途 |
| K08 | SQLite cards、向量镜像和 snapshots | 内容按已确认来源映射到相应对象;仅含 embedding 指针的行只承接 B09 来源与索引身份,不造空知识卡、不提升正式状态 |
其他已登记类型按内置类型承接表及明确实例用途扩展规则。没有对应生命周期的旧值先隔离,不以“元数据可扩展”为由创建无行为归属的新实体。
确认状态与当前有效性
| 旧状态 | 目标处理 |
|---|---|
| pending、payload 写“草稿” | 所属模块未决候选或分析草稿;置信度高不能代替作者确认 |
| confirmed 且正式目标、确认记录及来源可关联 | 保存同一目标正式版本与决定来源;候选成为已采纳历史;当前可用性再按来源和授权计算 |
| confirmed 但目标缺失、身份矛盾或确认依据无法证明 | 原状态进入历史,目标标为迁移待复核且不可用于当前生成;不伪造作者决定 |
| rejected、discarded、superseded、deleted=true | 原拒绝、替代或删除历史;不复活为活跃候选、别名或索引 |
| 来源撤回、用途不允许或结构不可解释 | 保留记录但退出当前消费;补证或改用途须经所属正式流程 |
引用顺序是来源/作品/结构 → 实体或方法 → 关系/绑定 → 候选与正式版本对应 → 运行、决策、向量和历史审计。名称端点须在同一作用域唯一匹配;旧数值 draft ID 先查映射,不当作新实体 ID。向量记录保留原模型、维度和哈希,内容或模型合同改变时重建;冲突 owner 不按导入顺序抢占。
歧义与对账
隔离记录保存 source_key、rule_id、reason_code、原 payload、冲突取值、关联源键和可选择的处理。类型双键冲突、未知用途、缺失端点、正式目标缺失、权限冲突分别使用不同原因,不合并成“导入失败”。隔离内容不进入生产查询。
每条旧输入都必须有“已映射到一个或多个明确关联目标 / 保留历史 / 隔离待裁决”之一;多目标只允许拆分已明确定义的对象与来源关系。不得出现输入无归宿、两个正式 owner、静默丢弃字段或自动补批准。重复导入按 source_key、revision 与源哈希幂等;相同身份不同内容报告漂移。
知识记录分流.py 负责纯判定及别名冲突;转换业务对象.py 调用各所属模块的迁移入口;建立映射.py 保存旧新身份;核对结果.py 对账状态、来源、动态字段和引用。代码位置与测试用例以清单和用例重写合同登记。
验收至少包括 K01 中文公共范式、K02 英文作品卡、K03 同模具参考实体、K04 entity 形状的关系、K05 关系两端缺失、K06 已确认重复导入、双键冲突、work_id=0 非范式、跨书归并实例、软删不复活、未知字段隔离和 PG/SQLite 同号不同来源。纯转换和隔离 PG 导入分别验证,不能只检查导入行数。