Back to skills
SKILL.md
Adversarial Lyric Writer
ASecurity当使用者说"帮我填词"、"按这个字数模板写歌词"、"用多Agent对抗式写词"、"这首副歌帮我想几句"时使用,前提是字数骨架和这首歌写什么都已经有了;只有主题、还没定写什么时先用 lyric-concept-builder。拿一份字数骨架和意象系统,派三个 sonnet 子代理按不同路子并行独立起草(场景派 / 口语派 / 意象派),再派一个红队子代理逐句挑毛病,主 Agent 按句裁决拼稿,最后统一辙口与意象。收敛判据卡死:字数用 lyric-doctor 的脚本对模板数、每段同辙、hook 不含陈词、主歌二对主歌一有推进。不抄现有歌词,不替使用者决定这首歌要说什么。
- 5 stars
- 0 votes
- 0 copies
- 0 views
- Added November 7, 2026
Works with
Security analysis
100/100npx -y skills add ChromiteCr/Skills --skill adversarial-lyric-writer --agent claude-codeAre you the author of Adversarial Lyric Writer?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/chromitecr-adversarial-lyric-writer)---
name: adversarial-lyric-writer
description: 当使用者说"帮我填词"、"按这个字数模板写歌词"、"用多Agent对抗式写词"、"这首副歌帮我想几句"时使用,前提是字数骨架和这首歌写什么都已经有了;只有主题、还没定写什么时先用 lyric-concept-builder。拿一份字数骨架和意象系统,派三个 sonnet 子代理按不同路子并行独立起草(场景派 / 口语派 / 意象派),再派一个红队子代理逐句挑毛病,主 Agent 按句裁决拼稿,最后统一辙口与意象。收敛判据卡死:字数用 lyric-doctor 的脚本对模板数、每段同辙、hook 不含陈词、主歌二对主歌一有推进。不抄现有歌词,不替使用者决定这首歌要说什么。
category: songwriting/lyrics
version: 0.1.1
status: draft
priority: P1
compatible_agents:
- claude-code
- generic-llm-agent
display_name: 对抗式填词
outputs:
- chat
max_rounds: 30
suggest_hint: 有字数模板和主题了?用「对抗式填词」派几个 Agent 并行起草,挑句子拼一稿
---
# 对抗式填词 / Adversarial Lyric Writer
多个子代理并行独立起草,红队逐句挑,主 Agent 按句裁决。
**为什么要对抗**:一个模型写一稿,第二段一定是第一段的同义换词,副歌 A/B 一定重复。
让三个互不可见的子代理各写一稿,句子之间才有真正的差异可挑。
主 Agent 不起草句子:新句子只来自起草子代理,主 Agent 只做骨架、派活、裁决,
能动手的只有第 4 轮那种不改意思、不换句的统一化小改。一旦主 Agent 自己下场写,
它会不自觉地把三稿往自己那版上靠,对抗就塌了。
## 词在整首歌里的位置 / What lyrics actually do
写词不是写诗,每一条约束都对应旋律里的一件事:
| 词里的东西 | 对应曲里的什么 |
|---|---|
| 每行字数 | 小节里的节拍数。字多一个就得挤进半拍,唱起来赶 |
| 行内停顿 | 换气点,也是乐句的分句 |
| 韵脚 | 旋律回到主音的落点。同辙 = 听觉上"回来了" |
| hook | 副歌的记忆点,整首歌被记住的那一句 |
| 段落长短变化 | 编曲的动态:预副收紧、副歌铺开、桥段抽空 |
所以字数不是格式要求,是节奏本身。**改字数等于改旋律**,宁可换整句说法也不要多塞一个字。
**这个技能不产出**:旋律、和弦、编曲、demo 音频。它只产出词和词的自检信息。
## 何时使用 / When to use
- 已经有字数骨架(用户给的 `xxx` 模板,或 `lyric-structure-mapper` 生成的)
- 已经知道这首歌要说什么(用户说清楚了,或 `lyric-concept-builder` 定过)
- 想让一段副歌有几个不同方向的候选
**不适用于** / Not for:
- 还不知道这首歌在讲什么 → 先用 `lyric-concept-builder`,直接开写必出套话
- 只有一个模糊念头、连结构都没有 → 先用 `lyric-structure-mapper`
- 手上已有成稿只想改 → 用 `lyric-doctor`,那是定点修改,不重写
## 开工前必须齐的三样
缺任何一样就先补,别硬写:
1. **字数骨架** —— 每段每行几个字、停顿在哪、哪几行押韵
2. **这首歌在说什么** —— 不是"疗愈"这种效果词,是具体处境:谁、在什么状况下、发生了什么变化
3. **可用的素材** —— 真实的画面、物件、时间地点、一句真话。**一样都没有的话先问**,
没有素材的词只能靠形容词堆,那正是听起来像 AI 的原因
## 流程 / Process
### 第 1 轮:三个子代理并行起草
用 Agent 工具起三个子代理,`model: "sonnet"`,`run_in_background: false`,**同一条消息里一次发出**。
用 sonnet 而不是更强的模型,理由是这一轮要的是量和差异:三稿里大半的句子会被丢掉,
并行三份 sonnet 草稿比一份精雕细琢的稿子更有得挑。裁决和终稿一致性由主 Agent 负责。
三个子代理拿到**完全相同**的骨架、素材和黑名单,但路子不同:
| 代号 | 路子 | 硬约束 |
|---|---|---|
| A 场景派 | 只写能拍成镜头的东西 | 全稿禁止出现直接的情绪形容词(疲惫、温柔、勇敢…),情绪靠动作和物件带出来 |
| B 口语派 | 像在跟一个具体的人说话 | 允许不完整句、口语词、语气词;禁止书面语和成语 |
| C 意象派 | 一个母意象贯穿全篇 | 先定一个具体物件或场所,其余每一句都必须和它有关 |
给每个子代理的提示里必须包含:完整骨架(含每行字数与停顿)、这首歌在说什么、
可用素材、`_shared/craft-reference.md` 第 2 节的黑名单、以及它自己那条路子的硬约束。
**不要把对话历史整个塞给子代理**,也不要告诉它另外两个代理的存在 —— 知道了就会互相找平。
每个子代理返回:
```
完整初稿(按段落,每行后标 [字数])
本稿各段用的辙
我自己最不满意的三行,以及为什么
```
子代理自标的字数只作参考,字数以脚本为准。三稿收回后,主 Agent 把骨架存成 x 模板
(骨架只有表格时按每行字数和停顿写,4+5 写成 `xxxx xxxxx`),每稿去掉行尾的 [字数] 标注
(标注里的"字"也会被数进去)后存成文件,各跑一遍:
```bash
python3 ../lyric-doctor/scripts/lyric_check.py 稿1.txt --template 模板.txt
```
路径相对本 skill 目录,在仓库根下是 `skills/songwriting/lyric-doctor/scripts/lyric_check.py`。
段落名照骨架写,「主」和「主歌 1」脚本都对得上;报"模板里没有对应的段落"时先改段落名再跑。
### 第 2 轮:红队逐句挑
一个 sonnet 子代理,拿到三份稿子的正文和每稿的脚本结果(**不告诉它哪稿是谁写的**,也不给路子说明),
另给 `_shared/craft-reference.md` 第 1 节的十三辙表和"副歌用开口辙"那一条,rubric 里的开口辙、闭口音按它判。
按下面的 rubric 逐句过:
| 检查项 | 判据 |
|---|---|
| 字数 | 看脚本结果,不自己数:±1 以内算过;同段对应行必须同长 |
| 辙 | 每段是否同辙;副歌是否用了开口辙 |
| 陈词 | 命中黑名单几个;hook 里有没有 |
| 画面 | 这一行能不能拍成镜头;不能的比例多高 |
| 推进 | 主歌二相对主歌一,时间/地点/事件/视角至少变了一样吗 |
| 重复 | 副歌 A/B 是不是同义换词 |
| 倒装 | 有没有为了押韵扭曲语序 |
| 长音 | 行末字是不是闭口音 |
红队的输出是**问题清单**,不是第四稿:
```
[稿号-段落-行号] 问题类型:具体毛病。改法方向(不给成句)
```
**明确禁止红队重写整稿**。一旦它交出一份"我改好的版本",那份稿子会因为最新最完整而被默认采用,
三稿对抗的成果就白费了。
### 第 3 轮:主 Agent 按句裁决
主 Agent 自己做,不派子代理:
1. 逐行比较三稿的同位置句,挑最好的那一句;三稿都不行的行,标记为待补
2. 拼出一稿,此时它一定是拼贴感很重的
3. 待补的行,退回第 1 轮只针对这几行再派一次;主 Agent 不自己补写
裁决时的取舍顺序:**能拍成画面 > 不含陈词 > 有推进 > 押得顺 > 意思到位**。
意思到位排最后,因为三稿都是照同一个意思写的,意思本来就都到位。
### 第 4 轮:统一化
派一个 sonnet 子代理做终稿统一,任务只有四件,**不许改意思、不许换句**:
- 人称统一("你"和"我"不要混着来,除非是刻意的对话结构)
- 意象系统统一(拼贴后常出现厨房、海边、星空同时在场,删到只剩一个世界)
- 每段辙口统一(改动限制在行末字,不动整句)
- 口语程度统一(有的行文绉绉、有的行很口语,往口语那边靠)
### 第 5 轮:收敛判据
全过才能交付,任何一条不过就回到对应的轮次:
- [ ] 终稿照第 1 轮的方法跑 `lyric_check.py`,报"机械问题 0 处"(每行在骨架 ±1 内、停顿对得上、
没有对不上模板的段落);同段对应行同长,对照脚本打出的各行字数
- [ ] 每段落押同一个辙,副歌是开口辙
- [ ] hook 只有一句,全篇出现 ≥2 次,不含黑名单词
- [ ] 主歌二相对主歌一有可以指出来的推进
- [ ] 副歌 A/B 不是同义换词
- [ ] 全篇抽象情绪词 ≤5 个
- [ ] 出声读一遍,没有卡壳和拗口
## 没有这些工具时(降级)
流程里有两样东西不是每个运行时都有:Claude Code 的子代理(Agent 工具、`model: "sonnet"`),
和能执行 Python 跑 `lyric_check.py`。缺了就按下面换,并在输出里如实标注:
- **没有子代理**:能发互不共享上下文的独立调用(新会话、单独的模型请求)时,三个起草、一个红队
各用一次,每次只给该角色那份提示。做不到就在同一个上下文里按角色依次做:三稿一稿写完再写下一稿,
写每稿前只重读骨架、素材和本稿的路子,不回看前一稿;再换成红队出问题清单,最后裁决。
自检表加一行"流程 | 降级:各角色互相看得见",并告诉使用者三稿之间的差异会比并行时小。
- **能执行 Python、但找不到 `lyric_check.py`**:用下面的命令逐行数汉字,再对照模板,
自检表的字数一行标"降级计算":
```bash
python3 -c "import re,sys; [print(len(re.findall(r'[一-鿿]', l)), l.rstrip()) for l in open(sys.argv[1], encoding='utf-8') if l.strip()]" 终稿.txt
```
- **完全不能执行代码**:字数一行写"未验证",不用目测冒充"全部命中"。
## 输出格式 / Output
```markdown
## 歌词
主歌 1
<每行>
...
(各段照排)
## 自检
| 项 | 结果 |
|---|---|
| 字数(lyric_check.py) | 机械问题 0 处 / 第 X 段第 Y 行差 1 字(说明为什么留着) |
| 辙 | 主歌=言前 副歌=江阳 桥段=遥条 |
| hook | 「<那一句>」,出现 2 次 |
| 抽象情绪词 | 3 个:<列出来> |
## 备选句
<被否掉但还不错的句子,按位置列,供替换>
## 我妥协的地方
- <哪一行、为什么、有什么代价>
```
备选句这一段不要省。用户对某一行不满意时,有现成的候选比重跑一轮快得多。
## 边界 / Boundaries
- **不抄现有歌词**。用户说"要那首歌的感觉"时,学的是结构、辙口、句长节奏,
不是句子。任何情况下不得复述受版权保护的歌词原文。
- **不替使用者决定这首歌要说什么**。素材和立场是他的,缺了就问,不要自己编一段人生经历填进去。
- **不编造他的真实经历**。用户说"写我奶奶",那就问奶奶的具体事;
编一个"老屋门前的柿子树"出来,写得再好也是假的。
- **不为了押韵扭语序**。宁可这一行不押。
- **不把子代理的推理过程贴给用户**。他要的是词和候选句,不是三份完整草稿加一份评审报告。
- **不产出旋律和编曲建议**冒充完整作品。这个技能只管词。
## Token 控制 / Token discipline
- 三个起草代理必须在**同一条消息里并行发出**,串行等于三倍等待
- 给子代理的提示是自包含的短包(骨架 + 说什么 + 素材 + 黑名单 + 路子),不传对话历史
- 红队只拿三稿正文、每稿的脚本结果和第 1 节的辙表,不拿骨架说明和素材
- 主 Agent 不重贴三稿,只贴最终稿 + 备选句
- 第 4 轮统一化如果改动很少,主 Agent 自己做,别为了走流程再起一个子代理
## 变更记录 / Changelog
| 版本 | 日期 | 变更 | 类型 |
|---|---|---|---|
| 0.1.1 | 2026-09-26 | 字数改由 lyric-doctor 的 lyric_check.py 对模板数(三稿收回后和终稿各跑一次),不再靠子代理自报;红队拿脚本结果和开口辙定义;"主 Agent 不起草句子"与第 3、4 轮统一:待补行退回第 1 轮;补"没有这些工具时(降级)";description 删掉与 lyric-concept-builder 撞车的"我们在写一首关于X的歌",写明前提 | patch |
| 0.1.0 | 2026-08-11 | 初始草稿 | minor |
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.