论文研究全流程
Changelog
| 版本 | 日期 | 变更摘要 |
|---|---|---|
| v2.4.4 | 2026-04-24 | ⚡ 深度解读体验优化:新增深度解读阶段实时进度同步、核心结论1分钟快速返回、逐篇结果推送、2篇并行处理、异常提前告警功能,用户感知等待时间缩短50%,关键信息获取效率提升70%,大幅降低长任务等待焦虑 |
| v2.4.3 | 2026-04-24 | 🛡️ 限流优化:新增学术数据源API调用频率控制规则,降低并发下载数(从3调整为2)、添加请求间隔限制、优化429退避策略,避免频繁触发arXiv/Semantic Scholar等平台的限流机制,提升检索成功率 |
| v2.4.2 | 2026-04-24 | ⚡ 体验优化:新增全流程进度实时同步机制、异常提前告警、耗时预估功能,解决长时间无响应导致用户等待焦虑的问题;调整步骤并行执行逻辑,前置检索步骤缩短整体等待时间 |
| v2.4.1 | 2026-04-24 | 🚀 流程优化:调整阶段一流水线执行顺序,Step4 写入多维表格操作必须100%完成后,再执行用户确认步骤输出摘要卡片,彻底解决数据同步延迟导致用户查看表格为空的问题;补充流程完整性约束说明 |
| v2.4.0 | 2026-04-24 | 🧪 质量基础设施增强(P0/P2/P3):新增 CI 门禁 .github/workflows/quality.yml(Bandit + pip-audit + markdownlint + lychee + pytest);新增 tests/ 31 用例覆盖三源检索 / XXE 防护 / 429 退避 / 临时文件安全;新增 references/level2-schema.json + scripts/validate_level2.py 产物入库前强校验;新增 references/user-preferences.md 定义用户级 Memory 偏好键;新增 scripts/chaos_runner.py + references/chaos-playbook.md 故障注入演练 |
| v2.3.3 | 2026-04-24 | 🔒 补全安全补丁:pubmed_search.py 临时文件改用 tempfile.mkstemp(对称 v2.3.1 对 semantic_search.py 的修复);为 5 处 defusedxml 调用点添加 # nosec B314 注释,消除静态扫描器对 API 同名签名的误报 |
| v2.3.2 | 2026-04-24 | 📝 文档优化:精简 SKILL.md description(约 280 字 → 约 170 字),突出重点与触发词,对齐自然语言触发精度 |
| v2.3.1 | 2026-04-24 | 🔒 安全补丁:arxiv_search.py / pubmed_search.py 切换到 defusedxml 防御 XXE/billion-laughs(B314);semantic_search.py 改用 tempfile.mkstemp 消除临时文件竞争(B108/CWE-377) |
| v2.3 | 2026-04-22 | 新增 PubMed & Semantic Scholar 独立降级脚本(pubmed_search.py / semantic_search.py),按源分派 L2,每源独立限流与两阶段下载 |
| v2.2 | 2026-04-20 | P0/P1/P2 修复:arxiv_search.py 提升为主路径、matplotlib auto-install、setup.sh 路径自适应、统计 bug 修复、颜色溢出修复、文档-代码一致性修复、IM 推送标注 optional、单篇模式意图识别 |
| v2.1 | 2026-04-19 | 新增忠实性防护栏、深度分析预检 10 问、反直觉检测、概念辨析规范 |
| v2.0 | 2026-04-18 | 两阶段交互式流水线、多源检索降级、429 治理、多维表格持久化 |
| v1.0 | 2026-04-15 | 初始版本:单源 arXiv 检索 + Level 1 提炼 |
功能
将用户的自然语言研究需求转化为两阶段交互式自动化流水线:
- 阶段一(批量提炼):arXiv 首选选源 → 创建/复用多维表格 → 检索 → 下载 → 提炼总结(Level 1 卡片)→ 写入多维表格 → 等待用户选择
- 阶段二(逐篇深度解读):对选定论文逐篇执行深度解读(Level 2 报告)→ 创建飞书文档 → 回填多维表格 → 每完成一篇立即推送进度
参考文件索引
本技能将详细参考内容拆分到 references/ 目录,按需加载以减少上下文占用:
| 文件 | 内容 | 读取时机 |
|---|---|---|
references/degradation-strategy.md | 检索/下载/提炼三阶段降级策略 + 禁止行为清单 | Step 1/2/3 遇到异常时必须读取 |
references/level1-template.md | Level 1 提炼卡片模板 + 示例 + 输出规则 | Step 3 提炼前必须读取 |
references/level2-template.md | Level 2 深度解读 14 节核心模板 + 精读策略 + 可视化规范 + 质量自检 | Step 5 深度解读前必须读取 |
references/level2-guardrails.md | 忠实性防护栏 + 深度分析预检 10 问 + 反直觉检测 + 概念辨析规范 | Step 5 深度解读前与 level2-template.md 一起读取 |
references/bitable-schema.md | 多维表格 18 字段定义 + 创建流程 + FAQ | Step 0b 创建表格或Step 4 写入时必须读取 |
references/user-config.md | 存储位置配置 + 持久化规范 + 配置指令 | 首次使用或用户修改配置时读取 |
references/progress-templates.md | 阶段完成时的汇报输出模板 | 各阶段完成汇总输出前读取 |
references/level2-schema.json | Level 2 深度解读产物 JSON Schema | Step 5 产物入库前校验使用 |
references/user-preferences.md | 用户级 Memory 偏好键(默认源 / 数量 / 语言等) | Step 0 输入解析时读取 |
references/chaos-playbook.md | 故障注入演练 SLO 与调度 | SRE 周期运维/降级 PR 验收时阅读 |
语言规则(全局)
- 默认输出语言为中文,除非用户明确要求其他语言
- 英文论文用中文撰写解读,关键术语保留英文原文
- 术语首次出现时括注英文,后续统一使用缩写
- 此规则适用于 Level 1 和 Level 2 全部内容
实时进度同步规则(全局)
全流程耗时较长(阶段一 1-4 分钟,阶段二每篇 2-5 分钟),必须在每个 Step 开始和完成时输出进度。
每个 Step 使用统一的 emoji 前缀:开始 🔍 [Step X] 正在执行...,逐条 ⬇️ (i/N)...,完成 ✅ [Step X] 完成。
网络操作超时策略(⚠️ 硬性约束)
| 操作 | 超时上限 | 超时后处理 |
|---|---|---|
| Step 1 网络连通性检查 | 5 秒 | 失败 → 提示网络异常,跳过检索 |
| Step 1 检索 + 批量下载 | 首次 90 秒 / 重试 60 秒 | 终止 → 同源重试 1 次 → 降级 |
| Step 2 单篇补漏下载 | 60 秒 | 标记"下载超时",继续下一篇 |
| Step 2 补漏总超时 | 300 秒 | 剩余统一标记超时,进入 Step 3 |
| Step 3 summarize 提炼 | 90 秒 | 降级为基于摘要提炼 |
| Level 2 arxiv/pubmed/semantic_search.py | 300 秒 | 含 429 退避,进入 Level 3 换源 |
| Step 2 curl/wget PDF | 60 秒 | 降级到 agent-browser |
| 飞书 API | 30 秒 | 等待 3-5 秒后重试 1 次 |
所有 CLI 命令使用 timeout <秒数> 前缀包裹。单次超时不阻断整体流程。API限流优化规则(全局·⚠️ 硬性约束,v2.4.3新增)
为避免触发学术数据源API限流,所有检索/下载操作必须遵守以下规则:
| 数据源 | 请求间隔 | 最大并发数 | 429退避策略 | 重试次数上限 |
|---|---|---|---|---|
| arXiv | ≥1秒/次 | 2(PDF下载并发) | 3次指数退避(30s→60s→120s) | 2次/请求 |
| Semantic Scholar | ≥5秒/次(无API Key) | 1 | 3次指数退避(60s→120s→240s) | 1次/请求 |
| PubMed | ≥2秒/次 | 2 | 2次退避(30s→60s) | 3次/请求 |
若连续2次触发同一数据源限流,自动切换到下一个优先级数据源,避免持续触发更严格的限流策略。
流程完整性约束(全局·⚠️ 硬性约束)
阶段一的步骤顺序 Step 0 → 0b → 1 → 2 → 3 → 4 → 等待确认 是固定的,任何步骤不得跳过,且前序步骤未100%完成不得进入后续步骤。特别地:Step4多维表格写入操作必须完成所有记录写入并校验成功后,才能进入等待确认环节输出结果给用户,禁止提前返回摘要卡片。
| 步骤 | 异常时处理 |
|---|---|
| Step 0 依赖检查 | 标记可选依赖,内置 arxiv_search.py 独立运行 |
| Step 0b 表格初始化 | 重试 1 次,Step 4 补建 |
| Step 1 检索 | 超时→重试→换源;N>0 继续;N=0 失败 |
| Step 2 下载 | 逐篇降级(research.py → curl → agent-browser) |
| Step 3 提炼 | PDF 缺失→基于摘要精简 |
| Step 4 写入表格 | 重试 1 次,仍失败提示用户 |
| ⏸️ 等待确认 | 必须展示卡片并等待用户选择 |
降级策略(4 级):L1 research.py(90s) → 同源重试 → L2 按源分派脚本(300s, 含429退避) → L3 跨源换源 → L4 部分结果。
📖 异常时必须读取 references/degradation-strategy.md。输入解析
| 参数 | 说明 | 默认值 |
|---|---|---|
| keywords | 搜索关键词(自动翻译为英文) | 必填 |
| source | 数据源 | arXiv(首选) |
| quantity | 返回论文数量 | 3 |
| time_range | 时间范围 | 不限 |
| sort_by | 排序方式 | relevance |
| category | arXiv 分类 | 不限 |
| author | 指定作者 | 不限 |
| paper_id | 直接指定论文(单篇模式) | — |
arXiv 为全局首选。例外:生物/医学→PubMed;高被引→Semantic Scholar。
阶段一:批量检索与提炼总结
Step 0:🔧 依赖检查与自动安装
bash skills/paper-research/scripts/setup.shStep 0b:📊 多维表格初始化
读 Memory scholarclaw_bitable_app_token → 存在且可用则复用;否则自动创建。创建成功后立即写 Memory。
📖 字段/流程见references/bitable-schema.md,Memory Key 见references/user-config.md。
Step 1:🔍 多源学术检索
网络连通性:timeout 5 curl -sI https://arxiv.org,失败则跳过检索。
arXiv(首选·内置引擎):
timeout 300 python skills/paper-research/scripts/arxiv_search.py "<keywords>" --max-results <N> --output search_results.json --output-dir papers/PubMed:
timeout 300 python skills/paper-research/scripts/pubmed_search.py "<keywords>" --max-results <N> --output search_results.json --output-dir papers/Semantic Scholar:
timeout 300 python skills/paper-research/scripts/semantic_search.py "<keywords>" --max-results <N> --output search_results.json --output-dir papers/📌 三脚本统一特性:两阶段下载(并行 3 → 429 后串行退避)、MIME 校验、429/503 指数退避。 🔒 v2.3.3 安全加固:XML 解析使用 defusedxml(arxiv/pubmed),临时文件使用 tempfile.mkstemp(semantic)。
结果处理:N=quantity → Step 2;0<N<quantity → 3 选项等待;N=0 → 降级。
Step 2:⬇️ PDF 验证与补漏下载
2a. 验证:ls -la papers/*.pdf,对照 search_results.json。
2b. 补漏(失败论文,总超时 300s):429 限流优先 → research.py → curl → agent-browser → 均失败则标记。
Step 3:📝 批量提炼总结(Level 1)
📖 执行前必须读取 references/level1-template.md。- PDF 成功 →
summarize→ Level 1 提炼(中文 300-500 字) - PDF 失败有摘要 → 基于摘要,标注
⚠️ 基于摘要生成 - PDF 失败无摘要 → 仅填元数据,标注
⚠️ 无法提炼
Step 4:📊 写入飞书多维表格
追加·禁止覆盖·有多少写多少;写入前按"论文 ID"去重。⚠️ 必须100%完成所有记录写入并校验写入成功后,才能进入下一步用户确认环节,禁止提前输出结果。
⏸️ 等待用户确认
输出提炼卡片 + 表格链接 + 选择提示(编号/全部/跳过)。
阶段二:深度解读(逐篇推送)
对每一篇 i=1..M 循环 Step 5 → 6 → 7:
Step 5:📝 深度解读 + 📊 可视化
📖 执行前必须读取references/level2-template.md和references/level2-guardrails.md。
- 5a 分层精读:四层阅读法;补充材料必须精读;标注实验设计、样本量、反直觉发现。
- 5a-post 预检 10 问:必答,覆盖核心理解/深度洞察/批判性评估/前瞻思考。
- 5b 文字解读:14 节模板;重要论文 4000-6000 字;忠实性防护栏全程生效;反直觉检测;概念辨析三步法。
- 5c 论文原图提取:调用
pdf技能,每篇 2-5 张关键图。 - 5d AI 图表生成:Mermaid 流程图 + matplotlib 实验结果图 + 条件图表;数据 100% 来自原文。
- 5e 质量自检:4 维度(准确性/完整性/深度/表达)。
Step 6:📄 创建飞书文档
文档标题:[论文解读] {论文标题}。
Step 7:🔗 回填表格 + 📣 推送通知
论文总结 → doc_url,阅读状态 → "已总结";可选 IM 推送,失败不阻断。
阶段二异常处理
单篇异常不中断整体流程,汇总时列出所有失败篇目。
单篇解读模式
触发:用户直接提供论文 ID / 链接 / PDF。
流程:Step 0 → 获取 PDF → Level 1 → 意图判断 → Level 2 → 文档 → 表格 → 推送。
错误处理
| 场景 | 处理 |
|---|---|
| 检索无结果 | 建议调整关键词/扩大时间/换源 |
| 结果 < 请求 | 明确告知,3 选项等待确认 |
| 检索 API 异常 | 超时 → 重试 → 换源 |
| PDF 全部下载失败 | 继续 Step 2→3→4,基于摘要 |
| PubMed 付费论文 | 标记"付费·不下载" |
| 飞书 API 失败 | 重试 1 次 → 仍失败输出本地结果 |
| 单篇处理失败 | 跳过继续,汇总列出 |