en un clic
paper-deep-reader
精读文献。快速泛读请用paper-quick-read。
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Menu
精读文献。快速泛读请用paper-quick-read。
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Basé sur la classification professionnelle SOC
| name | paper-deep-reader |
| description | 精读文献。快速泛读请用paper-quick-read。 |
| version | 1.1.0 |
| author | Zhaohong Liu |
| tags | ["zotero","obsidian","paper-analysis","deep-reading"] |
定位:本 skill 实现深度论文精读——main agent 全局理解 + 6 个 subagent 并行分析 + Zotero/Obsidian 知识库横向对比 + Obsidian vault 结构化输出。如需快速泛读(单轮摘要),请使用
paper-quick-read。
semantic_search + Obsidian search_notes + 可选 embedding 语义搜索[[wikilinks]] + frontmatter所有 API key 统一在 stable-jarvis/.env 中管理:
cp .env.example .env # 然后编辑 .env 填入真实 key
stable_jarvis 包统一加载 .env 配置。
| 变量 | 说明 |
|---|---|
EMBEDDING_PROVIDER | embedding 提供商(qwen/openai/local) |
EMBEDDING_MODEL | embedding 模型名 |
其他依赖:
zotero-mcp 已启动obsidian MCP 已配置本 skill 的 Python 脚本位于 scripts/ 子目录(相对于 skill 安装目录)。执行时请 cd 到 skill 目录或以绝对路径调用。
本 skill 使用可扩展的领域专用 prompt 体系。Prompt 文件位于 prompts/ 目录:
prompts/
├── categories.toml # 领域注册表(名称、描述、关键词、persona)
├── default/ # 通用学术 prompt(兜底,4 tasks)
│ ├── system.md # 系统提示(persona + 写作要求)
│ ├── task-1.md # 研究问题与背景
│ ├── task-2.md # 核心方法与框架
│ ├── task-3.md # 实证分析与相关工作
│ ├── task-4.md # 局限性与批判性评价
│ └── report-template.md # 报告结构建议
├── ai-ml/ # AI/机器学习专用 prompt(5 tasks)
│ ├── task-1.md # 研究问题与动机
│ ├── task-2.md # 方法与算法设计
│ ├── task-3.md # 相关工作与KB交叉分析
│ ├── task-4.md # 实验与消融分析
│ ├── task-5.md # 局限性与个人启发
│ └── ... (system.md + report-template.md)
└── rl/ # RL/强化学习专用 prompt(6 tasks)
├── task-1.md # Introduction & Related Work
├── task-2.md # Algorithm & Architecture(含Mermaid)
├── task-3.md # Formula Derivation & Theorems
├── task-4.md # Literature Cross-Analysis(KB注入)
├── task-5.md # Experiments & Results
├── task-6.md # Weaknesses & Inspiration
└── ... (system.md + report-template.md)
添加新领域:在 categories.toml 中注册,然后在 prompts/ 下创建同名目录,放入 system.md、task-N.md(数量自定)、report-template.md 即可。无需修改任何代码。
严格按以下阶段顺序执行。
通过 Zotero MCP 定位论文并获取必要信息。
步骤:
zotero-mcp 的 search_library 找到论文item_key(父条目)、PDF attachment keyget_item_details 获取完整元数据(标题、作者、abstract、published date、arxiv ID)temp/deep-reader/meta.json:
item_key — Zotero 父条目 keyattachment_key — PDF attachment keytitle — 论文标题abstract — 摘要authors — 作者列表published — 发表日期arxiv_id — arXiv IDcategories — 领域分类根据阶段 1 获取的论文标题和摘要,匹配合适的领域专用 prompt。
步骤:
prompts/categories.toml,了解所有可用领域(名称、描述、关键词)ai-ml),记录为 PROMPT_SETPROMPT_SET=default无需脚本——直接根据 categories.toml 中的描述和关键词判断即可。
判断策略:
提取脚本(默认输出 Markdown,保留标题、LaTeX 公式、表格等结构信息):
python scripts/extract_pdf_text.py --pdf <pdf_path> --output temp/deep-reader/paper.md
如需纯文本:
python scripts/extract_pdf_text.py --pdf <pdf_path> --output temp/deep-reader/paper.txt --plain
长论文处理:主 agent 自行分块摘要后派发 subagent,无需外部脚本。
两路独立搜索,不做去重/过滤/截断——subagent 有能力自行判断相关性。中间文件放 temp/deep-reader/。
4a — Zotero 语义检索
调用 zotero-mcp 的 semantic_search,query = {title}\n{abstract},topK=10,minScore=0.3。
格式化为 {title, text(abstract), published, source="zotero"},保存为 temp/deep-reader/zotero_kb.json。
4b — Obsidian 语义搜索
直接复用 obsidian-semantic-search skill 的向量库(共享 temp/obsidian/embeddings.json)。
索引管理遵循 obsidian-semantic-search SKILL.md 的判断逻辑:
# 检查索引状态
python skills/obsidian-semantic-search/scripts/build_index.py --stats
# 按需增量更新或 --force 重建
python skills/obsidian-semantic-search/scripts/build_index.py
搜索:
python skills/obsidian-semantic-search/scripts/search.py \
"{title}\n{abstract}" --top-k 10 > temp/deep-reader/obsidian_kb.json
格式化为 {title, text, path, source="obsidian-embed"}。
两路结果直接交给 Phase 5,由文献交叉分析 subagent 自行判断哪些论文真正相关、标题相似的做去重——不做预过滤或预截断。
在撰写 global-understanding.md 之前,主 agent 必须基于 Phase 4 的 KB 搜索结果,系统性地搜索 Obsidian vault 中与论文相关的笔记,整理候选分析方向供用户选择。
4.5a — 搜索知识库中的相关笔记
search_notes 逐个搜索,找出 vault 中已有的笔记4.5b — 呈现候选方向供用户选择
方向列表格式:每个方向包含「主题名称」「涉及的知识库笔记」「建议的对比角度/问题」。按方法级粒度组织,每个方向是一个具体的方法论对比点。
使用 AskUserQuestion 呈现(multiSelect: true):
4.5c — 将选择结果写入 global-understanding.md
用户选择的方向写入 global-understanding.md 的「重点分析方向」部分。未选中的方向可以简要提及但不做重点展开。
无需外部脚本。Main agent 驱动整个分析流程。
前置条件:temp/deep-reader/ 下已准备好论文全文(.md 或 .txt)、meta.json、zotero_kb.json、obsidian_kb.json。
若论文过长(超过约 24,000 字符),主 agent 自行分块摘要后再派发——无需外部脚本。
5a — Main agent 形成全局认知
Main agent 读取以下内容,形成对论文的整体理解:
zotero_kb.json 和 obsidian_kb.json)prompts/{PROMPT_SET}/ 下所有 task-*.md 作为 subagent 任务参考模板prompts/{PROMPT_SET}/report-template.md 了解最终报告结构Main agent 识别论文特定的关注点——亮点、弱点、需要重点验证的声明、与 KB 论文的关键差异等。
5a 必须产出:写入 temp/deep-reader/global-understanding.md,作为所有 subagent 的共享前置阅读材料。内容必须包含:
| 内容 | 说明 |
|---|---|
| 论文概要 | 一句话贡献 + 核心方法 + 主要结果 |
| 复杂度评估 | 简单(单点创新,如 BPPO)/ 中等(2-3 个组件)/ 复杂(系统级论文,如 LWD) |
| 重点分析方向 | 3-5 个最值得深挖的点(引导各 task 聚焦) |
| 技术继承关系 | 每个核心组件的明确前驱工作(如 "扩散+PG: DPPO / OPE-gated 迭代: Uni-O4 / Consistency 蒸馏: Song et al. 2023")。此条目专门防止 subagent 将方法归属张冠李戴 |
| Task 边界表 | 每个 task 的独占内容范围 + 禁止涉及的内容(防止跨 task 重叠)+ 篇幅预算(按复杂度:简单 50-70 行 / 中等 80-120 行 / 复杂 120-180 行) |
| 跨 task 注意事项 | 已知可能重叠的区域(如 "DIVL 的核心机制由 Task 2 负责架构描述、Task 3 负责公式推导,两者不得交叉展开") |
5a 额外产出:写入 temp/deep-reader/note-mapping.md,作为所有 subagent 的共享 wikilink 参考表。格式:
| 方法/论文名 | Obsidian 笔记路径 | Wikilink | 一句话贡献(核心差异锚点) | 备注 |
|---|---|---|---|---|
| IQL | IQL Summary 中文版 | `[[IQL Summary 中文版 | IQL]]` | 隐式 Q-Learning:expectile regression 避免 OOD action 查询 |
| DPPO | Diffusion Policy Policy Optimization | `[[Diffusion Policy Policy Optimization | DPPO]]` | 首次将 policy gradient 应用于扩散去噪过程 |
| Uni-O4 | Uni-O4 Summary | `[[Uni-O4 Unifying Online and Offline Deep Reinforcement Learning | Uni-O4]]` | OPE-gated PPO 统一离线/在线 RL(高斯策略,非扩散) |
它明确每个前驱工作具体做了什么,防止 subagent 因方法名相似或作者相同而混淆归属。
主 agent 不需要穷举——subagent 后续可以自己通过 Obsidian search 补充。此文件确保报告中涉及的论文/方法在 vault 中有笔记时使用 [[wikilink]] 而非纯文本引用。
5b — Main agent 定制 subagent 任务
task-*.md 文件的数量决定了 subagent 数量(rl=6, ai-ml=5, default=4)。每个 task 定义一个 subagent 的职责范围。
5b-1:划分 task 边界。 在编写指令之前,主 agent 必须对照 report-template.md 的章节结构,明确划分每个 task 的独占内容范围、禁止涉及的内容、以及篇幅预算。这些边界写入 global-understanding.md 的 Task 边界表。此步骤是防止跨 task 冗余的关键——没有边界,每个 subagent 会趋向于写一篇完整报告。
针对每个 task-N.md,main agent 编写定制指令,包含:
| 要素 | 说明 |
|---|---|
| Task 目标 | 参考 task-N.md 的分析框架和输出要求,尽量按照要求 |
| 论文特定关注点 | 如 "重点审查 pre-sampling phase 消融实验是否支撑方法声称" |
| 相关论文段落 | 与该 task 最相关的论文章节或关键段落 |
| KB context | 仅文献交叉分析 task 注入(如 rl task-4、ai-ml task-3)。将 zotero_kb.json 和 obsidian_kb.json 的全部内容交给 subagent,由 subagent 自行判断相关性和去重 |
| 输出格式 | Markdown,参考 task-N.md 的最低字数要求。所有数学公式必须使用 LaTeX 格式:行内公式用 $...$,独立公式用 $$...$$,不得使用 ( ) 或 [ ]。要求 subagent 使用 ## 作为最高层级标题(不使用 #),并明确告知其产出将嵌入报告模板的哪个章节位置(如 "你的产出将嵌入 ## 1. 研究问题与动机 下"),以便 subagent 理解自身内容在整体报告中的定位 |
| 嵌入位置 | 告知 subagent 其产出将被嵌入报告模板的哪个章节(如 ## 1. 研究问题与动机、### 2.1 算法与架构)。这帮助 subagent 理解内容定位,也为主 agent 后续组装时的标题降级提供依据 |
| 篇幅预算 | 根据 5a 的复杂度评估,为当前 task 分配预期行数范围(简单 50-70 / 中等 80-120 / 复杂 120-180)。同时告知 subagent 哪些主题由其他 task 负责,不得越界 |
| Obsidian 参考 | 告知 subagent 读取 note-mapping.md 获取已有 wikilink 映射。subagent 有权使用 Obsidian MCP 的 search_notes 工具自行查找 vault 中是否有对应笔记。报告中凡 vault 有笔记的方法/论文,使用 [[wikilink]] 替代纯文本引用 |
task-N.md 是模板参考——main agent 应根据具体论文调整指令,不要原文照抄。例如:若论文消融实验薄弱,应在实验分析 task 的指令中明确要求 subagent 指出这一点。
5c — 并行 spawn subagent
使用 Agent 工具并行 spawn 所有 subagent(数量 = task-*.md 文件数)。所有 subagent:
temp/deep-reader/global-understanding.md,了解:(a) 论文全局判断,(b) 自己的 task 边界和禁止范围,(c) 篇幅预算。global-understanding.md 已写入且内容完整(包含所有 task 的边界表)。search_notes, read_note 等),可以在分析过程中主动查找和链接知识库笔记。5d — 第一次组装(纯拼接 + 重整标题层级)
Main agent 收集全部 task-subagent 的原始产出后,按 report-template.md 的结构进行组装:
步骤 1:重整标题层级。 Subagent 产出的标题层级可能与报告模板不匹配(如使用 # 顶级标题、层级跳跃、嵌套深度不当等)。主 agent 必须逐节审查各 subagent 产出的标题,将其调整到与嵌入位置匹配的正确层级:
report-template.md,明确每个 task 产出嵌入的父级标题级别(如 ## 1. 研究问题与动机 → 父级为 h2;### 2.1 算法与架构 → 父级为 h3)# 顶级标题(与论文标题冲突);同级内容使用同级别标题;不出现层级跳跃步骤 2:章节顺序排列 + 移除废话。
report-template.md 的章节顺序排列report-v1.md5e — 事实核查(Fact-Check Subagent)
Spawn 1 个 fact-check subagent,专门对照论文原文核查所有 task-subagent 产出的准确性。
输入:论文原文 + 全部 task-subagent 原始产出 + 第一版组装报告
核心约束:极度依赖原文——每个判断必须有原文具体引用(章节号或原文摘录),不允许凭记忆或常识判断。
输出格式——逐条差异报告,每条标注:
不做的事:
此 subagent 的指令直接写在 Phase 5e 中,不需要独立的 task-N.md 文件——它不是 per-category 的,职责固定。
5f — Main agent 审阅 + 修正循环(硬上限 3 轮)
Main agent 审阅 fact-check subagent 的核查报告:
若 ❌ + 🔶 数量较少(10 条以内且无重大事实错误)→ 直接进入 5g,主 agent 按核查报告修正报告。
若 ❌ + 🔶 较多或存在重大事实错误 → 将具体问题发回对应的 task-subagent,要求重新核查修正。修正后:
硬上限:3 轮(5e→5f→修正→5e→5f→修正→5e→5f→5g)。超过 3 轮后接受剩余问题,在报告末尾标注 "第 N 轮核查,剩余 X 条未解决"。
5g — Main agent 最终修正与写入
Main agent 根据事实核查结果对组装报告做最终修正:
outputs/deep-reader/{item_key}/report.md此流程确保报告的事实准确性由原文锚定,而非依赖 LLM 记忆。
报告模板(参见 reference/section-prompts.md 中的 REPORT_TEMPLATE)。
生成最终 Markdown:
[[wikilinks]]:
[[note_name]]报告路径:outputs/deep-reader/{item_key}/report.md。
写入 Obsidian:
使用 obsidian MCP 的 write_note,路径为 00 Inbox/{safe_title}.md。
报告内容来自 outputs/deep-reader/{item_key}/report.md。
⚠️ 关键约束:必须获取完整报告内容后传给 write_note,不手工重新组装报告文本——手工组装极易丢失 LaTeX $ 分隔符。
Frontmatter 格式:
---
tags:
- paper-analysis
- deep-reading
- {domain_tags}
authors: "{authors}"
published: "{published}"
zotero_key: "{item_key}"
kb_related:
- "[[related_paper_1]]"
- "[[related_paper_2]]"
---
如果用户请求上传:
item_keypython scripts/upload_to_zotero.py --report <report_path> --zotero-key {item_key} --tags deep-reading,auto-generated
如果用户计划基于本论文的局限性设计新的研究问题,主 agent 应生成结构化桥接文件,供 good-question skill 直接消费。
步骤:
从 Phase 5g 的最终报告(outputs/deep-reader/{item_key}/report.md)中提取以下结构化信息:
从 Phase 4 的 KB 搜索结果中提取相关论文列表(不去重、不截断——good-question 自行判断相关性):
zotero_kb.json 中的条目(title, abstract, item_key)obsidian_kb.json 中的条目(title, path, wikilink)写入 outputs/deep-reader/{item_key}/good-question-bridge.json:
{
"source_paper": {
"title": "{title}",
"item_key": "{item_key}",
"arxiv_id": "{arxiv_id}"
},
"stated_limitations": [
"具体局限描述 1",
"具体局限描述 2"
],
"implied_weaknesses": [
"隐含弱点描述 1",
"隐含弱点描述 2"
],
"future_directions": [
"未来方向描述 1",
"未来方向描述 2"
],
"personal_insights": [
"个人启发描述 1",
"个人启发描述 2"
],
"kb_context": {
"zotero_related": [
{"title": "...", "item_key": "...", "abstract": "..."}
],
"obsidian_related": [
{"title": "...", "path": "...", "wikilink": "..."}
]
}
}
已生成 good-question 桥接文件 outputs/deep-reader/{item_key}/good-question-bridge.json。运行 good-question skill 可直接消费此文件,基于论文局限性设计新的研究问题。注意:
所有配置可通过环境变量或 .env 文件设置:
| 变量 | 默认值 | 说明 |
|---|---|---|
EMBEDDING_PROVIDER | qwen | embedding 提供商:qwen/openai/local |
EMBEDDING_MODEL | 自动 | 覆盖默认 embedding 模型 |
OBSIDIAN_VAULT | 自动检测 | Obsidian vault 根路径 |
Use when a researcher is choosing, framing, refining, or stress-testing a research question, hypothesis, thesis topic, project idea, grant direction, paper angle, or stalled research direction.
泛读:快速概览Zotero库中的文献,单轮LLM生成摘要级Markdown报告,并上传为Zotero Note。深度精读请用paper-deep-reader。
Intelligently organize and categorize Markdown notes within an Obsidian vault. This skill leverages Obsidian MCP tools to analyze the vault's current folder structure and note content, ensuring new or misplaced notes are moved to their most contextually appropriate locations (e.g., PARA, Zettelkasten, or custom taxonomies).
Discover recent arXiv papers matching a research profile and generate Obsidian-compatible Markdown notes. Use this skill when the user wants to find new papers, refresh their literature inbox, or search arXiv based on their interests.
Autonomously scans specific directories (00, 10, 20, 30) in an Obsidian vault, analyzes note content, and intelligently merges AI-generated YAML frontmatter (tags, summary, aliases) into the notes.
Distills a raw, text-based discussion (e.g., meeting notes, user-AI conversations in Markdown) into one or more structured, permanent 'evergreen' knowledge notes.