material-ingest
Installation
SKILL.md
素材拆解入库
从文章中提取可独立复用的素材,分类标注后存入素材库。
核心理念
好的写作需要素材积累。这个技能把"读到一篇好文章"变成"素材库里多了几条可以用的东西"。
拆解的关键原则:以"能独立引用"为粒度标准。一条素材脱离原文上下文后,读者依然能理解它在说什么。如果一段话必须配合前后文才看得懂,那它不适合作为独立素材。
数据目录
所有素材存放在 ./writing-workspace/materials/:
writing-workspace/materials/
├── index.json # 素材索引 [{id, summary, tags, type, source_title}]
├── index.md # 人类可读索引
└── entries/ # 每条素材一个 JSON 文件
└── mat_xxx.json
首次使用时自动创建目录结构。
模式判断
根据用户措辞判断来源类型:
- 用户说"这是我写的""拆一下我的文章""分析下我这篇" → 自写模式(
is_self: true) - 其他情况 → 外部来源模式(
is_self: false)
两种模式的基本拆解逻辑相同,自写模式有额外步骤。
拆解逻辑
第一步:通读理解
先通读全文,理解:
- 文章的核心主题是什么
- 作者的论证结构(先说什么后说什么,为什么这么安排)
- 哪些是作者的原创观点,哪些是引用的
第二步:按语义单元拆解
不按段落机械切割,而是按"观点/论据"语义单元拆解:
| 遇到这种内容 | 拆解为 |
|---|---|
| 一个完整的观点或论断 | 一条 viewpoint 素材 |
| 支撑观点的数据/统计 | 一条 data 素材 |
| 具体案例或故事 | 一条 case 素材 |
| 值得直接引用的精彩句子 | 一条 quote 素材 |
| 生动的类比或比喻 | 一条 analogy 素材 |
| 可操作的方法论或框架 | 一条 method 素材 |
一篇文章通常拆出 3-10 条素材。太少说明文章信息密度低或拆解不够细,太多说明粒度太细了。
第三步:标注元信息
为每条素材标注:
- tags:2-5 个标签。标注前先读取现有
index.json,参考已有标签避免同义重复(比如已有"创业"就不要再用"初创")。如果素材库为空,自由标注。 - sentiment:
positive(正面肯定)/negative(批判否定)/neutral(中性陈述)/provocative(挑衅引发思考) - reusability:
high(几乎可以直接用)/medium(需要适配语境)/low(参考价值为主)
第四步(自写模式额外步骤)
如果是用户自己写的文章,额外做:
- 标记精彩表达:找出写得特别好的句子或段落,type 标记为
my_expression。这些是用户自己的语言积累,日后创作时优先复用。 - 标记可深挖观点:找出有潜力但没展开的论点,增加
"potential": "expandable"字段。这些是未来选题的种子。 - 关联现有素材:如果素材库已有内容,指出这篇文章用到了哪些已有素材的观点,以及还有哪些相关素材没用上。
执行流程
- 确保
./writing-workspace/materials/目录存在,不存在则创建(含entries/子目录) - 如果
index.json不存在,创建空数组[];如果index.md不存在,创建带标题的空文件 - 读取现有
index.json,了解已有标签和素材(用于去重和标签一致性) - 通读全文,理解主题和结构
- 按语义单元拆解,每个单元生成一条素材
- 为每条素材标注类型、标签、情绪、可复用程度
- 如果是自写模式,执行额外步骤
- 素材 ID 格式:
mat_YYYYMMDD_NNN(NNN 为当日序号,从现有索引中推算) - 将每条素材写入
materials/entries/{id}.json - 立即更新
materials/index.json——读取当前数组,追加每条新素材的摘要{id, summary, tags, type, source_title, reusability},写回文件。索引是检索的入口,这一步不能跳过。 - 立即更新
materials/index.md——按日期倒序追加新条目。格式见下方"index.md 格式"小节。 - 向用户展示入库报告
素材条目 JSON 结构
{
"id": "mat_20260327_001",
"source": {
"title": "原文标题",
"author": "作者",
"url": "来源链接(如有)",
"date": "发布日期(如有)",
"is_self": false
},
"content": "提取的核心内容原文(保留原始措辞)",
"summary": "一句话摘要(15-30字)",
"type": "viewpoint",
"tags": ["AI", "创业"],
"sentiment": "positive",
"reusability": "high",
"potential": null,
"created_at": "ISO 8601 时间戳"
}
自写模式下 type 可以是 my_expression,potential 可以是 "expandable"。
索引条目结构
index.json 中每条记录只保留摘要信息,用于快速检索:
{
"id": "mat_20260327_001",
"summary": "一句话摘要",
"tags": ["AI", "创业"],
"type": "viewpoint",
"source_title": "原文标题",
"reusability": "high"
}
index.md 格式
# 素材库索引
## 2026-03-27
- **mat_20260327_001** [viewpoint] AI Agent 的核心价值不在于替代人,而在于扩展人的能力边界 `#AI` `#认知` — 来自《xxx》
- **mat_20260327_002** [case] ...
按日期倒序排列,最新的在最上面。
输出格式
入库完成后,向用户展示入库报告:
## 素材入库报告
**来源:** 《文章标题》 by 作者
**提取素材:** 6 条
| # | 类型 | 摘要 | 标签 | 复用度 |
|---|------|------|------|--------|
| 1 | viewpoint | AI Agent 的核心价值在于... | AI, 认知 | high |
| 2 | case | Anthropic 的 Claude 从对话工具到... | AI, 产品 | medium |
| 3 | quote | "最好的工具是让你忘记工具本身的存在" | 产品, 设计 | high |
| ... | | | | |
素材已保存到 writing-workspace/materials/entries/
自写模式额外展示:
### 精彩表达(值得沉淀)
- mat_20260327_004 [my_expression]: "技术债不是欠别人的钱,是欠未来的自己一个交代"
### 可深挖观点
- mat_20260327_002 [expandable]: 关于 AI 产品化的观点还可以继续展开,素材库里有这些相关素材可参考:
- mat_20260320_003: ...
- mat_20260315_007: ...
注意事项
content字段保留原文措辞,不要改写。素材的价值在于保留原始表达,改写是创作技能的工作。- 如果文章过短(<200 字)或信息密度很低,直接告诉用户"这篇文章信息量较少,建议整篇保留作为参考而非拆解素材"。
- 每条素材的
summary要能独立理解,不依赖原文上下文。