novel-writer-cli 0.3.0 → 0.5.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.
Files changed (75) hide show
  1. package/README.md +1 -1
  2. package/agents/chapter-writer.md +43 -14
  3. package/agents/character-weaver.md +7 -1
  4. package/agents/plot-architect.md +20 -7
  5. package/agents/quality-judge.md +199 -20
  6. package/agents/style-analyzer.md +14 -8
  7. package/agents/style-refiner.md +10 -3
  8. package/agents/world-builder.md +8 -1
  9. package/dist/__tests__/agent-prompts-anti-ai-upgrade.test.js +194 -6
  10. package/dist/__tests__/agent-prompts-platform-expansion.test.js +33 -0
  11. package/dist/__tests__/anti-ai-infrastructure.test.js +548 -0
  12. package/dist/__tests__/anti-ai-templates.test.js +2 -2
  13. package/dist/__tests__/canon-status-lifecycle.test.js +481 -0
  14. package/dist/__tests__/commit-gate-decision.test.js +65 -0
  15. package/dist/__tests__/commit-prototype-pollution.test.js +1 -1
  16. package/dist/__tests__/excitement-type-annotation.test.js +240 -0
  17. package/dist/__tests__/excitement-type.test.js +21 -0
  18. package/dist/__tests__/gate-decision.test.js +62 -15
  19. package/dist/__tests__/genre-excitement-mapping.test.js +355 -0
  20. package/dist/__tests__/golden-chapter-gates.test.js +79 -0
  21. package/dist/__tests__/golden-chapter-mini-planning.test.js +485 -0
  22. package/dist/__tests__/helpers/quickstart-mini-planning.js +61 -0
  23. package/dist/__tests__/init.test.js +57 -5
  24. package/dist/__tests__/instructions-platform-expansion.test.js +125 -0
  25. package/dist/__tests__/next-step-gate-decision-routing.test.js +98 -0
  26. package/dist/__tests__/orchestrator-state-write-path.test.js +1 -1
  27. package/dist/__tests__/platform-profile.test.js +57 -1
  28. package/dist/__tests__/quickstart-pipeline.test.js +73 -6
  29. package/dist/__tests__/scoring-weights.test.js +193 -0
  30. package/dist/__tests__/steps-id.test.js +2 -0
  31. package/dist/__tests__/validate-quickstart-prereqs.test.js +2 -0
  32. package/dist/advance.js +27 -2
  33. package/dist/anti-ai-context.js +535 -0
  34. package/dist/cli.js +3 -1
  35. package/dist/commit.js +22 -0
  36. package/dist/excitement-type.js +12 -0
  37. package/dist/gate-decision.js +98 -2
  38. package/dist/golden-chapter-gates.js +143 -0
  39. package/dist/init.js +76 -7
  40. package/dist/instructions.js +552 -6
  41. package/dist/next-step.js +124 -88
  42. package/dist/platform-profile.js +20 -8
  43. package/dist/quickstart-mini-planning.js +30 -0
  44. package/dist/scoring-weights.js +38 -3
  45. package/dist/steps.js +1 -1
  46. package/dist/validate.js +293 -214
  47. package/dist/volume-commit.js +271 -5
  48. package/dist/volume-planning.js +78 -3
  49. package/docs/user/README.md +1 -0
  50. package/docs/user/migration-guide.md +166 -0
  51. package/docs/user/novel-cli.md +4 -3
  52. package/docs/user/quick-start.md +354 -57
  53. package/package.json +1 -1
  54. package/schemas/platform-profile.schema.json +2 -2
  55. package/scripts/lint-blacklist.sh +221 -76
  56. package/scripts/lint-structural.sh +538 -0
  57. package/skills/continue/SKILL.md +6 -0
  58. package/skills/continue/references/context-contracts.md +71 -6
  59. package/skills/continue/references/periodic-maintenance.md +12 -1
  60. package/skills/novel-writing/references/quality-rubric.md +79 -26
  61. package/skills/novel-writing/references/style-guide.md +129 -19
  62. package/skills/start/SKILL.md +23 -3
  63. package/skills/start/references/vol-planning.md +12 -3
  64. package/templates/ai-blacklist.json +1024 -246
  65. package/templates/ai-sentence-patterns.json +167 -0
  66. package/templates/genre-excitement-map.json +48 -0
  67. package/templates/genre-golden-standards.json +80 -0
  68. package/templates/genre-weight-profiles.json +15 -0
  69. package/templates/golden-chapter-gates.json +230 -0
  70. package/templates/novel-ask/example.question.json +3 -2
  71. package/templates/platform-profile.json +141 -1
  72. package/templates/platforms/fanqie.md +35 -0
  73. package/templates/platforms/jinjiang.md +35 -0
  74. package/templates/platforms/qidian.md +35 -0
  75. package/templates/style-profile-template.json +3 -0
@@ -1,7 +1,7 @@
1
1
  {
2
- "version": "2.0.0",
3
- "description": "AI 高频中文用语黑名单 — 生成时禁止使用(支持 replacement_hint / per_chapter_max / category_metadata: narration_only + genre_override)",
4
- "last_updated": "2026-03-05",
2
+ "version": "2.1.0",
3
+ "description": "AI 高频中文用语黑名单 — 生成时禁止使用(支持 replacement_hint / per_chapter_max / category_metadata: narration_only + genre_override + like_simile_rule)",
4
+ "last_updated": "2026-03-06",
5
5
  "max_words": 250,
6
6
  "words": [
7
7
  "总而言之",
@@ -224,269 +224,1026 @@
224
224
  "让人难以置信",
225
225
  "不可思议",
226
226
  "难以想象",
227
- "各种各样"
227
+ "各种各样",
228
+ "像一把刀",
229
+ "像一根绷紧的弦",
230
+ "像被什么扼住",
231
+ "像是要燃烧起来",
232
+ "像潮水一样涌来",
233
+ "像针扎一样",
234
+ "像一块石头",
235
+ "像触电一样"
228
236
  ],
229
237
  "categories": {
230
238
  "summary_word": [
231
- { "word": "总而言之", "replacement_hint": "删除总结语,直接给结论或用事件收束" },
232
- { "word": "综上所述", "replacement_hint": "删除总结语,直接给结论或用事件收束" },
233
- { "word": "总的来说", "replacement_hint": "删除总结语,直接给结论或用事件收束" },
234
- { "word": "总体来说", "replacement_hint": "删除总结语,直接给结论或用事件收束" },
235
- { "word": "总体而言", "replacement_hint": "删除总结语,直接给结论或用事件收束" },
236
- { "word": "简而言之", "replacement_hint": "删除总结语,直接给结论或用事件收束" },
237
- { "word": "一言以蔽之", "replacement_hint": "删除总结语,直接给结论或用事件收束" },
238
- { "word": "归根结底", "replacement_hint": "用具体事件说明,不要抽象总结" },
239
- { "word": "说到底", "replacement_hint": "用具体事件说明,不要抽象总结" },
240
- { "word": "本质上", "replacement_hint": "用具体事件说明,不要抽象总结" },
241
- { "word": "值得注意的是", "replacement_hint": "删掉提示语,直接叙述要点" },
242
- { "word": "需要指出的是", "replacement_hint": "删掉提示语,直接叙述要点" },
243
- { "word": "需要说明的是", "replacement_hint": "删掉提示语,直接叙述要点" },
244
- { "word": "需要强调的是", "replacement_hint": "删掉提示语,直接叙述要点" },
245
- { "word": "值得一提的是", "replacement_hint": "删掉提示语,直接叙述要点" },
246
- { "word": "毋庸置疑", "replacement_hint": "删除,或用动作/反应代替" },
247
- { "word": "不言而喻", "replacement_hint": "删除,或用动作/反应代替" },
248
- { "word": "毫无疑问", "replacement_hint": "删除,或用动作/反应代替" },
249
- { "word": "综观来看", "replacement_hint": "删除总结语,直接给结论或用事件收束" },
250
- { "word": "归结起来", "replacement_hint": "删除总结语,直接给结论或用事件收束" }
239
+ {
240
+ "word": "总而言之",
241
+ "replacement_hint": "删除总结语,直接给结论或用事件收束"
242
+ },
243
+ {
244
+ "word": "综上所述",
245
+ "replacement_hint": "删除总结语,直接给结论或用事件收束"
246
+ },
247
+ {
248
+ "word": "总的来说",
249
+ "replacement_hint": "删除总结语,直接给结论或用事件收束"
250
+ },
251
+ {
252
+ "word": "总体来说",
253
+ "replacement_hint": "删除总结语,直接给结论或用事件收束"
254
+ },
255
+ {
256
+ "word": "总体而言",
257
+ "replacement_hint": "删除总结语,直接给结论或用事件收束"
258
+ },
259
+ {
260
+ "word": "简而言之",
261
+ "replacement_hint": "删除总结语,直接给结论或用事件收束"
262
+ },
263
+ {
264
+ "word": "一言以蔽之",
265
+ "replacement_hint": "删除总结语,直接给结论或用事件收束"
266
+ },
267
+ {
268
+ "word": "归根结底",
269
+ "replacement_hint": "用具体事件说明,不要抽象总结"
270
+ },
271
+ {
272
+ "word": "说到底",
273
+ "replacement_hint": "用具体事件说明,不要抽象总结"
274
+ },
275
+ {
276
+ "word": "本质上",
277
+ "replacement_hint": "用具体事件说明,不要抽象总结"
278
+ },
279
+ {
280
+ "word": "值得注意的是",
281
+ "replacement_hint": "删掉提示语,直接叙述要点"
282
+ },
283
+ {
284
+ "word": "需要指出的是",
285
+ "replacement_hint": "删掉提示语,直接叙述要点"
286
+ },
287
+ {
288
+ "word": "需要说明的是",
289
+ "replacement_hint": "删掉提示语,直接叙述要点"
290
+ },
291
+ {
292
+ "word": "需要强调的是",
293
+ "replacement_hint": "删掉提示语,直接叙述要点"
294
+ },
295
+ {
296
+ "word": "值得一提的是",
297
+ "replacement_hint": "删掉提示语,直接叙述要点"
298
+ },
299
+ {
300
+ "word": "毋庸置疑",
301
+ "replacement_hint": "删除,或用动作/反应代替"
302
+ },
303
+ {
304
+ "word": "不言而喻",
305
+ "replacement_hint": "删除,或用动作/反应代替"
306
+ },
307
+ {
308
+ "word": "毫无疑问",
309
+ "replacement_hint": "删除,或用动作/反应代替"
310
+ },
311
+ {
312
+ "word": "综观来看",
313
+ "replacement_hint": "删除总结语,直接给结论或用事件收束"
314
+ },
315
+ {
316
+ "word": "归结起来",
317
+ "replacement_hint": "删除总结语,直接给结论或用事件收束"
318
+ }
251
319
  ],
252
320
  "enumeration_template": [
253
- { "word": "首先", "replacement_hint": "用场景转换或动作串联,不要用编号推进", "per_chapter_max": 2 },
254
- { "word": "其次", "replacement_hint": "用场景转换或动作串联,不要用编号推进", "per_chapter_max": 2 },
255
- { "word": "最后", "replacement_hint": "用场景转换或动作串联,不要用编号推进", "per_chapter_max": 2 },
256
- { "word": "首先是", "replacement_hint": "用场景转换或动作串联,不要用编号推进", "per_chapter_max": 2 },
257
- { "word": "其次是", "replacement_hint": "用场景转换或动作串联,不要用编号推进", "per_chapter_max": 2 },
258
- { "word": "最后是", "replacement_hint": "用场景转换或动作串联,不要用编号推进", "per_chapter_max": 2 },
259
- { "word": "一方面", "replacement_hint": "用对比场景代替,不要写成讲义式对照" },
260
- { "word": "另一方面", "replacement_hint": "用对比场景代替,不要写成讲义式对照" },
261
- { "word": "其一", "replacement_hint": "删除编号,融入叙事" },
262
- { "word": "其二", "replacement_hint": "删除编号,融入叙事" },
263
- { "word": "其三", "replacement_hint": "删除编号,融入叙事" },
264
- { "word": "再者", "replacement_hint": "用场景推进代替逻辑推进" }
321
+ {
322
+ "word": "首先",
323
+ "replacement_hint": "用场景转换或动作串联,不要用编号推进",
324
+ "per_chapter_max": 2
325
+ },
326
+ {
327
+ "word": "其次",
328
+ "replacement_hint": "用场景转换或动作串联,不要用编号推进",
329
+ "per_chapter_max": 2
330
+ },
331
+ {
332
+ "word": "最后",
333
+ "replacement_hint": "用场景转换或动作串联,不要用编号推进",
334
+ "per_chapter_max": 2
335
+ },
336
+ {
337
+ "word": "首先是",
338
+ "replacement_hint": "用场景转换或动作串联,不要用编号推进",
339
+ "per_chapter_max": 2
340
+ },
341
+ {
342
+ "word": "其次是",
343
+ "replacement_hint": "用场景转换或动作串联,不要用编号推进",
344
+ "per_chapter_max": 2
345
+ },
346
+ {
347
+ "word": "最后是",
348
+ "replacement_hint": "用场景转换或动作串联,不要用编号推进",
349
+ "per_chapter_max": 2
350
+ },
351
+ {
352
+ "word": "一方面",
353
+ "replacement_hint": "用对比场景代替,不要写成讲义式对照"
354
+ },
355
+ {
356
+ "word": "另一方面",
357
+ "replacement_hint": "用对比场景代替,不要写成讲义式对照"
358
+ },
359
+ {
360
+ "word": "其一",
361
+ "replacement_hint": "删除编号,融入叙事"
362
+ },
363
+ {
364
+ "word": "其二",
365
+ "replacement_hint": "删除编号,融入叙事"
366
+ },
367
+ {
368
+ "word": "其三",
369
+ "replacement_hint": "删除编号,融入叙事"
370
+ },
371
+ {
372
+ "word": "再者",
373
+ "replacement_hint": "用场景推进代替逻辑推进"
374
+ }
265
375
  ],
266
376
  "academic_tone": [
267
- { "word": "显而易见", "replacement_hint": "删除,或改为具体事实/细节" },
268
- { "word": "不可否认", "replacement_hint": "删除,或改为具体事实/细节" },
269
- { "word": "从某种程度上说", "replacement_hint": "删除这类缓冲语,直接说结论" },
270
- { "word": "在某种意义上", "replacement_hint": "删除这类缓冲语,直接说结论" },
271
- { "word": "具有重要意义", "replacement_hint": "用具体影响/后果代替抽象评价" },
272
- { "word": "意义深远", "replacement_hint": "用具体影响/后果代替抽象评价" },
273
- { "word": "基于", "replacement_hint": "改成口语化因果(因为/所以)或直接省略" },
274
- { "word": "鉴于", "replacement_hint": "改成口语化因果(因为/所以)或直接省略" },
275
- { "word": "考虑到", "replacement_hint": "改成口语化因果(因为/所以)或直接省略" },
276
- { "word": "诸如", "replacement_hint": "直接给出例子", "per_chapter_max": 2 },
277
- { "word": "例如", "replacement_hint": "直接给出例子(避免解释腔)", "per_chapter_max": 2 },
278
- { "word": "旨在", "replacement_hint": "改成更口语的动词(想要/打算/为了)" },
279
- { "word": "致力于", "replacement_hint": "改成更口语的动词(想要/打算/为了)" },
280
- { "word": "着力", "replacement_hint": "改成更口语的动词(盯着/专门/干脆)" },
281
- { "word": "深刻地", "replacement_hint": "不要用抽象副词堆砌,改为具体反应" },
282
- { "word": "充分地", "replacement_hint": "多数情况可删除,或改为具体程度" },
283
- { "word": "相应的", "replacement_hint": "能省就省,改为更直接的说法" },
284
- { "word": "相关的", "replacement_hint": "能省就省,改为更直接的说法" },
285
- { "word": "进而", "replacement_hint": "改为更口语的连接(然后/接着)或直接并列" },
286
- { "word": "从而", "replacement_hint": "改为更口语的连接(然后/于是)或直接并列" },
287
- { "word": "在此基础上", "replacement_hint": "改成更具体的时间/动作衔接" },
288
- { "word": "在此背景下", "replacement_hint": "改成更具体的场景/信息交代" },
289
- { "word": "在这种情况下", "replacement_hint": "改成更具体的场景/信息交代" }
377
+ {
378
+ "word": "显而易见",
379
+ "replacement_hint": "删除,或改为具体事实/细节"
380
+ },
381
+ {
382
+ "word": "不可否认",
383
+ "replacement_hint": "删除,或改为具体事实/细节"
384
+ },
385
+ {
386
+ "word": "从某种程度上说",
387
+ "replacement_hint": "删除这类缓冲语,直接说结论"
388
+ },
389
+ {
390
+ "word": "在某种意义上",
391
+ "replacement_hint": "删除这类缓冲语,直接说结论"
392
+ },
393
+ {
394
+ "word": "具有重要意义",
395
+ "replacement_hint": "用具体影响/后果代替抽象评价"
396
+ },
397
+ {
398
+ "word": "意义深远",
399
+ "replacement_hint": "用具体影响/后果代替抽象评价"
400
+ },
401
+ {
402
+ "word": "基于",
403
+ "replacement_hint": "改成口语化因果(因为/所以)或直接省略"
404
+ },
405
+ {
406
+ "word": "鉴于",
407
+ "replacement_hint": "改成口语化因果(因为/所以)或直接省略"
408
+ },
409
+ {
410
+ "word": "考虑到",
411
+ "replacement_hint": "改成口语化因果(因为/所以)或直接省略"
412
+ },
413
+ {
414
+ "word": "诸如",
415
+ "replacement_hint": "直接给出例子",
416
+ "per_chapter_max": 2
417
+ },
418
+ {
419
+ "word": "例如",
420
+ "replacement_hint": "直接给出例子(避免解释腔)",
421
+ "per_chapter_max": 2
422
+ },
423
+ {
424
+ "word": "旨在",
425
+ "replacement_hint": "改成更口语的动词(想要/打算/为了)"
426
+ },
427
+ {
428
+ "word": "致力于",
429
+ "replacement_hint": "改成更口语的动词(想要/打算/为了)"
430
+ },
431
+ {
432
+ "word": "着力",
433
+ "replacement_hint": "改成更口语的动词(盯着/专门/干脆)"
434
+ },
435
+ {
436
+ "word": "深刻地",
437
+ "replacement_hint": "不要用抽象副词堆砌,改为具体反应"
438
+ },
439
+ {
440
+ "word": "充分地",
441
+ "replacement_hint": "多数情况可删除,或改为具体程度"
442
+ },
443
+ {
444
+ "word": "相应的",
445
+ "replacement_hint": "能省就省,改为更直接的说法"
446
+ },
447
+ {
448
+ "word": "相关的",
449
+ "replacement_hint": "能省就省,改为更直接的说法"
450
+ },
451
+ {
452
+ "word": "进而",
453
+ "replacement_hint": "改为更口语的连接(然后/接着)或直接并列"
454
+ },
455
+ {
456
+ "word": "从而",
457
+ "replacement_hint": "改为更口语的连接(然后/于是)或直接并列"
458
+ },
459
+ {
460
+ "word": "在此基础上",
461
+ "replacement_hint": "改成更具体的时间/动作衔接"
462
+ },
463
+ {
464
+ "word": "在此背景下",
465
+ "replacement_hint": "改成更具体的场景/信息交代"
466
+ },
467
+ {
468
+ "word": "在这种情况下",
469
+ "replacement_hint": "改成更具体的场景/信息交代"
470
+ }
290
471
  ],
291
472
  "narration_connector": [
292
- { "word": "然而", "replacement_hint": "少用逻辑连接词,用动作/场景转场" },
293
- { "word": "不过", "replacement_hint": "少用逻辑连接词,用动作/场景转场" },
294
- { "word": "因此", "replacement_hint": "少用逻辑连接词,用动作/场景转场" },
295
- { "word": "尽管如此", "replacement_hint": "简化为“但”,或用动作/场景转场" },
296
- { "word": "与此同时", "replacement_hint": "用场景切换代替" },
297
- { "word": "在此期间", "replacement_hint": "用场景切换代替" },
298
- { "word": "换言之", "replacement_hint": "删除,读者不需要解释腔" },
299
- { "word": "也就是说", "replacement_hint": "删除,读者不需要解释腔" },
300
- { "word": "事实上", "replacement_hint": "多数可删除,避免口头禅式强调" },
301
- { "word": "实际上", "replacement_hint": "多数可删除,避免口头禅式强调" },
302
- { "word": "反之", "replacement_hint": "改为具体对比场景,不要逻辑推演" },
303
- { "word": "总之", "replacement_hint": "删除总结语,直接叙述" }
473
+ {
474
+ "word": "然而",
475
+ "replacement_hint": "少用逻辑连接词,用动作/场景转场"
476
+ },
477
+ {
478
+ "word": "不过",
479
+ "replacement_hint": "少用逻辑连接词,用动作/场景转场"
480
+ },
481
+ {
482
+ "word": "因此",
483
+ "replacement_hint": "少用逻辑连接词,用动作/场景转场"
484
+ },
485
+ {
486
+ "word": "尽管如此",
487
+ "replacement_hint": "简化为“但”,或用动作/场景转场"
488
+ },
489
+ {
490
+ "word": "与此同时",
491
+ "replacement_hint": "用场景切换代替"
492
+ },
493
+ {
494
+ "word": "在此期间",
495
+ "replacement_hint": "用场景切换代替"
496
+ },
497
+ {
498
+ "word": "换言之",
499
+ "replacement_hint": "删除,读者不需要解释腔"
500
+ },
501
+ {
502
+ "word": "也就是说",
503
+ "replacement_hint": "删除,读者不需要解释腔"
504
+ },
505
+ {
506
+ "word": "事实上",
507
+ "replacement_hint": "多数可删除,避免口头禅式强调"
508
+ },
509
+ {
510
+ "word": "实际上",
511
+ "replacement_hint": "多数可删除,避免口头禅式强调"
512
+ },
513
+ {
514
+ "word": "反之",
515
+ "replacement_hint": "改为具体对比场景,不要逻辑推演"
516
+ },
517
+ {
518
+ "word": "总之",
519
+ "replacement_hint": "删除总结语,直接叙述"
520
+ }
304
521
  ],
305
522
  "environment_cliche": [
306
- { "word": "月光如水", "replacement_hint": "用具体颜色/形状/光线/气味/声音描写" },
307
- { "word": "月光倾泻", "replacement_hint": "用具体颜色/形状/光线/气味/声音描写" },
308
- { "word": "阳光明媚", "replacement_hint": "用具体颜色/形状/光线/气味/声音描写" },
309
- { "word": "阳光灿烂", "replacement_hint": "用具体颜色/形状/光线/气味/声音描写" },
310
- { "word": "微风拂面", "replacement_hint": "写风带来的气味/温度/声音,而不是一句套话" },
311
- { "word": "清风徐来", "replacement_hint": "写风带来的气味/温度/声音,而不是一句套话" },
312
- { "word": "万籁俱寂", "replacement_hint": "写安静中能听到的小声音,而不是一句套话" },
313
- { "word": "鸦雀无声", "replacement_hint": "写安静中能听到的小声音,而不是一句套话" },
314
- { "word": "如诗如画", "replacement_hint": "删除,改为具体画面细节" },
315
- { "word": "美不胜收", "replacement_hint": "删除,改为具体画面细节" },
316
- { "word": "璀璨夺目", "replacement_hint": "用具体颜色/形状/光线描写" },
317
- { "word": "瑰丽", "replacement_hint": "用具体颜色/形状/光线描写" },
318
- { "word": "绚烂", "replacement_hint": "用具体颜色/形状/光线描写" },
319
- { "word": "绮丽", "replacement_hint": "用具体颜色/形状/光线描写" },
320
- { "word": "夜色如墨", "replacement_hint": "写夜色的层次、光源与阴影" },
321
- { "word": "夜幕低垂", "replacement_hint": "写夜色的层次、光源与阴影" },
322
- { "word": "星光点点", "replacement_hint": "写星光的明暗、稀疏与位置" },
323
- { "word": "繁星点点", "replacement_hint": "写星光的明暗、稀疏与位置" },
324
- { "word": "晨光熹微", "replacement_hint": "写清楚光线从哪里来,照在什么上" },
325
- { "word": "雾气弥漫", "replacement_hint": "写雾的湿度、味道、遮蔽范围" },
326
- { "word": "云雾缭绕", "replacement_hint": "写雾的湿度、味道、遮蔽范围" },
327
- { "word": "波光粼粼", "replacement_hint": "写光的反射、颜色与水面状态" },
328
- { "word": "夕阳西下", "replacement_hint": "写光线角度、颜色与影子的变化" },
329
- { "word": "晚霞满天", "replacement_hint": "写颜色层次与云的形状" },
330
- { "word": "雷声滚滚", "replacement_hint": "写雷声远近、回响与人物反应" },
331
- { "word": "雨声淅沥", "replacement_hint": "写雨点的质感、落点与声音" },
332
- { "word": "寒风刺骨", "replacement_hint": "写冷如何落在皮肤/衣物/呼吸上" }
523
+ {
524
+ "word": "月光如水",
525
+ "replacement_hint": "用具体颜色/形状/光线/气味/声音描写"
526
+ },
527
+ {
528
+ "word": "月光倾泻",
529
+ "replacement_hint": "用具体颜色/形状/光线/气味/声音描写"
530
+ },
531
+ {
532
+ "word": "阳光明媚",
533
+ "replacement_hint": "用具体颜色/形状/光线/气味/声音描写"
534
+ },
535
+ {
536
+ "word": "阳光灿烂",
537
+ "replacement_hint": "用具体颜色/形状/光线/气味/声音描写"
538
+ },
539
+ {
540
+ "word": "微风拂面",
541
+ "replacement_hint": "写风带来的气味/温度/声音,而不是一句套话"
542
+ },
543
+ {
544
+ "word": "清风徐来",
545
+ "replacement_hint": "写风带来的气味/温度/声音,而不是一句套话"
546
+ },
547
+ {
548
+ "word": "万籁俱寂",
549
+ "replacement_hint": "写安静中能听到的小声音,而不是一句套话"
550
+ },
551
+ {
552
+ "word": "鸦雀无声",
553
+ "replacement_hint": "写安静中能听到的小声音,而不是一句套话"
554
+ },
555
+ {
556
+ "word": "如诗如画",
557
+ "replacement_hint": "删除,改为具体画面细节"
558
+ },
559
+ {
560
+ "word": "美不胜收",
561
+ "replacement_hint": "删除,改为具体画面细节"
562
+ },
563
+ {
564
+ "word": "璀璨夺目",
565
+ "replacement_hint": "用具体颜色/形状/光线描写"
566
+ },
567
+ {
568
+ "word": "瑰丽",
569
+ "replacement_hint": "用具体颜色/形状/光线描写"
570
+ },
571
+ {
572
+ "word": "绚烂",
573
+ "replacement_hint": "用具体颜色/形状/光线描写"
574
+ },
575
+ {
576
+ "word": "绮丽",
577
+ "replacement_hint": "用具体颜色/形状/光线描写"
578
+ },
579
+ {
580
+ "word": "夜色如墨",
581
+ "replacement_hint": "写夜色的层次、光源与阴影"
582
+ },
583
+ {
584
+ "word": "夜幕低垂",
585
+ "replacement_hint": "写夜色的层次、光源与阴影"
586
+ },
587
+ {
588
+ "word": "星光点点",
589
+ "replacement_hint": "写星光的明暗、稀疏与位置"
590
+ },
591
+ {
592
+ "word": "繁星点点",
593
+ "replacement_hint": "写星光的明暗、稀疏与位置"
594
+ },
595
+ {
596
+ "word": "晨光熹微",
597
+ "replacement_hint": "写清楚光线从哪里来,照在什么上"
598
+ },
599
+ {
600
+ "word": "雾气弥漫",
601
+ "replacement_hint": "写雾的湿度、味道、遮蔽范围"
602
+ },
603
+ {
604
+ "word": "云雾缭绕",
605
+ "replacement_hint": "写雾的湿度、味道、遮蔽范围"
606
+ },
607
+ {
608
+ "word": "波光粼粼",
609
+ "replacement_hint": "写光的反射、颜色与水面状态"
610
+ },
611
+ {
612
+ "word": "夕阳西下",
613
+ "replacement_hint": "写光线角度、颜色与影子的变化"
614
+ },
615
+ {
616
+ "word": "晚霞满天",
617
+ "replacement_hint": "写颜色层次与云的形状"
618
+ },
619
+ {
620
+ "word": "雷声滚滚",
621
+ "replacement_hint": "写雷声远近、回响与人物反应"
622
+ },
623
+ {
624
+ "word": "雨声淅沥",
625
+ "replacement_hint": "写雨点的质感、落点与声音"
626
+ },
627
+ {
628
+ "word": "寒风刺骨",
629
+ "replacement_hint": "写冷如何落在皮肤/衣物/呼吸上"
630
+ }
333
631
  ],
334
632
  "narrative_filler": [
335
- { "word": "就这样", "replacement_hint": "删除填充词,用动作/事件推进" },
336
- { "word": "于是乎", "replacement_hint": "删除填充词,用动作/事件推进" },
337
- { "word": "话说回来", "replacement_hint": "删除,叙事不需要“回到正题”" },
338
- { "word": "言归正传", "replacement_hint": "删除,叙事不需要“回到正题”" },
339
- { "word": "不得不说", "replacement_hint": "删除,或改为具体感受/动作" },
340
- { "word": "不得不承认", "replacement_hint": "删除,或改为具体感受/动作" },
341
- { "word": "说起来", "replacement_hint": "多数可删除,直接叙述" },
342
- { "word": "要知道", "replacement_hint": "多数可删除,直接叙述" },
343
- { "word": "紧接着", "replacement_hint": "保留一个转场词即可,其余用动作衔接" },
344
- { "word": "随即", "replacement_hint": "保留一个转场词即可,其余用动作衔接" },
345
- { "word": "只见", "replacement_hint": "每章限频,用更具体的动作描写替代", "per_chapter_max": 2 },
346
- { "word": "但见", "replacement_hint": "每章限频,用更具体的动作描写替代", "per_chapter_max": 2 },
347
- { "word": "转眼间", "replacement_hint": "用具体时间/动作描述代替" },
348
- { "word": "眨眼间", "replacement_hint": "用具体时间/动作描述代替" },
349
- { "word": "顷刻间", "replacement_hint": "用具体时间/动作描述代替" },
350
- { "word": "霎那间", "replacement_hint": "用具体时间/动作描述代替" },
351
- { "word": "一时间", "replacement_hint": "用具体动作/信息衔接代替" },
352
- { "word": "随之而来", "replacement_hint": "用具体动作/信息衔接代替" },
353
- { "word": "旋即", "replacement_hint": "用具体动作/信息衔接代替" },
354
- { "word": "继而", "replacement_hint": "用具体动作/信息衔接代替" },
355
- { "word": "转瞬间", "replacement_hint": "用具体时间/动作描述代替" }
633
+ {
634
+ "word": "就这样",
635
+ "replacement_hint": "删除填充词,用动作/事件推进"
636
+ },
637
+ {
638
+ "word": "于是乎",
639
+ "replacement_hint": "删除填充词,用动作/事件推进"
640
+ },
641
+ {
642
+ "word": "话说回来",
643
+ "replacement_hint": "删除,叙事不需要“回到正题”"
644
+ },
645
+ {
646
+ "word": "言归正传",
647
+ "replacement_hint": "删除,叙事不需要“回到正题”"
648
+ },
649
+ {
650
+ "word": "不得不说",
651
+ "replacement_hint": "删除,或改为具体感受/动作"
652
+ },
653
+ {
654
+ "word": "不得不承认",
655
+ "replacement_hint": "删除,或改为具体感受/动作"
656
+ },
657
+ {
658
+ "word": "说起来",
659
+ "replacement_hint": "多数可删除,直接叙述"
660
+ },
661
+ {
662
+ "word": "要知道",
663
+ "replacement_hint": "多数可删除,直接叙述"
664
+ },
665
+ {
666
+ "word": "紧接着",
667
+ "replacement_hint": "保留一个转场词即可,其余用动作衔接"
668
+ },
669
+ {
670
+ "word": "随即",
671
+ "replacement_hint": "保留一个转场词即可,其余用动作衔接"
672
+ },
673
+ {
674
+ "word": "只见",
675
+ "replacement_hint": "每章限频,用更具体的动作描写替代",
676
+ "per_chapter_max": 2
677
+ },
678
+ {
679
+ "word": "但见",
680
+ "replacement_hint": "每章限频,用更具体的动作描写替代",
681
+ "per_chapter_max": 2
682
+ },
683
+ {
684
+ "word": "转眼间",
685
+ "replacement_hint": "用具体时间/动作描述代替"
686
+ },
687
+ {
688
+ "word": "眨眼间",
689
+ "replacement_hint": "用具体时间/动作描述代替"
690
+ },
691
+ {
692
+ "word": "顷刻间",
693
+ "replacement_hint": "用具体时间/动作描述代替"
694
+ },
695
+ {
696
+ "word": "霎那间",
697
+ "replacement_hint": "用具体时间/动作描述代替"
698
+ },
699
+ {
700
+ "word": "一时间",
701
+ "replacement_hint": "用具体动作/信息衔接代替"
702
+ },
703
+ {
704
+ "word": "随之而来",
705
+ "replacement_hint": "用具体动作/信息衔接代替"
706
+ },
707
+ {
708
+ "word": "旋即",
709
+ "replacement_hint": "用具体动作/信息衔接代替"
710
+ },
711
+ {
712
+ "word": "继而",
713
+ "replacement_hint": "用具体动作/信息衔接代替"
714
+ },
715
+ {
716
+ "word": "转瞬间",
717
+ "replacement_hint": "用具体时间/动作描述代替"
718
+ }
356
719
  ],
357
720
  "mechanical_opening": [
358
- { "word": "时间来到了", "replacement_hint": "用场景/动作切入,不要用旁白开场" },
359
- { "word": "让我们把目光转向", "replacement_hint": "直接切换场景,不要用镜头语言" },
360
- { "word": "回到这边", "replacement_hint": "直接切换场景,不要用镜头语言" },
361
- { "word": "回到另一边", "replacement_hint": "直接切换场景,不要用镜头语言" },
362
- { "word": "镜头一转", "replacement_hint": "直接切换场景,不要用镜头语言" },
363
- { "word": "话说当年", "replacement_hint": "直接切入事件,不要用评书腔开头" },
364
- { "word": "故事还要从", "replacement_hint": "直接从事件切入,不要倒叙旁白" },
365
- { "word": "事情还要从", "replacement_hint": "直接从事件切入,不要倒叙旁白" },
366
- { "word": "夜幕降临", "replacement_hint": "若作开头,改为角色动作+具体环境细节" },
367
- { "word": "让我们回到", "replacement_hint": "直接切换场景,不要用镜头语言" },
368
- { "word": "把镜头转向", "replacement_hint": "直接切换场景,不要用镜头语言" },
369
- { "word": "故事要从", "replacement_hint": "直接从事件切入,不要倒叙旁白" }
721
+ {
722
+ "word": "时间来到了",
723
+ "replacement_hint": "用场景/动作切入,不要用旁白开场"
724
+ },
725
+ {
726
+ "word": "让我们把目光转向",
727
+ "replacement_hint": "直接切换场景,不要用镜头语言"
728
+ },
729
+ {
730
+ "word": "回到这边",
731
+ "replacement_hint": "直接切换场景,不要用镜头语言"
732
+ },
733
+ {
734
+ "word": "回到另一边",
735
+ "replacement_hint": "直接切换场景,不要用镜头语言"
736
+ },
737
+ {
738
+ "word": "镜头一转",
739
+ "replacement_hint": "直接切换场景,不要用镜头语言"
740
+ },
741
+ {
742
+ "word": "话说当年",
743
+ "replacement_hint": "直接切入事件,不要用评书腔开头"
744
+ },
745
+ {
746
+ "word": "故事还要从",
747
+ "replacement_hint": "直接从事件切入,不要倒叙旁白"
748
+ },
749
+ {
750
+ "word": "事情还要从",
751
+ "replacement_hint": "直接从事件切入,不要倒叙旁白"
752
+ },
753
+ {
754
+ "word": "夜幕降临",
755
+ "replacement_hint": "若作开头,改为角色动作+具体环境细节"
756
+ },
757
+ {
758
+ "word": "让我们回到",
759
+ "replacement_hint": "直接切换场景,不要用镜头语言"
760
+ },
761
+ {
762
+ "word": "把镜头转向",
763
+ "replacement_hint": "直接切换场景,不要用镜头语言"
764
+ },
765
+ {
766
+ "word": "故事要从",
767
+ "replacement_hint": "直接从事件切入,不要倒叙旁白"
768
+ }
370
769
  ],
371
770
  "paragraph_opener": [
372
- { "word": "此刻", "replacement_hint": "避免套路段首,改为具体动作/信息" },
373
- { "word": "这一刻", "replacement_hint": "避免套路段首,改为具体动作/信息" },
374
- { "word": "就在这时", "replacement_hint": "避免套路段首,改为具体动作/信息" },
375
- { "word": "就在此时", "replacement_hint": "避免套路段首,改为具体动作/信息" },
376
- { "word": "话音刚落", "replacement_hint": "避免套路段首,改为具体动作/信息" },
377
- { "word": "下一刻", "replacement_hint": "避免套路段首,改为具体动作/信息" },
378
- { "word": "下一秒", "replacement_hint": "避免套路段首,改为具体动作/信息" },
379
- { "word": "下一瞬", "replacement_hint": "避免套路段首,改为具体动作/信息" },
380
- { "word": "下一息", "replacement_hint": "避免套路段首,改为具体动作/信息" },
381
- { "word": "片刻之后", "replacement_hint": "避免套路段首,改为具体动作/信息" },
382
- { "word": "转瞬之间", "replacement_hint": "避免套路段首,改为具体动作/信息" },
383
- { "word": "就在那一刻", "replacement_hint": "避免套路段首,改为具体动作/信息" },
384
- { "word": "就在下一秒", "replacement_hint": "避免套路段首,改为具体动作/信息" }
771
+ {
772
+ "word": "此刻",
773
+ "replacement_hint": "避免套路段首,改为具体动作/信息"
774
+ },
775
+ {
776
+ "word": "这一刻",
777
+ "replacement_hint": "避免套路段首,改为具体动作/信息"
778
+ },
779
+ {
780
+ "word": "就在这时",
781
+ "replacement_hint": "避免套路段首,改为具体动作/信息"
782
+ },
783
+ {
784
+ "word": "就在此时",
785
+ "replacement_hint": "避免套路段首,改为具体动作/信息"
786
+ },
787
+ {
788
+ "word": "话音刚落",
789
+ "replacement_hint": "避免套路段首,改为具体动作/信息"
790
+ },
791
+ {
792
+ "word": "下一刻",
793
+ "replacement_hint": "避免套路段首,改为具体动作/信息"
794
+ },
795
+ {
796
+ "word": "下一秒",
797
+ "replacement_hint": "避免套路段首,改为具体动作/信息"
798
+ },
799
+ {
800
+ "word": "下一瞬",
801
+ "replacement_hint": "避免套路段首,改为具体动作/信息"
802
+ },
803
+ {
804
+ "word": "下一息",
805
+ "replacement_hint": "避免套路段首,改为具体动作/信息"
806
+ },
807
+ {
808
+ "word": "片刻之后",
809
+ "replacement_hint": "避免套路段首,改为具体动作/信息"
810
+ },
811
+ {
812
+ "word": "转瞬之间",
813
+ "replacement_hint": "避免套路段首,改为具体动作/信息"
814
+ },
815
+ {
816
+ "word": "就在那一刻",
817
+ "replacement_hint": "避免套路段首,改为具体动作/信息"
818
+ },
819
+ {
820
+ "word": "就在下一秒",
821
+ "replacement_hint": "避免套路段首,改为具体动作/信息"
822
+ }
385
823
  ],
386
824
  "smooth_transition": [
387
- { "word": "随着时间的推移", "replacement_hint": "用具体时间/动作转场,不要用套话" },
388
- { "word": "在这个过程中", "replacement_hint": "用具体时间/动作转场,不要用套话" },
389
- { "word": "不知不觉间", "replacement_hint": "用具体时间/动作转场,不要用套话" },
390
- { "word": "不知不觉中", "replacement_hint": "用具体时间/动作转场,不要用套话" },
391
- { "word": "不久之后", "replacement_hint": "用具体时间/动作转场,不要用套话" },
392
- { "word": "没过多久", "replacement_hint": "用具体时间/动作转场,不要用套话" },
393
- { "word": "过了一会儿", "replacement_hint": "用具体时间/动作转场,不要用套话" },
394
- { "word": "时光荏苒", "replacement_hint": "用具体时间/动作转场,不要用套话" },
395
- { "word": "转眼之间", "replacement_hint": "用具体时间/动作转场,不要用套话" },
396
- { "word": "转瞬即逝", "replacement_hint": "用具体时间/动作转场,不要用套话" },
397
- { "word": "光阴似箭", "replacement_hint": "用具体时间/动作转场,不要用套话" },
398
- { "word": "日复一日", "replacement_hint": "用具体时间/动作转场,不要用套话" }
825
+ {
826
+ "word": "随着时间的推移",
827
+ "replacement_hint": "用具体时间/动作转场,不要用套话"
828
+ },
829
+ {
830
+ "word": "在这个过程中",
831
+ "replacement_hint": "用具体时间/动作转场,不要用套话"
832
+ },
833
+ {
834
+ "word": "不知不觉间",
835
+ "replacement_hint": "用具体时间/动作转场,不要用套话"
836
+ },
837
+ {
838
+ "word": "不知不觉中",
839
+ "replacement_hint": "用具体时间/动作转场,不要用套话"
840
+ },
841
+ {
842
+ "word": "不久之后",
843
+ "replacement_hint": "用具体时间/动作转场,不要用套话"
844
+ },
845
+ {
846
+ "word": "没过多久",
847
+ "replacement_hint": "用具体时间/动作转场,不要用套话"
848
+ },
849
+ {
850
+ "word": "过了一会儿",
851
+ "replacement_hint": "用具体时间/动作转场,不要用套话"
852
+ },
853
+ {
854
+ "word": "时光荏苒",
855
+ "replacement_hint": "用具体时间/动作转场,不要用套话"
856
+ },
857
+ {
858
+ "word": "转眼之间",
859
+ "replacement_hint": "用具体时间/动作转场,不要用套话"
860
+ },
861
+ {
862
+ "word": "转瞬即逝",
863
+ "replacement_hint": "用具体时间/动作转场,不要用套话"
864
+ },
865
+ {
866
+ "word": "光阴似箭",
867
+ "replacement_hint": "用具体时间/动作转场,不要用套话"
868
+ },
869
+ {
870
+ "word": "日复一日",
871
+ "replacement_hint": "用具体时间/动作转场,不要用套话"
872
+ }
399
873
  ],
400
874
  "emotion_cliche": [
401
- { "word": "不禁", "replacement_hint": "删除“不可控”提示,直接写反应/动作", "per_chapter_max": 1 },
402
- { "word": "不由得", "replacement_hint": "删除,直接写动作/反应" },
403
- { "word": "莫名", "replacement_hint": "删掉模糊词,写清楚原因与感受" },
404
- { "word": "油然而生", "replacement_hint": "删掉抽象触发词,写清楚触发点" },
405
- { "word": "心中暗道", "replacement_hint": "用更具体的内心独白/动作替代", "per_chapter_max": 1 },
406
- { "word": "一股暖流", "replacement_hint": "用身体反应/具体记忆代替抽象比喻" },
407
- { "word": "心头一震", "replacement_hint": "用身体反应代替(手心发紧/呼吸一滞)" },
408
- { "word": "心中一凛", "replacement_hint": "用身体反应代替(后背发凉/脚步一顿)" },
409
- { "word": "心中掀起波澜", "replacement_hint": "写出具体是哪几种感受与触发点" },
410
- { "word": "如释重负", "replacement_hint": "用动作/呼吸变化展示松弛感" },
411
- { "word": "内心深处", "replacement_hint": "删除抽象定位,直接写想法/反应" },
412
- { "word": "百感交集", "replacement_hint": "写出具体是哪几种感受" },
413
- { "word": "五味杂陈", "replacement_hint": "写出具体是哪几种感受" },
414
- { "word": "心如刀割", "replacement_hint": "除非对话,否则用具体动作/生理反应替代" },
415
- { "word": "心如死灰", "replacement_hint": "除非对话,否则用具体动作/生理反应替代" },
416
- { "word": "心中涌起一股", "replacement_hint": "用生理反应代替(喉咙发紧/手指发麻)" },
417
- { "word": "不禁感到", "replacement_hint": "删除“不禁”,直接写感受或动作" },
418
- { "word": "心里咯噔一下", "replacement_hint": "用具体动作/呼吸变化替代" },
419
- { "word": "心里一沉", "replacement_hint": "用具体动作/呼吸变化替代" },
420
- { "word": "心跳漏了一拍", "replacement_hint": "用具体动作/呼吸变化替代" },
421
- { "word": "心脏猛地一跳", "replacement_hint": "用具体动作/呼吸变化替代" },
422
- { "word": "热血沸腾", "replacement_hint": "用身体反应/动作展示兴奋感" },
423
- { "word": "激动万分", "replacement_hint": "用身体反应/动作展示兴奋感" }
875
+ {
876
+ "word": "不禁",
877
+ "replacement_hint": "删除“不可控”提示,直接写反应/动作",
878
+ "per_chapter_max": 1
879
+ },
880
+ {
881
+ "word": "不由得",
882
+ "replacement_hint": "删除,直接写动作/反应"
883
+ },
884
+ {
885
+ "word": "莫名",
886
+ "replacement_hint": "删掉模糊词,写清楚原因与感受"
887
+ },
888
+ {
889
+ "word": "油然而生",
890
+ "replacement_hint": "删掉抽象触发词,写清楚触发点"
891
+ },
892
+ {
893
+ "word": "心中暗道",
894
+ "replacement_hint": "用更具体的内心独白/动作替代",
895
+ "per_chapter_max": 1
896
+ },
897
+ {
898
+ "word": "一股暖流",
899
+ "replacement_hint": "用身体反应/具体记忆代替抽象比喻"
900
+ },
901
+ {
902
+ "word": "心头一震",
903
+ "replacement_hint": "用身体反应代替(手心发紧/呼吸一滞)"
904
+ },
905
+ {
906
+ "word": "心中一凛",
907
+ "replacement_hint": "用身体反应代替(后背发凉/脚步一顿)"
908
+ },
909
+ {
910
+ "word": "心中掀起波澜",
911
+ "replacement_hint": "写出具体是哪几种感受与触发点"
912
+ },
913
+ {
914
+ "word": "如释重负",
915
+ "replacement_hint": "用动作/呼吸变化展示松弛感"
916
+ },
917
+ {
918
+ "word": "内心深处",
919
+ "replacement_hint": "删除抽象定位,直接写想法/反应"
920
+ },
921
+ {
922
+ "word": "百感交集",
923
+ "replacement_hint": "写出具体是哪几种感受"
924
+ },
925
+ {
926
+ "word": "五味杂陈",
927
+ "replacement_hint": "写出具体是哪几种感受"
928
+ },
929
+ {
930
+ "word": "心如刀割",
931
+ "replacement_hint": "除非对话,否则用具体动作/生理反应替代"
932
+ },
933
+ {
934
+ "word": "心如死灰",
935
+ "replacement_hint": "除非对话,否则用具体动作/生理反应替代"
936
+ },
937
+ {
938
+ "word": "心中涌起一股",
939
+ "replacement_hint": "用生理反应代替(喉咙发紧/手指发麻)"
940
+ },
941
+ {
942
+ "word": "不禁感到",
943
+ "replacement_hint": "删除“不禁”,直接写感受或动作"
944
+ },
945
+ {
946
+ "word": "心里咯噔一下",
947
+ "replacement_hint": "用具体动作/呼吸变化替代"
948
+ },
949
+ {
950
+ "word": "心里一沉",
951
+ "replacement_hint": "用具体动作/呼吸变化替代"
952
+ },
953
+ {
954
+ "word": "心跳漏了一拍",
955
+ "replacement_hint": "用具体动作/呼吸变化替代"
956
+ },
957
+ {
958
+ "word": "心脏猛地一跳",
959
+ "replacement_hint": "用具体动作/呼吸变化替代"
960
+ },
961
+ {
962
+ "word": "热血沸腾",
963
+ "replacement_hint": "用身体反应/动作展示兴奋感"
964
+ },
965
+ {
966
+ "word": "激动万分",
967
+ "replacement_hint": "用身体反应/动作展示兴奋感"
968
+ }
424
969
  ],
425
970
  "expression_cliche": [
426
- { "word": "嘴角微微上扬", "replacement_hint": "写清楚笑的方式与原因,避免模板表情" },
427
- { "word": "嘴角勾起一抹弧度", "replacement_hint": "写清楚笑的方式与原因,避免模板表情" },
428
- { "word": "眼中闪过一丝", "replacement_hint": "把“闪过”具体化(看向哪/因何变化)" },
429
- { "word": "嘴角微扬", "replacement_hint": "写清楚笑的方式与原因,避免模板表情" },
430
- { "word": "眼神中带着一丝", "replacement_hint": "把“带着一丝”具体化(动作/语气/视线)" },
431
- { "word": "嘴角露出一丝笑意", "replacement_hint": "写清楚笑的方式与原因,避免模板表情" },
432
- { "word": "眉头微皱", "replacement_hint": "每章限频,用更具体的动作/原因替代", "per_chapter_max": 1 },
433
- { "word": "眼中闪过一抹异色", "replacement_hint": "把“异色”具体化(喜/疑/惧/狠)" },
434
- { "word": "目光如炬", "replacement_hint": "用具体眼神描写代替(盯住哪里/压迫感如何)" },
435
- { "word": "目光灼灼", "replacement_hint": "用具体眼神描写代替(盯住哪里/压迫感如何)" },
436
- { "word": "面色一沉", "replacement_hint": "用更具体的表情/动作替代(下颌绷紧/声音变冷)" },
437
- { "word": "神色一凛", "replacement_hint": "用更具体的表情/动作替代" },
438
- { "word": "神色微变", "replacement_hint": "用更具体的表情/动作替代" },
439
- { "word": "脸色一变", "replacement_hint": "用更具体的表情/动作替代" },
440
- { "word": "眸光一闪", "replacement_hint": "把“闪”具体化(看向哪/因何变化)" },
441
- { "word": "眼底闪过一抹", "replacement_hint": "把“闪过”具体化(喜/疑/惧/狠)" },
442
- { "word": "目光复杂", "replacement_hint": "写出复杂由哪些情绪组成,用动作/停顿展示" },
443
- { "word": "眼神复杂", "replacement_hint": "写出复杂由哪些情绪组成,用动作/停顿展示" }
971
+ {
972
+ "word": "嘴角微微上扬",
973
+ "replacement_hint": "写清楚笑的方式与原因,避免模板表情"
974
+ },
975
+ {
976
+ "word": "嘴角勾起一抹弧度",
977
+ "replacement_hint": "写清楚笑的方式与原因,避免模板表情"
978
+ },
979
+ {
980
+ "word": "眼中闪过一丝",
981
+ "replacement_hint": "把“闪过”具体化(看向哪/因何变化)"
982
+ },
983
+ {
984
+ "word": "嘴角微扬",
985
+ "replacement_hint": "写清楚笑的方式与原因,避免模板表情"
986
+ },
987
+ {
988
+ "word": "眼神中带着一丝",
989
+ "replacement_hint": "把“带着一丝”具体化(动作/语气/视线)"
990
+ },
991
+ {
992
+ "word": "嘴角露出一丝笑意",
993
+ "replacement_hint": "写清楚笑的方式与原因,避免模板表情"
994
+ },
995
+ {
996
+ "word": "眉头微皱",
997
+ "replacement_hint": "每章限频,用更具体的动作/原因替代",
998
+ "per_chapter_max": 1
999
+ },
1000
+ {
1001
+ "word": "眼中闪过一抹异色",
1002
+ "replacement_hint": "把“异色”具体化(喜/疑/惧/狠)"
1003
+ },
1004
+ {
1005
+ "word": "目光如炬",
1006
+ "replacement_hint": "用具体眼神描写代替(盯住哪里/压迫感如何)"
1007
+ },
1008
+ {
1009
+ "word": "目光灼灼",
1010
+ "replacement_hint": "用具体眼神描写代替(盯住哪里/压迫感如何)"
1011
+ },
1012
+ {
1013
+ "word": "面色一沉",
1014
+ "replacement_hint": "用更具体的表情/动作替代(下颌绷紧/声音变冷)"
1015
+ },
1016
+ {
1017
+ "word": "神色一凛",
1018
+ "replacement_hint": "用更具体的表情/动作替代"
1019
+ },
1020
+ {
1021
+ "word": "神色微变",
1022
+ "replacement_hint": "用更具体的表情/动作替代"
1023
+ },
1024
+ {
1025
+ "word": "脸色一变",
1026
+ "replacement_hint": "用更具体的表情/动作替代"
1027
+ },
1028
+ {
1029
+ "word": "眸光一闪",
1030
+ "replacement_hint": "把“闪”具体化(看向哪/因何变化)"
1031
+ },
1032
+ {
1033
+ "word": "眼底闪过一抹",
1034
+ "replacement_hint": "把“闪过”具体化(喜/疑/惧/狠)"
1035
+ },
1036
+ {
1037
+ "word": "目光复杂",
1038
+ "replacement_hint": "写出复杂由哪些情绪组成,用动作/停顿展示"
1039
+ },
1040
+ {
1041
+ "word": "眼神复杂",
1042
+ "replacement_hint": "写出复杂由哪些情绪组成,用动作/停顿展示"
1043
+ }
444
1044
  ],
445
1045
  "simile_cliche": [
446
- { "word": "宛如", "replacement_hint": "每段至多保留一个比喻,优先直写本体与触感" },
447
- { "word": "恍若", "replacement_hint": "每段至多保留一个比喻,优先直写本体与触感" },
448
- { "word": "仿佛置身于", "replacement_hint": "直接写环境变化与感官细节,不要借套话跳场" }
1046
+ {
1047
+ "word": "宛如",
1048
+ "replacement_hint": "每段至多保留一个比喻,优先直写本体与触感"
1049
+ },
1050
+ {
1051
+ "word": "恍若",
1052
+ "replacement_hint": "每段至多保留一个比喻,优先直写本体与触感"
1053
+ },
1054
+ {
1055
+ "word": "仿佛置身于",
1056
+ "replacement_hint": "直接写环境变化与感官细节,不要借套话跳场"
1057
+ },
1058
+ {
1059
+ "word": "像一把刀",
1060
+ "replacement_hint": "用具体痛感/伤口/动作代替抽象比喻"
1061
+ },
1062
+ {
1063
+ "word": "像一根绷紧的弦",
1064
+ "replacement_hint": "用身体僵硬/呼吸变浅等具体反应代替"
1065
+ },
1066
+ {
1067
+ "word": "像被什么扼住",
1068
+ "replacement_hint": "直接写喉咙发紧/胸口发闷的生理反应"
1069
+ },
1070
+ {
1071
+ "word": "像是要燃烧起来",
1072
+ "replacement_hint": "写具体的热感/发红/出汗"
1073
+ },
1074
+ {
1075
+ "word": "像潮水一样涌来",
1076
+ "replacement_hint": "用具体感受的层次变化代替笼统比喻"
1077
+ },
1078
+ {
1079
+ "word": "像针扎一样",
1080
+ "replacement_hint": "写具体的刺痛位置和反应"
1081
+ },
1082
+ {
1083
+ "word": "像一块石头",
1084
+ "replacement_hint": "用具体的沉重感/僵硬动作代替"
1085
+ },
1086
+ {
1087
+ "word": "像触电一样",
1088
+ "replacement_hint": "写手指发麻/肌肉一抽等具体反应"
1089
+ }
449
1090
  ],
450
1091
  "action_cliche": [
451
- { "word": "深吸一口气", "replacement_hint": "每章限频,或改为具体呼吸/动作描写", "per_chapter_max": 1 },
452
- { "word": "紧握双拳", "replacement_hint": "用更具体动作替代(指节发白/手心出汗)" },
453
- { "word": "瞳孔骤缩", "replacement_hint": "用更具体反应替代(视线一滞/呼吸一顿)" },
454
- { "word": "浑身一震", "replacement_hint": "用更具体反应替代(脚下一软/肩膀一僵)" },
455
- { "word": "仿佛被什么击中", "replacement_hint": "写清楚被什么触发(某句话/某个细节)" },
456
- { "word": "缓缓开口", "replacement_hint": "用“说/问”+具体动作替代" },
457
- { "word": "缓缓说道", "replacement_hint": "用“说/问”+具体动作替代", "per_chapter_max": 1 },
458
- { "word": "微微一笑", "replacement_hint": "写清楚笑的方式和原因", "per_chapter_max": 1 },
459
- { "word": "淡淡一笑", "replacement_hint": "写清楚笑的方式和原因" },
460
- { "word": "轻轻一笑", "replacement_hint": "写清楚笑的方式和原因" },
461
- { "word": "轻轻叹了口气", "replacement_hint": "减少模板动作,写叹气的原因与后续动作" },
462
- { "word": "长长地舒了口气", "replacement_hint": "减少模板动作,写呼吸变化与身体反应" },
463
- { "word": "脚步一顿", "replacement_hint": "每章限频,用更具体动作替代", "per_chapter_max": 1 },
464
- { "word": "身形一滞", "replacement_hint": "每章限频,用更具体动作替代", "per_chapter_max": 1 },
465
- { "word": "不由自主地", "replacement_hint": "删除,直接写动作" },
466
- { "word": "下意识地", "replacement_hint": "删除,直接写动作" },
467
- { "word": "下意识地后退", "replacement_hint": "改成更具体的动作链(脚尖一撤/肩膀一缩)" },
468
- { "word": "忍不住", "replacement_hint": "删除,直接写动作" },
469
- { "word": "忍不住地笑", "replacement_hint": "写清楚笑的方式与触发点" },
470
- { "word": "忍不住地皱眉", "replacement_hint": "写清楚触发点与更具体的表情/动作" },
471
- { "word": "伸手揉了揉眉心", "replacement_hint": "减少模板动作,写出疲惫/烦躁的具体原因" },
472
- { "word": "抬手擦了擦冷汗", "replacement_hint": "减少模板动作,写出紧张的具体原因" },
473
- { "word": "缓缓抬起头", "replacement_hint": "减少“缓缓”套话,用更具体动作与节奏替代" },
474
- { "word": "缓缓转身", "replacement_hint": "减少“缓缓”套话,用更具体动作与节奏替代" },
475
- { "word": "缓缓伸出手", "replacement_hint": "减少“缓缓”套话,用更具体动作与节奏替代" }
1092
+ {
1093
+ "word": "深吸一口气",
1094
+ "replacement_hint": "每章限频,或改为具体呼吸/动作描写",
1095
+ "per_chapter_max": 1
1096
+ },
1097
+ {
1098
+ "word": "紧握双拳",
1099
+ "replacement_hint": "用更具体动作替代(指节发白/手心出汗)"
1100
+ },
1101
+ {
1102
+ "word": "瞳孔骤缩",
1103
+ "replacement_hint": "用更具体反应替代(视线一滞/呼吸一顿)"
1104
+ },
1105
+ {
1106
+ "word": "浑身一震",
1107
+ "replacement_hint": "用更具体反应替代(脚下一软/肩膀一僵)"
1108
+ },
1109
+ {
1110
+ "word": "仿佛被什么击中",
1111
+ "replacement_hint": "写清楚被什么触发(某句话/某个细节)"
1112
+ },
1113
+ {
1114
+ "word": "缓缓开口",
1115
+ "replacement_hint": "用“说/问”+具体动作替代"
1116
+ },
1117
+ {
1118
+ "word": "缓缓说道",
1119
+ "replacement_hint": "用“说/问”+具体动作替代",
1120
+ "per_chapter_max": 1
1121
+ },
1122
+ {
1123
+ "word": "微微一笑",
1124
+ "replacement_hint": "写清楚笑的方式和原因",
1125
+ "per_chapter_max": 1
1126
+ },
1127
+ {
1128
+ "word": "淡淡一笑",
1129
+ "replacement_hint": "写清楚笑的方式和原因"
1130
+ },
1131
+ {
1132
+ "word": "轻轻一笑",
1133
+ "replacement_hint": "写清楚笑的方式和原因"
1134
+ },
1135
+ {
1136
+ "word": "轻轻叹了口气",
1137
+ "replacement_hint": "减少模板动作,写叹气的原因与后续动作"
1138
+ },
1139
+ {
1140
+ "word": "长长地舒了口气",
1141
+ "replacement_hint": "减少模板动作,写呼吸变化与身体反应"
1142
+ },
1143
+ {
1144
+ "word": "脚步一顿",
1145
+ "replacement_hint": "每章限频,用更具体动作替代",
1146
+ "per_chapter_max": 1
1147
+ },
1148
+ {
1149
+ "word": "身形一滞",
1150
+ "replacement_hint": "每章限频,用更具体动作替代",
1151
+ "per_chapter_max": 1
1152
+ },
1153
+ {
1154
+ "word": "不由自主地",
1155
+ "replacement_hint": "删除,直接写动作"
1156
+ },
1157
+ {
1158
+ "word": "下意识地",
1159
+ "replacement_hint": "删除,直接写动作"
1160
+ },
1161
+ {
1162
+ "word": "下意识地后退",
1163
+ "replacement_hint": "改成更具体的动作链(脚尖一撤/肩膀一缩)"
1164
+ },
1165
+ {
1166
+ "word": "忍不住",
1167
+ "replacement_hint": "删除,直接写动作"
1168
+ },
1169
+ {
1170
+ "word": "忍不住地笑",
1171
+ "replacement_hint": "写清楚笑的方式与触发点"
1172
+ },
1173
+ {
1174
+ "word": "忍不住地皱眉",
1175
+ "replacement_hint": "写清楚触发点与更具体的表情/动作"
1176
+ },
1177
+ {
1178
+ "word": "伸手揉了揉眉心",
1179
+ "replacement_hint": "减少模板动作,写出疲惫/烦躁的具体原因"
1180
+ },
1181
+ {
1182
+ "word": "抬手擦了擦冷汗",
1183
+ "replacement_hint": "减少模板动作,写出紧张的具体原因"
1184
+ },
1185
+ {
1186
+ "word": "缓缓抬起头",
1187
+ "replacement_hint": "减少“缓缓”套话,用更具体动作与节奏替代"
1188
+ },
1189
+ {
1190
+ "word": "缓缓转身",
1191
+ "replacement_hint": "减少“缓缓”套话,用更具体动作与节奏替代"
1192
+ },
1193
+ {
1194
+ "word": "缓缓伸出手",
1195
+ "replacement_hint": "减少“缓缓”套话,用更具体动作与节奏替代"
1196
+ }
476
1197
  ],
477
1198
  "abstract_filler": [
478
- { "word": "某种程度上", "replacement_hint": "删除抽象缓冲语,直接说结论" },
479
- { "word": "某种意义上", "replacement_hint": "删除抽象缓冲语,直接说结论" },
480
- { "word": "难以形容", "replacement_hint": "努力去形容:给出具体感官细节" },
481
- { "word": "无法言喻", "replacement_hint": "努力去形容:给出具体感官细节" },
482
- { "word": "不可名状", "replacement_hint": "努力去形容:给出具体感官细节" },
483
- { "word": "说不清道不明", "replacement_hint": "写出能说清的部分(至少 2-3 个具体点)" },
484
- { "word": "难以言喻", "replacement_hint": "努力去形容:给出具体感官细节" },
485
- { "word": "无法用言语形容", "replacement_hint": "努力去形容:给出具体感官细节" },
486
- { "word": "让人难以置信", "replacement_hint": "用具体动作/反应代替抽象评价" },
487
- { "word": "不可思议", "replacement_hint": "用具体动作/反应代替抽象评价" },
488
- { "word": "难以想象", "replacement_hint": "用具体画面/数据/对比代替抽象评价" },
489
- { "word": "各种各样", "replacement_hint": "举 2-3 个具体例子,不要空泛概括" }
1199
+ {
1200
+ "word": "某种程度上",
1201
+ "replacement_hint": "删除抽象缓冲语,直接说结论"
1202
+ },
1203
+ {
1204
+ "word": "某种意义上",
1205
+ "replacement_hint": "删除抽象缓冲语,直接说结论"
1206
+ },
1207
+ {
1208
+ "word": "难以形容",
1209
+ "replacement_hint": "努力去形容:给出具体感官细节"
1210
+ },
1211
+ {
1212
+ "word": "无法言喻",
1213
+ "replacement_hint": "努力去形容:给出具体感官细节"
1214
+ },
1215
+ {
1216
+ "word": "不可名状",
1217
+ "replacement_hint": "努力去形容:给出具体感官细节"
1218
+ },
1219
+ {
1220
+ "word": "说不清道不明",
1221
+ "replacement_hint": "写出能说清的部分(至少 2-3 个具体点)"
1222
+ },
1223
+ {
1224
+ "word": "难以言喻",
1225
+ "replacement_hint": "努力去形容:给出具体感官细节"
1226
+ },
1227
+ {
1228
+ "word": "无法用言语形容",
1229
+ "replacement_hint": "努力去形容:给出具体感官细节"
1230
+ },
1231
+ {
1232
+ "word": "让人难以置信",
1233
+ "replacement_hint": "用具体动作/反应代替抽象评价"
1234
+ },
1235
+ {
1236
+ "word": "不可思议",
1237
+ "replacement_hint": "用具体动作/反应代替抽象评价"
1238
+ },
1239
+ {
1240
+ "word": "难以想象",
1241
+ "replacement_hint": "用具体画面/数据/对比代替抽象评价"
1242
+ },
1243
+ {
1244
+ "word": "各种各样",
1245
+ "replacement_hint": "举 2-3 个具体例子,不要空泛概括"
1246
+ }
490
1247
  ]
491
1248
  },
492
1249
  "category_metadata": {
@@ -500,23 +1257,44 @@
500
1257
  "context": "narration_only",
501
1258
  "description": "仅叙述文禁止,对话中允许;本类词条不进入 words 扁平列表"
502
1259
  },
1260
+ "simile_cliche": {
1261
+ "description": "比喻套话与'像'字比喻高频模式",
1262
+ "like_simile_rule": {
1263
+ "pattern": "像+具体意象",
1264
+ "per_kchars_max": 1,
1265
+ "exclusions": [
1266
+ "好像+动词",
1267
+ "像是+判断"
1268
+ ],
1269
+ "description": "通用'像+具体意象'比喻限频:≤1/千字。排除非比喻义用法('好像有人来了'、'像是累了'等)"
1270
+ }
1271
+ },
503
1272
  "abstract_filler": {
504
1273
  "description": "抽象空词:建议改为具体感官/事件/程度",
505
1274
  "genre_override": {
506
1275
  "sci-fi": {
507
1276
  "description": "科幻场景允许有限度使用“难以形容/不可名状”(每章≤2 处),但仍应尽量给出具体描写",
508
- "per_chapter_max": { "难以形容": 2, "不可名状": 2 }
1277
+ "per_chapter_max": {
1278
+ "难以形容": 2,
1279
+ "不可名状": 2
1280
+ }
509
1281
  }
510
1282
  }
511
1283
  }
512
1284
  },
513
1285
  "whitelist": [],
514
1286
  "update_log": [
515
- {
516
- "date": "2026-03-05",
517
- "version": "2.0.0",
518
- "description": "扩展黑名单至 200+ 词(对齐 anti-ai-polish 10 类),新增 max_words/replacement_hint/per_chapter_max/category_metadata(narration_only/genre_override)。",
519
- "words_count": 221
520
- }
521
- ]
522
- }
1287
+ {
1288
+ "date": "2026-03-05",
1289
+ "version": "2.0.0",
1290
+ "description": "扩展黑名单至 200+ 词(对齐 anti-ai-polish 10 类),新增 max_words/replacement_hint/per_chapter_max/category_metadata(narration_only/genre_override)。",
1291
+ "words_count": 229
1292
+ },
1293
+ {
1294
+ "date": "2026-03-06",
1295
+ "version": "2.1.0",
1296
+ "description": "simile_cliche 类别新增 8 个'像'字比喻高频词条;新增 category_metadata.simile_cliche.like_simile_rule 限频规则(像+具体意象 ≤1/千字)。",
1297
+ "words_count": 229
1298
+ }
1299
+ ]
1300
+ }