Skip to content
cccskills
FreePublished on GitHub

adversarial-lyric-writer

当使用者说"帮我填词"、"按这个字数模板写歌词"、"用多Agent对抗式写词"、"这首副歌帮我想几句"时使用,前提是字数骨架和这首歌写什么都已经有了;只有主题、还没定写什么时先用 lyric-concept-builder。

拿一份字数骨架和意象系统,派三个 sonnet 子代理按不同路子并行独立起草(场景派 / 口语派 / 意象派),再派一个红队子代理逐句挑毛病,主 Agent 按句裁决拼稿,最后统一辙口与意象。收敛判据卡死:字数用 lyric-doctor 的脚本对模板数、每段同辙、hook 不含陈词、主歌二对主歌一有推进。

不抄现有歌词,不替使用者决定这首歌要说什么。

The English summary is being prepared. Showing the original description.

See how to install

Files included (1)

  • SKILL.md12.0 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

对抗式填词 / 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),每稿去掉行尾的 [字数] 标注 (标注里的"字"也会被数进去)后存成文件,各跑一遍:

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:用下面的命令逐行数汉字,再对照模板, 自检表的字数一行标"降级计算":

    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

## 歌词

主歌 1
<每行>
...

(各段照排)

## 自检

| 项 | 结果 |
|---|---|
| 字数(lyric_check.py) | 机械问题 0 处 / 第 X 段第 Y 行差 1 字(说明为什么留着) |
| 辙 | 主歌=言前 副歌=江阳 桥段=遥条 |
| hook | 「<那一句>」,出现 2 次 |
| 抽象情绪词 | 3 个:<列出来> |

## 备选句

<被否掉但还不错的句子,按位置列,供替换>

## 我妥协的地方

- <哪一行、为什么、有什么代价>

备选句这一段不要省。用户对某一行不满意时,有现成的候选比重跑一轮快得多。

边界 / Boundaries

  • 不抄现有歌词。用户说"要那首歌的感觉"时,学的是结构、辙口、句长节奏, 不是句子。任何情况下不得复述受版权保护的歌词原文。
  • 不替使用者决定这首歌要说什么。素材和立场是他的,缺了就问,不要自己编一段人生经历填进去。
  • 不编造他的真实经历。用户说"写我奶奶",那就问奶奶的具体事; 编一个"老屋门前的柿子树"出来,写得再好也是假的。
  • 不为了押韵扭语序。宁可这一行不押。
  • 不把子代理的推理过程贴给用户。他要的是词和候选句,不是三份完整草稿加一份评审报告。
  • 不产出旋律和编曲建议冒充完整作品。这个技能只管词。

Token 控制 / Token discipline

  • 三个起草代理必须在同一条消息里并行发出,串行等于三倍等待
  • 给子代理的提示是自包含的短包(骨架 + 说什么 + 素材 + 黑名单 + 路子),不传对话历史
  • 红队只拿三稿正文、每稿的脚本结果和第 1 节的辙表,不拿骨架说明和素材
  • 主 Agent 不重贴三稿,只贴最终稿 + 备选句
  • 第 4 轮统一化如果改动很少,主 Agent 自己做,别为了走流程再起一个子代理

变更记录 / Changelog

版本日期变更类型
0.1.12026-09-26字数改由 lyric-doctor 的 lyric_check.py 对模板数(三稿收回后和终稿各跑一次),不再靠子代理自报;红队拿脚本结果和开口辙定义;"主 Agent 不起草句子"与第 3、4 轮统一:待补行退回第 1 轮;补"没有这些工具时(降级)";description 删掉与 lyric-concept-builder 撞车的"我们在写一首关于X的歌",写明前提patch
0.1.02026-08-11初始草稿minor

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

当学生说"Common App 活动栏写不下"、"这段活动描述超字数了"、"帮我把这几条压到限制内"时使用。先按官方申请表核对当季字符限额,再逐条检查;一次把所有条目量完并直接给出压缩版,只在需要砍掉实质内容时才用选择题问该保哪部分。每改一版都用工具重新数一遍字符,绝不凭感觉说"这样应该够了"。只压缩,不代写空白。

The English summary is being prepared. Showing the original description.

ChromiteCr/Skills4Updated Oct 18, 2026

当学生说"我参加过一些活动但没整理过"、"帮我把经历录进去"、"我的活动档案是空的"时使用。让学生一口气把记得的活动说出来,直接把这段话拆成结构化的长期事项(角色、组织、起止时间、做了什么、结果、级别),说不清的字段留空标"待补"而不是编,再用一张选择题卡把级别判定与是否重复这类关键项一次问完,然后提案入库。只记录学生真正说出口的内容,级别按事实判定,绝不往高了写。

The English summary is being prepared. Showing the original description.

ChromiteCr/Skills4Updated Oct 18, 2026

当学生问"招生官会怎么看我的档案"、"我的背景还差什么"、"帮我评估一下现在的申请竞争力"时使用。以顶尖大学招生官的视角通读学生的档案、长期活动与已写下的反思,不问任何前置问题直接产出一份指名道姓的坦诚点评:这份材料的亮点、招生官真实的解读方式、明显的短板与空白、以及接下来最值得做的一到两件事。只读不写,不修改学生的任何数据,也不代写任何申请材料。

The English summary is being prepared. Showing the original description.

ChromiteCr/Skills4Updated Oct 18, 2026

当想知道一段 AI 回答"哪些能直接用、哪些必须先验证、哪些只能当建议"时使用。按声明类型分四级——低风险草稿材料、观点与策略建议、可查证的事实声明、会改变状态的可执行指令——每级配一句默认处置动作;再按影响半径排序,给出最小的下一步检查。可执行类一律标"不能直接执行;先做代码审阅/沙箱测试/回滚准备",其中破坏性或提权的命令排在最前。教的是一套可复用的复查习惯,不是替使用者把所有内容都核实一遍:本 skill 只分级、排序、定处置,要逐条核实走 ai-output-fact-checker,整段代码要做入库体检走 ai-code-onboarding-checklist。

The English summary is being prepared. Showing the original description.

ChromiteCr/Skills4Updated Oct 18, 2026

当拿到一段 AI 生成的代码,还没决定要不要信、要不要跑、要不要往上继续加东西时使用。先做一遍客观体检:行数与嵌套深度、有没有测试、有没有硬编码密钥或遗留 TODO、依赖是不是真实存在、有没有危险调用(eval/exec、shell=True、递归删除、反序列化、提权、外发网络,按正文给的 grep 模式逐类查);再给风险评级和下一步动作。老实写明它查不了算法正确性——体检通过不等于代码是对的。回答里文字、事实和代码混在一起时先用 ai-answer-triage 分级;只审相对已有代码的一份改动用 ai-diff-review-protocol。

The English summary is being prepared. Showing the original description.

ChromiteCr/Skills4Updated Oct 18, 2026

当 AI 改完代码、要决定这份 diff 放不放行时使用。不逐行精读,按四步走查高风险点——意图是否匹配、有没有碰到边界条件、副作用面有多大、能不能回滚——每步有明确的放过与打回判据。改动文件数、增删行数、动到的迁移/锁文件/CI/配置/鉴权/测试文件和危险 hunk 先由 scripts/diff_risk.py 统计(粘贴进来的 diff 文本也能读,不需要 Git),越过固定阈值时必须人工逐段过。只有口头描述、没有改动内容时不给结论,只列要补的材料。diff 里新写的测试可不可信交给 ai-generated-test-auditor;没有基线的整段新代码走 ai-code-onboarding-checklist。

The English summary is being prepared. Showing the original description.

ChromiteCr/Skills4Updated Oct 18, 2026

See all skills by ChromiteCr

Report a problem with this skill