88 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: 核对内容一致性
description: 检查正文或细纲候选的结构、事实、角色状态、能力代价、伏笔和证据缺口。候选进入用户决策或独立评分前使用;只产检测报告,不修改候选。
disable-model-invocation: true
---
# 检测(scenario: validation / consistency_check | purpose: detection | 槽位: 检测→detector)
何时用:候选章生成后、用户三决策前的伴随检查(C4);也可对既有章回溯检查。
## 正文候选执行顺序
1. 先运行 `scripts/check_writer_candidate.py`;它只做确定性机械硬门,不调用模型。
2. 机械硬门阻塞时直接返回结构化失败码,保留审查轨迹,不调用语义 detector。
3. 机械硬门通过后,编排层构造 `semantic-detector-input-v3`(生产构造器:`scripts/run_writer_semantic_detector.py` 的 `build_semantic_input_v3`,从 WriterContext + 候选投影并闭集校验,sourceRef 清洗成合同形状),再以 fresh 无会话调用执行一个候选的语义核查。
4. 模型只返回 `semantic-detection-draft-v3`;adapter 负责绑定输入、候选、上下文、模型回执、字符 offset、状态和报告 hash,形成 `SemanticDetection v3`。异常、非法结构或绑定不一致全部失败关闭。
当前机械硬门覆盖:WriterContext v1、CandidateEnvelope v2、上下文与候选 hash、篇幅、细纲事件/角色/伏笔/章末钩子锚点。事实断言、角色知情范围、能力代价、语义冲突、新设定识别和证据缺口属于 semantic detector,不得塞回 writer 输出或机械门。
## 元数据驱动(本功能的核心机制)
**检查清单由字段生成,不硬编**:凡 aiContext 含 `detection` 的字段,自动成为一个检查项——
| 字段(来源) | 检查什么 |
|---|---|
| character.知情范围 | 角色说出/表现出不该知道的事("说漏嘴"是第一大穿帮) |
| character.行事逻辑/说话方式 | 言行与语言指纹逐一核对 |
| power_system.代价限制 | 境界与能力是否越过体系代价 |
| location.规则特例 | 地点规则是否被违反 |
| item 能力边界 | 物品表现是否超出卡面 |
| 演变历程(各实体型) | 演变连续性/跳级穿帮(上一章还4级、这一章突然7级;登场/退场节点缺失或时间线倒挂) |
| outline.伏笔动作 | 埋/推/收是否照细纲执行,有无擅自新开或提前回收 |
| work_core.谜底与真相/结局方向 | **防提前泄底**——这正是检测可见底牌的原因 |
| style 黑名单与画像 | Grep 逐词扫黑名单;宣告情绪/形容词堆叠/无三件套场景抽查 |
| narrative_state | 时间线/即时局面/角色位置衔接 |
schema 给字段加上 detection 用途,检查项自动+1,本 skill 与 detector 一字不改。
## 输出合同
模型草稿必须精确包含:
`schemaVersion / claims[] / findings[] / assertionVerdicts[] / hardConstraintVerdicts[] / newSettingCandidates[] / evidenceGaps[]`
`claims` 明确候选中的事实主张与覆盖状态;`findings` 记录可定位问题;verdict 完整覆盖输入登记的 assertion/constraint ID。`newSettingCandidates` 登记写手新写出的设定(提案,不是正典);与既有正典冲突才进 `findings`/`conflict` 并失败关闭。只有针对**已有正典/前文章节**的 `evidenceGaps` 或 `unknown` 可以触发编排器补证;把新设定写成缺口不触发补证。纯机械失败或明确语义失败直接拒绝,不以同一输入重试。补证后必须冻结新的上下文快照和新的 WriterCreativeInput,再启动 fresh writer 调用。正典检索零命中时,编排器把缺口升格为新设定提案,当前候选进人闸。
正文回放检测每臂最多调用三次。模型已返回但结构/引文不合约时,可用剩余额度回喂上一稿纠错;带可信成本回执的瞬时 `SEMANTIC_DETECTOR_API_ERROR` 最多重发同一输入一次,并与结构纠错共用三次总额度。认证、预算、本地合同、成本未知或连续第二次 API 错误均失败关闭,不得重试绕过。
最终 SemanticDetection v3 由 adapter 增加运行身份、候选/上下文 hash、字符 offset、模型回执、状态和报告 hash。模型不得输出这些可信字段。
## 细纲回放分支(`fine_outline_replay`)
何时用:`规划下一章` 产出的 `fine_outline` 候选进入独立评分前。检测器只看冻结到 `as_of` 的规划上下文和候选,不看目标章标准事实,不把评测答案倒灌回规划侧。
检查对象和证据格式:
| 检查对象 | 检查项 | 高严重度条件 | 证据必须包含 |
|---|---|---|---|
| 候选结构 | 必填字段、目标章号、事件 ID、事件顺序 | 缺字段、重复事件或目标章错误导致无法评估 | 字段路径 + 候选值摘要 |
| 因果链 | 事件触发、行动、结果方向是否自洽 | 后一事件无前置、结果与前置状态矛盾 | 事件 ID 对 + 冲突原因 |
| 实体状态 | 角色/势力/地点/能力是否违反冻结事实 | 引用未来事实或越过 N 时点能力边界 | `sourceId` + 冻结字段 |
| 伏笔动作 | 埋、推进、回收和不确定标记 | 将未知或未来回收写成确定事实 | 伏笔标识 + 当前台账定位 |
| 来源引用 | `sourceRefs` 是否来自快照、是否包含目标章及以后 | 目标章/未来来源出现在候选引用中 | 来源 ID + 章号范围 |
| 未知项纪律 | `unknowns` / `assumptions` 是否显式承载缺口 | 用无来源断言替代未知项 | 候选字段路径 |
机器报告的类别是闭集:`findings.category` 只允许 `candidate_structure`、`causal_chain`、`entity_state`、`foreshadowing_action`、`source_reference`、`unknowns_discipline`;`coverageFindings.category` 只允许 `frozen_context_gap`。未登记类别不得用近义词或变体绕过,编排器必须失败关闭。
报告仍然只产审查结果,不修改候选。回放中任一高严重度问题阻断该臂进入 judge;目标章新角色是否缺卡需要目标章标准事实,detector 无权判断,归 judge/eval。
## 红线
只产报告,不改任何创作文件;证据先行——无依据的观感问题归「建议」并标明主观;底牌信息仅用于检测判断。
## 数据边界
- 可发起受治理的外部模型调用;不落库除非合同另有声明。
- 不写 Canonical、不改正式规划。
## 输入
- 用户明确点名本 Skill 所服务的创作阶段任务包(作品、章节/场景范围、冻结上下文摘要)。
- 只消费 本 Skill 的 `references/` 目录 中与当前阶段相关的合同段落。
## 复利合同
- **消费**:候选正文与冻结上下文 / 大纲锚点。
- **回写**:本检测槽不单独落 `example_lesson`;阻断结论进入 `写下一章` / `回放评估细纲质量` 后由生产或评测链登记效果信号。