feat(review): 人物塑造 advisory 审(第五审,仅建议不阻断验收)
写→审链新增第五审「人物塑造」(灵感③/D2):advisory 单维——仅建议、不阻断
验收(不进 conflicts、不碰 assert_conflicts_resolved、不入 REVIEW_RESERVED_NAMES);
只做人物塑造、不做氛围。
- SPEC characterization_spec(analyst,reads=("characters",),writes=())+
prompts/characterization.md(只读、显式忽略文本长度与辞藻华丽度、引用逐字片段+置信度)
- schema CharacterizationReview{issues[...]}(全字段默认值守解析韧性)+ 注册 catalog
- 计数三处 22→23 + regen prompt_hashes.json(仅加一条)
- DB chapter_reviews 加 characterization JSONB nullable 列(迁移 f6a7b8c9d0e1)
- 接线:graph REVIEW_SPECS 追加 · chain ReviewRecordRepo · collect(extract/record) ·
review_repo(Protocol/Sql/_to_view/ReviewView) · sse(event/factory/section) · normalize 自动纳入
- 契约 ReviewHistoryItem 加 characterization(gen:api 已重生成)
- 前端 sse/history/useReviewStream + CharacterizationPanel(只展示无裁决 UI、置信度降序+低置信折叠)+ ReviewReport 挂面板
- 测试 test_characterization_does_not_block_accept + 计数/golden + collect/normalize + 前端 reducer/normalize/parse
守不变量 #2/#3/#9;依赖 ⑧(motive/appearance 作客观锚点)。
This commit is contained in:
@@ -226,6 +226,50 @@ class StyleDriftReview(BaseModel):
|
||||
)
|
||||
|
||||
|
||||
# ---- 人物塑造续审结构化输出(灵感③ · advisory 单维;仅建议、不阻断验收)----
|
||||
|
||||
|
||||
class CharacterizationIssue(BaseModel):
|
||||
"""单条人物塑造问题:角色 + 维度 + 定位 + 逐字引用 + 诊断 + 建议 + 置信度。
|
||||
|
||||
以人物卡 `motive`/`appearance` 为客观锚点。`quote` 是从本章草稿**逐字摘录**的支撑
|
||||
片段(内容锚,不得改写);`confidence` 供作者过滤主观/边缘诊断(对抗 LLM-judge 偏见)。
|
||||
全字段给默认值守解析韧性(畸形/缺字段不炸)。
|
||||
"""
|
||||
|
||||
character: str = Field(
|
||||
default="", description="涉及的角色名(尽量对齐人物卡 name;无法归属留空)"
|
||||
)
|
||||
aspect: str = Field(
|
||||
default="",
|
||||
description="塑造维度(动机一致性 / 声音辨识度 / 行为逻辑 / 外貌一致性 / 扁平化 等)",
|
||||
)
|
||||
where: str = Field(default="", description="本章定位:哪一段/哪个场景体现该问题")
|
||||
quote: str = Field(
|
||||
default="",
|
||||
description="从本章草稿**逐字摘录**的支撑片段(含标点,不得改写);供作者内容锚定位",
|
||||
)
|
||||
diagnosis: str = Field(default="", description="诊断说明:为何此处人物塑造偏弱/失真")
|
||||
suggestion: str = Field(default="", description="改进建议(方向性,不含改写后的正文)")
|
||||
confidence: float = Field(
|
||||
default=0.0, description="置信度 0.0–1.0(越确信越高,主观/边缘给低值,供作者过滤)"
|
||||
)
|
||||
|
||||
|
||||
class CharacterizationReview(BaseModel):
|
||||
"""人物塑造续审结构化产出:只读建议清单(advisory,不阻断验收,不变量 #3)。
|
||||
|
||||
**带默认值降级**:材料无人物卡 / 无明显问题时返回 `issues=[]`(默认值),不报错、
|
||||
不阻塞其余审(§5.2 失败隔离之外的内容性兜底,仿 `StyleDriftReview`)。仅建议——
|
||||
不进 conflicts、不碰验收 gate(灵感 D2 advisory)。
|
||||
"""
|
||||
|
||||
issues: list[CharacterizationIssue] = Field(
|
||||
default_factory=list,
|
||||
description="人物塑造问题清单(每条带角色/维度/定位/逐字引用/置信度);无则空列表",
|
||||
)
|
||||
|
||||
|
||||
# ---- worldbuilder 结构化输出(ARCH §5.4 worldbuilder 行 / §6.5 / §4.5)----
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user