"""品类相关 craft 配置(灵感 F1)。 `GENRE_CRAFT`:题材 → 「语域/节奏/钩子偏好/默认字数区间/常见套路」的**文本片段**。 品类无关内核(show-don't-tell / 对话个性化 / 反注水原则)在 `write_craft.md`; 本表只装**随题材而异**的片段,由 assemble 按 `project.genre` 选片段注入缓存前缀。 字数写成**区间参考**(软引导,非每章硬目标)——具体篇幅仍按情节功能分配(见内核)。 键与前端 wizard 的 GENRES 预设对齐(玄幻/仙侠/都市/科幻/历史/悬疑)+常见言情; 自由填写的题材命不中即优雅返回 None(不注入片段),不报错。 """ from __future__ import annotations from typing import Final # 每条片段是灵活提示,不是穷举清单——覆盖语域/节奏/钩子/字数/套路等维度,供模型自行取舍。 GENRE_CRAFT: Final[dict[str, str]] = { "玄幻": ( "语域偏热血爽快、画面感强;节奏偏快,冲突密集,实力成长线要清晰可感。" "钩子偏好等级压制、打脸反转、机缘奇遇与悬念前置。" "单章篇幅参考约 2500–3500 字,按情节功能弹性调整。" "常见套路:升级流、扮猪吃虎、系统/金手指、宗门家族争斗——用得要有新意,别照搬。" ), "仙侠": ( "语域偏古雅大气,兼顾意境与热血;节奏中到快,以境界突破为张力节点。" "钩子偏好机缘造化、道心考验、恩怨情仇与天骄争锋。" "单章篇幅参考约 2500–3500 字,按情节功能弹性调整。" "常见套路:修真等级、飞升渡劫、师门情义、逆境翻盘——古意要真、别堆砌辞藻。" ), "都市": ( "语域偏现代口语、贴近生活、爽感直接;节奏快,即时反馈要强。" "钩子偏好装逼打脸、身份反差、隐藏实力与逆袭翻身。" "单章篇幅参考约 2000–3000 字(移动端碎片阅读),按情节功能弹性调整。" "常见套路:扮猪吃虎、隐藏身份、都市异能、商战权斗——落点要接地气。" ), "科幻": ( "语域偏冷静、有逻辑感、由设定驱动;节奏偏中,重悬念与推演,慎防设定倾泻。" "钩子偏好谜题危机、科技奇观与命运抉择。" "单章篇幅参考约 2500–3500 字,按情节功能弹性调整。" "常见套路:末世、星际、赛博、时间循环——设定服务剧情,避免大段科普打断叙事。" ), "历史": ( "语域偏厚重考究、代入感强;节奏偏中,以权谋博弈与人物弧线为主。" "钩子偏好权谋算计、命运转折与家国大势。" "单章篇幅参考约 3000–4000 字,按情节功能弹性调整。" "常见套路:穿越架空、争霸天下、朝堂权谋、种田发展——细节要经得起推敲。" ), "悬疑": ( "语域偏冷峻克制、讲究信息控制;节奏张弛有度,靠悬念与反转拉动。" "钩子偏好谜题、危险迫近、误导与真相错位。" "单章篇幅参考约 2500–3500 字,按情节功能弹性调整。" "常见套路:多线叙事、伏笔回收、层层反转、不可靠叙述——保持信息差,慎过早揭底。" ), "言情": ( "语域偏细腻、注重情绪张力与关系互动;节奏偏中,以情感推拉为主线。" "钩子偏好暧昧拉扯、误会错过、情感转折与命运羁绊。" "单章篇幅参考约 2500–3500 字,按情节功能弹性调整。" "常见套路:先婚后爱、破镜重圆、双向奔赴、追妻火葬场——情绪外化于互动细节,别空喊。" ), } def genre_craft_fragment(genre: str | None) -> str | None: """按题材取 craft 片段;未指定或命不中预设题材时返回 None(不注入、不报错)。""" if not genre: return None return GENRE_CRAFT.get(genre)