Skip to content

动态热力 · 风格雷达 · 资产联动

📊 动态热力 · 风格雷达 · 资产联动(v2.18.0+)

通用原则:缺真源就写 N/A。这三张图都不允许「把缺失画成 0、把代理指标冒充质量分、把自由文本编成半径」。

1. 动态工作热力图(进行中)

位置:主控 Agent 视图内的「动态工作热力图」区块。

写作时最想知道的是三件事:跑到哪个阶段、卡在哪、每个阶段烧了多少。

  • 真源唯一:.novel/status.json 的 stage_metrics(stage / tokenCost / latencyMs / partial / chapterId / timestamp)+ 顶层 status / active_step_index / updated_at。
  • 形状:阶段(行)× 时间桶(列,UTC HH:00Z)。每格是该桶内该阶段的调用次数,悬停/标题给出聚合 token 与耗时。
  • 「动态」= 轮询快照:页面可见时 5s 重读一次;document.visibilityState === 'hidden' 时跳过;读失败保留上次数据并显示错误行,不把失败画成 0。
  • 缺值处理:token / 耗时整段缺失时保持 null(渲染 N/A),不聚合为 0;无时间戳条目进 undated 单列;窗口外的旧条目计入 foldedCount 并附说明。
  • 三条明确 N/A(面板底部直书):
    • 无章节轴 — chapterId 是可选项,多数条目没有值,硬做「章节 × 阶段」等于编数据。
    • 不是实时事件流 — status.json 只有聚合结果,没有事件序列;真实时流请用「运行轨迹」面板。
    • 无质量分真源 — stage_metrics 只记成本与耗时,不含质量分;质量看六维评审与门控。

2. 风格 / 节奏雷达

位置:评审中心 → 技法面板 → 风格节奏雷达 页签。

「把风格做成雷达图」有一个必须先回答的问题:半径放什么。

  • 不放什么:BookStyleProfile 的九个维度(叙事密度、描写比重、句式风格、情绪呈现……)全是自由文本,没有有限数值范围。把它们编成数字画成半径就是造假,所以它们只以「目标风格(无数值)」文本列表出现在雷达旁边。
  • 放什么:六项机械代理指标,0–100,来自既有 self-assessment 机械打分器(对章节正文做字符/句段统计)——篇幅、对话节奏、段落节奏、句式变化、场景分段、开篇钩子。面板与图例都写明:代理指标,不是文学评分。
  • 量纲隔离:卷纲定位表的压力级 1–5、情绪强度 1–10 是另一套量纲,单独用数字卡片展示,不叠进雷达冒充可比。
  • 无正文不画:没有章节正文时显示空态,绝不画一张 0 分雷达。

3. 资产联动一致性(只读诊断)

位置:资产库视图内。

资产有三条派生链:角色状态(真源)→ 关系库产物、快照关系变更 → 角色关系状态、以及知识图谱边。三者会不同步。

  • 为什么只诊断不修复:资产产物是带 contentHash 的不可变快照(buildLibraryArtifact + 深度冻结 + 守恒校验),自动改写会破坏守恒口径。所以这里只列清单,重建走既有「迁移角色关系库」显式入口。
  • 三类冲突:
    • relationship_edge_drift — 角色状态复算出的 hash 与产物 contentHash 不一致(产物陈旧)。
    • snapshot_relation_not_in_state — 快照记录了关系变更,但角色状态的关系表没有能覆盖它的条目。覆盖判定要求端点同名且关系文本按标点切出的片段有实质重叠,避免「同名不同事」被误判成已回填。
    • graph_edge_missing / graph_edge_unbacked — 图谱边缺失 / 无据(可选面:未同时提供两侧键则整面 N/A)。
  • 不误报的边界:关系语义一律 unknown,自由文本不构成冲突;角色状态尚未装载时整段 N/A(绝不按空集判漂移);设定投影与角色状态字段由既有 fold drift 负责,不在这里出第二套结论。

4. Agent 能力矩阵(只读)

位置:技能库侧栏(默认折叠)。

「不同小说、不同场景调用不同 agent,需要的技能也不同」这件事原本没有落点:技能库里有什么、某个角色实际能用什么,只能靠人翻。

  • 能力口径做窄:能力 = 角色声明的 kinds / stages 标记 ∩ 技能声明的标记。这两个标记技能本来就有(dynamicOutlinePlanner 的 stages/kinds、技能库条目的 kinds),所以这是复用既有真源,不是新造分类学。
  • 三类结论分开:某角色缺哪个能力(真缺口)、全角色合起来仍无人覆盖的能力(真缺口汇总)、有技能但没有任何角色声明需要(冗余候选,不是错误)。
  • 不越界:不生成技能、不改技能库、不决定模型路由。
  • 未装载 ≠ 零覆盖:技能库没装载时所有行空、整段 N/A,绝不把「没读到」说成「一个技能都不覆盖」。
  • 矩阵跟随当前筛选结果(搜索词 / 分类),不越过筛选另列全库;技能名超过 3 项时折叠为「等 N 项」,全量在 title 里。

5. 资产提取缺口(只读,续写 / 拆书共用)

位置:资产库视图内。

续写一本旧书时,前作可能压根没有资产库;拆书拆出来的场景、人物也要能落进本仓资产。当前缺的是「正文已经用到、资产还没接」的可见性。

  • 两类可判定缺口:① wiki/entities/characters 有该人物实体、正文里也出现,但角色状态里没有这个人;② 两个已知角色在正文同一句出现,但双方都没有关系条目。
  • 证据可追溯:每条缺口带章号与截断片段(超过 60 字加省略号),关系对按句内首次出现顺序排序(「甲→乙」贴原文,而不是码点序)。
  • 单字名消歧:靠最长匹配——命中的位置若被更长的已知名字覆盖(「王府」),这次出现就不算「王」。
  • 只给建议,不写入:proposals 是可直接粘去草稿区的文本;面板不建实体、不改资产(Draft-first:必须经草稿 + accept)。
  • 世界构建 / 场景恒为 N/A:仓库暂无结构化抽取真源;用关键词猜「新场景」会污染资产库,比缺一条更糟。

相关