webnovel-writer 情感与心理描写知识库:CSV 检索机制与五条核心技法实战解析
2026/9/17 20:49:05 网站建设 项目流程

webnovel-writer 情感与心理描写知识库:CSV 检索机制与五条核心技法实战解析

【免费下载链接】webnovel-writer基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200 万字量级 连载创作。项目地址: https://gitcode.com/GitHub_Trending/we/webnovel-writer

导读

本指南面向使用webnovel-writer(基于 Claude Code 的长篇网文辅助创作系统)写作长篇连载的创作者与开发者,讲解该系统如何通过「stub 化 + CSV 集中管理 + BM25 按需检索」的方式,为 AI 写作过程提供情感与心理描写的实时知识支撑。读完本文,你将掌握reference_search.py检索命令的完整用法与底层机制,并系统学会系统内置的五条核心情感描写技法(WT-002/WT-006/WT-037/WT-050/WT-068),可直接用于提升章节中人物情绪的现场感与真实度。


一、从 stub 到 CSV:情感心理知识是如何迁移的

webnovel-writer/skills/webnovel-write/references/writing/目录下,emotion-psychology.md是一份迁移占位文件(stub)。它的完整内容只有一句话:

本文件内容已迁移到 CSV写作技法,运行时通过reference_search.py --table 写作技法检索(情感/心理相关行如 WT-002/WT-006/WT-037/WT-050/WT-068)。此处不再维护正文(历史见 git)。

这意味着该系统经历了一次参考资料架构重构:把原先散落在各 Markdown 文件里的写作技法正文,统一收敛到 写作技法.csv 这一结构化知识表中,让 Markdown 只保留"检索入口说明"。同样的迁移也发生在同目录下的dialogue-writing.md(对话写作)、scene-description.md(场景描写)、combat-scenes.md(战斗场景)等文件上,可参见 reference-loading-map.md 中「当前非直接调用项」一节的记录。

这一迁移的价值在于:

  1. 单一真源(Single Source of Truth):技法正文只在 CSV 中维护一份,不再出现"Markdown 正文与 CSV 数据互相打架"的问题;
  2. 结构化检索:每条技法以固定字段(编号、关键词、大模型指令、核心摘要、详细展开、毒点、正例、反例)组织,可被程序化检索与注入;
  3. 按需加载:写作时不再全文读取大文件,而是由检索脚本按当前场景关键词返回最相关的技法条目,控制上下文长度。

二、运行时检索机制:reference_search.py 的完整调用链

2.1 命令形态

情感/心理描写触发检索时,webnovel-write 技能在 Step 2(起草正文)阶段按需调用检索脚本(见 reference-loading-map.md 的 CSV 检索表):

python -X utf8 "${SCRIPTS_DIR}/reference_search.py" \ --skill write \ --table 写作技法 \ --query "情感描写 心理" \ --genre {题材}

其中:

参数说明示例
--skill必填,按「适用技能」列过滤,决定哪些行可见write(写作技能)
--table可选,指定单一 CSV 表名(不带.csv后缀)写作技法
--query必填,BM25 检索关键词,可用空格分隔多词"情感描写 心理"
--genre可选,按「适用题材」列过滤,全部题材恒匹配现言古言玄幻
--max-results可选,返回结果上限,默认 53
--csv-dir可选,覆盖 CSV 目录路径默认自动定位到references/csv

在不指定--table时,脚本会在references/csv/下所有 CSV 表中做跨表检索(story-system 内部表会被隐藏,见_table_visible_for_search)。返回结果为 JSON,每条结果包含:编号分类层级适用题材内容摘要大模型指令

2.2 底层实现:BM25-lite 评分

reference_search.py的核心搜索流程位于search()函数(参考实现),分为四步:

  1. 过滤候选行:按--skill匹配「适用技能」列(支持|分隔的多值),按--genre匹配「适用题材」列(全部恒匹配,且输入与单元格都会先解析为规范题材再比较);
  2. 分词与加权:按分隔符切分关键词,并对不同字段施加不同权重——意图与同义词权重 4、关键词权重 3、核心摘要权重 2、详细展开权重 1(_DEFAULT_SEARCH_WEIGHTS)。这解释了为什么查询词命中"意图与同义词"列时召回最强;
  3. BM25 打分:实现简化版 BM25 公式(k1=1.5, b=0.75),并内置中文字符子串匹配兜底qt in dt or dt in qt),即使查询词与文档词不完全相等也能召回——这是中文复合词检索的关键设计;
  4. 结果格式化:按得分降序取前 N 条,内容摘要优先取「核心摘要」列,缺失时才拼接其他列。

2.3 表注册与注入目标

写作技法表在CSV_CONFIG中注册为(配置定义):

配置项含义
search_cols关键词:3, 意图与同义词:4, 核心摘要:2检索打分字段及权重
output_cols编号, 技法名称, 核心摘要, 大模型指令, 详细展开结果输出字段
poison_col毒点反例字段(供审查与防毒点)
rolebase基础检索表,注入合同
contract_injectCHAPTER_BRIEF.dynamic_context检索结果注入写作任务书的dynamic_context
prefixWT条目编号前缀

也就是说,情感心理技法检索结果会作为风格参考补充进入章节写作任务书的dynamic_context,而不会覆盖章纲硬约束(章节目标、CBN/CPNs/CEN、禁区等),这与 webnovel-write 任务书排序第 5 条的要求一致。

2.4 测试验证

仓库测试 test_reference_search.py 中专门为情感检索场景编写了用例:

def test_emotion_query_hits_writing_techniques_table(self): """情感与心理查询应命中 写作技法.csv。""" out = run_search( "--skill", "write", "--table", "写作技法", "--query", "情感描写 心理", ) assert out["status"] == "success" ids = [r["编号"] for r in out["data"]["results"]] assert "WT-002" in ids

该用例以子进程方式真实调用脚本并断言WT-002(情绪递进式心理描写)被召回,验证了"情感描写/心理"这类自然语言查询可以稳定命中知识表。


三、五条核心情感描写技法全解(WT-002 / WT-006 / WT-037 / WT-050 / WT-068)

以下五条是情感心理主题在写作技法表中的核心条目,每条的完整字段(大模型指令、核心摘要、详细展开、毒点、正例、反例)均取自 写作技法.csv。

3.1 WT-002 情绪递进式心理描写

  • 适用技能/题材:write,全部题材
  • 关键词:情感描写 | 心理描写 | 内心独白 | 情绪变化;意图与同义词:心理怎么写 | 情感戏怎么写 | 内心戏怎么写
  • 大模型指令:先写触发源和身体反应,再写意识层判断,避免空转自述和单纯概念词堆叠。
  • 详细展开:情感与心理描写要把触发、身体反应、意识判断串起来,避免只写抽象情绪名词。可按触发事件 → 细微反应 → 意识解释 → 行动倾向推进,让心理变化既可感知又能推动下一步剧情。

示例对比(正例 vs 反例):

正例:门关上的瞬间,他才后知后觉地发现掌心全是汗。那句原本准备好的解释堵在喉咙里,怎么也说不出来。

反例:他现在非常难过,也非常痛苦,非常纠结,心里充满了复杂的情绪。

这条技法解决的是网文最常见的"情绪名词堆叠"问题——作者直接报出"难过/痛苦/纠结"这些结论,读者却感受不到任何东西。正确的做法是把情绪翻译成可见、可感的身体与意识过程

3.2 WT-006 高情绪场景三段式

  • 适用技能/题材:write,全部题材
  • 关键词:高情绪场景 | 激烈吵架 | 诀别场景 | 情绪爆发;意图与同义词:吵架场景怎么写 | 诀别戏怎么写 | 情绪戏怎么推进
  • 大模型指令:按铺垫→爆发→余韵的三段式推进情绪场景,不要一上来就高声量互骂。
  • 详细展开:高情绪场景需要先积累矛盾和压迫,再在临界点爆发,最后留出余波和关系变化。铺垫段负责引出矛盾和立场,爆发段集中打出核心质问与反击,余韵段用沉默、动作或环境收束情绪。

示例对比(正例 vs 反例):

正例:她本来只是把那封信放到桌上,声音也很轻。直到他说出"我从没答应过你",她才像被彻底逼到墙角,攥紧指节把压了整章的话一次性掀开。

反例:两个人一上来就大吼大叫,吵完立刻切场,关系像什么都没发生过。

要点:爆发必须有前置矛盾支撑爆发后必须有关系后果,否则情绪场景就是无效的高声量噪音。这条与 WT-060(高压情绪三段爆发)可互相印证。

3.3 WT-037 动作化代情法(Show, Don't Tell)

  • 适用技能/题材:write|plan,全部题材
  • 关键词:show don't tell | 动作化情绪 | 不直说情绪 | 用动作写情绪;意图与同义词:不要直接说生气怎么写 | 用动作表现害怕 | 情绪怎么不直白讲
  • 大模型指令:优先用动作、微表情和环境反馈替代抽象情绪词,让读者自己感到人物在怕、在怒、在崩。
  • 详细展开:动作化代情法的核心,是把"他很生气"改成读者能看见、能听见、能感到的具体反应。发白的指节、吞不下去的口水、说到一半突然停住,这些都比直接贴情绪标签更有现场感。

示例对比(正例 vs 反例):

正例:她没说害怕,只是第三次去摸门锁时,指尖已经冷得没了血色。

反例:她很害怕,非常非常害怕,整个人都很害怕。

毒点提醒:动作堆太多反而失焦;所有情绪都靠握拳咬牙会显得套路化;环境反馈和人物反应脱节。

3.4 WT-050 微动作连锁推进

  • 适用技能/题材:write|plan,全部题材
  • 关键词:动作序列 | 微表情 | 连贯动作 | 细节推进;意图与同义词:动作细节怎么写连贯 | 微表情怎么排 | 动作序列怎么不跳
  • 大模型指令:把一个情绪节点拆成可见的三到四个连续动作,别直接从站着跳到崩溃。
  • 详细展开:微动作连锁能把情绪和关系变成可见过程,让场面不只剩心理结论。视线转移、手指停顿、呼吸变化、肩背绷紧和半句打断,都是能连成节拍的动作链。

示例对比(正例 vs 反例):

正例:她先去拿杯子,手指碰到杯沿时却顿了一下,最后只是把它往他那边推过去,始终没抬眼。

反例:她很紧张,于是咬唇、握拳、发抖、哭了,所有反应同时出现没有层次。

与 WT-037 的区别:WT-037 强调"用动作替代情绪词",WT-050 强调动作之间要有顺序与层次——三四个动作连成一条可追踪的节拍链,而不是一次性堆出所有反应。

3.5 WT-068 触发反应选择链(强情绪场)

  • 适用技能/题材:write|plan,现言 | 古言 | 幻言
  • 关键词:强情绪描写 | 感官动作心理 | 虐点表达 | 情感共鸣;意图与同义词:女频情绪戏怎么写 | 虐点怎么写痛 | 情感描写怎么不空
  • 大模型指令:强情绪场用触发、身体反应、动作选择和心理判断串联,不要只堆痛苦词。
  • 详细展开:女频高情绪描写要让读者看见角色为什么痛,也看见她痛完后做了什么选择。视觉、声音、触觉、停顿和小动作都可以承载情绪,但每个细节都要和人物关系或旧伤有关。

示例对比(正例 vs 反例):

正例:听见那句和她一样时,她没有哭,只是把已经签好的名字慢慢划掉,纸都被笔尖刮破了。

反例:她非常痛苦非常绝望非常伤心,心里有说不出的复杂感情。

题材限制说明:WT-068 的「适用题材」为现言/古言/幻言(女频方向),而前四条均为「全部」题材。检索时若不传--genre,则不受题材过滤影响;传了题材参数后,脚本会按「适用题材」列严格过滤(全部恒匹配)。


四、五条技法的横向对比与组合使用

编号技法名称核心抓手适用题材适用场景
WT-002情绪递进式心理描写触发→反应→判断→行动全部情感戏、受挫反应、心态转折、关系推进
WT-006高情绪场景三段式铺垫→爆发→余韵全部激烈争执、诀别、失控告白、道歉失败
WT-037动作化代情法用动作/微表情替代情绪词全部情绪爆点、人物失控、细腻心理外化、润色改稿
WT-050微动作连锁推进三四个连续动作成节拍链全部对峙、告白、审讯、谎言暴露
WT-068触发反应选择链痛因→反应→选择现言/古言/幻言虐点、决裂、重逢、告白失败、道歉无力

组合建议(实战经验,供参考):

  1. 起草重场戏时,以 WT-006 规划整场节奏(铺垫→爆发→余韵),再以 WT-050 的微动作链填充爆发段的具体动作;
  2. 润色改稿时,用 WT-037 扫描全章,把"他很愤怒/她很难过"这类抽象结论批量替换为动作与身体反应;
  3. 女频虐点优先参考 WT-068,让每个感官细节都挂靠人物旧伤与关系;
  4. 心态转折类段落以 WT-002 的"触发→反应→判断→行动"四步作为骨架,防止内心戏空转。

五、情感知识在写作任务书中的落地位置

在 webnovel-write 的完整写章流程中(见 SKILL.md),情感心理检索发生在Step 2 起草正文阶段,触发条件为"情感描写"类需求。检索结果经由CHAPTER_BRIEF.dynamic_context注入写作任务书,作为场景写法补充仅作风格参考,不能覆盖章纲约束——任务书排序为:本章硬性约束(chapter_directive)→ CBN/CPNs/CEN 与must_cover_nodes→ 本章禁区(forbidden_zones)→ 风格指引 →dynamic_context补充参考。

换言之:情感技法知识服务于表达层面,不改变剧情走向与设定约束。起草时"只根据任务书起草",情感描写参考已内化在任务书供 AI 按需取用,保证既不丢技法,也不越界改事实。


六、小结与延伸阅读

本文以emotion-psychology.md的迁移说明为线索,还原了 webnovel-writer 情感与心理描写知识的完整技术链路:

  1. 知识存放:从 Markdown stub 迁移至结构化 CSV 写作技法.csv,单一真源维护;
  2. 检索能力:由 reference_search.py 提供带 skill/genre 过滤、字段加权与中文子串兜底的 BM25-lite 检索,测试用例见 test_reference_search.py;
  3. 实战技法:WT-002 / WT-006 / WT-037 / WT-050 / WT-068 五条情感描写核心技法及其正反例、毒点清单可直接指导写作与润色;
  4. 流程落位:检索结果注入写作任务书dynamic_context,在遵守章纲约束的前提下提升情感表达质量。

若需继续深入,可参阅:

  • webnovel-write 技能流程:查看完整写章六步流程与 CSV 检索触发条件;
  • reference-loading-map.md:查看全部技能的 reference 消费关系与检索调用表;
  • reference-gap-register.md:了解参考资料覆盖缺口的管理方式;
  • 写作技法.csv:浏览全部 104 条写作技法(WT-001 至 WT-104),涵盖对话、场景、节奏、悬疑、仙侠、快穿、种田、衍生等多个维度。

【免费下载链接】webnovel-writer基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200 万字量级 连载创作。项目地址: https://gitcode.com/GitHub_Trending/we/webnovel-writer

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询