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,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_emotion_style",
|
|
4
|
+
"option_id": "opt_emotion_show",
|
|
5
|
+
"option_name": "克制留白 (Show Don't Tell)",
|
|
6
|
+
"option_description": "不直接写情绪名称,用身体反应、微动作、环境映射和对话潜台词表达情感(矿工风格默认)。含蓄有力,冰山理论,读者自己感受。",
|
|
7
|
+
"threshold_overrides": {
|
|
8
|
+
"minAnchors": 8,
|
|
9
|
+
"anchorsPerWords": 250,
|
|
10
|
+
"maxAnchorGap": 400,
|
|
11
|
+
"maxFillerWords": 3
|
|
12
|
+
},
|
|
13
|
+
"radar_weights": {
|
|
14
|
+
"bodyReaction": 1.8,
|
|
15
|
+
"emotion": 1.2,
|
|
16
|
+
"sensorySignal": 1.3,
|
|
17
|
+
"action": 1.1
|
|
18
|
+
},
|
|
19
|
+
"system_prompt": "克制留白的核心是'冰山理论'——写出来的只有八分之一,剩下八分之七在水面下。你永远不直接告诉读者角色在想什么、感受到什么,而是写他做了什么、身体有什么反应、说了什么(以及没说什么)。读者自己读出来的情绪,比你写出来的强烈一百倍。\n\n【身体反应库——分情绪对应具体动作】\n\n1. 紧张/恐惧:不要写'他很紧张/害怕',写:\n- 手指无意识地摩挲某个东西(烟盒/打火机/衣角/袖口/杯沿)\n- 咽口水,但喉咙发紧咽不下去\n- 后颈僵硬,肩膀不自觉耸起\n- 呼吸变浅,能听见自己的心跳\n- 手心出汗,在裤子上蹭了蹭\n- 脚趾在鞋里蜷起来\n- 视线飘忽,不敢对视,或者死死盯着一个地方\n- 说话比平时快,或者比平时慢,或者突然忘词\n- 想点烟但打火机打了三次都没打着\n\n2. 愤怒/暴怒:不要写'他很生气/愤怒',写:\n- 指节发白,拳头攥得太紧指甲掐进掌心\n- 太阳穴突突跳,能看见血管在跳\n- 呼吸变粗,鼻孔张大\n- 说话声音反而变小、变平(压抑的愤怒比大吼更可怕)\n- 把手里的东西轻轻放下,但放得太轻了——在控制\n- 突然开始做某件无意义的事(擦桌子/整理东西/倒水),动作很快\n- 笑了一下,但不是真笑\n- 沉默。长时间的沉默。\n\n3. 悲伤/难过:不要写'他很悲伤/难过',写:\n- 某个动作做了一半停住了(伸手拿烟,停在半空两秒,又收回来)\n- 说话声音正常,但说完某句话之后停顿了很久\n- 眨眼睛的频率变高,或者一直不眨眼(在忍眼泪)\n- 摸烟的手在抖,但自己没发现\n- 突然开始说一些无关的话('今天天气不错''吃饭了吗')\n- 把东西收拾得异常整齐\n- 重复某个无意义的小动作(反复按打火机/转杯子/折衣角)\n- 不说话,只是抽烟/喝水/看着某个地方\n\n4. 震惊/不敢相信:不要写'他很震惊/不敢相信',写:\n- 手里的东西掉了,但没立刻去捡\n- 张了张嘴,没说出话\n- 往后退了半步,自己没意识到\n- 笑了一声,很短,像咳嗽\n- 反复看同一个东西(纸条/照片/短信),看了一遍又一遍\n- 听见声音但没反应,有人叫他名字才回过神\n- 某个平时很熟练的动作突然做不好了(系不上扣子/点不着烟)\n\n5. 压抑的情感:不要写'他在忍着/他很克制',写:\n- 深呼吸,吸得很慢,呼得更慢\n- 端杯子/拿烟的手稳得不正常,像刻意控制\n- 转移话题,主动说别的事\n- 站起来走到窗边/门口,背对着人\n- 说了句玩笑话,但笑得不自然\n- 答应得太快('好''行''没问题'),像怕自己反悔\n\n【技法原则】\n\n1. 反差原则:情绪越激烈,动作越平淡。听到亲人死讯不是号啕大哭,是愣了两秒然后继续点烟,打了四次没点着。平淡的动作里有山呼海啸。\n\n2. 具体到不能再具体:不要写'他手在抖',写'他端杯子的时候,茶洒出来一点,在桌面上晕开一小片深色'。不要写'他很紧张',写'打火机的齿轮磨了三次,火星有了,油也有了,就是不着'。\n\n3. 无用即真实:人在情绪激烈的时候会做毫无意义的事——整理本来就整齐的东西、擦本来就干净的桌子、反复按同一个按钮。这些'无用动作'比任何情绪描写都真实。\n\n4. 环境映射:情绪可以投射到环境上,但不要写'连老天都在哭'这种老套的。写'风停了''矿灯闪了一下''墙上的钟滴答声突然变响了'。环境没有情绪,是角色的感知变了。\n\n5. 潜台词原则:对话永远和真实想法有差距。'没事'='有事','我先走了'='再待一秒我就要撑不住了','你说什么就是什么吧'='我不跟你争但我根本不同意'。不要解释潜台词,让读者自己读。\n\n6. 禁止清单:绝对禁止出现以下词汇——紧张、恐惧、愤怒、悲伤、难过、开心、高兴、痛苦、绝望、心碎、五味杂陈、百感交集、心如刀绞、怒火中烧、忐忑不安。这些词是作者的偷懒,是对读者的不尊重。",
|
|
20
|
+
"constraints": [
|
|
21
|
+
"绝对禁止直接使用任何情绪标签词(愤怒/悲伤/紧张/害怕/开心/难过/绝望/痛苦等),一个都不许有",
|
|
22
|
+
"每个情绪场景至少有2-3处具体的身体反应/微动作描写,必须具体到身体部位和动作细节",
|
|
23
|
+
"禁止陈词滥调的身体反应(心如鹿撞、浑身发抖、倒吸一口凉气、瞳孔地震、浑身冰冷等)",
|
|
24
|
+
"每300字至少有1处'无用动作'(无意义的习惯性动作)来表现情绪",
|
|
25
|
+
"情绪越激烈,外在动作越克制——强烈情绪用平淡甚至反常的动作表现,不要大喊大叫大哭大闹",
|
|
26
|
+
"对话必须有潜台词,人物说的话和真实想法之间要有缝隙,禁止角色把心里话直接说出来",
|
|
27
|
+
"每250字至少有1处身体锚点(生理反应/微动作/感官细节)",
|
|
28
|
+
"禁止叙事者跳出来解释人物情绪('他其实很害怕''她嘴上这么说心里却很难过')",
|
|
29
|
+
"情绪转折点必须有具体的动作标记(手停了/烟掉了/打火机打不着/杯子洒了)"
|
|
30
|
+
],
|
|
31
|
+
"examples": [
|
|
32
|
+
{
|
|
33
|
+
"text": "陈默接过那张纸。\n\n纸是A4打印的,边角有点卷,被很多人摸过。他的手指碰到纸面的时候,停了一下——大概半秒,不仔细看根本注意不到。\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": "Show Don't Tell示范:全文没有一个情绪词(没有震惊/悲伤/痛苦/绝望),所有情绪都藏在细节里——手指停半秒、扣子系两次、打火机打三次、烟吸呛了没咳、声音太平、看着窗外不回头。读者能感受到那种山崩于前但强行压住的情绪,但作者一个字都没说。'还有事吗?'四个字是逐客令,意思是'你走吧,再待下去我要撑不住了',这就是潜台词。"
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"requires": [],
|
|
38
|
+
"conflicts": [
|
|
39
|
+
"opt_emotion_tell"
|
|
40
|
+
]
|
|
41
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_emotion_style",
|
|
4
|
+
"option_id": "opt_emotion_tell",
|
|
5
|
+
"option_name": "内心独白",
|
|
6
|
+
"option_description": "直接写内心活动和心理独白,把角色的想法和感受直接告诉读者。适合第一人称或深视角第三人称,代入感强,适合都市、言情、青春题材。",
|
|
7
|
+
"threshold_overrides": {
|
|
8
|
+
"minAnchors": 4,
|
|
9
|
+
"anchorsPerWords": 500,
|
|
10
|
+
"maxAnchorGap": 700,
|
|
11
|
+
"maxExpositionContinuous": 350
|
|
12
|
+
},
|
|
13
|
+
"radar_weights": {
|
|
14
|
+
"emotion": 1.6,
|
|
15
|
+
"bodyReaction": 0.9,
|
|
16
|
+
"infoAdvance": 1.0,
|
|
17
|
+
"action": 0.9
|
|
18
|
+
},
|
|
19
|
+
"system_prompt": "内心独白的核心是'把读者拉进角色脑子里'。读者直接听到角色的心声,像角色自己在说话,没有中间商。但内心独白不是情绪宣泄,是思维本身——有逻辑,有跳跃,有矛盾,有自我欺骗。具体技法:\n\n【内心独白的层次】\n\n1. 表层想法:角色当下正在想的具体事情——'完了,要迟到了''这人怎么这么烦''今天晚上吃什么'。短句,口语化,像脑子里冒出来的碎念头。\n\n2. 中层判断:角色对人对事的判断和评价——'他在撒谎,我知道''这事儿没那么简单''她不是真的想分手'。稍微长一点,有逻辑。\n\n3. 深层记忆/情绪:被触发的回忆、不敢承认的感受、压下去的念头——'上次也是这样,三年前的雨也是这么大''我其实很怕,但我不能说''如果当时我选了另一条路会不会不一样'。这层要慢,要沉,不要轻易出来,出来就要有分量。\n\n4. 自我对话/自我欺骗:人会在心里跟自己说话,会骗自己,会给自己找理由——'没事,真的没事,不就是一份工作吗''我才不在乎呢''再等五分钟,五分钟就走'。这种内心矛盾最真实。\n\n【技法原则】\n\n1. 思维流动,不是作文:内心独白不需要完整的句子,可以有半截话、有跳跃、有重复、有前后矛盾。人脑子里的想法不是一篇通顺的作文,是东一下西一下的。\n\n2. 符合人物性格:粗人不会在心里文绉绉地想'彼时彼刻,我内心涌起一股难以名状的悲恸',他会想'操。完了。'。读书人不会满脑子'卧槽牛逼'(除非反差设定)。内心语言必须和人物身份、教育程度、性格一致。\n\n3. 不说废话:内心独白也要有信息量。不要'他心里很紧张,七上八下的,像揣了只兔子'——这还是Tell,而且是陈词滥调。要写具体的念头:'合同在抽屉里,锁着,钥匙在我钱包内层,她会不会已经翻过了?昨晚回来的时候钱包好像在桌上放了一会儿。'\n\n4. 不要全说透:即使是内心独白,也不要什么都明明白白说出来。角色自己也会逃避,也会不敢想某些事,也会有不敢承认的念头。写他绕开那个念头,写他故意想别的,比直接写出来更真实。\n\n5. 内外交替:大段内心独白会闷。每写3-5句内心,就要切回外部——一个动作、一句对话、一个感官细节(烟烧到手指了/有人在叫他名字/窗外打雷了),把读者拉回现实,然后再进内心。\n\n6. 关键时刻用短句:情绪最激烈的时候,内心独白反而要短,要碎。不是'我感到一阵巨大的悲伤涌上心头,几乎无法呼吸',是'完了。''真的完了。''怎么会。''不可能。'。\n\n7. 自由间接引语:可以把内心想法融入叙述,不用加'他想''他在心里说'。比如'三点了。她还没来。会不会出事了。不对,她从来不准时,再等十分钟。'——直接就是他的想法,不需要标记。",
|
|
20
|
+
"constraints": [
|
|
21
|
+
"内心独白语言必须100%符合角色的身份、性格、教育程度,禁止所有人说话一个腔调",
|
|
22
|
+
"内心独白要有具体内容(具体的念头/判断/回忆),禁止空洞的情绪宣泄('我好难过''我太痛苦了')",
|
|
23
|
+
"每300字内心独白后必须切回外部动作/对话/感官,不能一直闷在心里写",
|
|
24
|
+
"情绪最激烈的时刻,内心句子要短(1-5字),不要长句抒情",
|
|
25
|
+
"允许思维跳跃、半截话、前后矛盾,这才是真实的心理活动",
|
|
26
|
+
"陈词滥调禁止(心如鹿撞/十五个吊桶打水/七上八下/像揣了只兔子)",
|
|
27
|
+
"不要每句内心都加'他想''他暗自思忖',能用自由间接引语就直接写",
|
|
28
|
+
"角色可以自我欺骗、自我安慰、找借口,不必永远'政治正确',真实的人会骗自己"
|
|
29
|
+
],
|
|
30
|
+
"examples": [
|
|
31
|
+
{
|
|
32
|
+
"text": "诊断书在他口袋里,折得整整齐齐,像一块砖头。\n\n三点十七分。老周走了有五分钟了。烟烧到滤嘴,烫了手指一下,他才反应过来,把烟头按灭在烟灰缸里。烟灰缸里已经有七个烟头了。\n\n不会错的。省三院的章,主任医师的签字,那些术语他看不懂,但'尘肺叁期'四个字他认得。叁期。就是晚期。\n\n他早该想到的。这半年咳得越来越厉害,有时候痰里有血,他以为是上火,是抽烟抽多了,是累的。壁温升高的时候他胸闷,他以为是瓦斯熏的。父亲当年也是这个病,走的时候五十二岁,他今年四十七。\n\n操。\n\n也不是没有想过这一天。干这行的,谁没想过?但想归想,真来了,还是不一样。像头顶悬了很多年的一把刀,终于掉下来了,反而不觉得疼,只觉得——哦,原来是这样。\n\n女儿明年高考。成绩不错,考个本科应该没问题。学费怎么办?老婆身体也不好,常年吃药。这个家现在全靠他一个人。\n\n不能告诉她们。\n\n这个念头冒出来的时候他甚至没觉得犹豫。说了也没用,除了多两个人跟着担心,什么用都没有。能撑多久撑多久吧,趁还能下井,再干两年,把女儿学费挣出来,把老婆的药费攒够。\n\n他又摸出一根烟,这次打火机一次就打着了。\n\n窗外的云越堆越厚,天暗得像傍晚。风刮起来了,吹得工棚的铁皮哗哗响。要下大雨了。",
|
|
33
|
+
"note": "内心独白示范:直接写陈默看到诊断书后的想法——从确认病情,到回忆征兆,到想到父亲,到想到妻女,到决定隐瞒。思维流动自然,有具体的牵挂(女儿高考/老婆吃药/学费),不是空洞的悲伤。情绪最激烈的地方只有一个字'操。',比长篇大论有力。内心和外部动作交替(按烟头/摸烟/看窗外),不闷。语言符合矿工身份,没有文艺腔。"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"requires": [],
|
|
37
|
+
"conflicts": [
|
|
38
|
+
"opt_emotion_show"
|
|
39
|
+
]
|
|
40
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "3.1",
|
|
3
|
+
"option_description": "2026追读版断裂钩子:最后100字出现具体新信息颠覆前文判断,最后一句≤15字短句鼓点落点,禁止装神弄鬼假钩子。读者读完必须骂「操怎么断在这里」。",
|
|
4
|
+
"option_id": "opt_hook_break",
|
|
5
|
+
"option_name": "断裂钩子(具体新信息颠覆,默认)",
|
|
6
|
+
"constraints": [
|
|
7
|
+
"最后100字必须出现前文完全未提及的具体新信息",
|
|
8
|
+
"新信息必须颠覆之前的某个判断(以为安全→危险/以为A→B/以为结束→刚开始)",
|
|
9
|
+
"钩子必须具体:看得见、摸得着、听得见——禁止空泛悬念",
|
|
10
|
+
"禁止装神弄鬼假钩子:「一股神秘气息/他似乎意识到什么/不祥的预感/事情没那么简单/黑暗中有什么东西」",
|
|
11
|
+
"最后一句必须≤15字,用短句鼓点落点",
|
|
12
|
+
"最后一句禁止「了。」收尾,禁止「就这样/原来如此/所以/于是」总结词",
|
|
13
|
+
"好钩子的检验标准:读者读完会不会骂「操怎么断在这里」?会才合格"
|
|
14
|
+
],
|
|
15
|
+
"examples": [
|
|
16
|
+
{
|
|
17
|
+
"note": "矿工式断裂钩子:具体发现(手背上有纹路)+认知颠覆(以为没碰到→已经碰到了)+问句结尾",
|
|
18
|
+
"text": "他低头看自己的手。手背上多了一道金色纹路,和那截纤维一模一样。它已经碰到他了。什么时候?"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"note": "危险升级钩子:角色反转(铁铮举盾对准主角)+具体异常(茧发红光不是金光)+两字极短句落点",
|
|
22
|
+
"text": "铁铮突然举盾对准了林深。「你小臂上的茧,」铁铮的声音在抖,「它在发光。不是金色。」是红色。"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"note": "物件异常钩子:具体动作(低头看)+具体发现(凿尖沾血)+认知颠覆(他没受伤)",
|
|
26
|
+
"text": "他低头,看见凿尖上沾了血。他没受伤。这血不是他的。"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"note": "声音钩子:具体声音(第三下敲门)+认知颠覆(全队都在屋里)",
|
|
30
|
+
"text": "门外传来第三下敲门声。全队七个人都在屋里。谁在外面?"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"note": "反例(假钩子,禁止使用):空泛悬念,读者免疫",
|
|
34
|
+
"text": "他望着黑暗的通道深处,一股不祥的预感涌上心头。事情,似乎没有那么简单。(❌假钩子,读者直接划走)"
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"node_id": "node_ending_hook",
|
|
38
|
+
"radar_weights": {
|
|
39
|
+
"action": 1.3,
|
|
40
|
+
"bodyReaction": 1.2,
|
|
41
|
+
"emotion": 1.2,
|
|
42
|
+
"hookStrength": 1.8,
|
|
43
|
+
"infoAdvance": 1.6,
|
|
44
|
+
"sensorySignal": 1.0,
|
|
45
|
+
"twistFrequency": 1.2
|
|
46
|
+
},
|
|
47
|
+
"system_prompt": "你使用断裂钩子模式——2026年追读力最强的章末收尾方式。严格遵守:\n\n【钩子铁则】\n- 最后100字必须出现一个前文完全没提过的、具体的新信息。\n- 这个新信息必须颠覆读者之前形成的某个判断(以为安全→危险/以为是A→是B/以为结束→才刚开始/以为某人是友→有疑点)。\n- 钩子必须具体到看得见、摸得着、听得见:具体谁来了、具体发现了什么、具体什么声音、具体哪句话不对、具体什么东西在动。\n\n【绝对禁止的假钩子】\n以下是已被读者免疫的装神弄鬼空泛悬念,一律禁止:\n- ❌「一股神秘的气息扑面而来」\n- ❌「他似乎意识到了什么」\n- ❌「一种不祥的预感涌上心头」\n- ❌「事情没有那么简单」\n- ❌「黑暗中有什么东西在动」\n- ❌「他不知道的是……」\n- ❌「所有人都没发现,危险正在逼近」\n这些是空话,不是钩子。钩子必须是具体信息。\n\n【最后一句写法】\n- 最后一句必须≤15字,用短句鼓点落点。\n- 最佳落点形式:\n 1. 问句:「谁在外面?」「什么时候?」「这血是谁的?」\n 2. 极短句发现:「是红色。」「不是他。」「门没锁。」\n 3. 动作中断:「他刚要喊——」「寻的嘴在动,但没有声音。」\n 4. 新危险信号:「凿尖上沾了血。」「通道尽头有光。但他们没带头灯。」\n- 最后一句禁止「了。」叙事闭合收尾。\n- 最后一句禁止「就这样/原来如此/所以/于是/最终/最后/总之」等总结词。\n\n【检验标准】\n写完最后一句,问自己:读者读完这一句,会不会在心里骂「操,怎么断在这里」?\n- 会:合格。\n- 不会(读者觉得「哦,这样啊」):不合格,重写。",
|
|
48
|
+
"threshold_overrides": {
|
|
49
|
+
"endingHook": "break",
|
|
50
|
+
"maxLastSentenceLength": 15,
|
|
51
|
+
"requireConcreteHook": true,
|
|
52
|
+
"banFakeHooks": true
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "3.0",
|
|
3
|
+
"node_id": "node_ending_hook",
|
|
4
|
+
"option_id": "opt_hook_soft",
|
|
5
|
+
"option_name": "平和收束(情绪落点)",
|
|
6
|
+
"option_description": "章节自然收束在情绪或氛围落点上,不强行留钩子,适合日常章节、过渡章节、卷末。",
|
|
7
|
+
"system_prompt": "你使用平和收束模式。章节自然收尾,可以落在一个情绪落点、一个身体感受、一个安静的画面上。不需要强行制造悬念,但最后一句仍然不能是空洞总结,必须落在具体的物象或身体感受上。",
|
|
8
|
+
"constraints": [
|
|
9
|
+
"结尾落在具体物象/身体感受/画面上",
|
|
10
|
+
"禁止空洞总结和感慨",
|
|
11
|
+
"可以不收钩子,但不能水结尾"
|
|
12
|
+
],
|
|
13
|
+
"examples": [
|
|
14
|
+
{
|
|
15
|
+
"text": "林深把笔记本收进口袋,靠在壁上歇了口气。壁面的温度顺着后背传过来,三十七点二度,稳定,恒定,和他的心跳一个频率。\n他闭上眼,听着壁里十秒一次的搏动。",
|
|
16
|
+
"note": "平和收束:落在身体感受和氛围上"
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"threshold_overrides": {
|
|
20
|
+
"endingHook": "soft"
|
|
21
|
+
},
|
|
22
|
+
"radar_weights": {
|
|
23
|
+
"bodyReaction": 1.2,
|
|
24
|
+
"sensorySignal": 1.3,
|
|
25
|
+
"action": 0.8,
|
|
26
|
+
"emotion": 1.5,
|
|
27
|
+
"infoAdvance": 0.7
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "3.0",
|
|
3
|
+
"node_id": "node_ending_hook",
|
|
4
|
+
"option_id": "opt_hook_suspense",
|
|
5
|
+
"option_name": "悬念钩子(未解问题)",
|
|
6
|
+
"option_description": "章末留下一个未解问题或悬念,读者想知道答案但不会被断章激怒,是比较温和的钩子方式。",
|
|
7
|
+
"system_prompt": "你使用悬念钩子模式。章节结尾留下一个具体的未解问题、即将发生的危险、或一个未完成的动作。最后一句可以是疑问、可以是未完成动作、可以是威胁即将到来。不需要颠覆前文,但必须有明确的“接下来会发生什么”的悬念。",
|
|
8
|
+
"constraints": [
|
|
9
|
+
"章末必须有明确的未解问题或未完成动作",
|
|
10
|
+
"最后一句不能是总结句/判断句",
|
|
11
|
+
"悬念必须具体,不能是“未来会怎样”这种空泛悬念",
|
|
12
|
+
"必须让读者想知道答案"
|
|
13
|
+
],
|
|
14
|
+
"examples": [
|
|
15
|
+
{
|
|
16
|
+
"text": "那截金色的纤维停在半空中,指向林深的小臂,一下一下地搏动。林深握紧了凿子,盯着那道裂缝。\n裂缝深处,有什么东西正在往外爬。",
|
|
17
|
+
"note": "悬念钩子:新危险即将出现,读者想知道爬出来的是什么"
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"threshold_overrides": {
|
|
21
|
+
"endingHook": "suspense"
|
|
22
|
+
},
|
|
23
|
+
"radar_weights": {
|
|
24
|
+
"bodyReaction": 1.0,
|
|
25
|
+
"sensorySignal": 1.0,
|
|
26
|
+
"action": 1.2,
|
|
27
|
+
"emotion": 1.2,
|
|
28
|
+
"infoAdvance": 1.3
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_info_density",
|
|
4
|
+
"option_id": "opt_info_balanced",
|
|
5
|
+
"option_name": "均衡型(默认)",
|
|
6
|
+
"option_description": "波浪式节奏,信息密度适中(每千字2-3个新信息点)。张弛有度,有紧张的推进也有舒缓的铺陈,是最通用的节奏模式。",
|
|
7
|
+
"system_prompt": "你采用均衡型的信息密度模式。写作节奏呈波浪式:紧张的事件推进之后,要有适当的缓冲——人物的反应、情感的沉淀、环境的描写、日常的互动。每1000字大约2-3个新信息点,不紧不慢。高潮段落可以加快节奏,日常段落可以适当舒缓。重要的信息点要给足笔墨,让读者消化;次要信息可以一笔带过。避免连续高强度输出导致读者疲劳,也避免长时间无信息量的水文字。整体节奏如呼吸:吸(推进/信息)-呼(沉淀/反应)-吸-呼。",
|
|
8
|
+
"constraints": [
|
|
9
|
+
"每1000字约2-3个新信息点,允许上下浮动",
|
|
10
|
+
"高潮段落可加密信息点,日常段落可放缓",
|
|
11
|
+
"连续紧张推进后必须有缓冲段落(反应/情感/日常)",
|
|
12
|
+
"信息点之间要有消化空间,禁止信息轰炸",
|
|
13
|
+
"重要信息点需给予足够的描写和反应篇幅",
|
|
14
|
+
"禁止连续500字以上无任何新信息"
|
|
15
|
+
],
|
|
16
|
+
"examples": [
|
|
17
|
+
{
|
|
18
|
+
"text": "面试结束后,林小雨走出写字楼,阳光有些刺眼。\n\n她深吸一口气,回想着刚才的面试过程。HR的问题一个比一个刁钻,但她自认应对得还算得体。不过那个技术总监最后说的“回去等通知”,让她心里有些没底——通常说“等通知”就是没戏的意思吧?\n\n走到公交站,她掏出手机想刷一下消息,却看到了三个未接来电,都是妈妈打的。\n\n林小雨心里一紧,连忙拨回去。\n\n\"小雨啊,你爸刚才在工地摔了,现在在医院!\"妈妈的声音带着哭腔。\n\n林小雨脑子“嗡”的一声,手里的包差点掉在地上。\n\n\"哪家医院?我马上过去!\"",
|
|
19
|
+
"note": "均衡型:有日常缓冲(面试后回想/心理活动),有信息推进(未接来电/父亲摔伤),张弛交替"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"threshold_overrides": {
|
|
23
|
+
"infoPointsPerThousand": 3,
|
|
24
|
+
"maxExpositionContinuous": 300,
|
|
25
|
+
"maxParagraphLength": 180,
|
|
26
|
+
"targetParagraphLength": 70,
|
|
27
|
+
"shortSentenceRatio": 0.4,
|
|
28
|
+
"targetSentenceLength": 22
|
|
29
|
+
},
|
|
30
|
+
"radar_weights": {
|
|
31
|
+
"bodyReaction": 1.0,
|
|
32
|
+
"sensorySignal": 1.0,
|
|
33
|
+
"action": 1.0,
|
|
34
|
+
"emotion": 1.0,
|
|
35
|
+
"infoAdvance": 1.0
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_info_density",
|
|
4
|
+
"option_id": "opt_info_fast",
|
|
5
|
+
"option_name": "事件驱动型",
|
|
6
|
+
"option_description": "高密度信息推进,每千字4-5个新信息点。事件接连发生,几乎不给读者喘息空间,适合快节奏爽文和悬疑类作品。",
|
|
7
|
+
"system_prompt": "你采用事件驱动型的信息密度模式。写作时以事件推进为核心,每1000字必须包含4-5个新信息点——新角色登场、新线索出现、新冲突爆发、新设定揭示、局势反转等都算信息点。减少大段环境描写和心理独白,用事件本身来传递信息。场景切换要快,一个场景内不要停留过久。对话承担大量信息传递功能,但避免纯说明性对话(说人话,不要角色嘴里念设定)。每个场景结束时,局势必须有变化——不能回到原点。",
|
|
8
|
+
"constraints": [
|
|
9
|
+
"每1000字至少4个新信息点(新角色/新线索/新冲突/新设定/反转)",
|
|
10
|
+
"连续纯描写/心理/说明不超过150字",
|
|
11
|
+
"每个场景结束时局势必须有变化",
|
|
12
|
+
"禁止出现“什么都没发生”的过渡段落",
|
|
13
|
+
"信息点要自然融入剧情,禁止角色大段讲解设定",
|
|
14
|
+
"对话承担信息传递功能,但必须符合角色身份"
|
|
15
|
+
],
|
|
16
|
+
"examples": [
|
|
17
|
+
{
|
|
18
|
+
"text": "李明推开门,发现办公室里一片狼藉。(信息点1:异常状况)\n\n保险柜被撬开了,里面的机密文件不翼而飞。(信息点2:核心失窃)\n\n他刚要报警,手机响了——是一个陌生号码。(信息点3:神秘来电)\n\n\"李警官,别报警。\"电话那头的声音经过变声处理,\"你女儿在我们手上。\"(信息点4:绑架威胁)\n\n李明浑身一震,转头看向桌上的相框——照片里女儿笑得灿烂。相框旁边多了一个红色的信封。(信息点5:新线索出现)\n\n他颤抖着打开信封,里面只有一张照片:女儿被绑在椅子上,身后站着一个穿着黑色风衣的男人,男人的手腕上有一个蛇形纹身。(信息点6:线索细节)",
|
|
19
|
+
"note": "事件驱动型:短段落,每段都有新信息,信息密度极高,几乎无冗余描写"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"threshold_overrides": {
|
|
23
|
+
"infoPointsPerThousand": 5,
|
|
24
|
+
"maxExpositionContinuous": 150,
|
|
25
|
+
"maxParagraphLength": 100,
|
|
26
|
+
"targetParagraphLength": 45,
|
|
27
|
+
"shortSentenceRatio": 0.55,
|
|
28
|
+
"targetSentenceLength": 18
|
|
29
|
+
},
|
|
30
|
+
"radar_weights": {
|
|
31
|
+
"bodyReaction": 1.0,
|
|
32
|
+
"sensorySignal": 0.8,
|
|
33
|
+
"action": 1.4,
|
|
34
|
+
"emotion": 1.0,
|
|
35
|
+
"infoAdvance": 1.5
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_info_density",
|
|
4
|
+
"option_id": "opt_info_leisurely",
|
|
5
|
+
"option_name": "铺陈型",
|
|
6
|
+
"option_description": "慢节奏铺陈,信息密度低(每千字1-2个新信息点)。描写充分,氛围营造到位,适合文学性强的作品、散文式叙事、细腻情感类故事。",
|
|
7
|
+
"system_prompt": "你采用铺陈型的信息密度模式。写作以氛围营造和细腻描写为主,不急着推进剧情。每1000字大约1-2个新信息点,留出大量笔墨用于环境描写、感官细节、人物内心、情感流动。场景要写透,不要急着切换。让读者沉浸在氛围中,感受到画面、声音、气味、温度。人物的每一个细微表情、动作、心理变化都值得写。环境描写不是装饰,而是叙事的一部分——用环境烘托情绪、暗示主题、铺垫伏笔。节奏要慢,但不能水——每一个细节都要服务于整体氛围和人物塑造。",
|
|
8
|
+
"constraints": [
|
|
9
|
+
"每1000字约1-2个新信息点,重在描写和氛围",
|
|
10
|
+
"环境描写需调动至少3种感官(视觉/听觉/嗅觉/触觉/味觉)",
|
|
11
|
+
"每个场景要写透,不急于切换",
|
|
12
|
+
"人物心理活动和微表情要细腻刻画",
|
|
13
|
+
"禁止快节奏的事件堆砌",
|
|
14
|
+
"描写要有目的,禁止无意义的华丽辞藻堆砌",
|
|
15
|
+
"对话可以少而精,每句对话都要体现人物性格或关系"
|
|
16
|
+
],
|
|
17
|
+
"examples": [
|
|
18
|
+
{
|
|
19
|
+
"text": "暮春的午后,阳光透过老槐树的枝叶洒下来,在青石板路上碎成一地金斑。空气里飘着隔壁院子槐花的甜香,混着潮湿泥土的气息,是南方小城特有的味道。\n\n苏晚坐在门槛上,手里捧着一碗冰凉的绿豆汤。瓷碗上凝着细密的水珠,顺着碗壁滑到她的手指上,凉丝丝的。\n\n外婆在院子里翻晒草药,竹匾里铺着一层金银花,金黄和银白交织,在阳光下微微发颤。外婆的动作很慢,很轻,像是怕惊扰了什么。\n\n\"晚晚,\"外婆头也不抬地说,\"你妈打电话来了,说下周来接你。\"\n\n苏晚舀绿豆汤的手停了一下。\n\n她没有说话,只是低头看着碗里碧绿的汤面,倒映着一小片天空,还有槐树叶的影子。绿豆已经煮得开了花,软糯地沉在碗底。\n\n风过,槐花簌簌落下,有几朵掉进了她的碗里。",
|
|
20
|
+
"note": "铺陈型:大量感官描写(阳光/槐花香/冰凉瓷碗/金银花),信息点极少(母亲要来接),重在氛围营造和情绪留白"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"threshold_overrides": {
|
|
24
|
+
"infoPointsPerThousand": 1,
|
|
25
|
+
"maxExpositionContinuous": 600,
|
|
26
|
+
"maxParagraphLength": 300,
|
|
27
|
+
"targetParagraphLength": 100,
|
|
28
|
+
"shortSentenceRatio": 0.25,
|
|
29
|
+
"targetSentenceLength": 28,
|
|
30
|
+
"maxSentenceLength": 80,
|
|
31
|
+
"minSensoryTypes": 3,
|
|
32
|
+
"sightRatio": 0.5
|
|
33
|
+
},
|
|
34
|
+
"radar_weights": {
|
|
35
|
+
"bodyReaction": 1.1,
|
|
36
|
+
"sensorySignal": 1.5,
|
|
37
|
+
"action": 0.6,
|
|
38
|
+
"emotion": 1.3,
|
|
39
|
+
"infoAdvance": 0.6
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "3.0",
|
|
3
|
+
"node_id": "node_opening_impact",
|
|
4
|
+
"option_id": "opt_opening_medium",
|
|
5
|
+
"option_name": "动作切入(中等冲击)",
|
|
6
|
+
"option_description": "开头从正在进行的动作或声音切入,比感官轰炸平和但比环境描写强,适合大多数网文场景。",
|
|
7
|
+
"system_prompt": "你使用中等冲击开头模式。第一句从正在进行的动作或声音切入:一个正在做的动作、一个突然响起的声音、一个意外的触觉。不需要单字轰炸,但第一句必须有人正在做什么或发生了什么具体事件,不能是静态环境描写。",
|
|
8
|
+
"constraints": [
|
|
9
|
+
"第一句必须是进行中的动作或突发声音",
|
|
10
|
+
"第一句必须有具体动词,禁止静态描写",
|
|
11
|
+
"开头三句内必须出现身体反应",
|
|
12
|
+
"禁止纯环境/背景/外貌开头"
|
|
13
|
+
],
|
|
14
|
+
"examples": [
|
|
15
|
+
{
|
|
16
|
+
"text": "铅笔在纸页上划出沙沙的声响,林深把三十七点二度这个数字记下来,指尖在数字下面顿了顿。",
|
|
17
|
+
"note": "动作切入:第一句就是正在进行的动作+声音"
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"threshold_overrides": {
|
|
21
|
+
"openingImpact": "medium"
|
|
22
|
+
},
|
|
23
|
+
"radar_weights": {
|
|
24
|
+
"bodyReaction": 1.2,
|
|
25
|
+
"sensorySignal": 1.2,
|
|
26
|
+
"action": 1.2,
|
|
27
|
+
"emotion": 1.0,
|
|
28
|
+
"infoAdvance": 1.0
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "3.1",
|
|
3
|
+
"node_id": "node_opening_impact",
|
|
4
|
+
"option_id": "opt_opening_strong",
|
|
5
|
+
"option_name": "感官轰炸(2026追读默认)",
|
|
6
|
+
"option_description": "2026最强开头模式:3秒停留率优化。第一句≤20字直接身体刺激/动作/冲突,0铺垫直接进现场。前300字完成冲突爆发→主角在场→异常出现。",
|
|
7
|
+
"system_prompt": "你使用2026年最强追读力开头模式——感官轰炸+3秒停留。严格遵守:\n\n【第一句铁则】\n- 第一句必须≤20字,直接写主角能感知的强刺激或正在发生的动作。\n- 最优第一句是单字/两字感官鼓点:疼。/烫。/冷。/响。/血。/不对。\n- 次优第一句是直接动作/冲突/结果:「刀尖抵住她喉结。」「外门弟子林凡,一刀斩了大师兄。」「离婚协议签完第三分钟,电话响了。」\n- 绝对禁止:写景(天刚亮/寒风/大雪)、交代背景(在一个XX的地方/这是XX大陆)、介绍人物(我叫XX/XX今年XX岁)、回忆从前(很久以前/从前/话说)。\n\n【前三句结构】\n- 第一句:强感官刺激或直接动作冲突。\n- 第二句:主角的本能身体反应(缩手/僵住/回头/屏住呼吸/手指扣紧/后颈汗毛竖起)。\n- 第三句:读者看到一个具体的、正在发生的异常(不是背景介绍,是具体的东西在动/在发光/在流血/在逼近)。\n\n【黄金300字】\n- 前300字必须完成三件事:冲突已经在发生→主角身体已经在反应→一个异常信号已经出现。\n- 前300字内不能有任何世界观说明、等级介绍、人物回忆、环境铺陈。\n- 背景信息用一句话插在动作中间带过:「这是灵气枯竭第27年,他正在被人追砍。」\n- 人物不超过2个(主角+直接施压者)。\n- 场景聚焦一个动作现场:签字台/手术室门口/擂台中央/矿道深处。",
|
|
8
|
+
"constraints": [
|
|
9
|
+
"第一句≤20字,单字/两字感官鼓点最佳",
|
|
10
|
+
"第一句禁止写景/背景/介绍/回忆",
|
|
11
|
+
"第二句必须是主角本能身体反应",
|
|
12
|
+
"第三句出现具体异常信号",
|
|
13
|
+
"前300字:冲突在场→主角身体在场→异常在场",
|
|
14
|
+
"前300字禁止世界观说明/等级介绍/回忆/环境铺陈",
|
|
15
|
+
"前300字人物不超过2个,场景不超过1个"
|
|
16
|
+
],
|
|
17
|
+
"examples": [
|
|
18
|
+
{
|
|
19
|
+
"text": "疼。\n\n凿尖砸在指关节上,林深闷哼一声,指缝里渗出血。他甩了甩手,骨节处火辣辣地烧,血珠滴在靴面上,很快被岩尘吸成深色。\n\n茧壁在震。\n\n不是他凿的那种震。",
|
|
20
|
+
"note": "矿工式强开篇:第一句单字「疼。」;第二句身体反应(指关节砸到、渗血、火辣辣烧);第三句异常出现(茧壁在震,而且不是他凿的那种震)。"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"text": "刀尖抵住她喉结时,系统弹窗亮了。\n\n苏晚的呼吸卡在喉咙里,脖子不敢动,刀尖的凉意顺着皮肤往骨子里钻。\n\n【检测到濒死状态,绑定「反向许愿」功能】",
|
|
24
|
+
"note": "系统文强开篇:第一句直接动作+金手指(刀尖抵喉结+系统亮了);第二句身体反应(呼吸卡住、凉意钻骨);第三句异常/金手指展开。"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"text": "外门弟子林凡,一刀斩了内门大师兄。\n\n血溅在演武场的青石上,围观的弟子全傻了。林凡握刀的手在抖,不是因为害怕,是因为这具身体里的灵魂,三秒前还不是他。",
|
|
28
|
+
"note": "玄幻穿越强开篇:第一句直接写结果(越级杀人);第二句现场反应+主角身体反应(手抖);第三句信息反咬(灵魂穿越,颠覆读者预期)。"
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"threshold_overrides": {
|
|
32
|
+
"openingImpact": "strong",
|
|
33
|
+
"maxFirstSentenceLength": 20,
|
|
34
|
+
"minAnchorsInFirst300": 3,
|
|
35
|
+
"minConflictInFirst300": true
|
|
36
|
+
},
|
|
37
|
+
"radar_weights": {
|
|
38
|
+
"bodyReaction": 1.5,
|
|
39
|
+
"sensorySignal": 1.5,
|
|
40
|
+
"action": 1.3,
|
|
41
|
+
"emotion": 1.0,
|
|
42
|
+
"infoAdvance": 1.2,
|
|
43
|
+
"twistFrequency": 1.1,
|
|
44
|
+
"hookStrength": 1.0
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "3.0",
|
|
3
|
+
"node_id": "node_opening_impact",
|
|
4
|
+
"option_id": "opt_opening_weak",
|
|
5
|
+
"option_name": "平和切入(慢热)",
|
|
6
|
+
"option_description": "允许环境描写或氛围铺陈开头,适合慢热文、传统文学、抒情场景,不建议用于快节奏网文。",
|
|
7
|
+
"system_prompt": "你使用平和切入开头模式。允许从环境描写、氛围铺陈、场景介绍开始,节奏舒缓。但仍然要求第一段内出现视角人物,有人物在场,不能纯写景无人。",
|
|
8
|
+
"constraints": [
|
|
9
|
+
"第一段内必须出现视角人物",
|
|
10
|
+
"禁止纯写景无人",
|
|
11
|
+
"500字内必须有第一个身体锚点"
|
|
12
|
+
],
|
|
13
|
+
"examples": [
|
|
14
|
+
{
|
|
15
|
+
"text": "矿道里的风带着三十七点二度的暖意,林深把手掌贴在壁上,金纹在他的指腹下缓慢搏动。",
|
|
16
|
+
"note": "平和切入:环境+温度,人物在场"
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"threshold_overrides": {
|
|
20
|
+
"openingImpact": "weak"
|
|
21
|
+
},
|
|
22
|
+
"radar_weights": {
|
|
23
|
+
"bodyReaction": 0.8,
|
|
24
|
+
"sensorySignal": 1.0,
|
|
25
|
+
"action": 0.8,
|
|
26
|
+
"emotion": 1.2,
|
|
27
|
+
"infoAdvance": 0.8
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_paragraph_density",
|
|
4
|
+
"option_id": "opt_dense_high",
|
|
5
|
+
"option_name": "高密度快节奏",
|
|
6
|
+
"option_description": "短段落为主,段落切换频繁,信息推进快。适合爽文、战斗、追逐等快节奏场景,阅读感畅快。",
|
|
7
|
+
"threshold_overrides": {
|
|
8
|
+
"maxParagraphLength": 80,
|
|
9
|
+
"targetParagraphLength": 40,
|
|
10
|
+
"minParagraphCount": 40,
|
|
11
|
+
"infoPointsPerThousand": 5
|
|
12
|
+
},
|
|
13
|
+
"radar_weights": {
|
|
14
|
+
"action": 1.3,
|
|
15
|
+
"infoAdvance": 1.3,
|
|
16
|
+
"sensorySignal": 0.8,
|
|
17
|
+
"emotion": 0.9
|
|
18
|
+
},
|
|
19
|
+
"system_prompt": "采用高密度短段落写法。每段尽量不超过80字,段落之间频繁切换,一个动作或一句对话即可成段。信息推进要快,每段都要有新信息或新进展,不做冗长铺垫。对话和动作交替出现,制造翻页感。减少大段心理描写和环境铺陈。",
|
|
20
|
+
"constraints": [
|
|
21
|
+
"单段不超过80字",
|
|
22
|
+
"每千字不少于40个段落",
|
|
23
|
+
"每段必须包含新信息、新动作或新对话",
|
|
24
|
+
"禁止超过100字的连续环境/心理描写"
|
|
25
|
+
],
|
|
26
|
+
"examples": [
|
|
27
|
+
{
|
|
28
|
+
"text": "他踹开门。\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_dense_low"
|
|
35
|
+
]
|
|
36
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_paragraph_density",
|
|
4
|
+
"option_id": "opt_dense_low",
|
|
5
|
+
"option_name": "低密度铺陈",
|
|
6
|
+
"option_description": "长段落为主,铺陈细腻,节奏缓慢。适合文学性描写、氛围营造和深度心理刻画,有沉浸感。",
|
|
7
|
+
"threshold_overrides": {
|
|
8
|
+
"maxParagraphLength": 400,
|
|
9
|
+
"targetParagraphLength": 200,
|
|
10
|
+
"minParagraphCount": 10,
|
|
11
|
+
"infoPointsPerThousand": 2,
|
|
12
|
+
"maxExpositionContinuous": 500
|
|
13
|
+
},
|
|
14
|
+
"radar_weights": {
|
|
15
|
+
"sensorySignal": 1.3,
|
|
16
|
+
"emotion": 1.3,
|
|
17
|
+
"action": 0.7,
|
|
18
|
+
"infoAdvance": 0.8
|
|
19
|
+
},
|
|
20
|
+
"system_prompt": "采用低密度长段落写法。段落可以较长,允许在一个段落内完成完整的场景铺陈、氛围渲染或心理刻画。注重细节的层次感,从视觉、听觉、触觉等多个维度慢慢展开画面。节奏舒缓,不急于推进情节,让读者沉浸在场景中。对话较少,以叙述和描写为主。",
|
|
21
|
+
"constraints": [
|
|
22
|
+
"单段可到300字,但不得超过400字",
|
|
23
|
+
"每千字不少于10个段落",
|
|
24
|
+
"长段落内部要有层次变化,不能平铺直叙",
|
|
25
|
+
"每3个长段落后必须有一个短段落或对话换气"
|
|
26
|
+
],
|
|
27
|
+
"examples": [
|
|
28
|
+
{
|
|
29
|
+
"text": "记忆中的夏天总是和那条河有关。河水不深,最深处也只到胸口,河底是圆滑的鹅卵石,阳光好的时候能看见鱼在石缝间穿梭。两岸的芦苇长得比人还高,风一吹就沙沙作响,白色的芦花飘得满河都是。他和她常常在午后溜到河边,他摸鱼,她坐在石头上洗脚,脚趾头被冰凉的河水浸得发红。那时候的阳光好像永远不会落山,空气里永远有芦苇的清香和鱼鳞的腥味,时间像河水一样慢悠悠地流,什么都不急。",
|
|
30
|
+
"note": "长段落细腻铺陈,沉浸感强,节奏缓慢。"
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"requires": [],
|
|
34
|
+
"conflicts": [
|
|
35
|
+
"opt_dense_high"
|
|
36
|
+
]
|
|
37
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_paragraph_density",
|
|
4
|
+
"option_id": "opt_dense_medium",
|
|
5
|
+
"option_name": "中等密度",
|
|
6
|
+
"option_description": "段落长度适中(默认),兼顾节奏和信息密度。对话、动作、描写交替出现,阅读舒适流畅。",
|
|
7
|
+
"threshold_overrides": {
|
|
8
|
+
"maxParagraphLength": 200,
|
|
9
|
+
"targetParagraphLength": 80,
|
|
10
|
+
"minParagraphCount": 20,
|
|
11
|
+
"infoPointsPerThousand": 3
|
|
12
|
+
},
|
|
13
|
+
"system_prompt": "采用中等密度段落写法。段落长度控制在50-120字之间,对话和动作可以单独成段,描写和叙述适当合并。保持稳定的阅读节奏,不要频繁空行制造断奏感,也不要大段堆砌文字造成阅读压力。每段有明确的焦点。",
|
|
14
|
+
"constraints": [
|
|
15
|
+
"单段不超过200字",
|
|
16
|
+
"每千字不少于20个段落",
|
|
17
|
+
"对话和动作段落简短,描写段落适中",
|
|
18
|
+
"避免连续3段以上纯描写无动作/对话推进"
|
|
19
|
+
],
|
|
20
|
+
"examples": [
|
|
21
|
+
{
|
|
22
|
+
"text": "早上七点半,林深准时出现在矿道口。他换好了下井的工装,头灯卡在帽檐上,电池包在腰侧坠出一个沉甸甸的弧度。\n\n老范已经在等他了,叼着根没点的烟,眉头皱得像打了结的麻绳。\n\n「今天下七层?」林深问。\n\n老范把烟从嘴里拿下来,看了他一眼:「你小子昨天才上来,今天又下?」",
|
|
23
|
+
"note": "段落长度适中,叙述/对话/描写交替。"
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"requires": [],
|
|
27
|
+
"conflicts": []
|
|
28
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kb_version": "2.0",
|
|
3
|
+
"node_id": "node_payoff_frequency",
|
|
4
|
+
"option_id": "opt_payoff_every_3",
|
|
5
|
+
"option_name": "每3章1爽点(默认)",
|
|
6
|
+
"option_description": "每3章一个大爽点,这是爆款网文的平均节奏。张弛有度,铺垫充分,爽点爆发时更有冲击力。",
|
|
7
|
+
"system_prompt": "你采用每3章一个大爽点的节奏模式,这是经过市场验证的爆款平均节奏。基本节奏为:第1章铺垫(设局/埋线索/制造压力),第2章发展(矛盾升级/危机加深/主角蓄力),第3章爆发(爽点释放/打脸反转/实力展现)。大爽点之间可以穿插小爽点或小钩子保持读者兴趣,但核心爽点必须在3章内兑现。铺垫章节要有足够的信息量和张力,不能变成水字数。发展章节要让压力递增,让读者期待爆发。爆发章节要写足,爽点要写透,不能一笔带过浪费前面的铺垫。",
|
|
8
|
+
"constraints": [
|
|
9
|
+
"每3章必须有一个大爽点(打脸/逆袭/升级/揭秘/反转等)",
|
|
10
|
+
"铺垫章(第1章):设局、埋线索、制造压力,必须有信息量",
|
|
11
|
+
"发展章(第2章):矛盾升级、危机加深、主角蓄力,节奏渐紧",
|
|
12
|
+
"爆发章(第3章):爽点释放,写足写透,给读者强烈满足感",
|
|
13
|
+
"大爽点之间可以穿插小爽点/小钩子,但不能替代大爽点",
|
|
14
|
+
"铺垫禁止水字数,每段都要为后续爽点服务",
|
|
15
|
+
"爆发章的爽点必须呼应前面2章的铺垫,形成完整闭环"
|
|
16
|
+
],
|
|
17
|
+
"examples": [
|
|
18
|
+
{
|
|
19
|
+
"text": "【第1章-铺垫】\n赵无极在宗门大比的抽签仪式上抽到了一号签,对手是内门排名第三的李天豪。所有人都觉得他必输无疑——李天豪已经是凝气九重,而赵无极只是凝气五重。\n\n\"赵无极,你自己认输吧,免得受伤。\"李天豪居高临下地说。\n\n赵无极没有说话,只是握紧了拳头。没人知道,他昨晚在禁地意外获得了上古传承,修为一夜之间突破到了凝气七重,而且还学会了一招绝学。\n\n【第2章-发展】\n比赛开始,李天豪一上来就下狠手,招招致命。赵无极节节败退,看起来岌岌可危。\n\n\"就这点本事也敢参加大比?\"李天豪冷笑,一掌拍向赵无极胸口。\n\n台下议论纷纷,都觉得赵无极撑不过十招。连裁判都准备随时终止比赛。\n\n然而没人注意到,赵无极的嘴角微微上扬——他在等,等李天豪使出那招他早已看穿的破绽。\n\n【第3章-爆发】\n李天豪大喝一声,使出了绝招“裂山掌”,掌风呼啸,空气都被压缩得发出爆鸣。\n\n就是现在!\n\n赵无极脚步一错,以一个不可思议的角度避开掌风,同时右手并指如剑,一指戳在李天豪肋下三寸——那是他刚才观察到的真气运行破绽。\n\n\"噗!\"\n\n李天豪如遭雷击,整个人倒飞出去,重重摔在擂台边缘,一口鲜血喷出。\n\n全场死寂。\n\n\"怎么可能?!\"\n\n\"他一招就击败了李天豪?!\"",
|
|
20
|
+
"note": "每3章1爽点:第1章铺垫(抽到强敌/获得传承),第2章发展(节节败退/蓄力等待),第3章爆发(一招制敌/全场震惊)"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"threshold_overrides": {},
|
|
24
|
+
"radar_weights": {
|
|
25
|
+
"bodyReaction": 1.0,
|
|
26
|
+
"sensorySignal": 1.0,
|
|
27
|
+
"action": 1.0,
|
|
28
|
+
"emotion": 1.0,
|
|
29
|
+
"infoAdvance": 1.0
|
|
30
|
+
}
|
|
31
|
+
}
|