style-extract
Installation
SKILL.md
风格提取
从文章中提取写作风格特征,建立和维护个人风格档案。
核心概念
风格不是抽象的"好"或"差",而是一组可量化、可复制的具体特征。这个技能做两件事:
- 分析入库:把一篇文章的风格拆解为具体维度,存入风格素材库
- 融合更新:从风格素材库中挑选特征,合成或更新主力风格档案
主力风格档案(my_style.json)是创作和润色技能实际调用的配方。风格素材库是长期积累的原材料。
数据目录
所有风格数据存放在 ./writing-workspace/styles/:
writing-workspace/styles/
├── my_style.json # 主力风格档案(创作/润色读取的那一份)
├── index.jsonl # 风格素材索引(JSONL 格式,每行一条 {id, source_title, author, analyzed_at})
└── entries/ # 每篇分析过的文章一条记录
└── sty_xxx.json
首次使用时自动创建目录结构。
模式判断
根据用户意图自动选择模式:
- 用户投喂文章说"分析风格""看看这篇文章的写法" → 模式 A:分析入库
- 用户说"吸收进来""更新我的风格""融合这几个" → 模式 B:融合更新
- 用户投喂自己的文章说"分析我的文风" → 模式 A,且标记
is_self: true
模式 A:分析入库
分析维度
逐一分析以下维度,每个维度用一句话概括特征:
语言维度:
| 维度 | 关注点 |
|---|---|
| vocabulary_level | 口语化 / 书面 / 混合?用词偏日常还是专业? |
| sentence_rhythm | 短句为主还是长句?节奏是急促还是舒缓? |
| favorite_expressions | 反复出现的口头禅、过渡语、语气词(提取 3-5 个) |
| punctuation_habits | 破折号多还是省略号多?逗号密度? |
| person_perspective | 第一人称 / 第二人称 / 第三人称?是否切换? |
| emotion_intensity | 冷静克制 / 中等 / 热烈煽情?态度鲜明还是温和? |
结构维度:
| 维度 | 关注点 |
|---|---|
| opening_pattern | 故事切入 / 提问切入 / 数据冲击 / 场景描写 / 直接亮观点? |
| paragraph_rhythm | 段落长短交替规律?关键句是否独立成段? |
| argument_logic | 归纳型(案例→观点)/ 演绎型(观点→论证)/ 并列型? |
| transition_style | 用连接词过渡 / 口语化过渡 / 直接跳转? |
| closing_pattern | 金句收尾 / 开放提问 / 行动号召 / 故事回环? |
| title_pattern | 反常识 / 数字型 / 痛点型 / 悬念型 / 直给型? |
提炼亮点
除了维度分析,额外提炼 2-3 个这篇文章最值得借鉴的具体技巧。不要泛泛而谈,要具体到"怎么做"。
好的亮点示例:
- "用连续三个反问句制造节奏感,然后用一句陈述句收住,形成'问问问→答'的冲击力"
- "每个大段落结尾都用一句独立成行的短句做总结,像钉钉子一样把观点钉住"
执行流程
- 确保
./writing-workspace/styles/目录存在,不存在则创建(含entries/子目录) - 如果
index.jsonl不存在,创建空文件 - 通读全文,理解整体风格基调
- 逐一分析 12 个维度,每个维度一句话概括
- 提炼 2-3 个最值得借鉴的具体技巧
- 生成风格素材条目 JSON,ID 格式:
sty_YYYYMMDD_NNN。NNN 确定方式:取index.jsonl最后一行的 ID 序号,再列出entries/目录下当日已有的sty_YYYYMMDD_*.json文件,以两者中较大的序号 +1 作为起始编号。 如果索引为空且当日无已有文件,才从 001 开始。 - 写入
styles/entries/{id}.json - 立即更新
styles/index.jsonl——在文件末尾追加一行 JSON{id, source_title, author, analyzed_at}。这一步不能跳过,索引是其他技能检索的入口。 - 向用户展示分析结果(用可读的格式,不是 raw JSON)
- 询问用户:"要把其中某些特征吸收到主力风格里吗?"
风格素材 JSON 结构
{
"id": "sty_20260327_001",
"source": {
"title": "原文标题",
"author": "作者",
"url": "来源链接(如有)",
"is_self": false
},
"language": {
"vocabulary_level": "",
"sentence_rhythm": "",
"favorite_expressions": [],
"punctuation_habits": "",
"person_perspective": "",
"emotion_intensity": ""
},
"structure": {
"opening_pattern": "",
"paragraph_rhythm": "",
"argument_logic": "",
"transition_style": "",
"closing_pattern": "",
"title_pattern": ""
},
"highlights": "2-3 个具体技巧的自然语言描述",
"analyzed_at": "ISO 8601 时间戳"
}
注意事项
- 如果只给了一篇文章,分析完后提醒用户:"一篇文章的风格分析可能不够全面,建议提供 3-5 篇同作者/同风格的文章以获得更准确的特征提取。"
- 分析时重点关注"人味"特征——那些让这篇文章读起来不像 AI 写的元素。这些特征在后续创作和润色中特别有价值。
- 写入 JSON 时必须正确转义特殊字符:
highlights、overall_tone、anti_ai_notes、favorite_expressions等文本字段中的双引号"必须转义为\",反斜杠\转义为\\,换行符转义为\n。使用 Write 工具写入 JSON 时,确保字符串值中不包含未转义的双引号。
模式 B:融合/更新主力风格
执行流程
- 读取当前主力风格档案
styles/my_style.json- 如果不存在,进入初始化流程(见下方)
- 读取用户指定的风格素材(可以是刚分析完的,也可以是 entries/ 里已有的)
- 逐维度对比当前主力风格 vs 新素材的特征差异
- 对每个有差异的维度,向用户展示对比并询问:
- "你当前的
opening_pattern是'故事切入',这篇文章用的是'数据冲击'。要替换、保留、还是两者兼收?"
- "你当前的
- 按用户选择更新
my_style.json:version加 1last_updated更新为当前时间trait_sources记录每个特征的来源(哪个风格素材条目)
- 展示更新后的主力风格摘要
主力风格初始化
当 my_style.json 不存在时:
情况 1:用户投喂了自己的文章
- 分析完直接将结果作为主力风格的初始版本
- version 设为 1,trait_sources 全部标记为"自己的文章"
情况 2:用户投喂了别人的文章
- 分析完后引导用户挑选想要的特征
- 组装成第一版主力风格
主力风格 JSON 结构
{
"name": "我的主力风格",
"version": 1,
"last_updated": "ISO 8601 时间戳",
"language": {
"vocabulary_level": "",
"sentence_rhythm": "",
"favorite_expressions": [],
"punctuation_habits": "",
"person_perspective": "",
"emotion_intensity": "",
"forbidden_words": ["值得注意的是", "总而言之", "综上所述", "让我们", "在当今社会"]
},
"structure": {
"opening_pattern": "",
"paragraph_rhythm": "",
"argument_logic": "",
"transition_style": "",
"closing_pattern": "",
"title_pattern": ""
},
"overall_tone": "一段自然语言描述整体风格基调",
"anti_ai_notes": "避免排比句、避免'首先其次最后'的机械结构、避免每段都差不多长...",
"trait_sources": {
"opening_pattern": "来自 sty_xxx",
"sentence_rhythm": "自己的文章"
}
}
forbidden_words 初始包含常见 AI 用语,用户可以随时补充。创作和润色技能会读取这个列表。
输出格式
分析结果用可读的中文呈现,不要直接输出 JSON。示例格式:
## 风格分析报告
**来源:** 《文章标题》 by 作者
### 语言特征
- **词汇风格:** 口语化为主,偶尔蹦出书面用语制造反差
- **句式节奏:** 短句密集,长句用来收尾,形成"碎碎碎——收"的节奏
- **常用表达:** "说白了""你想想看""本质上就是"
- ...
### 结构特征
- **开头方式:** 故事切入——用一个具体场景把读者拉进来
- ...
### 最值得借鉴的技巧
1. ...
2. ...
---
风格素材已保存为 sty_20260327_001
要把其中某些特征吸收到你的主力风格里吗?