بنقرة واحدة
ph-paper-helper
学术论文检索与管理的首选方案。当需要搜索论文、调研某个研究方向、导入指定论文、导出 BibTeX、或精读全文时使用。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
学术论文检索与管理的首选方案。当需要搜索论文、调研某个研究方向、导入指定论文、导出 BibTeX、或精读全文时使用。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Claude Code 专用:将 arXiv/DOI/PDF 学术论文整理为论文翻译飞书文档,正文以原文逐段中文翻译为主体。
单文件 HTML 幻灯片(Han Xiao 式固定舞台 deck)的制作方案。当需要做网页版 slides、HTML 幻灯片、会议演讲 deck、或希望用浏览器直接放映且导出 PDF 的演示文稿时使用。触发词:"HTML slides""网页幻灯片""单文件 deck""hanxiao 风格 slides""做个网页版演讲稿"。
Codex 专用:将 arXiv/DOI/PDF 学术论文整理为论文翻译飞书文档,正文以原文逐段中文翻译为主体。
飞书/Lark 全功能操作方案。当需要发消息、管理日程/会议室、操作云文档/多维表格/电子表格/知识库、处理任务/邮件/OKR/考勤/审批,或进行视频会议时使用。
将学术论文、论文 PDF、arXiv/DOI、或 lark-paper-reader-codex 生成的飞书论文读书文档整理成一份有用的飞书 Slides/PPT。用于把一篇或几篇论文变成可讲述、可复习、可分享的演示文稿,重点是提炼主线、选择论文原图、讲清方法、实验结果、insight 和局限;触发语境包括:把论文做成 PPT、做一份 paper slides、把这些 reader 文档整理成演示文稿、做文献汇报 slides、把同主题论文用 PPT 呈现。
统一处理所有 skills 操作的总控 skill,包括搜索、导入、创建、重构、编辑、优化、上游跟踪、分发、归档与发布。当涉及到 SKILL 的编辑修改新建时,请用 skill-manager 来管理!
| name | ph-paper-helper |
| description | 学术论文检索与管理的首选方案。当需要搜索论文、调研某个研究方向、导入指定论文、导出 BibTeX、或精读全文时使用。 |
使用 ph(paper-helper)CLI 进行学术论文检索、导入、BibTeX 导出与渐进式阅读。
alias ph='uv run --project ~/project/ph2 ph'
先判断用户意图属于哪一类,再进入对应流程:
ph import 或 ph add --bib,参考「快速导入」ph add --bib,参考「BibTeX 写入」ph enrich --bib,参考「BibTeX 补全」ph sql 查 plain_text 列,若为 null 先 ph import(默认自动抓取)ph fetch --include-content,参考「慢路径」ph sql,参考「本地查询」不确定时先问用户。不要同时走多条路径。
ph search 默认使用 Semantic Scholar API(需 API key),也可通过 --source arxiv 切换到 arXiv API(无需 key,仅覆盖 arXiv 论文)。查询质量直接决定结果质量,因此搜索前必须先理解用户需求,再构造精确查询。
收到搜索请求后,不要立刻执行。先从用户的话中提取以下信息:
| 维度 | 要搞清楚的 | 示例 |
|---|---|---|
| 主题 | 用户关心的核心概念是什么? | "diffusion model 用于图像编辑" |
| 目的 | 调研综述?找具体方法?对比方案? | "想了解最新进展" vs "找能用的baseline" |
| 范围 | 有没有偏好的子领域? | "只看 CV 方向的" |
| 作者 | 有没有特定作者? | "Kaiming He 的工作" |
| 数量 | 需要广泛调研还是快速找几篇? | 广泛 → --max-results 20;快速 → 5 |
| 搜索源 | 是否需要切换到 arXiv? | 仅 arXiv 论文 → --source arxiv |
判断规则:
默认使用 Semantic Scholar(--source s2):使用自然语言关键词组合,S2 会做语义匹配。
查询构造规则:
--source arxiv,可使用 arXiv 字段限定语法(ti:, au:, cat:, abs:,AND/OR 组合),详见 references/arxiv-query-syntax.md常见查询模板:
# 主题搜索(默认 S2)
ph search --query "diffusion model image editing" --max-results 15
# 作者 + 主题
ph search --query "Kaiming He knowledge distillation" --max-results 10
# 切换到 arXiv 搜索(支持字段限定语法)
ph search --source arxiv --query "ti:diffusion AND ti:editing AND cat:cs.CV" --max-results 15
ph search --query "<构造好的查询>" --max-results <数量> [--source arxiv]
搜索返回后:
--source arxiv 换源不要对所有搜索结果都调用 fetch。通常只对 1-3 篇核心论文走慢路径。
用户提供了明确的论文标识时,跳过搜索直接导入:
# 全局导入(仅入库,不写 .bib)
ph import --input arxiv://1706.03762
ph import --input arxiv://2301.00001 --input arxiv://2302.00002 # 批量
# 导入并写入 .bib(add 只记录,enrich 补全)
ph add --input arxiv://1706.03762 --bib refs.bib
ph enrich --bib refs.bib
# 直接走完整处理(自动 import + bib 补全 + 全文提取,不写 .bib)
ph fetch --paper-id arxiv://1706.03762
| 来源 | 格式 | 示例 |
|---|---|---|
| arXiv | arxiv://ID 或 arxiv://IDvN | arxiv://1706.03762、arxiv://2301.00001v5 |
| DOI | doi://DOI | doi://10.1145/3025453 |
| Semantic Scholar | s2://HASH | s2://649def34f8be52c8b66281... |
仅支持以上三种 scheme。裸 ID 会触发 E_UNKNOWN_REF_SCHEME。
DB 层支持任意 ID 反查。以 doi://10.xxx 入库的论文,用 arxiv://yyy 也能找到(只要它们是同一篇)。因此:
ph add --input arxiv://xxx --bib refs.bib 能识别已入库为 doi://yyy 的同一篇论文,不会重复调 APIph add 是将论文写入 .bib 文件的主要命令。它只做记录:导入 → 写入 .bib,不补全元数据(秒级完成)。
# 添加单篇
ph add --input arxiv://1706.03762 --bib refs.bib
# 批量添加
ph add --input arxiv://1706.03762 --input doi://10.1145/3025453 --bib refs.bib
要补全元数据,用 ph enrich:
# add 后补全
ph add --input arxiv://1706.03762 --bib refs.bib
ph enrich --bib refs.bib
enrich 和 fetch 执行三阶段补全:
add 不执行补全,只做记录。
输出中有两个状态字段,含义不同:
| 字段 | 含义 | 判定条件 |
|---|---|---|
bib_ready | 正式发表的完整 metadata | title + authors + venue + year + 非预印本 |
bib_usable | BibTeX 可用于引用 | title + authors + year(预印本也可为 true) |
对 arXiv 预印本:bib_ready=false(这是规则不是 bug)但 bib_usable=true(可以正常引用)。
当 bib_ready=false 时,incomplete_reason 字段区分原因:
| 值 | 含义 | 需要处理吗 |
|---|---|---|
preprint | 预印本,元数据实际已齐全 | 不需要,bib_usable=true 即可用 |
missing_fields:venue,year | 关键字段缺失 | 可能需要手动补或重试 fetch |
upstream_failure:s2,crossref | 上游 API 失败 | 稍后重试 |
arXiv 预印本自动使用规范格式渲染:
@article{chen2026skillcraft,
title = {SkillCraft: Can LLM Agents Learn to Use Tools Skillfully?},
author = {Shiqi Chen and Jingze Gai},
year = {2026},
month = {2},
journal = {arXiv preprint arXiv:2603.00718},
eprint = {2603.00718},
archiveprefix = {arXiv},
primaryclass = {cs.CL},
url = {https://arxiv.org/pdf/2603.00718},
}
已正式发表的论文(有 journal_ref)使用标准 @article/@inproceedings 格式。
每条 ph 管理的 entry 前有一行注释标记 paper_id,用于去重:
% paper_id: arxiv://2603.00718
@article{chen2026skillcraft,
...
}
% paper_id: 注释)会被原样保留ph enrich 扫描 .bib 文件,对不完整的 entry 跑三阶段 bib 补全并更新 .bib。
# 补全所有不完整的 entry
ph enrich --bib refs.bib
# 强制重新补全所有 entry(包括已 ready 的)
ph enrich --bib refs.bib --force
# 预检,不写入
ph enrich --bib refs.bib --dry-run
% paper_id: xxx 注释的 entrybib_ready=false 的 entry 跑三阶段补全(S2 + Crossref + arXiv)% paper_id: 注释的 entry(手写、外部来源)跳过并报 warning# 1. 快速添加多篇论文(秒级)
ph add --input arxiv://2310.06825 --input arxiv://2406.00001 --bib refs.bib
# 2. 一次性补全所有不完整的 entry
ph enrich --bib refs.bib
fetch 执行三阶段 bib 补全 + MinerU PDF 全文解析。MinerU 解析通常耗时数十秒到数分钟,重复相同命令轮询直到 fetch_state=done。
# 触发(自动先 import 再 fetch)
ph fetch --paper-id arxiv://1706.03762
# 仅补全 bib 元数据,跳过全文提取
ph fetch --paper-id arxiv://1706.03762 --metadata-only
# 完成后获取全文
## --include-content 返回 MinerU markdown(content 字段)
ph fetch --paper-id arxiv://1706.03762 --include-content
# 强制重新处理
ph fetch --paper-id arxiv://1706.03762 --force
状态机:fetch_state: none → pending → done | failed
ph fetch 输出字段说明:
| 字段 | 仅 --include-content | 含义 |
|---|---|---|
content | ✓ | MinerU markdown 内容(fetch_state=done 时有值) |
fetch_state | — | MinerU 状态:none/pending/done/failed |
ph fetch只负责 MinerU 流程。读取plain_text用ph sql。
需要论文文字内容
│
├── arXiv 论文 ──► 已有 plain_text? ──► 是 ──► ph sql --query "SELECT plain_text FROM papers ..."
│ │
│ └── 否 ──► ph import(默认自动抓取,秒级)
│
├── 只需文字 ────► 同上(plain_text 路径)
│
└── 需要图/公式/表格/非 arXiv ──► ph fetch(MinerU)
| 快速纯文本(默认) | MinerU(ph fetch) | |
|---|---|---|
| 触发方式 | 默认开启,无需任何 flag | 需要手动调用 |
| 速度 | 秒级 | 数分钟,异步 |
| 内容 | 正文纯文字,无数学公式/图片 | Markdown with 图/表/公式 LaTeX |
| Token | 无需 | 需要 PH_MINERU_TOKEN |
| 适用场景 | 论文理解、方法解读、内容摘要、关键词提取 | 需要具体公式、图表内容、算法伪代码 |
| 支持来源 | 仅 arXiv(非 arXiv 返回 unavailable) | 所有有 PDF 的论文 |
# 默认导入(自动抓取纯文本)
ph import --input arxiv://1706.03762
# plain_text_state: fetched
# 读取已存入的纯文本(ph fetch 不暴露 plain_text,直接用 sql)
ph sql --query "SELECT plain_text FROM papers WHERE paper_id = 'arxiv://1706.03762'"
# 仅当需要图/公式/表格/非 arXiv 时,才调用 MinerU
ph fetch --paper-id arxiv://1706.03762
ph fetch --paper-id arxiv://1706.03762 --include-content # 轮询到 fetch_state=done
plain_text_state 字段说明:
fetched — 新获取并存入 DBcached — DB 中已有,未重新获取unavailable — 非 arXiv 论文或 arXiv 无 HTML 版本skipped — (已移除,plain_text 现在无条件尝试)用 ph sql 查询已收录论文(只读 SQL):
# 最近入库
ph sql --query "SELECT paper_id, title, bib_ready, fetch_state FROM papers ORDER BY created_at DESC LIMIT 10"
# 按标题模糊搜索
ph sql --query "SELECT paper_id, title FROM papers WHERE title LIKE '%transformer%'"
# arXiv 预印本中 bib 可用的
ph sql --query "SELECT paper_id, title, primary_category FROM papers WHERE arxiv_id IS NOT NULL AND venue IS NOT NULL"
# bib 已补全的正式发表论文
ph sql --query "SELECT paper_id, title, venue, year FROM papers WHERE bib_ready = 1"
| 错误码 | 含义 | 处理 |
|---|---|---|
E_UNKNOWN_REF_SCHEME | URI scheme 不对 | 用 arxiv://、doi://、s2:// |
E_PARAM_REQUIRED | 缺少必填参数 | 补充 --input、--bib 等 |
E_DATA_NOT_FOUND | 论文不存在 | 先 import 或用 add(自动 import) |
E_UPSTREAM_FAILURE | 外部源失败 | 检查网络,稍后重试 |
E_MINERU_TASK_FAILED | MinerU 失败 | 检查 PDF 可访问性和 token |
退出码:0 成功 / 2 参数错误 / 3 数据不存在 / 4 上游失败 / 5 部分成功
| 变量 | 说明 |
|---|---|
PH_DATA_DIR | DB 根目录(默认 ~/.local/share/ph) |
PH_S2_API_KEY | Semantic Scholar API key(search 默认源需要) |
PH_MINERU_TOKEN | MinerU token(仅 fetch 全文时需要) |
PH_TIMEOUT_SECONDS | 默认超时秒数 |
| 参数 | 说明 | 默认值 |
|---|---|---|
--quiet | 抑制 stderr | false |
--verbose | 详细日志 | false |
--timeout-seconds | 超时秒数 | 30 |
--dry-run | 预检不写入 | false |