novel-writer-cli 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agents/chapter-writer.md +30 -19
- package/agents/quality-judge.md +48 -3
- package/agents/style-refiner.md +41 -25
- package/dist/__tests__/agent-prompts-anti-ai-upgrade.test.js +123 -0
- package/dist/__tests__/anti-ai-templates.test.js +156 -0
- package/dist/__tests__/cli-version-flag.test.js +38 -0
- package/dist/cli.js +14 -1
- package/package.json +1 -1
- package/skills/novel-writing/references/style-guide.md +306 -28
- package/templates/ai-blacklist.json +498 -55
- package/templates/brief-template.md +5 -0
- package/templates/style-profile-template.json +15 -1
package/package.json
CHANGED
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
StyleAnalyzer 从用户样本中提取以下可量化特征:
|
|
10
10
|
|
|
11
11
|
- **avg_sentence_length**:平均句长(字数),用于校准生成文本的句式节奏
|
|
12
|
+
- **sentence_length_std_dev**:句长标准差,控制句长波动而不是只看平均值
|
|
13
|
+
- **paragraph_length_cv**:段落长度变异系数,避免整章段落长得像复制粘贴
|
|
14
|
+
- **emotional_volatility**:情感波动性,确保情绪不是单线平推
|
|
15
|
+
- **register_mixing**:语域混合度,保留口语/书面语/方言之间的自然落差
|
|
16
|
+
- **vocabulary_richness**:词汇丰富度,防止高频表达反复回流
|
|
12
17
|
- **dialogue_ratio**:对话占全文比例,控制叙述与对话的平衡
|
|
13
18
|
- **rhetoric_preferences**:修辞偏好列表(频率标注),如比喻、排比、短句切换
|
|
14
19
|
- **forbidden_words**:作者从不使用的词汇(精准收录,不过度泛化)
|
|
@@ -44,78 +49,320 @@ StyleAnalyzer 从用户样本中提取以下可量化特征:
|
|
|
44
49
|
|
|
45
50
|
## Layer 2: 约束注入(生成层)
|
|
46
51
|
|
|
47
|
-
ChapterWriter prompt
|
|
52
|
+
ChapterWriter prompt 中注入以下约束与目标:
|
|
48
53
|
|
|
49
54
|
### 2.1 AI 用语黑名单
|
|
50
55
|
|
|
51
|
-
从 `ai-blacklist.json`
|
|
56
|
+
从 `ai-blacklist.json` 加载,默认视作高危表达。叙述文默认避免;角色对话若因身份、语气、情境而合理,可按上下文克制保留。重点关注:
|
|
52
57
|
- 情感描写类:不禁、莫名、油然而生、心中暗道、嘴角微微上扬
|
|
53
58
|
- 过渡连接类:与此同时、值得一提的是、毫无疑问
|
|
54
59
|
- 形容夸张类:宛如、恍若、仿佛置身于
|
|
60
|
+
- 叙述连接词:在叙述段落中零容忍,优先用动作、场景切换、信息落差推进
|
|
55
61
|
- 详见 `${NOVEL_CLI_ROOT}/templates/ai-blacklist.json`
|
|
56
62
|
|
|
57
63
|
### 2.2 角色语癖
|
|
58
64
|
|
|
59
|
-
|
|
60
|
-
-
|
|
65
|
+
为重要角色准备可辨识的口头禅或说话习惯:
|
|
66
|
+
- 语癖应反复出现,但频率不规则:有时连续几轮对话都不出现,有时在压力、撒谎、兴奋时突然滑出来
|
|
61
67
|
- 语癖需符合角色背景(文化人用文言、江湖人用俚语)
|
|
62
68
|
- 不同角色的语癖必须可区分
|
|
63
69
|
|
|
64
70
|
### 2.3 反直觉细节
|
|
65
71
|
|
|
66
|
-
|
|
72
|
+
鼓励在需要打破“完美感”的地方插入反直觉的生活化细节,但不设固定数量。某些章节可以没有,某些章节也会自然冒出几处,例如:
|
|
67
73
|
- 打斗中途想起锅里还炖着汤
|
|
68
74
|
- 修炼突破时被蚊子咬了一口
|
|
69
75
|
- 严肃对话中对方裤子上有个洞
|
|
70
76
|
|
|
71
|
-
目的:打破 AI
|
|
77
|
+
目的:打破 AI 生成文本的“完美感”和“刻板感”,让人物像活人而不是任务执行器。
|
|
72
78
|
|
|
73
79
|
### 2.4 场景描写限制
|
|
74
80
|
|
|
75
81
|
- 场景描写最多 2 句,优先用人物动作带出环境
|
|
76
82
|
- 禁止大段环境白描("空气中弥漫着……远处是……近处有……")
|
|
77
|
-
-
|
|
83
|
+
- 好的范例:`他一脚踢开歪斜的门板,霉味扑面。这地方荒了好几年。`
|
|
78
84
|
|
|
79
85
|
### 2.5 句式多样性
|
|
80
86
|
|
|
81
|
-
-
|
|
82
|
-
-
|
|
83
|
-
-
|
|
87
|
+
- 避免在相邻 5-7 句里出现 3 句以上同句式(如连续以“他……”或“就在这时……”起头)
|
|
88
|
+
- 长短句要形成波动,不要机械轮换:短句可以成组爆发,随后由较长句回收;也可以长句铺陈后突然切成短句
|
|
89
|
+
- 排比通常保持短促、克制,并由动作、对话或信息转折打断;不要连续多段都用同一种排比开头
|
|
90
|
+
- 句首的主语、时间状语、转折词不要连续堆叠成节拍器式节奏
|
|
84
91
|
|
|
85
92
|
### 2.6 标点符号约束
|
|
86
93
|
|
|
87
|
-
LLM 对特定标点有系统性过度使用倾向,是最容易被读者感知的 AI
|
|
94
|
+
LLM 对特定标点有系统性过度使用倾向,是最容易被读者感知的 AI 痕迹之一。生成阶段先按千字频率把握趋势;进入 §2.10 L6 结构复核时,再用章节/段落上限做硬检查。两套约束发生冲突时,以更严格的一侧为准。
|
|
88
95
|
|
|
89
|
-
-
|
|
96
|
+
- **总体原则**:按千字频率看趋势,不按单章机械卡数。情绪峰值章可以短暂上浮,但不能连续数章都靠同一种标点撑节奏
|
|
97
|
+
- **破折号(——)**:通常保持在 0-1 处/千字。LLM 极度偏好用破折号做解释性插入、情绪停顿和场景切换,应优先改用逗号、句号或重组句式
|
|
90
98
|
- ✗ `他看向远方——那是他曾经的家。` → ✓ `他看向远方。那是他曾经的家。`
|
|
91
99
|
- ✗ `门开了——是她。` → ✓ `门开了,是她。`
|
|
92
100
|
- ✗ `一切都结束了——或许吧。` → ✓ `一切都结束了。或许吧。`
|
|
93
|
-
-
|
|
94
|
-
-
|
|
101
|
+
- **省略号(……)**:通常保持在 0-2 处/千字,避免连续两句都靠省略号收尾
|
|
102
|
+
- **感叹号(!)**:通常保持在 0-3 处/千字;对话中可以略宽,但叙述文不要连续感叹
|
|
95
103
|
|
|
96
104
|
### 2.7 对话与内心活动格式
|
|
97
105
|
|
|
98
|
-
|
|
106
|
+
人物说话和内心活动统一使用中文双引号(“”),格式如下:
|
|
99
107
|
|
|
100
|
-
- **说话**:`XX
|
|
101
|
-
- **内心活动**:`XX
|
|
108
|
+
- **说话**:`XX说:“我出去了。”` 或 `“我出去了。”XX甩手离开。`
|
|
109
|
+
- **内心活动**:`XX心想:“关我什么事。”` 或 `XX暗道:“这人不对劲。”`
|
|
102
110
|
- **禁止**使用单引号('')、直角引号(「」)、英文引号("")包裹对话和心理活动
|
|
103
|
-
-
|
|
111
|
+
- 引号内的句末标点在引号内:`“走吧。”` 而非 `“走吧”。`
|
|
112
|
+
|
|
113
|
+
### 2.8 统计分布目标
|
|
114
|
+
|
|
115
|
+
当 style-profile 有统计字段时,优先贴着目标写;字段为空时,回退到人类写作的通用范围。目标不是“命中一个点”,而是落在合理波动带里。
|
|
116
|
+
> 注:CS-A1 当前将相关统计字段平铺在 `style-profile.json` 顶层,而不是放在嵌套 `statistical` 对象中;以下按已落地字段名引用。`narration_connectors` 暂无独立字段,先用 `writing_directives` + 黑名单类别作为约束锚点。
|
|
117
|
+
|
|
118
|
+
#### 2.8.1 `sentence_length_variance`(句长方差)
|
|
119
|
+
|
|
120
|
+
- 主要读取:`style-profile.json.sentence_length_std_dev`
|
|
121
|
+
- 回退目标:8-18
|
|
122
|
+
- AI 特征:`std_dev < 6`,句子像同一把尺子量出来
|
|
123
|
+
- 写法提醒:把短句用在冲突、判断、动作切换,把长句留给铺陈、迟疑和复盘
|
|
124
|
+
|
|
125
|
+
#### 2.8.2 `paragraph_length_cv`(段落长度变异系数)
|
|
126
|
+
|
|
127
|
+
- 主要读取:`style-profile.json.paragraph_length_cv`
|
|
128
|
+
- 回退目标:0.4-1.2
|
|
129
|
+
- AI 特征:`CV < 0.3`,段落长度过于整齐
|
|
130
|
+
- 写法提醒:让单句段、短段、中段交错出现,不要每段都像同一个模板裁出来。常规章节更常见于 0.4-0.9;悬疑、恐怖或高碎片化场景可以短时上浮到 1.0-1.2,但不宜长期维持。
|
|
131
|
+
|
|
132
|
+
#### 2.8.3 `vocabulary_diversity`(词汇多样性)
|
|
133
|
+
|
|
134
|
+
- 主要读取:`style-profile.json.vocabulary_richness`(当前枚举代理;若后续提供数值型 `vocabulary_diversity_score`,以数值为准)
|
|
135
|
+
- 名称约定:方法论层统一称 `vocabulary_diversity`;当前落地字段仍是 `vocabulary_richness`;Layer 4 保留 `vocabulary_diversity_score` 作为观测指标名
|
|
136
|
+
- 回退目标:`medium`,理想接近 `high`
|
|
137
|
+
- AI 特征:`low`,高频词、同义反复、口头禅式副词持续回流
|
|
138
|
+
- 写法提醒:同一章里避免反复调用同一组“微微/缓缓/显然/实际上”来填充节奏
|
|
139
|
+
|
|
140
|
+
#### 2.8.4 `narration_connectors`(叙述连接词)
|
|
141
|
+
|
|
142
|
+
- 主要锚点:`ai-blacklist.json.categories.narration_connector` + `style-profile.json.writing_directives`
|
|
143
|
+
- 回退目标:叙述段落为 0;一旦命中就应优先改写,不要拿它当推进骨架
|
|
144
|
+
- AI 特征:靠“与此同时/值得一提的是/事实上/总之”串联段落
|
|
145
|
+
- 写法提醒:叙述推进优先用动作、视角切换、信息落差,不要用逻辑连接词搭脚手架
|
|
146
|
+
|
|
147
|
+
#### 2.8.5 `register_mixing`(语域混合)
|
|
148
|
+
|
|
149
|
+
- 主要读取:`style-profile.json.register_mixing`
|
|
150
|
+
- 辅助锚点:`style-profile.json.writing_directives`(用于保留口语/书面语/行话切换的正向提示)
|
|
151
|
+
- 回退目标:`medium`
|
|
152
|
+
- AI 特征:`low`,整章语域平得像统一播音腔
|
|
153
|
+
- 写法提醒:旁白、人物口语、行业黑话、方言滑落可以有轻微落差,但不能全员同声同调
|
|
154
|
+
|
|
155
|
+
#### 2.8.6 `emotional_arc`(情感弧线)
|
|
156
|
+
|
|
157
|
+
- 主要读取:`style-profile.json.emotional_volatility`
|
|
158
|
+
- 回退目标:`medium`
|
|
159
|
+
- AI 特征:`low`,情绪单线推进,没有迟疑、反弹、回收
|
|
160
|
+
- 写法提醒:一章内最好出现情绪转折,不要从头到尾只在一个强度档位匀速滑行
|
|
161
|
+
|
|
162
|
+
| 维度 | style-profile 字段/锚点 | 回退目标 | AI 特征 |
|
|
163
|
+
|------|-------------------------|----------|---------|
|
|
164
|
+
| `sentence_length_variance` | `sentence_length_std_dev` | 8-18 | `< 6`,句长过匀 |
|
|
165
|
+
| `paragraph_length_cv` | `paragraph_length_cv` | 0.4-1.2 | `< 0.3`,段长过匀 |
|
|
166
|
+
| `vocabulary_diversity` | `vocabulary_richness` | `medium`,理想接近 `high` | `low`,高频词回流 |
|
|
167
|
+
| `narration_connectors` | `writing_directives` + `ai-blacklist.narration_connector` | 叙述段落 0 | 连接词串段 |
|
|
168
|
+
| `register_mixing` | `register_mixing` + `writing_directives` | `medium` | `low`,整章播音腔 |
|
|
169
|
+
| `emotional_arc` | `emotional_volatility` | `medium` | `low`,情绪单线平推 |
|
|
170
|
+
|
|
171
|
+
### 2.9 人性化技法工具箱
|
|
172
|
+
|
|
173
|
+
不要只会“反直觉细节”这一招。人写作的自然感来自多种技术交替出现,而不是固定配额地刷同一种花样。
|
|
174
|
+
|
|
175
|
+
#### 认知(cognitive)
|
|
176
|
+
|
|
177
|
+
- `thought_interrupt` / 思维中断:角色的思路被外界刺激突然打断,留下不完整心流。例:`他刚想到“也许还能谈”——窗外那声急刹把后半句硬生生掐断。` 这是少数可以保留破折号的场景之一,但仍受 §2.6 的千字频率与 §2.10 L6 的章节上限双重约束。
|
|
178
|
+
- `self_correction` / 自我纠正:角色先说/先想一个版本,再立刻修正。例:`“我不在乎。”她顿了一下,改口,“不对,我只是现在不想在乎。”`
|
|
179
|
+
|
|
180
|
+
#### 感官(sensory)
|
|
181
|
+
|
|
182
|
+
- `sensory_intrusion` / 感官侵入:高压场面里插入刺鼻气味、皮肤疼痒、衣料摩擦等杂讯。例:`他举枪时,鼻腔里忽然钻进一股铁锈味,像旧水管刚被拧开。`
|
|
183
|
+
- `mundane_detail` / 琐碎细节:在大事件里保留无关紧要但真实的小东西。例:`她哭得肩膀发抖,手里却还捏着刚买的两根葱。`
|
|
184
|
+
|
|
185
|
+
#### 语言(linguistic)
|
|
186
|
+
|
|
187
|
+
- `dialect_slip` / 方言滑落:情绪上来时,人物语言从标准表达滑向地域口吻。例:`“你少来这套。”他忍了半句,还是漏出一句,“莫挨老子。”`
|
|
188
|
+
- `incomplete_sentence` / 不完整句:保留被吞掉的句尾和没说完的话。例:`“我本来以为你会……”她没接下去,只把杯子推远了一点。`
|
|
189
|
+
- `rhetorical_question` / 反问:问题不是为了得到答案,而是为了施压、推开或自我确认。例:`“你真觉得我会信?”`
|
|
190
|
+
|
|
191
|
+
#### 情感(emotional)
|
|
192
|
+
|
|
193
|
+
- `stream_of_consciousness` / 意识流片段:短时间内让念头不按逻辑顺序滑动。例:`门还没开,他先想到的是灯没关、药没吃、她是不是又在咳。`
|
|
194
|
+
- `emotional_non_sequitur` / 情感跳跃:人物情绪并不顺着事件线性移动。例:`她明明该怕,偏偏先觉得丢脸。`
|
|
195
|
+
- `contradiction` / 矛盾:同一人物在同一场景里保留相反冲动。例:`他想把真相全说出来,又恨不得她一个字都别问。`
|
|
196
|
+
|
|
197
|
+
#### 结构(structural)
|
|
198
|
+
|
|
199
|
+
- `nested_parenthetical` / 嵌套补充:在主句中插入短促旁注,制造人类说话时的补丁感。例:`他把钥匙塞回去,动作很轻,轻得近乎心虚。`
|
|
200
|
+
- `abrupt_topic_shift` / 突然转题:人物为了逃避、试探或缓冲,突然把话题切到别处。例:`“你昨晚去哪了?”她没答,低头问,“锅里那汤是不是糊了?”`
|
|
201
|
+
|
|
202
|
+
每章从工具箱中随机采样若干技法使用,不固定数量,不固定组合。不要机械凑满;没有自然落点时,可以不用。
|
|
203
|
+
|
|
204
|
+
| 技法 | 类别 | 中文名 |
|
|
205
|
+
|------|------|--------|
|
|
206
|
+
| `thought_interrupt` | 认知 | 思维中断 |
|
|
207
|
+
| `self_correction` | 认知 | 自我纠正 |
|
|
208
|
+
| `sensory_intrusion` | 感官 | 感官侵入 |
|
|
209
|
+
| `mundane_detail` | 感官 | 琐碎细节 |
|
|
210
|
+
| `dialect_slip` | 语言 | 方言滑落 |
|
|
211
|
+
| `incomplete_sentence` | 语言 | 不完整句 |
|
|
212
|
+
| `rhetorical_question` | 语言 | 反问 |
|
|
213
|
+
| `stream_of_consciousness` | 情感 | 意识流片段 |
|
|
214
|
+
| `emotional_non_sequitur` | 情感 | 情感跳跃 |
|
|
215
|
+
| `contradiction` | 情感 | 矛盾 |
|
|
216
|
+
| `nested_parenthetical` | 结构 | 嵌套补充 |
|
|
217
|
+
| `abrupt_topic_shift` | 结构 | 突然转题 |
|
|
218
|
+
|
|
219
|
+
### 2.10 六层结构规则
|
|
220
|
+
|
|
221
|
+
#### L1 反模板句式
|
|
222
|
+
|
|
223
|
+
**禁止:**
|
|
224
|
+
- “首先……其次……最后……”三段式总结
|
|
225
|
+
- “一方面……另一方面……”二元对立
|
|
226
|
+
- “不仅……而且……更……”递进堆砌
|
|
227
|
+
- 连续多段都用同样句式开头的排比陈述
|
|
228
|
+
|
|
229
|
+
**替代:**
|
|
230
|
+
- 用场景推进,不用逻辑推进
|
|
231
|
+
- 用对话推进,不用讲义推进
|
|
232
|
+
- 用动作推进,不用摘要推进
|
|
233
|
+
|
|
234
|
+
#### L2 形容词/副词密度控制
|
|
235
|
+
|
|
236
|
+
| 规则 | 默认限制 |
|
|
237
|
+
|------|----------|
|
|
238
|
+
| 每 300 字强调词(极其/非常/十分/无比) | ≤2 |
|
|
239
|
+
| 每 300 字形容词总量 | ≤6 |
|
|
240
|
+
| 连续两个以上形容词修饰同一名词 | 禁止 |
|
|
241
|
+
| “的”字连用(如“XX的XX的XX”) | 连用≤2 |
|
|
242
|
+
|
|
243
|
+
#### L3 四字成语/词组密度控制
|
|
244
|
+
|
|
245
|
+
| 规则 | 默认限制 |
|
|
246
|
+
|------|----------|
|
|
247
|
+
| 每 500 字四字成语/词组 | ≤3 |
|
|
248
|
+
| 连续使用 2 个以上四字词组 | 禁止 |
|
|
249
|
+
| 同一段落四字词组 | ≤2 |
|
|
250
|
+
|
|
251
|
+
特别注意:四字词组连用是 AI 写作最明显的特征之一。
|
|
252
|
+
|
|
253
|
+
#### L4 对话去 AI 化(语义/语用子层)
|
|
254
|
+
|
|
255
|
+
每句对话都应当能被解释出一个主要意图:
|
|
256
|
+
|
|
257
|
+
| 意图类型 | 用途示例 |
|
|
258
|
+
|---------|----------|
|
|
259
|
+
| 试探 | “你今天怎么这么安静?” |
|
|
260
|
+
| 回避 | “这事以后再说。” |
|
|
261
|
+
| 施压 | “你确定?再想想。” |
|
|
262
|
+
| 诱导 | “如果是我,我会现在就走。” |
|
|
263
|
+
| 挑衅 | “就你?” |
|
|
264
|
+
| 敷衍 | “嗯,行,知道了。” |
|
|
265
|
+
|
|
266
|
+
**禁止:**
|
|
267
|
+
- 对话里堆“我认为”“我觉得我们应该”这类书面表达(除非角色身份要求)
|
|
268
|
+
- 对话和叙述重复同一信息
|
|
269
|
+
- 所有角色语气、句长、口头禅完全同质化
|
|
270
|
+
|
|
271
|
+
**自测:**去掉对话标签后,能否大致分辨是谁在说话?
|
|
272
|
+
|
|
273
|
+
#### L5 段落结构 `⚙️ 可覆写`
|
|
274
|
+
|
|
275
|
+
| 规则 | 默认值 | 类型覆写参考 |
|
|
276
|
+
|------|--------|--------------|
|
|
277
|
+
| 单句段占比 | 25%-45% | 科幻 15%-30% / 悬疑 20%-35% / 恐怖 30%-50% |
|
|
278
|
+
| 每段字数 | 20-100 字(超过 80 字建议优先考虑拆分) | 科幻可放宽到 120 字 |
|
|
279
|
+
| 连续 3 段以上同句式 | 禁止 | 通用 |
|
|
280
|
+
| 连续 3 段以上相似长度(±10 字) | 需要打散 | 通用 |
|
|
281
|
+
|
|
282
|
+
节奏口诀:长-短-短-长-短,如呼吸般起伏。
|
|
283
|
+
|
|
284
|
+
#### L6 标点节奏 `⚙️ 可覆写`
|
|
285
|
+
|
|
286
|
+
| 规则 | 默认值 | 类型覆写参考 |
|
|
287
|
+
|------|--------|--------------|
|
|
288
|
+
| 省略号(……)单段频次 | ≤1/段 | 通用 |
|
|
289
|
+
| 省略号(……)章节总量 | ≤5/章 | 悬疑/恐怖可放宽到 ≤8/章 |
|
|
290
|
+
| 感叹号(!)单段频次 | ≤1/段 | 通用 |
|
|
291
|
+
| 感叹号(!) | ≤8/章 | 科幻收紧到 ≤5/章 |
|
|
292
|
+
| 破折号(——) | ≤5/章 | 通用 |
|
|
293
|
+
| 省略号与感叹号同句连用 | 禁止 | 通用 |
|
|
294
|
+
| 问号连用(??)/感叹号连用(!!) | 禁止 | 通用 |
|
|
295
|
+
|
|
296
|
+
### 2.11 类型覆写机制
|
|
297
|
+
|
|
298
|
+
- 覆写来源优先读取 `brief.md` 中显式写出的“类型覆写”说明;若未提供,再回退到 `brief.md` 的题材字段
|
|
299
|
+
- 只要命中类型覆写,类型参数优先于默认值
|
|
300
|
+
- 未列出的题材先使用默认值;当前 v1 只显式覆写科幻、悬疑、恐怖、言情 4 类
|
|
301
|
+
|
|
302
|
+
| 类型 | L5 段落结构覆写 | L6 标点节奏覆写 | 额外说明 |
|
|
303
|
+
|------|-----------------|-----------------|----------|
|
|
304
|
+
| 科幻 | 单句段 15%-30%;单段可放宽到 120 字 | 感叹号 ≤5/章 | `难以形容` / `不可名状` 灰度允许,建议 ≤2/章且尽量补具体感官 |
|
|
305
|
+
| 悬疑 | 单句段 20%-35%;段长上限维持 100 字但更强调断点 | 省略号 ≤8/章 | 优先保留疑点与停顿,不要把信息一次说满 |
|
|
306
|
+
| 恐怖 | 单句段 30%-50% | 省略号 ≤8/章 | 允许更碎的呼吸感,但不能靠标点堆恐惧 |
|
|
307
|
+
| 言情 | 使用默认值 | 使用默认值 | 重心放在语气差异和情感回收,不靠模板抒情 |
|
|
308
|
+
|
|
309
|
+
### 2.12 润色执行流程
|
|
310
|
+
|
|
311
|
+
> 默认顺序:黑名单扫描 → 结构规则检查 → 抽象转具体 → 节奏朗读测试。
|
|
312
|
+
|
|
313
|
+
#### Step 1:黑名单扫描
|
|
314
|
+
|
|
315
|
+
对照 §2.1 的重点说明与 `ai-blacklist.json` 的 14 个 categories 逐项扫:总结概括词、枚举模板词、学术腔、叙述连接词、环境套话、叙事填充、机械开合词、段首套话、平滑过渡、情绪套话、表情套话、比喻套话、动作套话、抽象空词。
|
|
316
|
+
|
|
317
|
+
判断标准:
|
|
318
|
+
- 角色对话中因身份合理使用 → 保留
|
|
319
|
+
- 本章首次出现且没有更自然替代 → 可保留
|
|
320
|
+
- 其他情况 → 替换
|
|
321
|
+
|
|
322
|
+
#### Step 2:结构规则检查
|
|
323
|
+
|
|
324
|
+
按 §2.10 的 6 层逐项过一遍:
|
|
325
|
+
1. 有没有模板句式?
|
|
326
|
+
2. 形容词/副词是否超密度?
|
|
327
|
+
3. 四字词组是否连用?
|
|
328
|
+
4. 对话是否有明确意图,去掉标签后能否分辨角色?
|
|
329
|
+
5. 段落长短是否有交错?
|
|
330
|
+
6. 标点频率是否开始撑节奏?
|
|
331
|
+
|
|
332
|
+
#### Step 3:抽象→具体转换
|
|
333
|
+
|
|
334
|
+
重点把这些表达翻译成可见动作或可感知细节:
|
|
335
|
+
- `感到XX` → 身体反应、动作、语气变化
|
|
336
|
+
- `非常/极其` → 更具体的程度和后果
|
|
337
|
+
- `难以形容` → 尽量补出几个可感知点
|
|
338
|
+
- 通用比喻 → 换成本书人物和场景会自然想到的专属意象
|
|
339
|
+
|
|
340
|
+
#### Step 4:节奏朗读测试
|
|
341
|
+
|
|
342
|
+
默读全章,重点查:
|
|
343
|
+
- 有没有连续 3 句以上同节奏?
|
|
344
|
+
- 有没有逻辑连接词堆起来的“讲稿味”?
|
|
345
|
+
- 有没有描写过长、读者会滑过去的段落?
|
|
346
|
+
|
|
347
|
+
### 2.13 快速检查清单
|
|
348
|
+
|
|
349
|
+
> 时间不够时,先查这 5 项。
|
|
350
|
+
|
|
351
|
+
- [ ] 四字词组:有无连续 2 个以上四字词组?有就拆
|
|
352
|
+
- [ ] 情绪直述:有无“感到XX”“心中涌起XX”?有就改动作或生理反应
|
|
353
|
+
- [ ] 微微系列:有无“微微一笑”“微微皱眉”“微微点头”?有就换具体描写
|
|
354
|
+
- [ ] 缓缓系列:有无“缓缓开口”“缓缓说道”?有就简化或补动作
|
|
355
|
+
- [ ] 标点过度:省略号、感叹号、破折号是否在拿来硬撑情绪?
|
|
104
356
|
|
|
105
357
|
## Layer 3: 后处理(StyleRefiner)
|
|
106
358
|
|
|
107
359
|
### 润色规则
|
|
108
360
|
|
|
109
|
-
StyleRefiner
|
|
361
|
+
StyleRefiner 默认按 §2.12 的四步流程执行,并额外遵守:
|
|
110
362
|
|
|
111
|
-
1.
|
|
112
|
-
2.
|
|
113
|
-
3.
|
|
114
|
-
- 破折号(——)超过 1 处/千字 → 逐个替换为逗号、句号或重组句式
|
|
115
|
-
- 省略号(……)超过 2 处/千字 → 削减或改用具体描写
|
|
116
|
-
4. **句式调整**:
|
|
117
|
-
- 句长偏离 style-profile 的 avg_sentence_length > 30% 的句子进行拆分或合并
|
|
118
|
-
- 相邻 5 句中出现 ≥ 2 个相同句式 → 改写其中 1 句
|
|
363
|
+
1. **优先修叙述,不乱动角色声线**:角色身份合理的对话表达宁可保留,也不要为了“去 AI”把人说成一个模子
|
|
364
|
+
2. **结构问题优先于辞藻问题**:先拆模板句式、重复节奏和标点堆砌,再处理词级替换
|
|
365
|
+
3. **style-profile 对齐**:句长、段长、语域混合、词汇丰富度优先贴近 style-profile;没有字段时退回 §2.8 的通用范围
|
|
119
366
|
4. **修改量控制**:总修改量 ≤ 原文 15%(字数变化比)
|
|
120
367
|
|
|
121
368
|
### 不可修改项
|
|
@@ -127,7 +374,32 @@ StyleRefiner 对初稿逐项执行:
|
|
|
127
374
|
|
|
128
375
|
## Layer 4: 检测度量(QualityJudge)
|
|
129
376
|
|
|
130
|
-
###
|
|
377
|
+
### 风格自然度三区判定(7 指标)
|
|
378
|
+
|
|
379
|
+
| 指标 | green(人类范围) | yellow(边界) | red(AI 特征) |
|
|
380
|
+
|------|------------------|----------------|----------------|
|
|
381
|
+
| `blacklist_hit_rate` | 0-1 次/千字 | 1-3 次/千字 | >3 次/千字 |
|
|
382
|
+
| `sentence_repetition_rate` | 相邻 5 句中 0-1 个重复句式 | 相邻 5 句中 2 个重复句式 | 相邻 5 句中 ≥3 个重复句式 |
|
|
383
|
+
| `sentence_length_std_dev` | 8-18,或落在 style-profile 目标附近 | 6-8 或 18-24 | <6(过匀) |
|
|
384
|
+
| `paragraph_length_cv` | 0.4-1.2,或落在 style-profile 目标附近 | 0.3-0.4 或 1.2-1.5 | <0.3(过匀) |
|
|
385
|
+
| `vocabulary_diversity_score` | 当前仅有枚举时 `vocabulary_richness=high`;若未来提供数值字段,则 ≥0.45 | 当前仅有枚举时 `medium`;若未来提供数值字段,则 0.35-0.45 | 当前仅有枚举时 `low`;若未来提供数值字段,则 <0.35 |
|
|
386
|
+
| `narration_connector_count` | 0 | 1 个孤立命中(仍应改写) | ≥2 个,或连续多段靠连接词推进 |
|
|
387
|
+
| `humanize_technique_variety` | 单章自然出现 ≥1 种不同技法,且无刷项感 | 0,且其余指标未出现 red(不阻断,但提示检查是否过匀) | 0,且同时伴随至少 1 项句式/连接词等其它 red |
|
|
388
|
+
|
|
389
|
+
> `vocabulary_diversity` 是方法名,`vocabulary_richness` 是现行 style-profile 字段,`vocabulary_diversity_score` 是 Layer 4 观测指标名;三者指向同一维度的不同层名。
|
|
390
|
+
> `humanize_technique_variety` 是复合条件指标,也是事后观察指标,不是生成配额;不要为了把分数刷到 green,机械往章节里塞技法。
|
|
391
|
+
> green 表示“仍在人类可接受范围”,不等于旧 5 分制的满分;若沿用 Legacy Fallback 或旧 `quality-rubric` 打满分,`blacklist_hit_rate` 仍建议压到 0 次/千字。
|
|
392
|
+
|
|
393
|
+
建议映射:
|
|
394
|
+
- 全 green → 5 分
|
|
395
|
+
- 1-2 个 yellow,余下为 green → 4 分
|
|
396
|
+
- 3 个及以上 yellow,或恰好 1 个 red → 3 分
|
|
397
|
+
- 2-3 个 red → 2 分
|
|
398
|
+
- 4 个及以上 red → 1 分
|
|
399
|
+
|
|
400
|
+
### Legacy Fallback:原 4 指标 5 分表
|
|
401
|
+
|
|
402
|
+
当当前流程只能拿到旧 4 指标时,使用下表作为向后兼容模式:
|
|
131
403
|
|
|
132
404
|
| 分数 | AI 黑名单命中率 | 句式重复率 | 破折号频率 | style-profile 匹配度 |
|
|
133
405
|
|------|----------------|-----------|-----------|---------------------|
|
|
@@ -137,6 +409,12 @@ StyleRefiner 对初稿逐项执行:
|
|
|
137
409
|
| 2 | 5-7 次/千字 | ≥ 3/5 句 | 5-6/千字 | 明显偏移 |
|
|
138
410
|
| 1 | > 7 次/千字 | 频繁重复 | > 6/千字 | 严重偏移 |
|
|
139
411
|
|
|
412
|
+
### 升级提示
|
|
413
|
+
|
|
414
|
+
- 旧项目若还没有新的统计字段,可先继续使用 `vocabulary_richness` 等枚举代理,并在无法取得 7 指标时回退到 Legacy Fallback
|
|
415
|
+
- 现有章节不需要立刻整库重评;从下次重跑 StyleAnalyzer、StyleRefiner、QualityJudge 时逐步补齐即可
|
|
416
|
+
- 本次变更只更新方法论基线;`agents/style-refiner.md`、`agents/quality-judge.md` 等消费方定义仍按后续 CS-A3 / CS-A4 changeset 跟进
|
|
417
|
+
|
|
140
418
|
### 黑名单维护机制
|
|
141
419
|
|
|
142
420
|
- **初始化**:`${NOVEL_CLI_ROOT}/templates/ai-blacklist.json` 提供 ≥ 30 个常见 AI 高频中文用语
|