gwe-engine 3.2.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/README.md +265 -0
- package/README_EN.md +126 -0
- package/dist/cli.js +10444 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +847 -0
- package/dist/index.js +10569 -0
- package/dist/index.js.map +1 -0
- package/package.json +1 -0
- package/src/kb/base-fillers.json +35 -0
- package/src/kb/base-prompt.ts +151 -0
- package/src/kb/base-vocab.json +87 -0
- package/src/kb/nodes/node_ai_continue_length/opt_ai_long.kb.json +36 -0
- package/src/kb/nodes/node_ai_continue_length/opt_ai_medium.kb.json +30 -0
- package/src/kb/nodes/node_ai_continue_length/opt_ai_short.kb.json +34 -0
- package/src/kb/nodes/node_ai_continue_length/opt_ai_xtra_long.kb.json +37 -0
- package/src/kb/nodes/node_ai_creativity/opt_ai_adventurous.kb.json +31 -0
- package/src/kb/nodes/node_ai_creativity/opt_ai_balanced.kb.json +31 -0
- package/src/kb/nodes/node_ai_creativity/opt_ai_conservative.kb.json +31 -0
- package/src/kb/nodes/node_anchor_density/opt_anchor_dense.kb.json +36 -0
- package/src/kb/nodes/node_anchor_density/opt_anchor_extreme.kb.json +37 -0
- package/src/kb/nodes/node_anchor_density/opt_anchor_sparse.kb.json +34 -0
- package/src/kb/nodes/node_anchor_density/opt_anchor_standard.kb.json +34 -0
- package/src/kb/nodes/node_battle_style/opt_battle_atmosphere.kb.json +32 -0
- package/src/kb/nodes/node_battle_style/opt_battle_detail.kb.json +36 -0
- package/src/kb/nodes/node_battle_style/opt_battle_psychological.kb.json +36 -0
- package/src/kb/nodes/node_battle_style/opt_battle_result.kb.json +37 -0
- package/src/kb/nodes/node_description_style/opt_desc_clinical.kb.json +36 -0
- package/src/kb/nodes/node_description_style/opt_desc_minimal.kb.json +37 -0
- package/src/kb/nodes/node_description_style/opt_desc_poetic.kb.json +35 -0
- package/src/kb/nodes/node_description_style/opt_desc_sensory.kb.json +39 -0
- package/src/kb/nodes/node_dialogue_style/opt_dialogue_concise.kb.json +34 -0
- package/src/kb/nodes/node_dialogue_style/opt_dialogue_natural.kb.json +32 -0
- package/src/kb/nodes/node_dialogue_style/opt_dialogue_stylized.kb.json +33 -0
- package/src/kb/nodes/node_dialogue_style/opt_dialogue_verbose.kb.json +34 -0
- package/src/kb/nodes/node_emotion_style/opt_emotion_both.kb.json +40 -0
- package/src/kb/nodes/node_emotion_style/opt_emotion_show.kb.json +41 -0
- package/src/kb/nodes/node_emotion_style/opt_emotion_tell.kb.json +40 -0
- package/src/kb/nodes/node_ending_hook/opt_hook_break.kb.json +54 -0
- package/src/kb/nodes/node_ending_hook/opt_hook_soft.kb.json +29 -0
- package/src/kb/nodes/node_ending_hook/opt_hook_suspense.kb.json +30 -0
- package/src/kb/nodes/node_info_density/opt_info_balanced.kb.json +37 -0
- package/src/kb/nodes/node_info_density/opt_info_fast.kb.json +37 -0
- package/src/kb/nodes/node_info_density/opt_info_leisurely.kb.json +41 -0
- package/src/kb/nodes/node_opening_impact/opt_opening_medium.kb.json +30 -0
- package/src/kb/nodes/node_opening_impact/opt_opening_strong.kb.json +46 -0
- package/src/kb/nodes/node_opening_impact/opt_opening_weak.kb.json +29 -0
- package/src/kb/nodes/node_paragraph_density/opt_dense_high.kb.json +36 -0
- package/src/kb/nodes/node_paragraph_density/opt_dense_low.kb.json +37 -0
- package/src/kb/nodes/node_paragraph_density/opt_dense_medium.kb.json +28 -0
- package/src/kb/nodes/node_payoff_frequency/opt_payoff_every_3.kb.json +31 -0
- package/src/kb/nodes/node_payoff_frequency/opt_payoff_every_chapter.kb.json +35 -0
- package/src/kb/nodes/node_payoff_frequency/opt_payoff_sparse.kb.json +37 -0
- package/src/kb/nodes/node_platform/opt_platform_feilu.kb.json +44 -0
- package/src/kb/nodes/node_platform/opt_platform_generic.kb.json +31 -0
- package/src/kb/nodes/node_platform/opt_platform_jinjiang.kb.json +42 -0
- package/src/kb/nodes/node_platform/opt_platform_newmedia.kb.json +43 -0
- package/src/kb/nodes/node_platform/opt_platform_qidian.kb.json +39 -0
- package/src/kb/nodes/node_platform/opt_platform_qimao.kb.json +43 -0
- package/src/kb/nodes/node_platform/opt_platform_tomato.kb.json +51 -0
- package/src/kb/nodes/node_pov/opt_pov_first_past.kb.json +34 -0
- package/src/kb/nodes/node_pov/opt_pov_first_present.kb.json +37 -0
- package/src/kb/nodes/node_pov/opt_pov_limited_third_past.kb.json +31 -0
- package/src/kb/nodes/node_pov/opt_pov_limited_third_present.kb.json +35 -0
- package/src/kb/nodes/node_pov/opt_pov_omniscient_third_past.kb.json +37 -0
- package/src/kb/nodes/node_pov/opt_pov_omniscient_third_present.kb.json +36 -0
- package/src/kb/nodes/node_rhetoric/opt_rhetoric_metaphor.kb.json +35 -0
- package/src/kb/nodes/node_rhetoric/opt_rhetoric_ornate.kb.json +37 -0
- package/src/kb/nodes/node_rhetoric/opt_rhetoric_plain.kb.json +25 -0
- package/src/kb/nodes/node_rhetoric/opt_rhetoric_sketch.kb.json +37 -0
- package/src/kb/nodes/node_sentence_rhythm/opt_rhythm_long.kb.json +42 -0
- package/src/kb/nodes/node_sentence_rhythm/opt_rhythm_medium.kb.json +40 -0
- package/src/kb/nodes/node_sentence_rhythm/opt_rhythm_mixed.kb.json +40 -0
- package/src/kb/nodes/node_sentence_rhythm/opt_rhythm_short.kb.json +41 -0
- package/src/kb/nodes/node_strictness/opt_strict_lenient.kb.json +50 -0
- package/src/kb/nodes/node_strictness/opt_strict_standard.kb.json +30 -0
- package/src/kb/nodes/node_strictness/opt_strict_strict.kb.json +52 -0
- package/src/kb/nodes/node_target_length/opt_length_1500.kb.json +39 -0
- package/src/kb/nodes/node_target_length/opt_length_2200.kb.json +39 -0
- package/src/kb/nodes/node_target_length/opt_length_3000.kb.json +39 -0
- package/src/kb/nodes/node_target_length/opt_length_4000.kb.json +39 -0
- package/src/kb/nodes/node_target_length/opt_length_custom.kb.json +31 -0
- package/src/kb/nodes/node_tone/opt_tone_badass.kb.json +45 -0
- package/src/kb/nodes/node_tone/opt_tone_classical.kb.json +41 -0
- package/src/kb/nodes/node_tone/opt_tone_cold.kb.json +42 -0
- package/src/kb/nodes/node_tone/opt_tone_colloquial.kb.json +33 -0
- package/src/kb/nodes/node_tone/opt_tone_folksy.kb.json +40 -0
- package/src/kb/nodes/node_tone/opt_tone_playful.kb.json +42 -0
- package/src/kb/nodes/node_tone/opt_tone_serious.kb.json +42 -0
- package/src/kb/nodes/node_twist_frequency/opt_twist_dense.kb.json +36 -0
- package/src/kb/nodes/node_twist_frequency/opt_twist_sparse.kb.json +26 -0
- package/src/kb/nodes/node_twist_frequency/opt_twist_standard.kb.json +32 -0
- package/src/kb/nodes/node_vocab_filler/opt_filler_relaxed.kb.json +45 -0
- package/src/kb/nodes/node_vocab_filler/opt_filler_standard.kb.json +46 -0
- package/src/kb/nodes/node_vocab_filler/opt_filler_strict.kb.json +56 -0
- package/src/kb/nodes/node_vocab_filler/opt_filler_webnovel.kb.json +56 -0
- package/src/kb/nodes/node_vocab_sensory/opt_vocab_daily.kb.json +46 -0
- package/src/kb/nodes/node_vocab_sensory/opt_vocab_esports.kb.json +45 -0
- package/src/kb/nodes/node_vocab_sensory/opt_vocab_fantasy.kb.json +40 -0
- package/src/kb/nodes/node_vocab_sensory/opt_vocab_generic.kb.json +32 -0
- package/src/kb/nodes/node_vocab_sensory/opt_vocab_historical.kb.json +43 -0
- package/src/kb/nodes/node_vocab_sensory/opt_vocab_horror.kb.json +48 -0
- package/src/kb/nodes/node_vocab_sensory/opt_vocab_military.kb.json +46 -0
- package/src/kb/nodes/node_vocab_sensory/opt_vocab_mystery.kb.json +43 -0
- package/src/kb/nodes/node_vocab_sensory/opt_vocab_scifi.kb.json +40 -0
- package/src/kb/nodes/node_vocab_sensory/opt_vocab_urban.kb.json +40 -0
- package/src/kb/nodes/node_vocab_sensory/opt_vocab_xianxia.kb.json +40 -0
- package/src/kb/presets/preset_daily.json +42 -0
- package/src/kb/presets/preset_esports.json +42 -0
- package/src/kb/presets/preset_fantasy.json +40 -0
- package/src/kb/presets/preset_historical.json +41 -0
- package/src/kb/presets/preset_horror.json +67 -0
- package/src/kb/presets/preset_miner.json +123 -0
- package/src/kb/presets/preset_mystery.json +55 -0
- package/src/kb/presets/preset_scifi_hardcore.json +55 -0
- package/src/kb/presets/preset_urban_jinjiang.json +42 -0
- package/src/kb/presets/preset_urban_tomato.json +66 -0
- package/src/kb/presets/preset_xianxia_qidian.json +50 -0
- package/src/kb/presets/preset_xianxia_tomato.json +66 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_rhetoric",
|
|
4
|
+
"option_id": "opt_rhetoric_metaphor",
|
|
5
|
+
"option_name": "比喻密集",
|
|
6
|
+
"option_description": "大量使用比喻(明喻、暗喻、借喻)来描写和叙事,语言形象生动,画面感强。",
|
|
7
|
+
"threshold_overrides": {
|
|
8
|
+
"maxSentenceLength": 45,
|
|
9
|
+
"targetSentenceLength": 24,
|
|
10
|
+
"shortSentenceRatio": 0.3
|
|
11
|
+
},
|
|
12
|
+
"radar_weights": {
|
|
13
|
+
"sensorySignal": 1.3,
|
|
14
|
+
"emotion": 1.2,
|
|
15
|
+
"action": 0.9
|
|
16
|
+
},
|
|
17
|
+
"system_prompt": "善用比喻,让文字形象可感。描写人物、场景、情绪时,寻找新鲜贴切的比喻来替代直白描述。比喻要新颖,避免陈词滥调。明喻(像、如、仿佛)和暗喻(是、成了)交替使用。每个重要场景至少有一个核心比喻贯穿。比喻要为内容服务,不能为比喻而比喻——比喻的喻体应该比本体更容易被读者感知。",
|
|
18
|
+
"constraints": [
|
|
19
|
+
"比喻必须新鲜贴切,禁止陈词滥调",
|
|
20
|
+
"每个重要场景至少有2处比喻",
|
|
21
|
+
"喻体要具体可感,不使用抽象比喻抽象",
|
|
22
|
+
"避免连续使用比喻导致阅读疲劳"
|
|
23
|
+
],
|
|
24
|
+
"examples": [
|
|
25
|
+
{
|
|
26
|
+
"text": "黑暗像一块浸透了墨汁的棉絮,密不透风地裹住一切。矿灯的光柱是一把钝刀,割了几下,只割开一道口子,光就被吞掉了。\n\n他的心跳像一面被疯狂敲击的鼓,每一下都震得耳膜发疼。汗水从额角滑下来,像一群惊慌失措的虫子,顺着脸颊往下爬。\n\n恐惧是一只冰冷的手,从地底伸出来,攥住了他的后颈。",
|
|
27
|
+
"note": "黑暗如棉絮、光柱如钝刀、心跳如鼓、汗水如虫、恐惧如手——比喻密集且新鲜。"
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"requires": [],
|
|
31
|
+
"conflicts": [
|
|
32
|
+
"opt_rhetoric_plain",
|
|
33
|
+
"opt_rhetoric_sketch"
|
|
34
|
+
]
|
|
35
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_rhetoric",
|
|
4
|
+
"option_id": "opt_rhetoric_ornate",
|
|
5
|
+
"option_name": "华丽辞藻",
|
|
6
|
+
"option_description": "辞藻华丽,多用修辞和修饰语,语言绚烂夺目。适合唯美、宫廷、奇幻等追求文字美感的题材。",
|
|
7
|
+
"threshold_overrides": {
|
|
8
|
+
"maxSentenceLength": 60,
|
|
9
|
+
"targetSentenceLength": 30,
|
|
10
|
+
"shortSentenceRatio": 0.2,
|
|
11
|
+
"maxParagraphLength": 250
|
|
12
|
+
},
|
|
13
|
+
"radar_weights": {
|
|
14
|
+
"sensorySignal": 1.3,
|
|
15
|
+
"emotion": 1.3,
|
|
16
|
+
"action": 0.7,
|
|
17
|
+
"infoAdvance": 0.8
|
|
18
|
+
},
|
|
19
|
+
"system_prompt": "辞藻华丽绚烂,善用丰富的修饰语、对仗、排比、通感等修辞技巧。词汇量丰富,用词讲究色彩感和音韵感。描写浓墨重彩,像油画一样铺陈。适合唯美场景、宫廷盛宴、奇幻世界等需要视觉冲击力的场景。但要注意华丽不能空洞——每个修饰语都要有用,不能是词语的堆砌。",
|
|
20
|
+
"constraints": [
|
|
21
|
+
"用词华丽但不空洞,每个修饰语都有存在的理由",
|
|
22
|
+
"善用色彩、光影、声音等感官元素的铺陈",
|
|
23
|
+
"修辞手法多样(比喻/拟人/排比/通感)",
|
|
24
|
+
"避免辞藻堆砌导致内容空洞"
|
|
25
|
+
],
|
|
26
|
+
"examples": [
|
|
27
|
+
{
|
|
28
|
+
"text": "那是一座用白玉和黄金筑就的宫殿,飞檐上盘踞着琉璃色的龙,在夕阳下折射出万千道金红色的光芒,仿佛整座建筑正在燃烧。殿门前的台阶是整块的汉白玉雕成,每一级都镂刻着缠枝莲纹,缝隙间镶嵌着细碎的绿松石和红珊瑚,远看如一条流淌着宝石的河流。殿内灯火辉煌,鎏金的灯柱上燃着儿臂粗的龙涎香烛,香烟袅袅,在半空中凝结成云雾的形状,将丝幔后的人影晕染得如同虚幻。",
|
|
29
|
+
"note": "辞藻华丽,色彩绚烂,修辞丰富,但每个细节都在构建宫殿的奢华画面。"
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"requires": [],
|
|
33
|
+
"conflicts": [
|
|
34
|
+
"opt_rhetoric_plain",
|
|
35
|
+
"opt_rhetoric_sketch"
|
|
36
|
+
]
|
|
37
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_rhetoric",
|
|
4
|
+
"option_id": "opt_rhetoric_plain",
|
|
5
|
+
"option_name": "克制平实",
|
|
6
|
+
"option_description": "修辞克制,语言平实(默认)。少用比喻和华丽辞藻,靠精准的名词和动词打动人。大巧若拙。",
|
|
7
|
+
"system_prompt": "修辞克制,语言平实。不刻意使用比喻、拟人、排比等修辞手法,除非自然涌现。文字的力量来自精准的名词和动词,而非修辞技巧。描写时直接写事物本身,不找替身。有时候,直接说「他哭了」比「泪水像断了线的珠子」更有力量。克制不是贫瘠,是选择——把力气用在最需要的地方。",
|
|
8
|
+
"constraints": [
|
|
9
|
+
"不刻意使用修辞,修辞自然出现才用",
|
|
10
|
+
"优先用精准的名词和动词",
|
|
11
|
+
"每千字比喻不超过3处",
|
|
12
|
+
"禁止使用陈词滥调的修辞(心如刀割、泪如雨下等)"
|
|
13
|
+
],
|
|
14
|
+
"examples": [
|
|
15
|
+
{
|
|
16
|
+
"text": "他蹲下来,把铜碗贴在壁上。\n\n碗壁凉了一瞬,然后慢慢变温。他等了很久。\n\n三下。\n\n短的。然后一下长的。\n\n是回应。\n\n他抬起头,矿灯照出前方巷道的轮廓。黑暗还是那个黑暗,但好像没那么沉了。\n\n他站起来,往深处走。",
|
|
17
|
+
"note": "几乎没有修辞,用朴素的白描传递情感和信息,力量藏在克制中。"
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"requires": [],
|
|
21
|
+
"conflicts": [
|
|
22
|
+
"opt_rhetoric_metaphor",
|
|
23
|
+
"opt_rhetoric_ornate"
|
|
24
|
+
]
|
|
25
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_rhetoric",
|
|
4
|
+
"option_id": "opt_rhetoric_sketch",
|
|
5
|
+
"option_name": "白描",
|
|
6
|
+
"option_description": "纯用白描手法,不用比喻、拟人等修辞,不用形容词修饰,纯以名词动词勾勒。极简主义,返璞归真。",
|
|
7
|
+
"threshold_overrides": {
|
|
8
|
+
"maxSentenceLength": 25,
|
|
9
|
+
"targetSentenceLength": 15,
|
|
10
|
+
"shortSentenceRatio": 0.6,
|
|
11
|
+
"maxParagraphLength": 80
|
|
12
|
+
},
|
|
13
|
+
"radar_weights": {
|
|
14
|
+
"sensorySignal": 0.8,
|
|
15
|
+
"emotion": 0.9,
|
|
16
|
+
"action": 1.2,
|
|
17
|
+
"infoAdvance": 1.1
|
|
18
|
+
},
|
|
19
|
+
"system_prompt": "纯用白描手法。不使用比喻、拟人、夸张、排比等任何修辞手法。不用形容词修饰名词,不用副词修饰动词。只用名词和动词,像中国画的白描一样,用线条勾勒事物。不解释、不评价、不渲染,只呈现。留最大的空间给读者。文字的力量来自精确的名词动词组合和节奏控制。",
|
|
20
|
+
"constraints": [
|
|
21
|
+
"禁止使用所有修辞手法(比喻/拟人/夸张/排比等)",
|
|
22
|
+
"尽量不用形容词和副词",
|
|
23
|
+
"只用名词和动词构建句子",
|
|
24
|
+
"不解释情绪,不评价事物,只呈现事实"
|
|
25
|
+
],
|
|
26
|
+
"examples": [
|
|
27
|
+
{
|
|
28
|
+
"text": "日出。\n\n门开了。\n\n他走出来。\n\n身上有伤。\n\n手里有刀。\n\n刀上有血。\n\n他抬头。\n\n天很亮。\n\n他站了很久。\n\n然后他走了。",
|
|
29
|
+
"note": "纯名词动词,没有修辞,没有修饰,像水墨画的留白,言简意丰。"
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"requires": [],
|
|
33
|
+
"conflicts": [
|
|
34
|
+
"opt_rhetoric_metaphor",
|
|
35
|
+
"opt_rhetoric_ornate"
|
|
36
|
+
]
|
|
37
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_sentence_rhythm",
|
|
4
|
+
"option_id": "opt_rhythm_long",
|
|
5
|
+
"option_name": "长句为主",
|
|
6
|
+
"option_description": "以长句(30字+)为主导节奏,适合文学性描写、铺陈氛围和内心独白。句子绵长悠远,有散文质感,适合文艺、言情、乡土题材。",
|
|
7
|
+
"threshold_overrides": {
|
|
8
|
+
"maxSentenceLength": 80,
|
|
9
|
+
"targetSentenceLength": 40,
|
|
10
|
+
"shortSentenceRatio": 0.15,
|
|
11
|
+
"maxParagraphLength": 300,
|
|
12
|
+
"targetParagraphLength": 150
|
|
13
|
+
},
|
|
14
|
+
"radar_weights": {
|
|
15
|
+
"sensorySignal": 1.3,
|
|
16
|
+
"emotion": 1.3,
|
|
17
|
+
"action": 0.7,
|
|
18
|
+
"infoAdvance": 0.8,
|
|
19
|
+
"bodyReaction": 1.1
|
|
20
|
+
},
|
|
21
|
+
"system_prompt": "长句节奏的核心是'沉浸感'。像河水慢慢流淌,像镜头慢慢推移,读者跟着句子进入场景,被氛围包裹。长句不是啰嗦,是绵密,是一层一层把情绪织进去。具体技法:\n\n1. 画面流动:长句要有镜头感——从远到近,从整体到细节,从视觉到听觉到嗅觉触觉,句子像摄像机一样移动,读者跟着走。'暮色从远山外暗暗袭来,山色一刻儿深赭,一刻儿淡青,缓缓地、沉重地压在村庄上空,把最后一缕炊烟也染成了灰蓝色'——镜头从远到近,从视觉到氛围,有流动感。\n\n2. 呼吸感:长句内部必须有停顿,逗号、顿号就是呼吸。每8-12个字要有一个停顿,不能一逗到底。读的时候能自然换气,像唱歌有节拍。停顿本身就是节奏,不是卡壳。\n\n3. 修饰语层次:形容词和定语不是堆砌,是分层。第一层写整体印象,第二层写具体细节,第三层写主观感受。不要把三个形容词堆在名词前面,要拆开,用逗号隔开,像涟漪一圈一圈荡开。\n\n4. 情绪递进:长句内部情绪要有递进,不是平铺直叙。开始淡,中间浓,结尾收。句子越长,结尾越要有力,最后几个字要落在实处,不能飘。\n\n5. 短句重音:全是长句会闷。每3-5句长句后,插1句短句(5-15字)作为呼吸口,也作为重音。长句铺了半天,一个短句砸下来,效果翻倍。就像交响乐里突然所有乐器停了,只剩一把小提琴拉一个音。\n\n6. 感官串联:长句适合写通感——视觉和听觉连在一起,触觉和嗅觉连在一起。'风里有晚香玉的味道,还有远处河水的腥气,凉丝丝地贴在脸上,像谁的手'——多种感官串在一句里,沉浸感就出来了。\n\n7. 内心独白适配:人物的思绪是绵延不断的,适合用长句。回忆、联想、情绪翻涌,句子跟着思绪走,不要拆得太碎。但情绪激烈的念头仍然要用短句,形成对比。\n\n8. 禁忌:禁止空话套话('岁月静好''时光荏苒''百感交集'),禁止堆砌华丽辞藻却没有实际画面,禁止为了长而长把一句能说清的话扯成三句。长句是为了更好地传递情绪和画面,不是为了显得有文采。",
|
|
22
|
+
"constraints": [
|
|
23
|
+
"长句(30字+)占比50%以上,但不超过80%,必须有短句调剂",
|
|
24
|
+
"单句原则上不超过80字,超过必须拆成两句(除非是刻意设计的情绪高潮句)",
|
|
25
|
+
"长句内部每8-15字至少有一个逗号停顿,禁止一逗到底",
|
|
26
|
+
"每200字至少有1句15字以内的短句作为呼吸口和重音",
|
|
27
|
+
"每句必须有具体画面或感官细节,禁止空洞抒情('他心中五味杂陈''气氛十分尴尬'这类空话禁止出现)",
|
|
28
|
+
"形容词连用不超过3个,且必须是不同维度的修饰(不要'美丽的漂亮的好看的'这种同义词堆砌)",
|
|
29
|
+
"动作描写仍然要干脆,不要把快速动作拖成长句(打斗、奔跑、震惊反应必须用短句)",
|
|
30
|
+
"段落长度控制在5-10句,手机阅读4-6行为宜,不要一整屏不分段"
|
|
31
|
+
],
|
|
32
|
+
"examples": [
|
|
33
|
+
{
|
|
34
|
+
"text": "雨是从后半夜开始下的,先是淅淅沥沥地打在棚顶的油毡纸上,声音很轻,像谁在外面用手指一下一下弹着,后来就渐渐密了,大了,顺着棚顶的缝隙渗下来,在墙角积成一小滩一小滩浑浊的水洼,映着矿灯那点昏黄的光,一晃一晃的。\n\n他躺在草垫子上,听着雨声,没有睡着。后背贴着冰凉的地面,潮气从衣服缝里钻进来,一点一点吸走身体里的热气,他能感觉到自己的体温在慢慢下降,像沙漏里的沙子,一粒一粒往下漏,拦不住。\n\n旁边的老李已经很久没出声了。他不知道老李是睡着了还是醒着,是活着还是已经走了,黑暗里什么都看不见,只有老李那边传来的、很轻很轻的呼吸声,像风里抖动的蛛丝,稍一用力就会断。\n\n他想起很多年前的一个夏天,也是这样的雨,他还在老家,院子里的石榴树被雨打落了一地花,红红的,铺在青石板上,母亲坐在门槛上择菜,雨水顺着屋檐滴下来,在她面前的台阶上砸出一排小小的坑。\n\n那时候他还觉得日子很长。\n\n他翻了个身,草垫子发出细碎的响声。铜碗在他手边,碗里还剩一点点水,他端起来喝了,水是凉的,带着点铜锈的涩味,顺着喉咙滑下去,像一条冰冷的小蛇。\n\n外面的雨还在下。",
|
|
35
|
+
"note": "长句节奏示范:开头用长句铺陈雨声的变化(从淅淅沥沥到密了大了),感官细节丰富(视觉/听觉/触觉),画面流动。中间插入回忆段也是长句,营造绵延感。关键情绪点用短句('那时候他还觉得日子很长。''外面的雨还在下。')收束,形成对比。长句里有停顿,读起来不费劲,能感受到那种慢慢下沉的绝望和回忆里的温暖。"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"requires": [],
|
|
39
|
+
"conflicts": [
|
|
40
|
+
"opt_rhythm_short"
|
|
41
|
+
]
|
|
42
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_sentence_rhythm",
|
|
4
|
+
"option_id": "opt_rhythm_medium",
|
|
5
|
+
"option_name": "中句为主",
|
|
6
|
+
"option_description": "以中句(15-30字)为主导节奏,平稳流畅,兼顾信息密度和阅读舒适度。适合日常叙事、对话和过渡段落,是通用小说的默认节奏。",
|
|
7
|
+
"threshold_overrides": {
|
|
8
|
+
"maxSentenceLength": 35,
|
|
9
|
+
"targetSentenceLength": 22,
|
|
10
|
+
"shortSentenceRatio": 0.35,
|
|
11
|
+
"maxParagraphLength": 180,
|
|
12
|
+
"targetParagraphLength": 80
|
|
13
|
+
},
|
|
14
|
+
"radar_weights": {
|
|
15
|
+
"action": 1.0,
|
|
16
|
+
"emotion": 1.0,
|
|
17
|
+
"infoAdvance": 1.0,
|
|
18
|
+
"sensorySignal": 1.0,
|
|
19
|
+
"bodyReaction": 1.0
|
|
20
|
+
},
|
|
21
|
+
"system_prompt": "中句节奏的核心是'自然呼吸'。像人正常说话的语速,不快不慢,信息传递流畅,读者读起来不费劲。这是最通用、最不容易出错的节奏,适合80%的叙事场景。具体技法:\n\n1. 主谓宾清晰:句子结构简单明了,主语+谓语+宾语,最多加一个修饰成分。不要多层从句嵌套,不要倒装句搞花活。'他从口袋里掏出烟,递了一根给老周'就很好,不要写成'从那个被磨得发白的帆布工作服口袋里,他掏出了一包已经被挤压得变形的红塔山,用手指夹出一根递向坐在对面凳子上的老周'。\n\n2. 一句一义:虽然比短句长,但一句话仍然只讲一个核心意思。可以带修饰,但不要同时讲动作+心理+环境三件事。环境单独成句,心理单独成句,动作单独成句。\n\n3. 逗号断句合理:一句话内逗号不超过3个。超过3个逗号说明你塞了太多东西,该拆成两句。'他推开门,看见屋里坐满了人,都是熟面孔,老张小李老王都在,桌上摆着酒菜'——这句子太长,拆成两句。\n\n4. 节奏调剂:中句为主,但不是全中句。每5-8句中句后,插1句短句(5-10字)作为顿点,插1句稍长的句子(30-35字)作为舒展。这样读起来有起伏,不会像白开水。\n\n5. 对话适配:对话本身就是中句长度(人说话不会一个字一个字蹦,也不会一口气说50字),对话标签和动作描写也用中句,整体协调。\n\n6. 描写克制:中句节奏下描写要精准,不要铺陈。写一个细节就够了,不要写三个。'他手上有疤'比'他那只粗糙的、布满老茧的、指节粗大的手上有一道长长的、暗红色的疤痕'有力。\n\n7. 段落呼吸:每段4-8句,段与段之间有空行。手机屏幕上一段大约占2-3行,读起来舒服。不要一整屏不分段,也不要一句一段搞得像写诗。",
|
|
22
|
+
"constraints": [
|
|
23
|
+
"单句原则上不超过35字,80%句子在15-30字之间",
|
|
24
|
+
"一句话内逗号不超过3个,超过必须拆句",
|
|
25
|
+
"超过30字的句子不得连续出现3句以上",
|
|
26
|
+
"每300字至少有1句10字以内的短句作为节奏顿点",
|
|
27
|
+
"避免多层从句嵌套('的'字连用不超过2次)",
|
|
28
|
+
"避免过多使用破折号和省略号,句号和逗号为主",
|
|
29
|
+
"段落长度控制在4-8句,手机阅读2-3行为宜",
|
|
30
|
+
"形容词使用克制,每句不超过2个修饰词"
|
|
31
|
+
],
|
|
32
|
+
"examples": [
|
|
33
|
+
{
|
|
34
|
+
"text": "陈默下了夜班,从矿里出来的时候天已经黑透了。\n\n澡堂的水不热,凑合冲了冲,换上干净衣服。口袋里还有半包烟,是前天老周给的。他抽出一根点上,深深吸了一口。\n\n食堂已经关门了。他在门口的小卖部买了两个茶叶蛋,一瓶啤酒,靠在墙上慢慢吃。风有点大,吹得路边的塑料垃圾袋哗哗响。\n\n远处有人在吵架,听不清在吵什么,只听见女人的哭声和男人的骂声。陈默没往那边看。这种事在矿区天天有,没什么新鲜的。\n\n吃完茶叶蛋,他把蛋壳装进塑料袋里,扔进垃圾桶。啤酒还剩半瓶,他握在手里,凉冰冰的。\n\n手机在口袋里震了一下。他掏出来看,是一条短信,陌生号码。\n\n「你妈病重,速回。」\n\n他盯着这五个字看了很久。烟烧到手指,他才反应过来,把烟头扔在地上踩灭。\n\n啤酒没喝完。他把剩下的半瓶倒进了路边的水沟里。",
|
|
35
|
+
"note": "中句节奏示范:平均句长20字左右,句子结构简单,读起来流畅自然。关键信息点('你妈病重,速回。')用短句单独成段制造重音,前后都是平稳的中句铺垫。环境描写(风/垃圾袋/吵架声)点到为止,不铺陈。没有华丽辞藻,但信息完整,情绪到位。这就是大众最容易接受的小说语言。"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"requires": [],
|
|
39
|
+
"conflicts": []
|
|
40
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_sentence_rhythm",
|
|
4
|
+
"option_id": "opt_rhythm_mixed",
|
|
5
|
+
"option_name": "长短交错",
|
|
6
|
+
"option_description": "长短句交错使用,节奏有起伏变化(推荐默认)。紧张时短促,舒缓时绵长,形成自然的呼吸节奏,文学性和可读性兼顾。",
|
|
7
|
+
"threshold_overrides": {
|
|
8
|
+
"maxSentenceLength": 60,
|
|
9
|
+
"targetSentenceLength": 22,
|
|
10
|
+
"shortSentenceRatio": 0.4,
|
|
11
|
+
"maxParagraphLength": 200,
|
|
12
|
+
"targetParagraphLength": 100
|
|
13
|
+
},
|
|
14
|
+
"radar_weights": {
|
|
15
|
+
"action": 1.0,
|
|
16
|
+
"emotion": 1.2,
|
|
17
|
+
"infoAdvance": 1.0,
|
|
18
|
+
"sensorySignal": 1.2,
|
|
19
|
+
"bodyReaction": 1.1
|
|
20
|
+
},
|
|
21
|
+
"system_prompt": "长短交错是最有音乐感的节奏,核心是'对比产生力量'。短句是鼓点,长句是旋律;短句是拳头,长句是呼吸;短句是惊雷,长句是云层。二者交替出现,读者的情绪跟着节奏起伏。具体技法:\n\n1. 场景匹配节奏:动作/紧张/震惊场景用短句,描写/抒情/回忆场景用长句,对话用中句。同一场景内也要有变化——打斗中突然插入一句长句描写环境,反而更衬得紧张;抒情中突然砸下一个短句,反而更戳人。\n\n2. 长句铺陈,短句砸点:用1-3句长句(40-60字)把氛围铺足、把细节写够,然后用1句极短句(1-5字)砸下核心信息。比如长句写风怎么吹、树怎么摇、天怎么黑,然后短句——'雨来了。'。对比感瞬间出来。\n\n3. 段落内部呼吸:一个段落里要有长有短,不能全是长句(读着累),也不能全是短句(读着慌)。理想结构:开头长句入场景→中间中句推进→结尾短句收束/留悬念。\n\n4. 单字/两字句的用法:极短句(1-3字)不能随便用,要用在刀刃上——情绪转折点、关键信息揭示、动作定格。一章里用5-8次就够了,用多了就没效果了。用之前先用长句把张力拉满。\n\n5. 长句要'通':长句不是凑字数,要有内在韵律。通过逗号、顿号制造停顿,像呼吸一样。长句里要有画面流动——从远到近,从外到内,从视觉到听觉到触觉,读者跟着句子走,不觉得累。\n\n6. 节奏加速减速:要紧张的时候,句子越来越短,段落越来越碎;要舒缓的时候,句子慢慢拉长,段落慢慢变宽。像音乐的渐强渐弱,自然过渡,不要突然切换。\n\n7. 对话节奏:对话本身是短的,对话前后的描写可以长一点,形成'长-短-长'的波纹结构。比如:长句写人物怎么走进来、什么表情→短对话→长句写人物说完后的动作/环境变化。",
|
|
22
|
+
"constraints": [
|
|
23
|
+
"段落内部必须有长短句变化,禁止连续5句以上相同长度区间的句子",
|
|
24
|
+
"动作场景短句比例提高到60%以上,抒情/回忆场景长句比例提高到50%以上",
|
|
25
|
+
"每1000字至少有3-5处极短句(1-5字)作为节奏重音,且必须在长句铺垫之后",
|
|
26
|
+
"长句(40字以上)内部必须有至少2个逗号停顿,禁止一逗到底",
|
|
27
|
+
"单句不超过60字,超过必须拆成两句",
|
|
28
|
+
"节奏转换要自然——紧张段到舒缓段之间至少有2句中句过渡,不要跳崖式切换",
|
|
29
|
+
"段落长度根据节奏调整:紧张段3-5句,舒缓段5-8句,关键瞬间可以1句一段",
|
|
30
|
+
"对话前后必须有动作/神态描写,形成'描写-对话-描写'的节奏单元"
|
|
31
|
+
],
|
|
32
|
+
"examples": [
|
|
33
|
+
{
|
|
34
|
+
"text": "老陈蹲在巷道壁边,把矿灯拧到最暗,只留一点黄豆大的光映在脚下的碎煤上。通风管早就停了,空气里弥漫着一股淡淡的、甜丝丝的味道,像烂苹果,他知道那是瓦斯。\n\n温度计插在壁缝里,红色液柱爬得很慢,每动一格都像在拽他的神经。\n\n35.9。\n\n36.1。\n\n36.4。\n\n他数着自己的呼吸。吸气四秒,憋气两秒,呼气六秒,这是老矿工教他的办法,能在氧气不足的时候多撑一会儿。巷壁深处传来很轻的震颤,不是矿震,矿震不是这个频率,这个更沉,更慢,像什么巨大的东西在很深很深的地方翻了个身。\n\n老李在他旁边坐着,背靠着壁,头垂着,已经很久没动了。右胳膊肿得像大腿那么粗,皮肤下面透着一种发亮的青紫色,那是坏疽的颜色。他还有气,胸口每隔很久才起伏一下,弱得像风中的烛火。\n\n老陈摸了摸口袋。半块压缩饼干,一个打火机,矿灯电量31%。\n\n水还剩两口。\n\n他把铜碗端起来,凑到老李嘴边,倾斜了一点。水顺着老李的嘴角流下来,没咽下去。\n\n老陈把碗收回来,自己喝了剩下的一口。水是温的,有股铁锈味。\n\n黑暗里,那个震颤又来了。\n\n这次更近了。",
|
|
35
|
+
"note": "长短交错示范:开头用长句铺陈环境(瓦斯味道/温度计/呼吸方法/壁震),然后用3个极短句('35.9。''36.1。''36.4。')制造紧张感,接着又回到长句描写老李的状态,再用短句('半块压缩饼干...''水还剩两口。')交代物资,最后结尾'这次更近了。'一个短句收束,余味十足。长短交替像海浪一样,读者的情绪跟着起伏。"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"requires": [],
|
|
39
|
+
"conflicts": []
|
|
40
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_sentence_rhythm",
|
|
4
|
+
"option_id": "opt_rhythm_short",
|
|
5
|
+
"option_name": "短句为主",
|
|
6
|
+
"option_description": "以短句(<=15字)为主导节奏,干脆利落,像鼓点般敲击。适合紧张场景、动作场面和快节奏叙事,也是矿工风格核心节奏。",
|
|
7
|
+
"threshold_overrides": {
|
|
8
|
+
"maxSentenceLength": 20,
|
|
9
|
+
"targetSentenceLength": 12,
|
|
10
|
+
"shortSentenceRatio": 0.7,
|
|
11
|
+
"maxParagraphLength": 120,
|
|
12
|
+
"targetParagraphLength": 50
|
|
13
|
+
},
|
|
14
|
+
"radar_weights": {
|
|
15
|
+
"action": 1.3,
|
|
16
|
+
"emotion": 1.1,
|
|
17
|
+
"infoAdvance": 0.9,
|
|
18
|
+
"sensorySignal": 1.1
|
|
19
|
+
},
|
|
20
|
+
"system_prompt": "短句节奏的核心是'一击即中'。每句话只传递一个信息点,像出拳、像鼓点、像心跳。读者没有喘息空间,紧张感自然生成。具体技法:\n\n1. 单信息原则:每句话只写一个动作、一个感官、一个念头。不要把两个动作塞进同一句。'他转身,拔出刀'要拆成'他转身。''拔出刀。'。句号就是停顿,停顿就是重量。\n\n2. 断句要狠:能用句号就不用逗号,能拆成两句就不合成一句。'他看见老李倒在地上,胸口在流血'要拆成'老李倒在地上。''胸口在流血。'。每一句单独成段,冲击力翻倍。\n\n3. 名词动词优先:短句中少用形容词和副词。用名词和名词、动词和名词直接碰撞。'刀很快。''血很热。''墙很硬。'不需要修饰,事实本身就有力量。\n\n4. 留白制造重音:关键瞬间前后加空行或极短句(1-3字)。'他抬头。''一个字。''死。'单独成段,像锤子砸下来。\n\n5. 节奏变化:全是短句也会疲劳。每10-15句短句后,可以插入一句稍长的句子(20-25字)作为节奏调剂,但立刻回到短句。长句是为了让接下来的短句更有力。\n\n6. 感官碎片化:把感官体验拆成碎片——不是'他听到巨大的爆炸声感到一阵剧痛',而是'声音来了。''耳朵嗡的一下。''疼。''什么都看不见。'。碎片化更接近人在极端状态下的真实感知。\n\n7. 禁止解释:短句不解释。不说'因为瓦斯浓度太高所以他们必须撤退',只写'瓦斯响了。''走。'。读者自己会连起来。",
|
|
21
|
+
"constraints": [
|
|
22
|
+
"单句原则上不超过20字,90%句子在15字以内",
|
|
23
|
+
"短句(15字以内)占比70%以上",
|
|
24
|
+
"禁止连续3句以上超过15字的句子",
|
|
25
|
+
"每200字至少有1处1-3字的极短句单独成段作为重音",
|
|
26
|
+
"避免使用分号连接多个分句,少用破折号和省略号",
|
|
27
|
+
"动作场景中每句只包含一个动作,禁止连动句('他转身拔出刀冲出去'必须拆开)",
|
|
28
|
+
"形容词和副词使用密度不超过每100字3个",
|
|
29
|
+
"段落长度控制在3-5句以内,关键动作可以一句一段"
|
|
30
|
+
],
|
|
31
|
+
"examples": [
|
|
32
|
+
{
|
|
33
|
+
"text": "瓦斯报警响了。\n\n不是预警。是那种持续的、尖锐的、要命的响声。\n\n他抬头看仪表。\n\n浓度1.8%。\n\n超了。\n\n老李还在前面刨煤。没听见。\n\n他抓起矿灯往那边照。光柱晃了两下,照见老李的背影,弓着,像只虾。\n\n「老李!」\n\n没反应。\n\n风停了。\n\n他知道这意味着什么。通风管一停,瓦斯三分钟就能到爆炸浓度。\n\n他站起来。膝盖撞到横梁,疼。顾不上。\n\n「走!」\n\n他往前跑。靴底踩在碎煤上滑了一下,手扶住壁面,壁面是烫的。\n\n不对。\n\n他停下。\n\n不是烫。\n\n是在震。\n\n很轻。从很深的地方传上来。像什么东西在里面翻身。\n\n他回头看。\n\n通道口的方向,有光。\n\n不是矿灯的光。\n\n是红的。",
|
|
34
|
+
"note": "短句节奏示范:整段平均句长不超过10字,关键节点用1-3字极短句('超了。''不对。''走。''是红的。')单独成段制造重音。每句一个信息点:报警响了→看仪表→浓度1.8%→老李没听见→风停了→壁面烫→在震→有红光。读者跟着句子节奏一起紧张,没有一句解释为什么危险,读者自己懂。"
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"requires": [],
|
|
38
|
+
"conflicts": [
|
|
39
|
+
"opt_rhythm_long"
|
|
40
|
+
]
|
|
41
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_strictness",
|
|
4
|
+
"option_id": "opt_strict_lenient",
|
|
5
|
+
"option_name": "宽松(新手模式)",
|
|
6
|
+
"option_description": "检测严格度宽松,适合新手作者。各项检测阈值放宽,只标记严重问题(如逻辑矛盾、视角混乱),对小问题只做提示不报错。让新手先写出来再说。",
|
|
7
|
+
"system_prompt": "你使用宽松检测模式,适合写作新手。在这个模式下,检测阈值全面放宽:填充词上限提高、锚点密度要求降低、段落长度限制放松、句式变化要求降低。只标记严重问题——视角混乱、逻辑矛盾、时间线错误、人设崩塌等硬伤。对于小问题(轻微填充、个别长句、偶尔重复)只给温和提示,不作为错误。核心原则:让新手先把故事写出来,建立写作信心,不要一上来就用一堆规则把人吓跑。反馈以鼓励为主,建议要具体可操作,一次不要提太多问题。",
|
|
8
|
+
"constraints": [
|
|
9
|
+
"只标记严重错误:视角混乱/逻辑矛盾/时间线错误/人设崩塌",
|
|
10
|
+
"轻微问题(个别填充词/偶发长句/少量重复)只提示不报错",
|
|
11
|
+
"反馈以鼓励为主,每次最多指出3个需要改进的点",
|
|
12
|
+
"建议必须具体可操作,不说空话(不说“写得更好”,说“这里可以加一个动作”)",
|
|
13
|
+
"允许新手试错,不要用专业作者的标准要求",
|
|
14
|
+
"段落长度、句长、填充词等阈值全面放宽50%"
|
|
15
|
+
],
|
|
16
|
+
"examples": [
|
|
17
|
+
{
|
|
18
|
+
"text": "宽松模式反馈示例:\n\n【做得好的地方】\n- 主角登场有记忆点,金手指设定清晰\n- 对话自然,人物性格通过语言体现出来了\n\n【可以改进的地方】\n1. 第三段连续300字都是背景介绍,建议穿插一点主角的动作或反应,让读者不觉得在“听课”\n2. 章末的钩子很吸引人!不过可以再加一句主角的身体反应(比如心跳加速、手攥紧了),让紧张感更强\n\n继续写,故事开头已经抓住我了!",
|
|
19
|
+
"note": "宽松模式:以鼓励为主,每次只提2-3个具体建议,反馈友好"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"threshold_overrides": {
|
|
23
|
+
"minAnchors": 2,
|
|
24
|
+
"anchorsPerWords": 1000,
|
|
25
|
+
"maxAnchorGap": 1500,
|
|
26
|
+
"maxFillerSentences": 6,
|
|
27
|
+
"maxFillerWords": 15,
|
|
28
|
+
"maxDashCount": 6,
|
|
29
|
+
"maxEllipsisCount": 6,
|
|
30
|
+
"maxParagraphLength": 300,
|
|
31
|
+
"targetParagraphLength": 100,
|
|
32
|
+
"minParagraphCount": 10,
|
|
33
|
+
"maxDialogueContinuous": 8,
|
|
34
|
+
"maxDialogueTagRepeat": 4,
|
|
35
|
+
"maxSentenceLength": 100,
|
|
36
|
+
"targetSentenceLength": 28,
|
|
37
|
+
"shortSentenceRatio": 0.25,
|
|
38
|
+
"maxExpositionContinuous": 600,
|
|
39
|
+
"infoPointsPerThousand": 1,
|
|
40
|
+
"minSensoryTypes": 1,
|
|
41
|
+
"sightRatio": 0.8
|
|
42
|
+
},
|
|
43
|
+
"radar_weights": {
|
|
44
|
+
"bodyReaction": 0.8,
|
|
45
|
+
"sensorySignal": 0.8,
|
|
46
|
+
"action": 0.8,
|
|
47
|
+
"emotion": 0.8,
|
|
48
|
+
"infoAdvance": 0.8
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_strictness",
|
|
4
|
+
"option_id": "opt_strict_standard",
|
|
5
|
+
"option_name": "标准(默认)",
|
|
6
|
+
"option_description": "检测严格度标准,使用默认阈值。适合有一定写作经验的作者,平衡质量要求和创作自由度,指出问题但不过度苛责。",
|
|
7
|
+
"system_prompt": "你使用标准检测模式,使用默认阈值。在这个模式下,所有检测项使用标准阈值,既不放宽也不收紧。会标记明显的问题——填充词超标、锚点不足、段落过长、对话连续无穿插、视角轻微漂移、信息密度不足等。严重问题(逻辑矛盾、人设崩塌、视角混乱)会明确指出,中等问题(填充、节奏、描写)给出具体建议,小问题(个别词汇选择、句式微调)作为优化提示。反馈客观公正,有好说好有问题说问题,给出可操作的改进建议。",
|
|
8
|
+
"constraints": [
|
|
9
|
+
"使用默认阈值检测所有项目",
|
|
10
|
+
"严重问题明确指出并给出修改方案",
|
|
11
|
+
"中等问题具体说明位置和改进建议",
|
|
12
|
+
"小问题作为优化提示,不强制修改",
|
|
13
|
+
"每次反馈指出优点和不足,保持客观",
|
|
14
|
+
"建议具体可操作,一次指出的问题不超过5个"
|
|
15
|
+
],
|
|
16
|
+
"examples": [
|
|
17
|
+
{
|
|
18
|
+
"text": "标准模式反馈示例:\n\n【综合评分】72/100\n\n【亮点】\n- 主角与反派的对话张力不错,一来一回有博弈感\n- 环境描写和情绪结合得好,雨中对峙的氛围到位\n\n【需要修改】(error/warning)\n1. 第五段连续320字纯说明,超过300字上限,建议拆分或插入角色反应\n2. 第1200-1800字区间没有身体锚点,间隔超过800字,建议在对话中加入动作描写\n3. “他冷冷道”连续出现4次,对话标签重复,建议替换为其他表达方式\n\n【优化建议】(info)\n- 第二章开头可以考虑用一个感官细节切入,比直接叙述更有画面感\n- 结尾的钩子已经有了,但如果加一个环境异变(如雷声/灯闪)会更有悬念",
|
|
19
|
+
"note": "标准模式:客观公正,分级标记问题(error/warning/info),建议具体"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"threshold_overrides": {},
|
|
23
|
+
"radar_weights": {
|
|
24
|
+
"bodyReaction": 1.0,
|
|
25
|
+
"sensorySignal": 1.0,
|
|
26
|
+
"action": 1.0,
|
|
27
|
+
"emotion": 1.0,
|
|
28
|
+
"infoAdvance": 1.0
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_strictness",
|
|
4
|
+
"option_id": "opt_strict_strict",
|
|
5
|
+
"option_name": "严格(老作者模式)",
|
|
6
|
+
"option_description": "检测严格度收紧,适合有经验的老作者追求精品。阈值收紧,任何不达标的地方都会被标记,包括细微的节奏问题、用词不准、句式单调等。",
|
|
7
|
+
"system_prompt": "你使用严格检测模式,适合追求精品的老作者。在这个模式下,检测阈值全面收紧,所有问题——无论大小——都会被标记。填充词零容忍(超过低限即报错),锚点必须到位,段落长度严格控制,句式变化有要求,对话标签不能重复,信息密度必须达标,感官描写不能偏废(视觉占比过高也要改),甚至会检查用词精准度(“走”和“踱”的区别、“看”和“瞥”的差异)、句式节奏(长短句搭配)、情绪递进是否合理等。对老作者来说,这些细节决定作品是“还行”还是“精品”。",
|
|
8
|
+
"constraints": [
|
|
9
|
+
"使用收紧的阈值检测所有项目",
|
|
10
|
+
"所有问题都会被标记,包括细微问题",
|
|
11
|
+
"填充词零容忍,超过即报错",
|
|
12
|
+
"用词精准度纳入检测(近义词选择是否恰当)",
|
|
13
|
+
"句式节奏纳入检测(长短句搭配、连续相同句式)",
|
|
14
|
+
"情绪递进必须有层次,不能跳变",
|
|
15
|
+
"感官描写不能偏废,视觉占比不能过高",
|
|
16
|
+
"每个反馈都要有具体位置和修改方向,不模糊说“这里不好”"
|
|
17
|
+
],
|
|
18
|
+
"examples": [
|
|
19
|
+
{
|
|
20
|
+
"text": "严格模式反馈示例:\n\n【综合评分】61/100\n\n【Error-必须修改】\n1. 第3段“他非常生气,简直怒不可遏,心中的怒火简直要燃烧起来”——同一种情绪重复表达3次,填充严重。改为一个精准动作或一个细节即可,如“他把筷子折断了”\n2. 第800-1400字区间零锚点,读者失去身体连接。建议在对峙场景中加入:手指关节发白/后槽牙咬紧/呼吸变粗\n3. POV漂移:第5段进入了反派内心(“他不知道的是……”),当前视角是主角的有限第三人称,这里视角越界\n\n【Warning-建议修改】\n4. 连续7句以“他”开头,句式单调。建议变换主语或使用倒装\n5. “看了一眼”出现3次,用词单一。根据语境替换为:瞥/扫/瞄/凝视/打量/扫视\n6. 视觉描写占比78%,听觉触觉为零。对峙场景加入:拳头攥紧的咯吱声/冷气灌入领口/对方声音里的金属质感\n\n【Info-优化方向】\n7. 情绪转折从“平静”到“暴怒”缺少过渡层次,建议增加“疑惑→警觉→愤怒”的递进\n8. 长短句比例失衡,战斗段落全是短句会显得单调,建议在连续短句后插入一个长句做节奏呼吸",
|
|
21
|
+
"note": "严格模式:所有问题都标记,包括用词、句式、节奏等细节问题,反馈精准到位置和修改方案"
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"threshold_overrides": {
|
|
25
|
+
"minAnchors": 6,
|
|
26
|
+
"anchorsPerWords": 350,
|
|
27
|
+
"maxAnchorGap": 600,
|
|
28
|
+
"maxFillerSentences": 2,
|
|
29
|
+
"maxFillerWords": 5,
|
|
30
|
+
"maxDashCount": 2,
|
|
31
|
+
"maxEllipsisCount": 2,
|
|
32
|
+
"maxParagraphLength": 150,
|
|
33
|
+
"targetParagraphLength": 60,
|
|
34
|
+
"minParagraphCount": 28,
|
|
35
|
+
"maxDialogueContinuous": 3,
|
|
36
|
+
"maxDialogueTagRepeat": 1,
|
|
37
|
+
"maxSentenceLength": 50,
|
|
38
|
+
"targetSentenceLength": 20,
|
|
39
|
+
"shortSentenceRatio": 0.45,
|
|
40
|
+
"maxExpositionContinuous": 200,
|
|
41
|
+
"infoPointsPerThousand": 4,
|
|
42
|
+
"minSensoryTypes": 3,
|
|
43
|
+
"sightRatio": 0.55
|
|
44
|
+
},
|
|
45
|
+
"radar_weights": {
|
|
46
|
+
"bodyReaction": 1.2,
|
|
47
|
+
"sensorySignal": 1.2,
|
|
48
|
+
"action": 1.2,
|
|
49
|
+
"emotion": 1.2,
|
|
50
|
+
"infoAdvance": 1.2
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_target_length",
|
|
4
|
+
"option_id": "opt_length_1500",
|
|
5
|
+
"option_name": "1500字短章",
|
|
6
|
+
"option_description": "单章目标字数1500字左右的短章节。适合快节奏平台(如番茄免费小说)、碎片化阅读场景,每章一个小事件或一个小转折。",
|
|
7
|
+
"system_prompt": "你以1500字左右为单章目标字数写作。短章要求精炼高效,每一个字都要有用。开篇直接进入场景或冲突,不要冗长铺垫。一章只讲一个小事件或一个小转折,结尾必须留钩子让读者想看下一章。对话和动作占比要高,减少大段描写和心理独白。段落要短,适合手机快速阅读。1500字大约是5-8分钟的阅读时间,要在这个篇幅内完成“引入-发展-钩子”的完整小弧线。",
|
|
8
|
+
"constraints": [
|
|
9
|
+
"单章字数控制在1300-1700字之间",
|
|
10
|
+
"开篇100字内进入场景或冲突",
|
|
11
|
+
"一章只聚焦一个小事件/小转折",
|
|
12
|
+
"对话和动作占比不低于60%",
|
|
13
|
+
"单段不超过80字",
|
|
14
|
+
"结尾必须留钩子",
|
|
15
|
+
"禁止超过150字的纯描写或心理独白"
|
|
16
|
+
],
|
|
17
|
+
"examples": [
|
|
18
|
+
{
|
|
19
|
+
"text": "1500字短章结构示例:\n- 开头(100字):直接进入冲突场景\n- 发展(1100字):对话推进+动作描写+小转折\n- 钩子结尾(300字):悬念/反转/新信息出现,戛然而止",
|
|
20
|
+
"note": "短章结构:快速入题,紧凑推进,钩子结尾"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"threshold_overrides": {
|
|
24
|
+
"maxParagraphLength": 80,
|
|
25
|
+
"targetParagraphLength": 40,
|
|
26
|
+
"minParagraphCount": 25,
|
|
27
|
+
"maxExpositionContinuous": 150,
|
|
28
|
+
"infoPointsPerThousand": 4,
|
|
29
|
+
"shortSentenceRatio": 0.55,
|
|
30
|
+
"targetSentenceLength": 18
|
|
31
|
+
},
|
|
32
|
+
"radar_weights": {
|
|
33
|
+
"bodyReaction": 1.1,
|
|
34
|
+
"sensorySignal": 0.8,
|
|
35
|
+
"action": 1.3,
|
|
36
|
+
"emotion": 1.1,
|
|
37
|
+
"infoAdvance": 1.2
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_target_length",
|
|
4
|
+
"option_id": "opt_length_2200",
|
|
5
|
+
"option_name": "2200字标准(默认)",
|
|
6
|
+
"option_description": "单章目标字数2200字左右的标准章节。这是网文最通用的章节长度,兼顾节奏和内容量,是默认推荐选项。",
|
|
7
|
+
"system_prompt": "你以2200字左右为单章目标字数写作。这是网文最标准的章节长度,适合大多数平台和题材。一章可以包含一个完整的小场景或半个大场景,有起承转合的空间。开头可以有简短的环境/情绪铺垫(不超过200字),中间充分发展,结尾留钩子或给出小满足感。2200字大约是8-12分钟阅读时间,可以容纳对话、描写、动作、心理的平衡搭配。节奏不要太赶也不要太拖,让读者读完一章有“刚刚好”的满足感同时又想继续看。",
|
|
8
|
+
"constraints": [
|
|
9
|
+
"单章字数控制在2000-2400字之间",
|
|
10
|
+
"开头铺垫不超过200字就要进入正题",
|
|
11
|
+
"一章包含一个完整的小场景或半个大场景",
|
|
12
|
+
"对话、描写、动作、心理比例均衡",
|
|
13
|
+
"单段不超过150字",
|
|
14
|
+
"结尾留钩子或给出小高潮满足感",
|
|
15
|
+
"避免过于紧凑(像赶剧情)或过于松散(像凑字数)"
|
|
16
|
+
],
|
|
17
|
+
"examples": [
|
|
18
|
+
{
|
|
19
|
+
"text": "2200字标准章结构示例:\n- 开头(200字):简短环境/情绪铺垫,承接上章\n- 发展(1400字):场景展开,对话+动作+描写均衡推进\n- 高潮/转折(400字):本章核心事件爆发或反转\n- 结尾(200字):收束+钩子,引导下一章",
|
|
20
|
+
"note": "标准章结构:适度铺垫,均衡推进,高潮+钩子"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"threshold_overrides": {
|
|
24
|
+
"maxParagraphLength": 150,
|
|
25
|
+
"targetParagraphLength": 70,
|
|
26
|
+
"minParagraphCount": 22,
|
|
27
|
+
"maxExpositionContinuous": 300,
|
|
28
|
+
"infoPointsPerThousand": 3,
|
|
29
|
+
"shortSentenceRatio": 0.4,
|
|
30
|
+
"targetSentenceLength": 22
|
|
31
|
+
},
|
|
32
|
+
"radar_weights": {
|
|
33
|
+
"bodyReaction": 1.0,
|
|
34
|
+
"sensorySignal": 1.0,
|
|
35
|
+
"action": 1.0,
|
|
36
|
+
"emotion": 1.0,
|
|
37
|
+
"infoAdvance": 1.0
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_target_length",
|
|
4
|
+
"option_id": "opt_length_3000",
|
|
5
|
+
"option_name": "3000字长章",
|
|
6
|
+
"option_description": "单章目标字数3000字左右的长章节。适合起点等付费阅读平台,一章内容量充足,可以写完整场景和战斗,读者付费性价比高。",
|
|
7
|
+
"system_prompt": "你以3000字左右为单章目标字数写作。长章有充足的空间展开内容,可以写完整的大场景(一场战斗、一次对话博弈、一段探索)。开头可以有更充分的铺垫和场景营造(300字以内),中间有足够的篇幅发展多条线索,高潮部分可以写得更细致,结尾也有空间做情绪收束。3000字大约是12-18分钟阅读时间,读者对“一章”的期待感更高——必须有足够的实质内容,不能注水。付费读者对长章的质量要求高,每段都要有存在的价值。",
|
|
8
|
+
"constraints": [
|
|
9
|
+
"单章字数控制在2700-3300字之间",
|
|
10
|
+
"开头铺垫不超过300字",
|
|
11
|
+
"一章至少包含一个完整场景(有起因-经过-结果)",
|
|
12
|
+
"可以有更丰富的描写和心理刻画,但禁止注水",
|
|
13
|
+
"单段不超过200字",
|
|
14
|
+
"付费章节质量要求高,必须有实质剧情推进",
|
|
15
|
+
"结尾可以是钩子也可以是小高潮收束,给读者值回票价的感觉"
|
|
16
|
+
],
|
|
17
|
+
"examples": [
|
|
18
|
+
{
|
|
19
|
+
"text": "3000字长章结构示例:\n- 开头(300字):场景营造+情绪铺垫,承接上文\n- 发展(1500字):多线推进,对话+动作+描写+心理充分展开\n- 高潮(800字):核心冲突/战斗/反转,写足细节\n- 收束(400字):情绪沉淀+后续影响+钩子或小结",
|
|
20
|
+
"note": "长章结构:充分展开,细节丰富,高潮写透,值回票价"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"threshold_overrides": {
|
|
24
|
+
"maxParagraphLength": 200,
|
|
25
|
+
"targetParagraphLength": 80,
|
|
26
|
+
"minParagraphCount": 25,
|
|
27
|
+
"maxExpositionContinuous": 400,
|
|
28
|
+
"infoPointsPerThousand": 3,
|
|
29
|
+
"shortSentenceRatio": 0.35,
|
|
30
|
+
"targetSentenceLength": 24
|
|
31
|
+
},
|
|
32
|
+
"radar_weights": {
|
|
33
|
+
"bodyReaction": 1.0,
|
|
34
|
+
"sensorySignal": 1.1,
|
|
35
|
+
"action": 1.0,
|
|
36
|
+
"emotion": 1.1,
|
|
37
|
+
"infoAdvance": 1.0
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_target_length",
|
|
4
|
+
"option_id": "opt_length_4000",
|
|
5
|
+
"option_name": "4000字超长",
|
|
6
|
+
"option_description": "单章目标字数4000字左右的超长章节。适合大高潮章节、重要战斗、关键剧情转折,可以写得极为细致充分。不建议每章都用,用于特殊章节。",
|
|
7
|
+
"system_prompt": "你以4000字左右为单章目标字数写作。超长章通常用于大高潮、重要战斗、关键剧情转折等特殊时刻,不是日常使用的章节长度。4000字有巨大的叙事空间——可以写一场完整的大战役、一次深入的对话博弈、一段复杂的推理过程、多个视角的交替展现。开篇可以有宏大的场景铺垫,中间可以多线并行、层层递进,高潮部分要写得酣畅淋漓,结尾要有足够的分量。超长章必须内容充实,4000字全是干货,绝对不能注水。建议只在关键章节使用,常规章节用标准长度即可。",
|
|
8
|
+
"constraints": [
|
|
9
|
+
"单章字数控制在3600-4400字之间",
|
|
10
|
+
"建议只用于大高潮/关键转折/重要战斗,不用于日常章节",
|
|
11
|
+
"一章可以包含多个场景或多视角切换",
|
|
12
|
+
"必须全是干货,禁止任何凑字数的段落",
|
|
13
|
+
"单段不超过250字",
|
|
14
|
+
"必须有充分的剧情推进和情感冲击",
|
|
15
|
+
"结尾要有分量——大高潮的收尾或重大转折的落地"
|
|
16
|
+
],
|
|
17
|
+
"examples": [
|
|
18
|
+
{
|
|
19
|
+
"text": "4000字超长章结构示例(大高潮章):\n- 铺垫(500字):大战前的宁静/紧张氛围营造\n- 第一波(800字):冲突爆发,第一回合交锋\n- 第二波(1000字):局势升级,多方力量介入/反转出现\n- 高潮(1200字):最终对决/真相揭示/最大反转,酣畅淋漓\n- 收尾(500字):结局+余波+情感沉淀",
|
|
20
|
+
"note": "超长章结构:大场面充分展开,多波递进,高潮酣畅,收尾有力"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"threshold_overrides": {
|
|
24
|
+
"maxParagraphLength": 250,
|
|
25
|
+
"targetParagraphLength": 90,
|
|
26
|
+
"minParagraphCount": 30,
|
|
27
|
+
"maxExpositionContinuous": 500,
|
|
28
|
+
"infoPointsPerThousand": 3,
|
|
29
|
+
"shortSentenceRatio": 0.35,
|
|
30
|
+
"targetSentenceLength": 26
|
|
31
|
+
},
|
|
32
|
+
"radar_weights": {
|
|
33
|
+
"bodyReaction": 1.0,
|
|
34
|
+
"sensorySignal": 1.2,
|
|
35
|
+
"action": 1.2,
|
|
36
|
+
"emotion": 1.2,
|
|
37
|
+
"infoAdvance": 1.1
|
|
38
|
+
}
|
|
39
|
+
}
|