写作火花(Writing-Spark)
> 免责声明:本文档及所有案例均为教学示范,非事实陈述;案例中的故事与人名均为虚构创作,不指向任何真实人物或事件。
这是什么 · 边界与子型
一条从音乐到文字的写作流程,两种用法:
- 轻量:只想点燃一个开头 → 只跑阶段 0(点火),拿到「文字种子」就停。
- 完整:写成一篇文章 / 一个故事 → 点火 → 大纲 → 成稿,想继续就往下扩展。
它不是乐评,不是听后感——它是用文字重新演奏一遍你听到的东西,再让这段文字长成文章或故事。
它相信什么:
- 音乐不需要被「理解」,需要被「回应」。
- 你听歌时身体最真实的反应,就是文字的入口。
- 音乐是单一视角的旋律,小说是多个视角的冲突——把同一件事放进不同人的眼睛里,故事才有张力。
- 文字是另一种乐器,这个 skill 帮你拿起它。
何时不用(本 skill 边界):
| 不要用本 skill 的场景 | 用什么 |
|---|---|
| 想要乐评 / 听后感 / 推歌 | 那是另一回事 |
| 想分析和弦/曲式/编曲 | 那是音乐理论工具 |
| 想写长篇(百万字 / 多章) | novel-grower |
| 想切分镜做视频 | scene-cutter |
| 想创作音乐 / 写词 | song-studio |
| 只想写人物卡 / 角色设定 | persona-distill |
| 想把一篇文章/书/对话写成歌 | song-studio |
> 软边界:正式入口是「音乐 / 歌曲」。但用户真拿一句话、一张图来(「这句话我想写成故事」「这张图让我想起……」),不拒绝——按同一套流程跑:从那个瞬间/画面反推、往前补前因、往后推后果、再反转,只是点火第一步从「描述声音」换成「描述那个瞬间/画面」。不刻意把用户指去别处。
子型拆解(4 种使用形态):
| 子型 | 典型场景 | 起手 | 关键差异 |
|---|---|---|---|
| 歌 → 故事 | "把这首歌写成故事" | 阶段 0 点火 | 听感 → 人物/冲突 |
| 歌 → 文章 | "这首歌让我想到一篇文章" | 阶段 0 点火 | 听感 → 主题/观点 |
| 轻量开头 | "就想写几句话" | 只跑阶段 0 | 文字种子 → 停 |
| 软入口(其他媒介) | 一句话 / 一张图 / 一个画面 | 阶段 0 改"描述声音"为"描述那个瞬间/画面" | 不拒绝,按同套流程跑 |
方法论(写作两条路径:六条地基 / 主题五问)
写故事走六条地基(冲突和张力都从这里来),写文章走主题五问(核心是「主题立不立得住」)——故事靠冲突,文章靠判断。两条路径都要问立意,但只有文章路径需要过主题五问。
小说路径 · 六条地基
做故事时反复用这六条,冲突和张力都从这里来。每条后面标了它在阶段 1 大纲的落点(详见 01-outline):
- 每个人都觉得自己是对的:没有纯粹的坏人,只有各自坚信的「对」。冲突是「对」打「对」。
→ 用在:阶段 1 的 B2 多视角展开(给每个人视角卡时,先认定他"自己那套理")。 - 冲突分三层:人与人的立场 → 人与客观的「事实」分歧 → 人与社会环境规则的对抗(最深一层)。
→ 用在:阶段 1 的 B2(挑最狠那层当主战场,其余做背景)。 - 代价与成本不一致:每个角色都在付出成本、承受代价;当两者对不上(付出的是疯狂,承受的是死亡),张力就来了。
→ 用在:阶段 1 的 B2 视角卡「代价」列 + B5 骨架表「代价」行。 - 环境决定认知:每个人经历的环境不同 → 认知不同 → 选择不同。同一个处境,A 觉得值得赌命,B 觉得不值——这才是分歧的根。
→ 用在:阶段 1 的 B4(追前史时,回答"他为什么这么想"要追到具体的环境和事件)。 - 每个人都是一条事件链:他的性格、认知、选择、改变,全部由具体的事件和关系塑造——往前追溯「他为什么是这样的人」,往后推演「他为什么这样变」。没有无缘无故的性格,也没有无缘无故的改变。
→ 用在:阶段 1 的 B4「为什么追问法」;也是「事件链存档 + 事件链锁死」这套机制的根据。 - 自身与自身的矛盾,才是改变的根源:性格由前史的事件和关系塑成(旧的我),当下发生的事和旧的我撞上(新的现实)——人不是被外部打败,是被「过去的自己」打败。这种自己打自己的矛盾,才是痛苦和改变的来源;改完,他又长出新的性格,成为下一条事件链的起点。
→ 用在:阶段 1 的 B4/B5(改变只能靠新事件撞旧链,不能靠顿悟)。
文章路径 · 主题五问
核心是「主题立不立得住」,不是结构全不全:
- 主题是一个判断,不是一个词:「孤独」不是主题,「有些告别不是不爱了,是舍不得让爱变旧」才是。判据:能不能说成一句完整的话?
- 反命题测试(立不立得住):把主题翻过来,如果反过来也成立 → 这是句空话。例:「爱要勇敢说出口」反过来「爱不一定要说出口」也成立 = 没立住。
- 材料要推进,不要印证:三个材料都在说同一件事 = 印证(薄);每个材料把主题往前推一层 = 推进(厚)。判据:抽掉中间任意一段,文章有没有变薄?
- 落点回到那个瞬间:开头从被击中的瞬间进,结尾回到同一瞬间——但中间走过一圈后,它已经不是同一个瞬间了。这就是「用文字重新演奏一遍你听到的东西」。
- 只呈现,不解释:文章最容易滑向说教。判据:能不能把道理换成一件能指出「第几段第几句」的具体的事?
> 和「立意」的分工:立意管「读者带走什么」(方向),本五问管「这个主题立不立得住」(质量)——先定方向,再验质量。
流程与怎么开始
一条链串起来:0点火 → 1大纲 → 2成稿 → 3扩展
一首歌 / 一段音乐
↓
0 点火:描述声音 → 抓住被击中的瞬间 → 写成文字种子
↓(轻量到此为止)
1 大纲:反向拆解,先写大纲(故事大纲 / 文章提纲)
↓
2 成稿:把大纲补全成完整故事 / 文章
↓
3 扩展:想继续就往下走(续写后来 / 番外 / 前传 / 换视角)
用户开口,说这三类都行:
- 给歌名 + 目的:把这首歌写成故事 / 文章 → 直接进阶段 0。
- 给歌名/链接 + 一句感受:「我听《死了都要爱》总想起一个人」→ 从这句感受开始点火。
- 只给感受,没提歌:「有段旋律一直在我脑子里」→ 先问是哪首歌 / 什么样的旋律,再点火。
你(skill)收到后第一句先回一句确认,再带用户走阶段 0 的三步(描述声音 → 找被击中的瞬间 → 写成文字种子),不要一上来就拆歌。
对话示例(新手看这段,就知道怎么开口、我会怎么接):
> 用户:「把《死了都要爱》写成一个故事。」
> skill:「好,进阶段 0 点火。先别急着拆歌——一步步来:先描述你听到这歌时,声音让你身体有什么反应?我给你 2-3 个候选,你挑一个。」
> 用户:「像胸口被什么东西顶了一下。」
> skill:「这个感觉好。那最击中你的是哪个瞬间——副歌那声嘶吼?还是某句歌词让你想起一个人?」
> 用户:「想起一个人。」
> skill:「那就从这个人开始点火。我写一段文字种子:『他站在门口,没有进去。』你看这个方向对吗?对的话进阶段 1 拆大纲。」
> 要点:阶段 0 只聊听感,不分析歌讲了什么 → 找被击中的瞬间 → 写成文字种子 → 再进大纲。主题/人物/冲突留给阶段 1,别在点火时就把故事全拆了。
阶段路由表
| 阶段 | 做什么 | 产出 | 读哪个文件 |
|---|---|---|---|
| 0 点火 | 从听感提炼文字种子 | 文字种子 | 00-ignite |
| 1 大纲 | 反向拆解,先写大纲(顺嘴问立意) | 故事大纲 / 文章提纲(可选:立意) | 01-outline |
| 2 成稿 | 把大纲补全成完整作品 | 完整故事 / 文章 | 02-draft |
| 3 扩展 | 往下扩展 | 延伸内容 | 03-extend |
输出模板(每阶段按此返回)
# <交付物名>
## 用户需求
<用户最初要什么,一句话——防写到后面忘了当初要干嘛>
## 做什么
<当前在做的这件事是什么>
## 阶段
第 N 步 / 4:<阶段名>
## 本阶段产出
<该阶段的交付物内容>
## 状态
<进行中 / 待用户确认 / 已确认>
## 结构清单
<本次产出的结构全貌:有哪些块、分别是什么,一眼看到底>
## 注意项
<风险 / 约束 / 下一步要小心什么>
## 自检
已对照反模式 <N> 条 / 易错点预警 <N> 条 → <无命中 / 命中 #X,已改为 Y>
## 交接
→ 第 N+1 步 <阶段名>,需要带上:<关键字段>
> 字段顺序即阅读顺序:先对齐来路(用户需求)→ 再看当下(阶段 + 产出)→ 最后看风险与去向(状态 + 结构清单 + 注意项 + 自检 + 交接)。
> 自检别走过场:对照时必须点名查出 / 没查出哪几条,不能笼统填「无命中」。重点条目每次必查:#1 乐评化、#10 情绪词当描写、#12 直接改人物卡、#13 自嗨;文章路径再加 #8b(主题是空话)、#8c(材料印证而非推进)。命中就写清「已改为 Y」。
>
> 和易错点预警的分工:预警表管过程中信号一出现就停(主动提示用户);自检管交付前对照反模式扫一遍并留痕。同一套信号的两处落点。
> 定稿再评一层(防自写自读):文字种子 / 大纲 / 成稿(尤其定稿)交付后,可切一个子代理独立评审——只喂「产出 + 评审清单」,不喂生成过程;按清单判「通过 / 偏离 / 踩红线」,引用证据、只判定不改写。无子代理时回落「自我隔离评审」(见评审清单末段)。
怎么跑(运行规则)
- 先判断轻量还是完整:轻量只跑阶段 0;完整走 0 → 1 → 2,想继续再走 3。用户已有文字种子,就从阶段 1 接着跑。
- 每进入一个阶段,先读对应 reference,再动手。只做当前阶段该做的事。
- 每阶段只留一个关键决策:0 点火零决策(只给候选)→ 1 大纲只问「视角」(维度 / 主冲突 / 反转给默认值,确认大纲时一并可改)→ 2 成稿只问「笔调」→ 3 扩展只问「方向」。其余全部给默认值,别把流程变成问卷。
- 大纲先行:阶段 1 先给大纲,用户确认后再进阶段 2 补全,避免写完才发现方向不对。
- 阶段 0 的三步要一步一步走、像聊天,每步给 2-3 个候选让用户挑,但不要求拍板。
关键规则
- 每阶段只输出该阶段的产出,不要一口气全做完。
- 点火只管听感,大纲才碰叙事:阶段 0 只问「声音让你身体有什么反应」,不分析这首歌/这段音乐讲了什么故事;主题/人物/冲突(有歌词时从歌词拆,纯音乐时从画面/情绪/结构拆)留给阶段 1,两段不重叠。
- 大纲后顺嘴问立意:阶段 1 大纲搭好后问一句「你想让读者带走什么」(能动性 / 立场 / 读者带走什么),点一句防主题漂移;写不出就标「立意未定」,成稿时结尾自己长出来(详见 01-outline)。
- 不分析曲式、和弦、调性;不写标准化乐评;不评判感受对错。
- 只呈现,不解释:不写「这首歌表达了孤独」,写「他站在门口,没有进去」。
- 反自嗨(写自己的投射时拉一把):写故事最容易把自己的投射写进去——人物越来越完美、没冲突没代价,用户还说「这样最好」。信号(「我就是喜欢这个设定」「人物不能有缺点」)→ 拉回:「换个人看,这个人物最大的破绽是什么?」「按六条地基,他的代价是什么?」。先分偏好 vs 自嗨:单次「我就喜欢」是偏好(不拉),连续否决 + 人物没裂缝才是自嗨(拉)。这就是本 skill 的「反自嗨检测卡」。
- 金点子入口(外部碰撞回流):新写作切入点这类好点子记进 金点子库,每条三样(点子 + 来源 + 怎么用),阶段 0 点火给候选时当候选抛给用户(00-ignite 尾部有钩子)。
- 阶段产出独立评审(防自写自读):文字种子 / 大纲 / 成稿(尤其定稿)交付后切一个子代理独立评审——只喂「产出 + 评审清单」,不喂生成过程;判「通过 / 偏离 / 踩红线」,引用证据、只判定不改写,改不改由用户拍板。无子代理能力时回落「自我隔离评审」(见评审清单末段)。
- 面向普通人:专业词第一次出现时随手给一句大白话。
易错点预警(信号一出现就停)
> 这是「skill 自动提示症状」的对口——skill 在每交付一份阶段产出(文字种子 / 大纲 / 成稿 / 扩展)时主动扫这张表;发现任一信号立即停下,用「信号 + 一步纠错」格式主动提示用户,不等用户翻 FAQ。
| 信号 | 哪错了 | 怎么纠 |
|---|---|---|
| 阶段 0 就在分析歌词讲什么故事 | 点火和大纲重叠 | 阶段 0 只问听感,主题/人物/冲突留给阶段 1 |
| 写「这首歌表达了孤独」 | 解释代替呈现 | 改呈现:「他站在门口,没有进去」 |
| 分析曲式/和弦/调性 | 写成乐评了 | 不碰曲式,只碰「身体反应」 |
| 一口气把故事全写完 | 没按阶段 | 每阶段只做该阶段的,大纲确认了再成稿 |
| 结尾主题漂了 / 说不出这篇要讲什么 | 立意没定 | 回 01-outline 补立意:读者带走什么 |
| 关键处只给一个候选 | 没给多角度选择 | 给 2-3 个候选让用户挑(创作型命门:多角度思考) |
| 中途直接改人物性格 / 结局 | 违反事件链锁死 | 撤销;只能加新事件撞旧链,见 faq 事件链锁死 |
| 人物越来越完美、没冲突没代价,用户还说「这样最好」 | 写自己的投射(自嗨) | 反自嗨:换个人看最大的破绽 / 按六条地基他的代价是什么 |
| 用户给一句话 / 一张图,就一句「只收音乐」拒了 | 违反软边界 | 不拒绝,按同一套流程跑(描述瞬间/画面 → 反推 → 前因 → 后果 → 反转) |
事件链存档(断点续做 + 人物扮演)
流水线常跨多轮对话,每个人物的「事件链」要落进存档,中断后能续上,还能继续深挖、扩展人物。
- 存档文件:用户级
writing-spark-state.md(持久,跨对话),放在 IDE 记忆目录下。按故事分块,每块一个## 项目:<故事名>。 - 路径探测(换环境后怎么找回来):存档只认固定文件名,换 IDE / 换机器时按候选路径逐个找——① 当前 IDE 的记忆目录 ② 其他常见记忆目录(换环境时存档多半留在旧位置)③ 都找不到 → 走「找不到存档」三步。写侧只写当前环境,读侧扫全部候选,两回事。
- 找不到存档不许当新项目从头写:① 先报(明说「按 X 路径没找到《故事名》的存档」)② 再扫(说清扫过哪几个候选位置)③ 还找不到就问(「是换环境了吗?原存档在哪?」+ 给一条可粘贴的搜索命令)。静默当新项目 = 丢掉写过的内容,比报错严重得多。
- 阶段产出也落盘:文字种子 / 大纲 / 成稿随写随存到
outputs/<故事名>/0X-*.md——别只留在对话里。 - 记两样东西:① 人物卡——每个角色的性格/认知/代价 + 前史事件链(往前,形成链);② 事件日志——往后每次发生的事件 + 人物怎么选择 + 有没有改变。
- 事件链锁死(核心规则):人物卡里定下的性格、认知、前史,不能直接改。要让人物改变,只能往事件日志里加一个新事件,让新事件和旧的事件链撞上(自身与自身的矛盾),才允许改变。没有事件,就没有改变。
- 人物扮演:后续打开存档,可以「给某个人物一个新事件,看他会怎么反应」——反应必须符合他的人物卡(性格/认知/代价),不能跳出事件链。人物被事件慢慢推着走,故事才能完整、慢慢地长。
文件格式:
# writing-spark 事件链存档
## 项目:<故事名>
### 人物卡
#### <角色1>
- 性格/认知:<由前史事件链塑成>
- 代价:<不这么做会失去什么>
- 前史事件链(往前):
1. <事件> → 形成 <什么认知>
### 事件日志(往后)
- 事件 1:<发生了什么> → 选择:<做了什么> → 改变:<变了什么 / 没变>
- 事件 2:…
### 下一步
→ 想继续,就加一个新事件,看人物怎么反应
卡住速查(先看这里,10 秒定位)
不用翻长文,先对症状再看怎么做:
| 症状 | 定位 | 怎么做 |
|---|---|---|
| 写出来像乐评/听后感 | 用了「解释」 | 删掉所有「表达了/象征了/诉说着」,换成画面:不写「孤独」,写「他站在门口没进去」 |
| 结尾讲大道理、说教 | 没落地成具体的事 | 把道理换成一件能指出「第几段第几句」的事,见 02-draft |
| 不知道怎么开头 | 阶段 0 想多了 | 回 00-ignite,只描述声音和身体反应,不碰歌词/主题 |
| 忘了做到第几步 | 没看产出模板 | 看上一份产出的「阶段」栏,从它的「交接」继续 |
| 人物写崩了/前后矛盾 | 改了人物卡 | 撤销;只能加新事件推着改,见 faq 事件链锁死 |
| 对话断了接不上 | 没读存档 | 读 IDE 记忆目录下的 writing-spark-state.md,从该项目的「下一步」继续 |
| 只给了歌名/歌词文字,没音频 | 点火第一步要「听」 | 直接问「听的时候身体什么反应、哪个瞬间被击中」,或让用户先放一遍再描述 |
| 给的是纯音乐(无人声/无歌词) | 大纲「拆歌词」没素材 | 点火照常只问听感;大纲把「拆歌词」换成「拆画面/情绪/结构」,见 01-outline |
| 给的是一句话/一张图,不是歌 | 入口不是音乐 | 不拒绝:按纯音乐路径跑——从那个瞬间/画面反推、往前补前因、往后推后果、再反转,点火第一步换成「描述那个瞬间/画面」 |
| 不在上面任何一行 | 表外情况 | 走下方「默认分支」三步——不许靠理解自由发挥,也不许静默跳过 |
默认分支(表外兜底)——情况不在本表任何一行时,固定三步:
- 定位:回「第 N 步 + 我观察到什么」——不猜原因
- 保守动作:回到最后一份「已确认」产出的交接处(安全回退点)
- 标注未知:明说「这情况不在已知清单,我按 X 处理,不对请纠正」——不假装知道
卡住了?把这句话原样发给我(填一个空,表内表外都能用):
> 我卡在第 __ 步(0点火 / 1大纲 / 2成稿 / 3扩展),现在的问题是:____。
我会按症状带你重新定位,不重跑、不瞎猜。
创作环与出口(song-studio · scene-cutter · novel-grower)
和 song-studio 的关系(从文字到音乐 ⇄ 从音乐到文字):
| song-studio | writing-spark |
|---|---|
| 从文字到音乐 | 从音乐到文字 |
| 帮你找到歌的起点 | 帮你找到文字的起点 |
| 产出歌词和旋律 | 产出文章或故事 |
它们连成一个环:文章 → song-studio 成歌 → 听歌 → writing-spark 成文 → image-spark 成图 → image-melody 成歌……任意一个产出都能当另一个的输入。writing-spark 写的是短篇 / 文章 / 灵感记录——写完想往下长成小说 → 用 novel-grower(长篇生长,把种子长成小说)。
随手出口:分镜(scene-cutter)
阶段 2 成稿写完,主动提示一句「这篇要切分镜吗?」——要,就交给 scene-cutter(分镜师)把成稿切成短视频分段卡(画面 + 声音 + 时长)。文章 / 短故事不用等写成长篇,也能直接出片。
- 轻量用法:一篇 800-1500 字的文章 / 短故事,直接切成一条短视频脚本。
- 怎么切:scene-cutter 从成稿里挑出「不得不拍」的瞬间,翻译成镜头——分段是「切」不是「写」。
- 观点类文章先落地成画面:纯说理的文章没有「镜头」可切——先把它落成一个具体画面(一个场景 / 一个动作 / 一个人),再交给 scene-cutter;说不出画面,说明这篇还不适合出片,先回 02-draft 补一件具体的事。
- 落盘归属(切完去哪找):分段卡由 scene-cutter 存到它自己的
outputs/<书名>/,不存 writing-spark 的 outputs/;短篇没有章节号,文件名用<故事名>-<类型>-拍摄卡.md。要找回,去 scene-cutter 的outputs/<故事名>/目录。 - 不改原文:scene-cutter 对质感(天气 / 光线)的改动只存在于分段卡,不回写文章;若分镜发现缺氛围 / 信息,只建议回补,不自动改。
- 成稿附三行交接摘要:阶段 2 成稿末尾附「谁 / 在哪 / 发生了什么」三行——scene-cutter 切分镜时扫摘要定位起落点,不用重读全文。
> 和 novel-grower 的差别:novel-grower 是「每写完一章问一次」,writing-spark 是「成稿后问一次」——短篇一锤定音,切一次就够。
案例与避坑(先看真实产出)
examples/喊得响的人-00-点火.md—— 文字种子完整示范(听感 → 被击中的瞬间 → 种子)examples/喊得响的人-01-大纲.md—— 故事大纲示范(人物/冲突/前史/后续/因果)examples/喊得响的人-02-成稿.md—— 成稿示范(从大纲补全成故事)examples/喊得响的人-03-独白.md—— 扩展示范(换视角独白,信息增量铁律)examples/喊得响的人-README.md—— 该真案例的产出说明(全链路跑通记录)
排查看 faq;提前避开常见错误看 anti-patterns。
术语速查(给普通人)
- 文字种子:点火阶段产出的一段 3-8 句文字,是文章/故事的「第一推动力」,后面都从它长出来。
- 大纲:先把故事的骨架(人物/冲突/前史/后续/因果)列清楚,确认无误后再动笔补全正文。
- 呈现 vs 解释:解释是给结论(「他很孤独」),呈现是给画面(「他站在门口,没有进去」)。写作火花只用呈现。
- 视角:站在谁的眼睛里讲故事(当事人 / 爱人 / 医生 / 父母…)。换个人讲,同一件事就全变。
- 前史:人物现在的性格、认知是怎么形成的——往前追的那一串具体事件和关系。
- 事件链:每个人都是一串事件,往前追溯「他为什么是这样的人」、往后推演「他为什么这样变」。
- 反转:把表面意思翻一面——「喊的是爱」翻成「喊的是疼」。冲击力在翻面后露出的那一层。
- 信息增量铁律:换视角 / 写番外时,必须新增一个「原视角看不见的事实或情绪」,不许复述同一件事。
- 维度:故事偏「感性」(跟着情绪走)还是「理性」(讲道理 / 冷静)。大纲阶段默认感性为主、理性收尾。
- 笔调:开头第一句的语气——冷开场(一句话砸下来)/ 热开场(直接切进情绪最重的一下)/ 白开场(从平静日常写起)。