动态热力 · 风格雷达 · 资产联动
📊 动态热力 · 风格雷达 · 资产联动(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:仓库暂无结构化抽取真源;用关键词猜「新场景」会污染资产库,比缺一条更糟。
相关
- 运动热力图(模块接线地图) — 静态接线 vs 本页的运行时阶段热力
- 主控 Agent — 热力图所在视图
- 评审中心 — 六维评分与技法面板
- 正典编辑器 — 关系与角色状态入口