ソースを参照

feat(content): expand genre packs and strengthen webnovel style guidance

lingfengQAQ 4 ヶ月 前
コミット
f80e44870a

+ 43 - 1
.claude/scripts/data_modules/context_manager.py

@@ -385,6 +385,48 @@ class ContextManager:
         if refs:
             guidance.append(f"题材策略可执行提示:{refs[0]}")
 
+        guidance.append("网文节奏基线:章首300字内给出目标与阻力,章末保留未闭合问题。")
+        guidance.append("兑现密度基线:每600-900字给一次微兑现,并确保本章至少1处可量化变化。")
+
+        genre_aliases = {
+            "修仙": "xianxia",
+            "玄幻": "xianxia",
+            "高武": "xianxia",
+            "西幻": "xianxia",
+            "都市异能": "urban-power",
+            "都市脑洞": "urban-power",
+            "都市日常": "urban-power",
+            "狗血言情": "romance",
+            "古言": "romance",
+            "青春甜宠": "romance",
+            "替身文": "substitute",
+            "规则怪谈": "rules-mystery",
+            "悬疑脑洞": "mystery",
+            "悬疑灵异": "mystery",
+            "知乎短篇": "zhihu-short",
+            "电竞": "esports",
+            "直播文": "livestream",
+            "克苏鲁": "cosmic-horror",
+        }
+        normalized_genre = genre_aliases.get(genre, genre.lower())
+
+        genre_guidance = {
+            "xianxia": "题材加权:强化升级/对抗结果的可见反馈,术语解释后置。",
+            "shuangwen": "题材加权:维持高爽点密度,主爽点外叠加一个副轴反差。",
+            "urban-power": "题材加权:优先写社会反馈链(他人反应→资源变化→地位变化)。",
+            "romance": "题材加权:每章推进关系位移,避免情绪原地打转。",
+            "mystery": "题材加权:线索必须可回收,优先以规则冲突制造悬念。",
+            "rules-mystery": "题材加权:规则先于解释,代价先于胜利。",
+            "zhihu-short": "题材加权:压缩铺垫,优先反转与高强度结尾钩。",
+            "substitute": "题材加权:强化误解-拉扯-决断链路,避免重复虐点。",
+            "esports": "题材加权:每场对抗至少写清一个战术决策点与其后果。",
+            "livestream": "题材加权:强化“外部反馈→主角反制→数据变化”即时闭环。",
+            "cosmic-horror": "题材加权:恐怖来源于规则与代价,不依赖空泛惊悚形容。",
+        }
+        genre_hint = genre_guidance.get(normalized_genre) or genre_guidance.get(genre)
+        if genre_hint:
+            guidance.append(genre_hint)
+
         composite_hints = genre_profile.get("composite_hints") or []
         if composite_hints:
             guidance.append(f"复合题材协同:{composite_hints[0]}")
@@ -780,7 +822,7 @@ class ContextManager:
 
         for line in lines:
             normalized = line.strip().lower()
-            if normalized.startswith("## "):
+            if normalized.startswith("## ") or normalized.startswith("### "):
                 if active:
                     break
                 active = target in normalized

+ 43 - 0
.claude/scripts/data_modules/tests/test_context_manager.py

@@ -346,6 +346,49 @@ def test_context_manager_dynamic_weights_and_composite_genre(temp_project):
     assert profile.get("composite_hints")
 
 
+def test_context_manager_genre_alias_guidance_and_heading_extraction(temp_project):
+    refs_dir = temp_project.project_root / ".claude" / "references"
+    refs_dir.mkdir(parents=True, exist_ok=True)
+    (refs_dir / "genre-profiles.md").write_text(
+        """
+### 电竞
+- 联赛升级
+
+### 直播文
+- 反馈闭环
+
+### 克苏鲁
+- 真相代价
+""".strip(),
+        encoding="utf-8",
+    )
+    (refs_dir / "reading-power-taxonomy.md").write_text(
+        """
+### 电竞
+- 战术决策点
+""".strip(),
+        encoding="utf-8",
+    )
+
+    state = {
+        "project": {"genre": "电竞"},
+        "protagonist_state": {"name": "林燃"},
+        "chapter_meta": {},
+        "disambiguation_warnings": [],
+        "disambiguation_pending": [],
+    }
+    temp_project.state_file.write_text(json.dumps(state, ensure_ascii=False), encoding="utf-8")
+
+    manager = ContextManager(temp_project)
+    payload = manager.build_context(12, template="plot", use_snapshot=False, save_snapshot=False)
+    guidance = payload["sections"]["writing_guidance"]["content"]
+    items = guidance.get("guidance_items") or []
+
+    assert any("战术决策点" in str(text) for text in items)
+    assert any("网文节奏基线" in str(text) for text in items)
+    assert any("兑现密度基线" in str(text) for text in items)
+
+
 def test_context_manager_compact_text_truncation(temp_project):
     manager = ContextManager(temp_project)
     manager.config.context_compact_text_enabled = True

+ 7 - 0
.claude/scripts/init_project.py

@@ -70,6 +70,13 @@ def _normalize_genre_key(key: str) -> str:
         "都市高武": "高武",
         "都市奇闻": "都市脑洞",
         "古言脑洞": "古言",
+        "游戏电竞": "电竞",
+        "电竞文": "电竞",
+        "直播": "直播文",
+        "直播带货": "直播文",
+        "主播": "直播文",
+        "克系": "克苏鲁",
+        "克系悬疑": "克苏鲁",
     }
     return aliases.get(key, key)
 

+ 2 - 2
.claude/skills/webnovel-init/SKILL.md

@@ -60,9 +60,9 @@ Order is flexible; group by theme.
 - 书名
 - 题材(支持 A+B)
   - 玄幻修仙类: 修仙 | 系统流 | 高武 | 西幻 | 无限流 | 末世 | 科幻
-  - 都市现代类: 都市异能 | 都市日常 | 都市脑洞 | 现实题材 | 黑暗题材
+  - 都市现代类: 都市异能 | 都市日常 | 都市脑洞 | 现实题材 | 黑暗题材 | 电竞 | 直播文
   - 言情类: 古言 | 宫斗宅斗 | 青春甜宠 | 豪门总裁 | 职场婚恋 | 民国言情 | 幻想言情 | 现言脑洞 | 女频悬疑 | 狗血言情 | 替身文 | 多子多福 | 种田 | 年代
-  - 特殊题材: 规则怪谈 | 悬疑脑洞 | 悬疑灵异 | 历史古代 | 历史脑洞 | 游戏体育 | 抗战谍战 | 知乎短篇
+  - 特殊题材: 规则怪谈 | 悬疑脑洞 | 悬疑灵异 | 历史古代 | 历史脑洞 | 游戏体育 | 抗战谍战 | 知乎短篇 | 克苏鲁
 - 目标规模:总字数或总章数(若只给总字数,默认按每章 3500 估算并告知)
 - 一句话故事 + 核心冲突 + 主线目标
 - 目标读者/平台(可一句话描述)

+ 18 - 0
.claude/skills/webnovel-write/references/style-adapter.md

@@ -30,6 +30,24 @@ Step 2B 专用提示词,将粗稿改写为网文风格。
 - ✅ 抽象判断 → 动作/反应/代价
 - ✅ 删除“总结式旁白”和“解释段”
 
+## 网文增强规则(新增)
+- ✅ 章首300字内明确“本章目标 + 当前阻力”(避免空转)
+- ✅ 每600-900字给一次“微兑现”(信息兑现/关系兑现/能力兑现)
+- ✅ 每章至少1处“可量化变化”(地位/资源/关系/风险任一项)
+- ✅ 章末钩子优先使用“选择钩/危机钩”,避免纯口号收尾
+- ✅ 对话保持“意图冲突”,减少无效寒暄
+
+## 分题材风格加权(新增)
+- **玄幻/修仙/高武**:动作与结果比重更高,术语解释后置。
+- **都市/直播/电竞**:信息节奏更快,强化“反馈-反应-反制”三连。
+- **言情/替身/狗血**:情绪弧线前置,关键场景必须有关系位移。
+- **悬疑/规则怪谈/克苏鲁**:线索投放要可回收,恐惧来自规则而非堆词。
+
+## AI痕迹快速替换(新增)
+- 把“他非常愤怒”改为“动作+生理+决策”的三段式表达。
+- 把“总而言之/可以说”改为直接结论动作,不做元叙述。
+- 连续三句同句式时,至少改一处为短句爆点。
+
 ## 检查点(改写后验证)
 | 检查项 | 标准 | 不通过处理 |
 |--------|------|-----------|

+ 7 - 0
.claude/skills/webnovel-write/references/workflow-details.md

@@ -39,6 +39,13 @@ cat "${CLAUDE_PLUGIN_ROOT}/skills/webnovel-write/references/style-adapter.md"
 
 目标:不改剧情,只提升网文口感与张力。
 
+**执行清单(网文增强)**:
+- 保证章首300字内交代“目标 + 阻力”。
+- 按 600-900 字间隔埋入微兑现,避免长段无反馈。
+- 章内至少出现1次可量化变化(关系/资源/风险/地位)。
+- 章末钩子优先“选择钩/危机钩”,并与下章目标可衔接。
+- 如为直播/电竞题材,增加“外部反馈(弹幕/舆论/比分)-> 主角决策”链路。
+
 ## Step 3 审查模板
 
 **审查汇总表格**:

+ 119 - 0
.claude/templates/genres/克苏鲁.md

@@ -0,0 +1,119 @@
+# 克苏鲁题材模板 (Cosmic Horror)
+
+> **核心卖点**: 不可名状 + 理性崩塌 + 真相代价。读者快感来自“接近真相但无法承受真相”。
+
+---
+
+## 创意约束推荐(可选)
+- 推荐约束包:Pack M21
+- 通用叠加:Pack U04
+
+## 1. 核心流派细分
+
+### 调查档案流
+- **特点**: 案件/日志/手稿推进,拼图式叙事
+- **核心爽点**: 线索闭环、真相揭露、反转证据
+- **适配**: 悬疑读者、偏理性推演
+
+### 仪式失控流
+- **特点**: 禁忌仪式触发灾变,后果层层升级
+- **核心爽点**: 阻止失控、代价交换、局部胜利
+- **适配**: 强冲突、强危机
+
+### 旧日入侵流
+- **特点**: 现实秩序被古神规则污染
+- **核心爽点**: 在崩坏秩序中建立新生存规则
+- **适配**: 世界观型长线
+
+### 理智边缘流
+- **特点**: 主角在理智下降中维持行动能力
+- **核心爽点**: 以微小理性换取关键胜利
+- **适配**: 角色心理刻画强
+
+---
+
+## 2. 世界观:恐怖规则
+
+### 真相层级
+| 层级 | 信息量 | 代价 |
+|------|--------|------|
+| 表层异常 | 可解释偏差 | 恐惧与误判 |
+| 中层污染 | 规则扭曲 | 理智下降、关系破裂 |
+| 深层真相 | 宇宙敌意 | 身份崩塌、不可逆损失 |
+
+### 势力分层
+- **调查者组织**: 试图控制异常扩散
+- **秘密教团**: 追求古神降临或献祭收益
+- **中立旁观者**: 掌握情报但拒绝承担后果
+- **污染个体**: 受影响的人或地点
+
+---
+
+## 3. 经典爽点套路
+
+### 规则破译
+- **场景**: 密室/遗迹/仪式文本无法理解
+- **爽点**: 主角通过细节破译关键规则
+- **关键**: 规则必须前后自洽,可验证
+
+### 代价取胜
+- **场景**: 无法“无伤通关”
+- **爽点**: 主角以明确代价换来阶段性胜利
+- **关键**: 代价必须真实落地到后续剧情
+
+### 假真相反转
+- **场景**: 看似结案,实则只是更深层入口
+- **爽点**: 回收前文细节,完成二次反转
+- **关键**: 反转不靠“突然告知”,靠线索回收
+
+### 理智守线
+- **场景**: 主角濒临崩溃
+- **爽点**: 靠执念或约定强行维持理智完成任务
+- **关键**: 情绪锚点要提前埋设
+
+---
+
+## 4. 大纲结构(180万字参考)
+
+### 卷一:异响 (1-70章)
+- **核心**: 发现异常与第一条规则
+- **高潮**: 首次活着离开污染区
+
+### 卷二:深潜 (71-180章)
+- **核心**: 调查网络展开,组织与教团对抗
+- **高潮**: 关键人物污染失控
+
+### 卷三:裂隙 (181-320章)
+- **核心**: 世界局部规则改写
+- **高潮**: 代价型胜利,保住核心城市
+
+### 卷四:归零 (321-500章)
+- **核心**: 主角直面深层真相
+- **高潮**: 牺牲与封印,重构新秩序
+
+---
+
+## 5. 常见雷区
+
+### 必须避免
+- ❌ 只写“吓人描写”,没有规则逻辑
+- ❌ 古神设定万能,导致剧情无解
+- ❌ 代价嘴上说有,实际没后果
+- ❌ 反转全靠最后一章硬揭示
+
+### 建议做法
+- ✅ 每次异常都给出至少1条可验证规则
+- ✅ 主角每次推进都付出具体成本
+- ✅ 用“局部胜利”维持追更爽感
+- ✅ 反转前确保有可回溯线索
+
+---
+
+## 🛠️ 实体标签扩展
+
+```xml
+<entity type="污染源" name="污染源名" desc="异常表现" tier="层级" rule="规则" radius="影响范围"/>
+<entity type="教团" name="教团名" desc="目标" tier="层级" ritual="仪式" weakness="弱点"/>
+<entity type="禁忌物" name="禁忌物名" desc="能力" tier="层级" cost="代价" trigger="触发条件"/>
+<entity type="调查者" name="调查者名" desc="职能" tier="层级" sanity="理智状态" clue="关键线索"/>
+```

+ 124 - 0
.claude/templates/genres/电竞.md

@@ -0,0 +1,124 @@
+# 电竞题材模板 (Esports)
+
+> **核心卖点**: 逆风翻盘 + 赛场高压 + 团队成长。以“比赛结果”驱动强节奏与持续追更。
+
+---
+
+## 创意约束推荐(可选)
+- 推荐约束包:Pack M12
+- 通用叠加:Pack U01
+
+## 1. 核心流派细分
+
+### 职业联赛流
+- **特点**: 青训-次级联赛-顶级联赛的升级路径
+- **核心爽点**: 连败后逆袭、关键局翻盘、MVP封神
+- **适配**: 长线连载、团队群像
+
+### 天才新人流
+- **特点**: 高天赋新人冲击老牌强队
+- **核心爽点**: 首秀一鸣惊人、对位压制、舆论反转
+- **适配**: 男频爽文、快节奏章节
+
+### 战术教练流
+- **特点**: 以BP、战术博弈、数据分析为主
+- **核心爽点**: 以弱胜强、奇阵破局、临场指挥
+- **适配**: 偏智斗、硬核观赛党
+
+### 退役重启流
+- **特点**: 伤病/禁赛/心态崩溃后重返赛场
+- **核心爽点**: 绝境回归、宿敌再战、冠军救赎
+- **适配**: 情绪线强、人物弧光重
+
+---
+
+## 2. 世界观:赛事体系
+
+### 联赛结构
+| 层级 | 说明 | 常见冲突 |
+|------|------|----------|
+| 青训营 | 新人培养 | 选拔淘汰、资源倾斜 |
+| 次级联赛 | 晋级跳板 | 升降级、赞助压力 |
+| 顶级联赛 | 最高舞台 | 强队围剿、季后赛生死战 |
+| 国际赛 | 巅峰对抗 | 赛区对立、版本理解差 |
+
+### 战队岗位
+- **主C**: 高风险高回报,承担火力输出
+- **节奏位**: 控图与开团核心,影响全局节奏
+- **指挥位**: 决策与临场应变,决定关键回合
+- **辅助位**: 资源分配与保护,稳定团队下限
+
+---
+
+## 3. 经典爽点套路
+
+### 让二追三
+- **场景**: 0:2落后,心态濒临崩盘
+- **爽点**: 战术调整成功,连扳三局
+- **关键**: 每局翻盘逻辑要清晰,不能“强行赢”
+
+### 宿敌对位
+- **场景**: 主角与前队友/老对手正面对线
+- **爽点**: 对位压制、名场面操作、赛后舆论爆炸
+- **关键**: 历史恩怨要提前埋线
+
+### 教练破局
+- **场景**: 常规打法被针对,团队陷入死局
+- **爽点**: 临场换阵、奇招制胜
+- **关键**: 战术描述“可懂但不啰嗦”
+
+### 冠军时刻
+- **场景**: 总决赛决胜局
+- **爽点**: 关键团战与个人极限发挥
+- **关键**: 胜利代价要真实(伤病、心理压力、团队牺牲)
+
+---
+
+## 4. 大纲结构(200万字参考)
+
+### 卷一:入局 (1-80章)
+- **核心**: 进入职业体系,建立首个团队目标
+- **高潮**: 首次关键胜局
+
+### 卷二:磨合 (81-180章)
+- **核心**: 队内矛盾与战术磨合
+- **高潮**: 让二追三名场面
+
+### 卷三:破圈 (181-320章)
+- **核心**: 进入顶级联赛,舆论压力上升
+- **高潮**: 宿敌战翻盘
+
+### 卷四:登顶 (321-520章)
+- **核心**: 季后赛与国际赛双线作战
+- **高潮**: 决胜局夺冠
+
+### 卷五:新王朝 (521-700章)
+- **核心**: 守冠、重建、培养新人
+- **高潮**: 传承与闭环
+
+---
+
+## 5. 常见雷区
+
+### 必须避免
+- ❌ 比赛过程“只报结果,不写博弈”
+- ❌ 角色只会喊口号,缺少战术执行细节
+- ❌ 队伍长期连胜无代价
+- ❌ 赛后舆论与商业现实完全缺失
+
+### 建议做法
+- ✅ 每场比赛至少写清1个关键决策点
+- ✅ 胜负由“信息、执行、心态”三因素共同决定
+- ✅ 胜利伴随成本,失败带来具体后果
+- ✅ 赛前-赛中-赛后形成完整情绪链
+
+---
+
+## 🛠️ 实体标签扩展
+
+```xml
+<entity type="战队" name="战队名" desc="风格" tier="层级" coach="教练" captain="队长"/>
+<entity type="选手" name="选手名" desc="定位" tier="层级" role="位置" style="打法"/>
+<entity type="赛事" name="赛事名" desc="赛制" tier="层级" stage="阶段" stakes="赌注"/>
+<entity type="战术" name="战术名" desc="核心思路" tier="层级" counter="克制关系" risk="风险"/>
+```

+ 124 - 0
.claude/templates/genres/直播文.md

@@ -0,0 +1,124 @@
+# 直播文题材模板 (Live-Streaming)
+
+> **核心卖点**: 实时互动 + 舆论反转 + 商业变现。用“观众反馈”驱动剧情即时爽感。
+
+---
+
+## 创意约束推荐(可选)
+- 推荐约束包:Pack M08
+- 通用叠加:Pack U03
+
+## 1. 核心流派细分
+
+### 带货逆袭流
+- **特点**: 从小主播到头部主播,靠产品理解与话术破圈
+- **核心爽点**: 单场爆单、对赌翻盘、品牌方反向求合作
+- **适配**: 都市成长、现实创业
+
+### 才艺竞技流
+- **特点**: 唱跳/乐器/口才等赛道对决
+- **核心爽点**: 临场发挥封神、全平台热搜、打脸质疑者
+- **适配**: 轻快节奏、强互动
+
+### 探店纪实流
+- **特点**: 线下探店+行业内幕揭露
+- **核心爽点**: 真假测评、维权反击、舆论逆转
+- **适配**: 现实题材、社会议题
+
+### 神豪礼物流
+- **特点**: 礼物榜、守护榜、直播间攻防战
+- **核心爽点**: 榜单冲刺、PK翻盘、隐藏大哥身份揭晓
+- **适配**: 高爽快感、情绪拉满
+
+---
+
+## 2. 世界观:平台生态
+
+### 流量层级
+| 层级 | 特征 | 冲突来源 |
+|------|------|----------|
+| 冷启动 | 推荐少、曝光低 | 起号焦虑 |
+| 成长期 | 稳定观众增长 | 内容同质化 |
+| 爆发期 | 流量飙升 | 黑粉与节奏 |
+| 头部期 | 商业化深 | 合同、舆论、团队管理 |
+
+### 关键角色
+- **主播**: 核心输出与人设承载
+- **运营/剪辑**: 流量放大器
+- **品牌方**: 商业合作与议价博弈
+- **观众群体**: 支持者、路人、黑粉三类互动
+
+---
+
+## 3. 经典爽点套路
+
+### 直播翻车反杀
+- **场景**: 对手设局抹黑,直播间节奏失控
+- **爽点**: 当场放证据反转,全网改口
+- **关键**: 证据链必须提前埋伏笔
+
+### 榜单冲顶
+- **场景**: PK赛最后5分钟落后
+- **爽点**: 战术拉票+关键助力,绝杀逆袭
+- **关键**: 过程要有节奏波峰,不要一口气碾压
+
+### 品牌博弈
+- **场景**: 大品牌压价或甩锅
+- **爽点**: 主播以数据与口碑反制,反向提高议价
+- **关键**: 商务逻辑要真实
+
+### 账号重生
+- **场景**: 封号/舆论崩盘后复出
+- **爽点**: 新账号冷启动破局,再次登顶
+- **关键**: 复出要有差异化定位
+
+---
+
+## 4. 大纲结构(150万字参考)
+
+### 卷一:起号 (1-60章)
+- **核心**: 完成账号定位,拿到第一波稳定观众
+- **高潮**: 单场小爆发
+
+### 卷二:破圈 (61-160章)
+- **核心**: 内容升级+平台推荐,进入竞争赛道
+- **高潮**: 榜单逆袭
+
+### 卷三:攻防 (161-300章)
+- **核心**: 应对黑粉、公关危机与团队矛盾
+- **高潮**: 舆论反转战
+
+### 卷四:商业化 (301-460章)
+- **核心**: 品牌合作、供应链、团队扩张
+- **高潮**: 商业对赌胜出
+
+### 卷五:新阶段 (461-620章)
+- **核心**: 从个人主播走向内容公司化
+- **高潮**: 新赛道再封神
+
+---
+
+## 5. 常见雷区
+
+### 必须避免
+- ❌ 直播生态脱离现实,数据全靠“天降流量”
+- ❌ 观众只当背景板,不参与剧情推动
+- ❌ 每章都在吵架,没有事业线进展
+- ❌ 舆论反转没有证据与铺垫
+
+### 建议做法
+- ✅ 每章至少体现1次“观众反馈”对决策的影响
+- ✅ 直播前-直播中-直播后形成闭环
+- ✅ 关键反转前埋2-3个可回收证据点
+- ✅ 商业冲突与人物情绪线并行推进
+
+---
+
+## 🛠️ 实体标签扩展
+
+```xml
+<entity type="主播" name="主播名" desc="人设" tier="层级" track="赛道" style="直播风格"/>
+<entity type="直播间" name="房间名" desc="定位" tier="层级" audience="受众" peak="峰值在线"/>
+<entity type="品牌" name="品牌名" desc="行业" tier="层级" budget="预算" relation="合作关系"/>
+<entity type="事件" name="事件名" desc="舆论节点" tier="层级" evidence="证据" impact="影响"/>
+```

+ 4 - 1
README.md

@@ -473,7 +473,7 @@ RERANK_API_KEY=jina_xxx
 
 ## 题材模板
 
-系统内置 **35+** 种热门网文题材模板,支持复合题材组合:
+系统内置 **38+** 种热门网文题材模板,支持复合题材组合:
 
 ### 玄幻修仙类
 | 题材 | 说明 |
@@ -493,6 +493,8 @@ RERANK_API_KEY=jina_xxx
 | 都市日常 | 职场体系、晋升路径、生活流 |
 | 都市脑洞 | 规则入侵、异象探索、系统降临 |
 | 现实题材 | 社会问题、人物成长、现实主义 |
+| 电竞 | 联赛升级、战术博弈、赛场逆袭 |
+| 直播文 | 平台流量、舆论反转、商业变现 |
 
 ### 言情类
 | 题材 | 说明 |
@@ -519,6 +521,7 @@ RERANK_API_KEY=jina_xxx
 | 历史脑洞 | 历史规则化、穿越改命、因果博弈 |
 | 游戏体育 | 电竞竞技、传统体育、棋牌竞技 |
 | 抗战谍战 | 地下潜伏、情报战、特工行动 |
+| 克苏鲁 | 不可名状、理智代价、规则污染 |
 
 ### 复合题材支持 (v5.4.2)