mcpField
T
Traversing Citation Networks

Traversing Citation Networks

github.com/kthorn生产力13163 次安装53 周前更新
代码仓库

关于 Traversing Citation Networks

Traversing Citation Networks 是一项研究技能,使用 Semantic Scholar API 从论文向后追踪参考文献、向前查找引用论文。它先按查询相关性筛选并去重,再将符合条件的论文加入处理队列,以限制引用扩展范围。

主要功能

  1. 01双向追踪引用与参考文献
  2. 02按上下文、标题和意图筛选
  3. 03评分后将论文加入队列
  4. 04记录引用关系并去重
  5. 05限制追踪深度并处理速率限制

适用场景

  1. 01查找相关论文的前序研究
  2. 02寻找引用某篇论文的后续工作
  3. 03围绕主题扩展论文集合
  4. 04控制大型文献检索的引用扩展

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/kthorn/research-superpower --skill traversing-citation-networks

安装后在 Claude Code 中输入/traversing-citation-networks确认已加载。

详细介绍

遍历引用网络

概述

使用 Semantic Scholar API 智能地沿引用关系向后(参考文献)和向前(引用该论文的论文)追踪。

**核心原则:**只追踪与用户查询相关的引用。先筛选再遍历,避免指数级膨胀。

适用场景

在以下情况下使用此技能:

  • 找到了一篇高度相关的论文(评分 ≥ 7)
  • 需要查找相关研究
  • 用户询问“哪些论文引用了这篇论文?”
  • 需要全面了解某个主题

不适用场景:

  • 论文评分 < 7(相关性不足,不值得继续追踪)
  • 已有 50 篇论文(先与用户确认)
  • 从摘要来看,引用内容偏离主题

引用遍历策略

1. 从 Semantic Scholar 获取论文 ID

按 DOI 查询:

curl "https://api.semanticscholar.org/graph/v1/paper/DOI:10.1234/example.2023?fields=paperId,title,year"

响应:

{
  "paperId": "abc123def456",
  "title": "Paper Title",
  "year": 2023
}

保存 paperId——查询引用和参考文献时需要用到

2. 向后遍历(参考文献)

获取论文的参考文献:

curl "https://api.semanticscholar.org/graph/v1/paper/abc123def456/references?fields=contexts,intents,title,year,abstract,externalIds&limit=100"

响应格式:

{
  "data": [
    {
      "citedPaper": {
        "paperId": "xyz789",
        "title": "Referenced Paper Title",
        "year": 2020,
        "abstract": "...",
        "externalIds": {
          "DOI": "10.5678/referenced.2020",
          "PubMed": "87654321"
        }
      },
      "contexts": [
        "...as described in previous work [15]...",
        "...we used the method from [15] to..."
      ],
      "intents": ["methodology", "background"]
    }
  ]
}

筛选相关性:

对于每条参考文献,检查:

  1. 上下文关键词:引用上下文中是否提到了用户查询中的词语?
    • 示例:如果用户询问“IC50 值”,查找提到“IC50”“活性”“效力”的上下文
  2. 标题匹配:标题中是否包含相关关键词?
  3. 意图:意图是“方法”或“结果”(相关性更高),还是“背景”(相关性较低)?

评分:

  • 匹配上下文关键词:+3 分
  • 匹配标题关键词:+2 分
  • 意图为方法/结果:+2 分
  • 较新(< 5 年):+1 分

只有评分 ≥ 5 才加入队列

3. 向前遍历(引用)

获取引用了这篇论文的论文:

curl "https://api.semanticscholar.org/graph/v1/paper/abc123def456/citations?fields=title,year,abstract,externalIds&limit=100"

响应格式:

{
  "data": [
    {
      "citingPaper": {
        "paperId": "def456ghi",
        "title": "Newer Paper Citing This",
        "year": 2024,
        "abstract": "We extended the work of [original paper]...",
        "externalIds": {
          "DOI": "10.9012/citing.2024"
        }
      }
    }
  ]
}

筛选相关性:

对于每篇引用该论文的论文:

  1. 标题匹配:标题中是否包含关键词?
  2. 摘要匹配:摘要中是否包含用户查询中的词语?
  3. 时效性:较新的论文通常会基于已有发现开展研究(优先考虑 < 2 年的论文)
  4. 引用次数:如果 Semantic Scholar 提供了引用次数,引用较多的论文可能更相关

评分:

  • 匹配标题关键词:+3 分
  • 匹配摘要关键词:+2 分
  • 较新(< 2 年):+2 分
  • 有一定时效性(2-5 年):+1 分

只有评分 ≥ 5 才加入队列

4. 去重

加入队列前:

检查 papers-reviewed.json:

doi = paper["externalIds"].get("DOI")
if doi in papers_reviewed:
    skip  # Already processed
else:
    add to queue

重要:评估引用遍历中的任何论文后,无论评分如何,都要将其添加到 papers-reviewed.json。这可以避免从多个来源重复处理同一篇论文。

在 citations/citation-graph.json 中追踪引用关系:

{
  "10.1234/example.2023": {
    "references": ["10.5678/ref1.2020", "10.5678/ref2.2021"],
    "cited_by": ["10.9012/cite1.2024", "10.9012/cite2.2024"]
  }
}

重要:引用追踪只能使用 citation-graph.json。不要创建 forward_citation_pmids.txt 或 citation_analysis.md 等自定义文件。所有发现都记录在 SUMMARY.md 中。

5. 处理队列

将相关引用添加到处理队列:

{
  "doi": "10.5678/referenced.2020",
  "title": "Referenced Paper",
  "relevance_score": 7,
  "source": "backward_from:10.1234/example.2023",
  "context": "Method citation - describes IC50 measurement protocol"
}

然后:

  • 使用 evaluating-paper-relevance 技能进行评估
  • 如果相关,则提取数据,并可继续遍历该论文的引用

智能遍历限制

为避免数量激增:

  • 只遍历初步评估评分 ≥ 7 的论文
  • 相关性筛选中只追踪评分 ≥ 5 的引用
  • 遍历深度限制为 2 级(原论文 → 参考文献 → 参考文献的参考文献)
  • 每处理 50 篇论文后与用户确认

广度优先策略:

  1. 获取当前论文的所有参考文献和引用
  2. 筛选并评分
  3. 将高分论文加入队列
  4. 处理队列中的下一篇论文
  5. 重复上述步骤,直到队列为空或达到限制

进度报告

遍历时报告进度:

🔗 Analyzing citations for: "Original Paper Title"
   → Found 45 references, 12 look relevant
   → Found 23 citing papers, 8 look relevant
   → Adding 20 papers to queue

📄 [51/127] Following reference: "Method for measuring IC50"
   Source: Referenced by original paper in Methods section
   Abstract score: 7 → Fetching full text...

API 速率限制

Semantic Scholar 限制:

  • 免费版:每 5 分钟 100 次请求
  • 使用 API 密钥:每 5 分钟 1000 次请求

提高效率:

  • 在一次调用中请求多个字段(?fields=title,abstract,externalIds,year)
  • 使用 limit=100,每次请求获取更多结果
  • 缓存响应,不要重复获取同一篇论文

如果遇到速率限制:

  • 等待 5 分钟
  • 向用户报告:“⏸️ Semantic Scholar API 触发速率限制。正在等待 5 分钟……”
  • 考虑获取 API 密钥以提高限制

与其他技能集成

遍历引文后:

  1. 队列中现在有 N 篇待评估的新论文
  2. 对每篇论文使用 evaluating-paper-relevance 技能
  3. 如果相关,将其提取到 SUMMARY.md
  4. 如果高度相关(≥9),也遍历其引文
  5. 更新 citation-graph.json 以跟踪关系

快速参考

任务API 端点
按 DOI 获取论文GET /graph/v1/paper/DOI:{doi}?fields=paperId,title
获取参考文献GET /graph/v1/paper/{paperId}/references?fields=contexts,title,abstract,externalIds
获取引文GET /graph/v1/paper/{paperId}/citations?fields=title,abstract,externalIds
检查是否已处理在 papers-reviewed.json 中查找 DOI
筛选相关性根据上下文/标题/意图/时效性评分

相关性筛选检查清单

将引文添加到队列前:

  • 检查是否已在 papers-reviewed.json 中(如果是则跳过)
  • 根据上下文/标题关键词评分(需 ≥ 5)
  • 确认外部 ID(DOI 或 PMID)存在
  • 添加来源跟踪信息("backward_from:DOI" 或 "forward_from:DOI")
  • 添加到队列并附上元数据

常见错误

**未跟踪所有已评估的论文:**只将相关论文添加到 papers-reviewed.json → 评估后添加每篇论文,以避免重复评估 **创建自定义分析文件:**创建 forward_citation_pmids.txt、CITATION_ANALYSIS.md 等 → 仅使用 citation-graph.json 和 SUMMARY.md **跟进所有引文:**导致指数级膨胀 → 添加到队列前先筛选 **忽略上下文:**引文可能只是间接相关 → 阅读上下文字符串 **未去重:**重复处理相同论文 → 评估前后始终检查 papers-reviewed.json **追踪过深:**跟进 5 层以上 → 限制为 2 层,并与用户确认 **遗漏前向引文:**只检查参考文献 → 同时使用后向和前向追踪 **未注意速率限制:**API 会阻止请求 → 添加延迟并处理 429 错误

工作流示例

1. User asks: "Find selectivity data for BTK inhibitors"
2. Search finds Paper A (score: 9, has great IC50 data)
3. Traverse citations for Paper A:
   - References: 45 total, 12 relevant (mention "selectivity", "IC50")
   - Citations: 23 total, 8 relevant (newer papers on BTK)
4. Add 20 papers to queue
5. Evaluate first queued paper (score: 8)
6. Extract data, traverse its citations (add 5 more)
7. Continue until queue empty or user says stop

后续步骤

遍历引文后:

  • 使用 evaluating-paper-relevance 处理队列中的论文
  • 使用新发现更新 SUMMARY.md
  • 检查是否已达到检查点(50 篇论文或 5 分钟)
  • 如果达到检查点:询问用户是继续还是停止

评论

支持 Markdown