Paper → Survey Vault
把 Zotero 提取的论文 .text 文件转换为 Obsidian 知识库笔记。支持两种产出模式:
| 模式 | 用途 | 文件名后缀 |
|------|------|------------|
| 快速摘要 (~1000 字) | 知识库索引、回顾入口 | <Title>.md |
| 完整 Markdown | 深入阅读、引用骨架 | <Title> - Full.md |
两种模式互补,可以独立调用或顺序进行(先摘要,再追加全文)。
触发条件
用户提供 /Users/zhaoliang/Zotero/storage/<ID>/<n>.text 路径并要求:
- "总结这篇文章"、"写一千字摘要"、"中文摘要"
- "整理成 Markdown"、"全文转 Markdown"、"convert to markdown"
- "summarize this paper"、"做成 vault 笔记"
如果用户也指出目标目录(例如 pages/),按指示走;否则按本 skill 的默认 pages/ 走。
Phase 1: 读取与预处理
已知坑 #1:CR 换行符。Zotero 的 .text 经常用旧 Mac CR 换行符,wc -l 会显示 0 行,Read 工具会因 "very long lines" 失败。
file /Users/zhaoliang/Zotero/storage/<ID>/<n>.text
# 若结果含 "with CR line terminators":
tr '\r' '\n' < /Users/zhaoliang/Zotero/storage/<ID>/<n>.text > /tmp/zotero_lf.txt
wc -l /tmp/zotero_lf.txt
之后用 Read 工具按 offset / limit 分段读 /tmp/zotero_lf.txt,每次 ≤200 行(约 25K tokens 上限)。可以并行 Read 多段加速。
Phase 2: 快速摘要(默认)
通读结构
按顺序识别:abstract、sections(编号 ^\d+\s+ 或 ^\d+\.\d+)、tables / figures(Table X. / Fig. X.)、references(通常在末尾,^\[\d+\] 起头)、conclusion。
撰写中文摘要(~1000 字)
固定覆盖:
- 论文基本信息:标题、作者机构、年份、venue、页数
- 核心问题与定义(如果作者给出了定义,直接引用)
- 主要方法 / 分类法 / 贡献(保留分类标签的精确名称,如 "MAESTRO"、"ATFAA")
- 关键发现或权衡(用 加粗 标出核心术语)
- 结论与未来研究方向
写作风格:段落 + 加粗子标题 而不是大量 bullets,便于回顾时扫读。
专有名词标注规则:被翻译成中文的技术术语,在首次出现时用全角括号补上英文原文,形如 中文术语(English Term)。例如 "双用途困境(dual-use dilemma)"、"四层模型(Four-Layer Model)"、"涌现共谋(emergent collusion)"。
- 后续出现不重复标注
- 已是英文/缩写的不动:LLM、SOC、API、NIST、Agentic AI、框架名 ATFAA/MAESTRO/OWASP 等
- 用全角括号
()而非半角()以符合中文排版
询问保存方式
用 AskUserQuestion 一次性问保存位置 + 标签:
Q1: 保存到哪里?
- pages/<Title>.md (推荐)
- research/<Title>.md
- 不保存,仅显示
Q2: 用哪个标签?
- 从 CLAUDE.md 现有标签列表选一个 (machine-learning / research-note / programming / reference)
- 新建跨学科标签 (如 ai-cybersecurity)
已知坑 #2:CLAUDE.md 的标签体系是按单一学科分的(research-note 仅指 NDN/ICN/SDN 网络研究)。AI × 安全、ML × 系统等交叉论文不要硬塞进现有标签——直接新建标签更合理。如果新建了,记得保存到项目 memory。
Phase 3: 写入 Vault
Frontmatter 规范
参考 /Users/zhaoliang/LocalDocuments/vaults/survey-vault/CLAUDE.md:
---
aliases: ["<英文长标题>", "<短引用如 Lazer 2026>"]
created: YYYY/MM/DD, HH:MM:SS
modified: YYYY/MM/DD, HH:MM:SS
tags:
- <分类标签>
title: "<英文长标题或主题>"
---
已知坑 #3:用户经常在保存后手动调整 frontmatter(改 title 为完整英文长标题、加 aliases)。如果看到 PostToolUse hook 提示文件被修改,沿用最新版本,不要回滚。
文件命名
按 CLAUDE.md "有明确主题的文件" 规则用描述性英文:
- 好:
Agentic AI Cybersecurity Survey.md - 差:
20260516 paper.md(无主题信息)
正文骨架(快速摘要模式)
# <Title>
**Authors:** ...
**Year / Venue:** ...
**Source PDF:** [[<PDF wiki-link>]]
> [!abstract]
> <1000 字中文摘要>
## 来源
`/Users/zhaoliang/Zotero/storage/<ID>/<n>.text`
Phase 4: 完整 Markdown 整理(按需)
用户请求 "全部整理"、"全文 Markdown"、"convert full paper" 时进入此阶段。
询问三个关键选项
用 AskUserQuestion 一次性问:
Q1: 保存位置?
- pages/<Title> - Full.md (推荐,与摘要文件并存)
- research/
- 覆盖现有摘要文件
Q2: 参考文献(通常 100-200 条)怎么处理?
- 全部保留并格式化
- 只保留正文中高频引用(10-20 条,推荐)
- 完全去掉
Q3: 表格怎么处理?
- 重建为 Markdown 表(推荐,但 PDF 提取的表常碎片化)
- 仅保留表标题与表说明(最稳妥)
- 仅保留表名
统计高频引用
正文中的 [N] 引用频次能反映核心参考:
# 假设 references 段从第 530 行开始
awk 'NR<=530' /tmp/zotero_lf.txt \
| grep -oE '\[[0-9]+(, *[0-9]+)*\]' \
| tr -d '[]' | tr ',' '\n' | tr -d ' ' \
| sort | uniq -c | sort -rn | head -20
取频次 ≥6 的 ID 作为 selected references(具体阈值按论文调整)。
提取对应 References 条目
awk 'NR>=531' /tmp/zotero_lf.txt \
| grep -E '^\[(15|23|24|27|37|41|60|61|76|85|97|115|118|122|164|165|187)\]'
已知坑 #4:有的 [N] 条目在前一条的同一行末尾(PDF 排版导致),grep 起点要精确,必要时用 grep -n '<id>' 全文反查。
结构化 Markdown 模板
---
aliases: ["<长标题>", "<短引用 Full>"]
created: <ts>
modified: <ts>
tags: [<标签>]
title: "<长标题>"
---
# <Title>
**Authors:** ...
**Year / Venue:** ...
**Source PDF:** [[<PDF>]]
**Short summary:** [[<短摘要笔记>]]
> [!abstract]
> <原文 abstract 翻译>
---
## 1. Introduction
<原文 Section 1 中文整理,保留 [N] 引用编号>
---
## 2. Related Work
...
> **Table 1.** <表名> — *<表说明,仅保留标题与说明>*
---
## 3. <Section>
### 3.1 <Subsection>
**3.1.1 <Subsub>.** <段落整理>
> **Fig. X.** <图说明>
---
## ... 各章节 ...
### Key Takeaways from Section N
- ...
---
## Selected References
> 仅保留正文中高频引用(按频次排序)。完整 ~N 条参考请见原 PDF。
- **[118]** <Author>. <Year>. *<Title>*. <URL>(引用 15×)
- ...
---
## 来源
- **原始 PDF**:`/Users/zhaoliang/Zotero/storage/<ID>/<n>.text`
- **DOI**: ...
章节排版细节
- 一级章节用
## N. Title - 子节用
### N.M Title - 子子节用加粗段首
**N.M.K Topic.**(沿用论文风格) - Figure / Table 用 blockquote
> **Fig. X.** ... - 对话片段(如红蓝队 Round 1/2)用 blockquote 保持原话
- Key Takeaways 用 bullet list
Phase 5: 关联与记忆
两个文件互链
- 短摘要的 frontmatter 加:
Full version: [[<Title> - Full]] - 全文的 frontmatter 加:
Short summary: [[<Title>]]
新标签 / 新约定 → 项目 memory
如果引入了 CLAUDE.md 之外的新标签(如 ai-cybersecurity),在
/Users/zhaoliang/.claude/projects/-Users-zhaoliang-LocalDocuments-vaults-survey-vault/memory/
写一条 project 类型 memory,并在 MEMORY.md 索引中加一行。
已知坑速查
| # | 问题 | 解决 |
|---|------|------|
| 1 | .text 是 CR 换行,Read 失败 | tr '\r' '\n' 转换到 /tmp/zotero_lf.txt |
| 2 | 跨学科论文不匹配现有标签 | 询问用户后新建标签,保存到 memory |
| 3 | 用户手动调过 frontmatter | PostToolUse hook 提示后沿用最新版,不回滚 |
| 4 | References 条目跨行([N] 在前条尾部) | 用 grep -n 全文反查精确行 |
| 5 | PDF 表格被 OCR 切碎 | 默认仅保留标题 + 说明,不要强行重建 |
| 6 | 文件 >25K tokens | 分段 Read(每次 ≤200 行);可以并行多个 Read |
| 7 | 大段写入会触发 vault formatter (PostToolUse hook) | 正常,写完看新版即可 |
触发示例
- 「
/Users/zhaoliang/Zotero/storage/MEGP42RJ/1.text总结这篇文章,写一千字中文摘要」→ Phase 1-3 - 「再把刚才那篇全部整理成 Markdown」→ Phase 4-5
- 「这篇论文做成 vault 笔记 + 全文整理」→ Phase 1-5 顺序执行
不要做的事
- 不要给空文件或仅含 frontmatter 的笔记加
Related: [[X]]链接 - 不要修改用户调整过的
aliases/title - 不要把 PDF 提取错乱的表格"猜着重建"——宁可保留标题与说明
- 不要为了凑字数把摘要写到 2000 字,1000 字左右就是最佳
- 不要默认保存——总是先问保存位置