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 リクエスト

効率よく利用するには:

  • 1 回の呼び出しで複数のフィールドをリクエストします(?fields=title,abstract,externalIds,year)
  • 1 回のリクエストでより多くの結果を取得するために 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 分)に到達したか確認します
  • チェックポイントに到達した場合:続行するか停止するかをユーザーに尋ねます

コメント