From muse-derivative
MUSE writer 对白工坊 — 提供对白矩阵、声音差异化、质量验证、POV 锚点等对白写作核心原则。由 writer subagent 在场景含对白时加载;也可被 orchestrator 在单场景改写小任务时加载。三层模型(已说/未说/不能说)贯穿对白、内心独白与 POV 叙述三种声音载体。
How this skill is triggered — by the user, by Claude, or both
Slash command
/muse-derivative:dialogue-craftThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> 「所有说话都是回应需求,带着目的,实施行动。言辞无论多模糊或多轻飘,没有角色会无缘无故跟别人甚至自己说话。所以,在角色的每句台词之下,作家都必须创造出一种欲望、意向和行动。」
「所有说话都是回应需求,带着目的,实施行动。言辞无论多模糊或多轻飘,没有角色会无缘无故跟别人甚至自己说话。所以,在角色的每句台词之下,作家都必须创造出一种欲望、意向和行动。」 —— 《对白》第一章
角色的声音不只在对白中——内心独白、POV 叙述、行为选择都是声音的载体。三层模型(已说/未说/不能说)贯穿所有声音表达形式。
Phase 6 场景展开中,遇到以下情况时读取本模块:
「已说是角色选择向别人表达的想法和情感;未说是角色这些想法和感觉用内在声音只表达给自己的部分;不能说的,是角色的潜意识冲动与欲望不能说出来者,即使对他自己也不行,因为它们是缄默无声也不被察觉的。」 —— 《对白》前言
贯穿所有角色声音载体:
| 层面 | 对白场景 | POV 叙述/内心戏场景 |
|---|---|---|
| 已说 | 角色选择说出的话 | POV 角色意识到并"告诉"读者的(他注意到什么、如何描述环境) |
| 未说 | 角色想了但没说出口的 | POV 角色感受到但没有明确表述的(身体反应、模糊的不适感) |
| 不能说 | 角色自己也不知道的潜意识 | POV 角色的认知盲区——读者能看到但角色看不到(行为模式暴露的真相) |
三层模型同样适用于 Phase 6 的情境排练 prompt 设计(排练协议见
character-rehearsalskill)。
根据场景类型选择工具:
在写对白之前,为场景每个关键 beat 建立交流状态矩阵:
dialogue_matrix:
- speaker: "角色"
immediate_objective: "此刻要让对方做 / 信 / 停止什么"
receiver_belief_state: "对方此刻知道、误解、拒绝承认什么"
information_boundary: "说话者 / 听者 / POV 不能知道或不能直说什么"
surface_delivery: "台词 / 动作 / 沉默 / 物件 / 程序文体 / 旁观者反应"
subtext: "未说出口的真实意图或压力"
attribution_strategy: "neutral_tag | action_bridge | object_bridge | listener_reaction | omitted_tag"
# attribution = 句子在 narrative 中怎么被标注(5 enum,纯归属策略)
dialogue_form: "diagnostic_verdict | single_word_winner | caretaker_tone_violence | monosyllable_confession | co_creation_as_confession | null"
# form = 对白本身呈现的形态(5 enum + null,对应 references/speech-attribution-patterns.md §8 形态库)
omission: "故意不解释什么"
矩阵确保每个角色在场景中都有明确的目的、信息边界与承接策略;attribution_strategy 与 dialogue_form 是两个独立维度——前者管"句子在 narrative 中怎么挂归属",后者管"对白本身呈现成哪种形态",不要把形态塞进归属字段。
角色长期声音的权威源是 run 级角色包(pipeline/story-character-skills/.claude/skills/{slug}/SKILL.md,writer 必读清单内;其 voice profile 由 Phase 2 按 8D 框架构建)。写对白前对每个说话角色做一次声音标记提取,再逐句对标——这是生成时动作,不是事后检查:
盖住名字测试(事后验证):遮住角色名,只看对白,能否分辨谁在说话?不能 → 回到标记重新提取,不是局部换词。
每个关键对白 beat 先问:这句话是否真的需要说出口?
若以下方式更强,优先替代台词:
按节拍链顺序编写对白。每句台词检查:
不要默认让主角解释全部逻辑。优先设计让对手因为骄傲、恐惧、利益或身份焦虑而自行补全 / 泄露关键信息。
参考:references/speech-attribution-patterns.md §6(铁枪庙黄蓉激将欧阳锋)。
「所有说话都是回应需求,带着目的,实施行动。」—— 《对白》第一章
写对白时容易把"显得文学"当成目标,于是把中性 attribution(说 / 问 / 答 / 道)改成状态标签(淡淡道 / 沉声道 / 声音很低 / 语气平静)。这不是文学化,是把一个坏模板换成另一个坏模板。
原则:
承载手段(语义优先级):
→ 策略示例(自造,非名著原句)见 references/speech-attribution-patterns.md
避免的对白缺陷:
| 缺陷 | 表现 | 修正 |
|---|---|---|
| 在鼻子上 | 人物神态、语言经过零级推理就能看出情绪,如:XX很生气,XX气的发抖,XX难过地说 | 用行为和措辞暗示 |
| 背景泄露 | 人物解释读者需要知道的背景 | 让信息在冲突中自然流出 |
| 无效信息 | LLM通常会用一段无效的人物描写代替XX说,如:XX语速很慢、XX声音有些发抖、XX低吼 | 或通过滑稽来逗读者乐,或作为writer在人物描写上炫技,或正常服务于情节发展 |
| 过度使用口头禅 | 每句话都带口头禅/口头禅删掉之后没影响 | 口头禅是调味料不是主菜 |
对白少但 POV 角色内心活动密集的场景(如战斗、独处、观察、逃亡),用 POV 锚点表替代对白矩阵:
| 维度 | 问题 | 设计要点 |
|---|---|---|
| 感官过滤 | 这个角色优先注意什么? | 职业和性格决定感官优先级——好色的人在异性陈述信息时,也许并不关注内容本身 |
| 思维模式 | 如何组织信息?如何基于已知内容认识现状 | 碎片化/线性/联想/数字化——沈牧在战场上想的是"一万三千"、"一刻钟"、"百五十步" |
| 情感泄露 | 情感如何绕过理性防线? | 不通过内心独白直陈,而通过身体反应(深吸一口气)、感官偏移(空气的苦涩)、注意力漂移间接暴露 |
| 认知盲区 | 角色看不到自己的什么? | 读者从行为模式中推断出角色自己不承认的东西——这是三层模型的"不能说"层在叙述中的体现 |
POV 锚点表确保 POV 叙述有角色特异性——换一个 POV 角色,同一个场景的描写应该完全不同。
→ 写前必读:references/dialogue-rules.md 的"对白交流契约" + "无冲突对白 / 同质对白"两节——流水账对白的对症判据(每句对白要能回答:说给谁听 / 想让对方做什么 / 哪些不能说穿;无冲突的纯信息交换要么注入压力要么转叙述)。三层模型理论深度见 references/subtext-theory.md(按需)
→ 排练 prompt 设计见 character-rehearsal;Actor 素材评估归 phase6 dispatcher / orchestrator
→ 承载模式参考:prose-craft/references/novel-craft-patterns.md(按需加载——A 类承载点 / B 类视角 / C 类高潮 / D 类人物 / E 类形态)
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub roadtoagi/muse-derivative --plugin muse-derivative