---
name: novel-reviewer
description: Use when user wants to check logic consistency, polish style, find plot holes, or review existing chapters. Triggers include "检查", "润色", "逻辑", "伏笔漏洞", "审查".
---

# 小说审查润色

编排 **LoreChecker + Stylist + StyleDirector** 审查流程。

## 触发条件

- "检查逻辑" / "逻辑检查"
- "润色" / "润色风格"
- "找伏笔漏洞" / "伏笔检查"
- "审查章节" / "审查"
- "风格问题"

## 工作流程

```dot
digraph review_flow {
    rankdir=TB;
    
    "审查请求" [shape=box];
    "审查范围?" [shape=diamond];
    "逻辑检查" [shape=box];
    "风格检查" [shape=box];
    "完整审查" [shape=box];
    "生成报告" [shape=box];
    "需要修改?" [shape=diamond];
    "自动润色" [shape=box];
    "完成" [shape=box style=filled fillcolor=lightgreen];
    
    "审查请求" -> "审查范围?";
    "审查范围?" -> "逻辑检查" [label="仅逻辑"];
    "审查范围?" -> "风格检查" [label="仅风格"];
    "审查范围?" -> "完整审查" [label="完整"];
    "逻辑检查" -> "生成报告";
    "风格检查" -> "生成报告";
    "完整审查" -> "生成报告";
    "生成报告" -> "需要修改?";
    "需要修改?" -> "自动润色" [label="是"];
    "需要修改?" -> "完成" [label="否"];
    "自动润色" -> "完成";
}
```

## 审查类型

### 1. 逻辑检查 (LoreChecker)

```python
检查项目:
├── 时间线一致性
│   └── 事件顺序是否合理
├── 角色状态变异
│   ├── 获得物品 (acquire)
│   ├── 使用技能 (use)
│   ├── 移动位置 (move)
│   ├── 生命状态 (health)
│   └── 修炼境界 (realm)
├── 伏笔回收状态
│   ├── 待回收是否超期
│   └── 回收是否合理
└── 世界观规则
    └── 是否违反设定
```

**可选：使用内置 ReviewerAgent（融合 InkOS 33维度审计）**

```python
from tools.agent import ReviewerAgent, AgentContext
from tools.llm import LLMClient, LLMConfig

config = LLMConfig.from_env()
client = LLMClient(config)
ctx = AgentContext(client, config.model, project_root)

reviewer = ReviewerAgent(ctx)
result = await reviewer.review(content, context, dimensions=[1,2,3,6,7,8])
```

ReviewerAgent 支持 **33维度审计**（从 InkOS 融合）：

| 维度 | 名称 | 维度 | 名称 |
|------|------|------|------|
| 1-9 | 逻辑类 | 20-23 | AI痕迹类 |
| 10-19 | 质量类 | 24-37 | 高级审计类 |

#### 逻辑检查示例

```
用户: 检查第五章的逻辑

AI: 🔍 逻辑检查：第五章

## 检查结果

### ✅ 通过项
- 时间线顺序正确
- 角色位置连续
- 伏笔引用有效

### ⚠️ 警告 (2)
1. **角色状态**: 张三在 ch_004 受伤，但 ch_005 直接战斗未说明恢复
   - 建议: 添加伤势恢复的描述

2. **世界观**: 档案馆需要凭证才能进入，但角色直接进入
   - 建议: 说明令牌来源或进入方式

### ❌ 错误 (0)
无严重逻辑错误
```

### 2. 风格检查 (Stylist)

```python
检查项目:
├── AI 痕迹检测
│   ├── 40+ 中文 AI 套路词 (craft/ai_patterns.yaml)
│   ├── 段落等长变异系数检测 (融合 InkOS dim 20)
│   ├── 套话词密度检测 (融合 InkOS dim 21)
│   ├── 公式化转折词检测 (融合 InkOS dim 22)
│   └── 列表式结构检测 (融合 InkOS dim 23)
├── 声音一致性
│   └── 叙述者与角色声音融合
├── 信息倾倒
│   └── 过度密集的信息描述
├── 节奏分布
│   └── 段落长度变化
└── 对话风格
    └── 符合角色性格
```

#### AI 痕迹检测词库（部分，完整见 craft/ai_patterns.yaml）

```
禁用词:
- "仿佛" + 比喻
- "如同" + 比喻
- "心中涌起一股..."
- "眼神中闪过一丝..."
- "嘴角微微上扬"
- "轻轻地点了点头"
- "缓缓地吐出一口气"
- "不禁..."
- "不由得..."
- "下意识地..."
```

#### 风格检查示例

```
用户: 检查第五章的风格

AI: 🎨 风格检查：第五章

## 检查结果

### ❌ AI 痕迹 (3处)
1. 第12行: "嘴角微微上扬"
   - 替换建议: "笑了" 或 具体表情描写

2. 第45行: "心中涌起一股莫名的情绪"
   - 替换建议: 描述具体情绪或身体反应

3. 第78行: "眼神中闪过一丝复杂的神色"
   - 替换建议: 具体描述是什么神色

### ⚠️ 节奏问题 (1处)
- 第3-5段连续长段落（>200字）
- 建议: 插入短句或对话调节节奏

### ✅ 通过项
- 声音一致性良好
- 对话符合角色性格
- 无信息倾倒

## 风格评分
| 维度 | 分数 |
|------|------|
| AI 痕迹 | 75/100 |
| 声音一致性 | 90/100 |
| 节奏分布 | 85/100 |
| 综合评分 | 83/100 |
```

### 3. 完整审查报告

```
用户: 审查第五章

AI: 📋 完整审查报告：第五章

## 基本信息
- 章节: ch_005
- 字数: 3,521
- 审查时间: 2026-03-03 08:50

## 一、逻辑检查

| 类别 | 状态 | 数量 |
|------|------|------|
| 错误 | ❌ | 0 |
| 警告 | ⚠️ | 2 |
| 通过 | ✅ | 8 |

### 警告详情
1. [角色状态] 张三伤势未说明恢复
2. [世界观] 档案馆进入方式未说明

## 二、风格检查

| 维度 | 分数 | 状态 |
|------|------|------|
| AI 痕迹 | 75 | ⚠️ 需改进 |
| 声音一致性 | 90 | ✅ 良好 |
| 节奏分布 | 85 | ✅ 良好 |

### 需修改项
1. 第12行: "嘴角微微上扬" → 建议修改
2. 第45行: "心中涌起..." → 建议修改
3. 第78行: "眼神中闪过..." → 建议修改

## 三、伏笔检查

| 伏笔 ID | 状态 | 说明 |
|---------|------|------|
| ch_002_mystery_letter | ✅ 已回收 | 信件内容揭示 |

## 总结

**审查结果**: 需修改后通过

**建议操作**:
1. 修复 2 处逻辑警告
2. 修改 3 处 AI 痕迹
3. 调整 1 处节奏问题

**下一步**:
- 输入 "润色" 自动修复风格问题
- 或手动修改后重新审查
```

## 自动润色（基于已合成风格）

```

**说明**: 风格规则直接从 `composed.md` 读取，该文件已包含三层合成结果（craft/ + styles/ + novels/），无需重新组装。
用户: 润色第五章

AI: ✨ 风格润色中...

### 修改内容

**第12行**:
- 原文: 他嘴角微微上扬。
- 修改: 他笑了，眼角的皱纹舒展开来。

**第45行**:
- 原文: 他心中涌起一股莫名的情绪。
- 修改: 他握紧了拳头，指甲陷入掌心。

**第78行**:
- 原文: 她眼神中闪过一丝复杂的神色。
- 修改: 她垂下眼帘，睫毛在烛光中投下阴影。

### 润色统计
- 修改处: 3
- 新增字数: +15
- 删除字数: -12

✅ 润色完成，已更新 manuscript/arc_001/ch_005.md
```

## 文件访问

| 操作 | 路径 |
|------|------|
| 读取草稿 | `data/novels/{id}/data/manuscript/` |
| 读取合成风格 | `data/novels/{id}/data/style/composed.md` |
| 读取提取风格源 | `data/novels/{id}/data/sources/{source_id}/style/` |
| 读取角色设定 | `data/novels/{id}/src/characters/` + `data/novels/{id}/data/characters/cards/` |
| 读取世界观 | `data/novels/{id}/src/world/` + `data/novels/{id}/data/world/` |
| 写入润色 | `data/novels/{id}/data/manuscript/` |
| 审查记录 | `data/novels/{id}/data/manuscript/*_review.yaml` |

## 审查模式

| 模式 | 严格度 | 说明 |
|------|--------|------|
| 宽松 | 低 | 仅报告错误，警告不阻塞 |
| 标准 | 中 | 报告错误和警告 |
| 严格 | 高 | 警告也阻塞通过 |

## 错误处理

| 错误 | 处理 |
|------|------|
| 文件不存在 | 提示先创建草稿 |
| 风格档案缺失 | 使用默认规则 |
| 润色失败 | 保留原文，报告失败原因 |

## 与其他 Skill 的关系

- **novel-creator**: 创作完成后触发审查
- **novel-manager**: 审查后更新伏笔状态
