mcpField
P
paper-search-pro

paper-search-pro

github.com/o0000-code生産性21867 回インストール4 週間前に更新
リポジトリ

paper-search-pro について

paper-search-proは、複数の文献ソースを対象に検索深度を調整できるスキルです。Pythonヘルパーが決定的な検索と評価を担い、人向けの手順では並列LLM分類やレポート出力も行います。

主な機能

  1. 014段階の検索深度
  2. 025つの文献ソースを検索
  3. 03論文の重複排除と関連度評価
  4. 04SubAgentによる並列分類
  5. 05HTMLレポートとデータ出力

活用シーン

  1. 01研究計画書のテーマ範囲を把握
  2. 02文献レビュー用の資料収集
  3. 03システマティックレビュー向けの詳細検索
  4. 04エージェント推論用の構造化結果取得

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/o0000-code/paper-search-pro --skill paper-search-pro

インストール後、Claude Code で/paper-search-proを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

README.md
.gitignore
NOTICE.md
THIRD_PARTY.md
.skillignore
LICENSE.txt
README.zh.md
.github/workflows/
tests.yml
assets/
md_template.md.jinja
default_config.yaml
assets/benchmark_queries/
sparbench_subset.json
litsearch_subset.json
custom_zh_queries.json
assets/webartifacts_app/paper-report/
.parcelrc
components.json
index.html
eslint.config.js
package.json
postcss.config.js
pnpm-lock.yaml
.gitignore
README.md
assets/webartifacts_app/paper-report/src/
App.css
App.tsx
assets/webartifacts_app/paper-report/src/components/adapters/
SegmentedToggle.tsx
SearchInput.tsx
KickerAccordion.tsx
KickerAlert.tsx
assets/webartifacts_app/paper-report/src/components/audit/
ComplianceSummary.tsx
PrismaRow.tsx

詳細

paper-search-pro

深さを調整できる、複数ソースからの文献検索です。4段階の深さで、5つのデータソースをあなた(メインエージェント)が連携させます。決定論的な処理は Python ヘルパーが担い、LLM による分類は並列のインラインサブエージェントに委任されます。外部 API キーは必要ありません。

このスキルを使用する場合

  • ユーザーが学術論文を探したい場合/文献を探したい場合/論文を検索したい場合
  • ユーザーが文献レビュー、システマティックレビュー(SR)、スコーピングレビュー、またはメタ分析を準備している場合
  • ユーザーが論文/提案書/授業課題/ニュース記事のため、あるトピックについて研究の範囲を調べたい場合
  • ユーザーが「X に関する研究にはどんなものがありますか」/「Y に関する論文を探してください」と尋ねた場合
  • ユーザーが、文献収集を示唆するクエリ(PICO、SPIDER、MeSH、RCT など)をアップロードした場合

使用しない場合

  • ユーザーが特定の論文を読みたい場合(PDF リーダー/ダウンロードツールを使用)
  • ユーザーが既知の単一の論文を要約したい場合(要約ツールを使用)
  • ユーザーが DOI を指定して PDF をダウンロードしたい場合(paper-downloader-portable を使用)
  • ユーザーがすでに文献セットを持っており、レビューを執筆したい場合(literature-set-review / factor-outcome-review を使用)
  • ユーザーが論文ではなく、概念の説明を求めている場合(「プロスペクト理論とは何ですか」→そのまま回答)

🤖 別のエージェントから呼び出す場合/ヘッドレスモード

**この Skill を使って自ら推論するエージェントの場合(HTML レポートを求める人間のためではない場合)**は、以下の 14 ステップの手順を手動で実行しないでください。エージェント向けに用意された構造化データのチャネルが 1 つあります。

PYTHONPATH=$PSP_HOME python3 -m scripts.agent_search "<query>" > result.json

1 つのコマンドで、決定論的な処理全体(複数の戦略による取得 → 重複排除 → ヒューリスティックな関連性スコアの計算(すべての論文が対象)→ 飽和シグナル → 割り当て枠のスナップショット → 論文ごとのジャーナル指標)を実行し、1 つの JSON エンベロープを出力します(HTML、PRISMA、LLM 分類サブエージェントは含まれません)。人間向けの手順には影響しません。このコマンドが提供するのは決定論的な最低限の土台であり、作業の完了形ではありません。エージェントモードは機械の出力だけで終えることを想定していません。references/agent_mode.md に沿って、独自の意味的判断を重ね、人間向け手順と同等の品質に仕上げてください(コマンドが土台を保証し、品質はあなたが補います)。

📖 エンベロープの完全なスキーマ、すべてのフラグ(--verify、--min-relevance、--quartile、--min-impact、…)、関連性の計算式、エラーコード/終了コード、ソースの選択については、references/agent_mode.md をお読みください。これはエージェントから呼び出す際の SSOT です。このセクションのほかの内容はすべて、そこへの案内にすぎません。

ここから下は、人間向けの14 ステップの手順(HTML レポートとエクスポート)です。利用者が人間の場合に使用してください。


🔥 実行時の注意事項(実行前にお読みください)

4 つの不変条件がすべてのステップに適用されます。これらを無視することが、実際のセッションで最も多く見られる失敗の原因です。

  • A — Skill のディレクトリには絶対に cd しないでください。 cd $PSP_HOME を実行すると、./ の参照先が Skill のアセットフォルダーに変わるため、./paper-search-results/... はユーザーのワークスペースではなく Skill 内に作成されます(再インストール時に消去されます)。すべてのヘルパーはユーザーの PWD から実行してください:PYTHONPATH=$PSP_HOME python3 -m scripts.<name> … > "$SEARCH_DIR/..."。$PSP_HOME(STEP 0)はインストール先のディレクトリで、$SEARCH_DIR(STEP 0)はユーザーの PWD 配下にある絶対パスです。
  • B — 分類サブエージェントは並列で呼び出してください。 STEP 6 では、1 つのアシスタントメッセージ内に最大 5 つの Task ブロックを配置します。逐次呼び出しすると、Standard 段階で約 10 分かかるところが約 17 分に延びます。実行例は STEP 6 に記載されています。他の箇所には再掲されていません。
  • C — スキップしたステップは必ず伝えてください。 STEP をスキップする場合(予算/データが空/ユーザーの選択)、何をスキップしたか、なぜか、何が失われるか、どうすれば再実行できるか(例:--tier deep を指定して再実行)を伝えてください。スキップ自体は問題ありません。ユーザーに予期しないことが起きるのが問題です。
  • D — そのケースで手順が複雑な場合は、手順で参照されている資料を読んでください。 各 STEP には、この文書内で重複して説明していない例外ケースを記載した references/<file>.md が示されています。実行のたびにすべて読む必要はなく、読むべきでもありません。しかし、実際に実行しようとしているステップの参照資料を飛ばすと、境界条件の知識(辞書型とリスト型の構造、検索ではなくエンリッチ、DOI の大文字・小文字など)が失われます。目の前のステップに該当する資料を読んでください。

アーキテクチャの概要

You (main agent) drive the workflow per this SKILL.md.
Python helpers do deterministic work — NO LLM inside, NO external API key.

  L1 OpenAlex (primary)  → deep top-100 multi-strategy
  L2 PubMed (medical)    → MeSH enricher (mostly; Audit-tier can search independently)
  L2 arXiv (CS/AI)       → last-year recent layer (+ 4-day sentinel on freshness words)
  L2 OpenReview (AI)     → accepted-venue labels (ICLR / NeurIPS / ICML …)
  L3 Semantic Scholar    → influentialCitationCount + abstract fallback
  L3 CrossRef            → funder / license / clinical-trial-number

  Classification         → Inline SubAgents (parallel, file-IPC, 5 per message)
  Output                 → HTML (Shadcn) + MD + BibTeX/RIS/CSV + PRISMA-S log

4つのティア — まず選択してください

ティア所要時間論文数選択する場合
クイック~5-8 min20-60「調べて」/「数本」/「明日までに」/対象範囲を素早く確認
標準(デフォルト)~10-17 min60-180トピックの対象範囲を定める/背景を書く/一般的な文献検索
ディープ~30-45 min180-400「徹底的に」/レビュー論文を書く/レビュー執筆
監査~2-3 hr400-1000+「システマティックレビュー」/「PRISMA」/「Cochrane」/「メタ分析」

📖 選択する前に、references/tier_decision.md を読んでください。 選択したティアとその理由をユーザーに伝えてください。監査の場合は、制限事項の警告を示し、開始前に明示的な確認を得てください。


手順

文献検索ごとに、以下の手順を順番に実行してください。各手順の詳細は references/ ファイルを参照してください。該当ケースで明らかに些細な手順に限り、ファイルの確認を省略できます。その場合はルール C に従って、スキップすることを伝えてください。

STEP 0 — セットアップ($PSP_HOME + 作業ディレクトリ)

📖 この手順の前に、次を読んでください:references/setup.md。

Skill のインストールパスを $PSP_HOME に解決します(以降のすべての手順で PYTHONPATH=$PSP_HOME を使用します)。明示的なインジェクション/エージェント環境変数を優先し、それがない場合は既知のエージェント横断インストール先をスキャンします。実行環境からこの SKILL.md の絶対パスがすでに提供されている場合は、export PSP_HOME="<that dir>" を実行するだけでよく、スキャンは省略できます。📖 詳しい理由、スクリプトでは対応できない理由、パス一覧については、references/runtime_bootstrap.md を参照してください。

PSP_HOME="${PSP_HOME:-${CLAUDE_SKILL_DIR:-${CODEBUDDY_SKILL_DIR:-}}}"   # explicit / agent-injected
if [ -z "$PSP_HOME" ]; then                                            # else scan known installs
  for base in "$HOME/.claude" "$HOME/.codex" "$HOME/.agents" "$HOME/.config/opencode" \
              "$HOME/.codeium/windsurf" "$HOME/.config/goose" "$HOME/.cline" "$HOME/.roo" \
              "$HOME/.copilot" ./.claude ./.codex ./.agents ./.cursor ./.opencode ./.windsurf; do
    [ -f "$base/skills/paper-search-pro/SKILL.md" ] && PSP_HOME="$base/skills/paper-search-pro" && break
  done
fi
[ -z "$PSP_HOME" ] && { echo "ERROR: paper-search-pro install not found. Set PSP_HOME to the dir containing SKILL.md."; exit 1; }
export PSP_HOME; echo "Using Skill install: $PSP_HOME"

設定キーを確認します(任意の cwd から実行できます。Skill ディレクトリには決して cd しないでください)。

PYTHONPATH=$PSP_HOME python3 -c \
  "from scripts.config import load_config; c = load_config(); print('OK' if c.openalex_api_key and c.ncbi_email else 'MISSING — see references/setup.md')"

「MISSING」の場合は、references/setup.md(キーは5つ、すべて無料、合計約15分)をユーザーに案内して、処理を中止してください。

作業ディレクトリ変数を設定します — 以降のすべての手順で $SEARCH_DIR を使用します。

SEARCH_ID="<topic_slug>_<tier>_$(date +%Y%m%d_%H%M%S)"   # e.g. clt_education_quick_20260522_103045
SEARCH_DIR="$(pwd)/paper-search-results/$SEARCH_ID"
mkdir -p "$SEARCH_DIR/raw" "$SEARCH_DIR/batches" "$SEARCH_DIR/classifications"
echo "Outputs will land in: $SEARCH_DIR"

$SEARCH_DIR は、ユーザーの PWD 配下にある絶対パスになりました。以下のすべてのヘルパーコマンドでは、./paper-search-results/... ではなく、"$SEARCH_DIR/..."(引用符で囲み、変数を含める)を使用してください。

STEP 1 — クエリを計画する(すべてのティアで必須)

📖 この手順の前に、次を読んでください:references/query_planner.md。

レポート UI の言語を判定します — UI_LANG(中国語のクエリでは zh、それ以外では en)によって、最終的な HTML レポートの UI 言語が決まります。論文のタイトル/要約/著者/掲載誌は翻訳しません。翻訳されるのはレポートの UI 表示部分のみです。STEP 12b に --language $UI_LANG を渡してください。

UI_LANG=$(PYTHONPATH=$PSP_HOME python3 -m scripts.detect_language "$USER_QUERY")

判定器は、日本語/韓国語/ヨーロッパ言語のクエリを英語に振り分けます(バンドルに含まれている辞書は EN と ZH のみで、英語は国際的な学術分野の標準言語です)。📖 正確な Unicode ルールと、かなを漢字より先に確認する理由については、references/runtime_bootstrap.md を参照してください。

検索対象の言語範囲を決定します(search_language、軸2 — どの文献の海を検索するか。上記の UI_LANG はレポートの表示部分のみに関する設定です)。📖 解釈の SSOT は references/source_routing.md の「Language scope」セクションです。範囲はクエリの表現を決める前に解決してください。STEP 3 のクエリ構築に影響するためです。これは追加的かつオプトイン方式です。英語のみのクエリは、新たなプロンプトや動作を一切伴わず、en の範囲に解決されます(R-19)。以下は中国語のクエリ、または明示的なシグナルがある場合にのみ適用されます。

  • 保存済みのデフォルト値 config.search_language(auto | en | zh | both)を読み込み、優先順位 フラグ > クエリ内マーカー > config > auto を適用します。CJK の有無は、上記の detect_language による機械的な判定です。マーカー(CSSCI、中文文献、SSCI、知网、…)や非シグナル(中科院一区、中国をテーマとするトピック)は、「Language scope」セクションの表に従って意味を判断してください。

  • auto で、中国語(CJK)のクエリに言語マーカーも保存済みの値もない場合は、取得を始める前に質問を1つだけしてください(これは人間向けフローの役割です。CLI/エージェント経由のフローではそのまま進めます)。2文で尋ね、設定を保存できることも伝え、このセッション中に再度尋ねないでください。

    中国語で質問されていますが、文献は英語、中国語、それとも両方がよいですか?「今後も同じで」と言っていただければ、デフォルトとして保存し、次回からは尋ねません。

    • 「中文」/「都要」→ そのスペースに入ります(STEP 2 の規律ルーティングが引き継ぎます。そこで1行報告します)。
    • 「英文」→ v2.2 の動作になります(中国語のトピックを英語のクエリとして扱います)。1行報告します。
    • 「无所谓 / 都行」→ 今回の実行では both を使用します(再現率 > 適合率)。この設定は保存されません。同じユーザーが2回目に「无所谓」と答えた場合は、both をデフォルトに設定することを軽く提案し、その後は二度と尋ねません。
    • 明示的に「以后都…」と答えた場合に限り、config.search_language に保存します(単発の回答は自動保存しません)。
  • 順位の曖昧さ(単独の「Q1」など)も今回発生した場合は、両方の質問を1つのメッセージにまとめます。言語とプラットフォームを一緒に尋ね、2回に分けて尋ねてはいけません(質問しすぎは重大な違反です)。

  • スペースが判明したら、references/query_planner.md §「Cross-language query handling」に従ってクエリを組み立てます。zh は中国語の検索語をそのまま使い(翻訳しません)、en は英語の検索語を使い(v2.2 の動作)、both は2組を作成します。

各検索クエリは単語リストではなく、概念ブロックとして記述します。 OpenAlex では、単独の単語はすべて必須になります。そのため、同義語を単語として並べると、そのうち1つだけを使っている論文はすべて除外されます(ユーザーの11語のクエリは、5年間でタイトルと抄録に一致した論文が1件だけでした)。同義語は OR グループに入れ、2~3個のブロックを AND でつなぎ、フレーズは引用符で囲みます。例:("short video" OR TikTok OR Douyin) AND (attention OR concentration)。また、少なくとも1つの検索戦略では、対象集団のブロックを含めないでください。📖 references/query_planner.md §「How OpenAlex reads a query」。

分野に応じて PICO/SPIDER/PEO を適用します。

  • 医学/臨床 → PICO(対象集団/介入/比較対象/アウトカム)
  • 質的研究 → SPIDER
  • スコーピング → PEO(対象集団/曝露/アウトカム)
  • オープンエンド → 2~4個の概念ブロックと、それぞれ2~5個の同義語だけを抽出します

ジャーナル順位の意図を認識する(追加機能 — クエリに分区の指定がある場合にのみ動作します)。 概念ブロックを抽出する前に、ユーザーのクエリにジャーナルの順位/分区を表す語句(「中科院一区」、「Q1」、「JCR Q1」、「SJR Q2」、「顶刊 / top journal」)が含まれているか確認します。含まれている場合、その語句はフィルター条件であり、検索語ではありません。検索前にトピックから必ず取り除いてください。これにより、この機能のきっかけとなった問題を解消できます。「中科院一区 情绪调节」は、以前は「中科院一区」をトピック語として検索エンジンに渡していたため、「情绪调节」をテーマとする論文を CAS の第1区分でフィルターするのではなく、「中科院一区」についての論文を検索していました。決定論的パーサーが抽出と削除の両方を行います。

PYTHONPATH=$PSP_HOME python3 -c "
from scripts.rank_intent import parse_rank_intent
i = parse_rank_intent('''<original user query>''')
import json; print(json.dumps({
  'platform': i.platform, 'tiers': i.tiers, 'quartiles': i.quartiles,
  'top': i.top, 'ambiguous': i.ambiguous, 'candidates': i.candidate_platforms,
  'cleaned_query': i.cleaned_query, 'stripped': i.matched}, ensure_ascii=False))
"

続いて、解析結果に応じて処理します。

  • cleaned_query は順位関連語を取り除いた検索入力です。STEP 3 のクエリとクエリプランを作成するときは、生のクエリではなく、これを使用します。SEARCH_TOPIC やレポートのタイトルとして自動的に使われるわけではありません。以下のセマンティックプランニングの段階で、会話上の文言や操作上の文言を引き続き取り除きます。クエリに順位関連の表現がなかった場合、cleaned_query == query となり、検索の動作は変わりません(R-19)。
  • platform と tiers/quartiles/top は、STEP 5 の直後に適用するフィルターです。これらを覚えておき(query_plan.json では rank_filter として記録します)、ここではフィルタリングしないでください。
  • ambiguous == True(プラットフォームを示す語がなく、区分または四分位だけが指定されている場合。例:単独の「Q1」や「SSCI 一区」—認識器はプラットフォームを推測しません):先に進む前に、candidates に含まれるプラットフォームを提示して、ユーザーに短く質問します。例:「JCR と SJR のどちらの Q1 で絞り込みますか?」/「中科院分区と JCR 分区のどちらで絞り込みますか?」。さらに「ついでに、今後のデフォルトに設定しますか?」と尋ねます。CLI/ヘッドレスの経路では質問できないため、この質問は人間が操作する経路で行います。
  • クエリに分区の指定がまったくない場合は、この処理をすべて省略し、STEP 1 をこれまでどおり進めます。

期間の指定 — 検索前に対象年の範囲を決めます。 📖 references/query_planner.md §「Year filter heuristics」。依頼を次の4つのケースのいずれかに分類します。

  • 明示的な期間(「2020–2024」「近两年」「2023 年以后」「last 3 years」「只要 2026 年的」)→ year_min / year_max を設定します。相対的な期間は現在の年から遡って計算します(「近两年」=現在の年 − 1 … 現在の年)。質問はしません。一行で伝えます:「今回は 2025–2026 年に限定します。」

  • 数字を伴わない「新しい」(「最新」「最近」「近年」「前沿」「recent」「latest」「cutting-edge」)→ どの程度最近のものを指すのかが本当に曖昧で、検索結果が変わります。config.recent_years が設定されている場合はそれを使用し、一行でその旨を伝えます。設定されていない場合は、質問を一つだけします。上記の言語やランクに関する質問がある場合は同じメッセージ内で尋ね、二度目のやり取りにはしません:

    「最新」とはどのくらい最近のものですか?直近 1 年/2 年/3 年/5 年、または期間を直接指定してください(例:2023–2026)。「以后都这样」と言えば、デフォルトとして記録します。

    明示的に「以后都…」と指定された場合に限り、~/.paper-search-pro/config.yaml に recent_years: <N> を保存します(search_language と同じ仕組みです)。

  • 古典的な文献(「经典」「奠基」「起源」「seminal」「classic」)→ 年の範囲は設定せず、STEP 3 で seminal を追加します。

  • 指定なし(ほとんどのリクエスト)→ 年の範囲は設定せず、質問もしません。STEP 3 の最近の文献の検索で、直近 1 年とその前の 2 年から最も関連性の高い論文が得られます。一行で伝えます:「期間の指定がないため、今回は年を限定せず、直近 1 年の新しい文献も別途補います。近年の文献だけを対象にしたい場合は、「只要近两年」と指定してください。」 いずれにせよ言語やランクに関する質問をする場合は、同じメッセージ内で期間の選択肢を提示してもかまいません。

  • Audit tier:日付制限はプロトコルに含まれます(PRISMA-S で報告されます)。すでに行う Audit 確認の一環として、期間を確認します。

ホストに構造化された選択肢を提示するツール(Claude Code の AskUserQuestion、または選択肢として表示されている場合の Codex の request_user_input)がある場合は、自由入力とともにこれらの選択肢を提示して質問します。ない場合はテキストで尋ねます。エージェント/ヘッドレス経路では質問せず、指定された --year-min / --year-max を使用します。

Quick tier でも、このステップを簡略化して実施する必要があります。黙って省略しないでください。出力:1~3 件の検索戦略(概念ブロック+期間+文献種別フィルター)。"$SEARCH_DIR/query_plan.json" に {"strategies": [{"query": "..."}, ...], "year_min": …, "year_max": …, "rank_filter": {"platform": "cas", "tiers": [1, 2]}, "work_type_filter": …} として書き込みます(ほかのキーを含めてもかまいません。該当しないものは省略してください)。レポートの監査タブと PRISMA-S ログ(STEP 12a、13)は、ここからクエリとフィルターを読み込みます。

SEARCH_TOPIC を定義します。ただし、レポートのタイトルはまだ確定しません。 references/report_title.md の §「STEP 1」を読みます。SEARCH_TOPIC は概念ブロックから導かれる、正規化された意味的な検索範囲です。正規表現で一致した箇所を少し取り除いただけの、ユーザーの文章ではありません。挨拶、ツール/出力の指示、tier/言語/日付/データベースの制約、およびその他の操作上の指示を除外し、科学的概念に該当する場合に限り、対象集団、曝露/介入、アウトカム、メカニズム、設定を残します。PRISMA-S 用に、ユーザーのメッセージ全文は USER_QUERY として別に保持します。最終的な表示用タイトルは、保持したエビデンスが判明した後、STEP 11 で作成します。

ステップ 2 — STEP 1 で定めた言語圏内で補助ソースを振り分ける

📖 このステップの前に、references/source_routing.md をお読みください。

ルーティングの判断は、クエリの分野を見て行います。参照資料のキーワード表は判断基準の例であり、一致する語句の一覧ではありません(CJK 検出や明示的な --flags など、機械的に判定できる事実は決定論的に処理します)。STEP 1 で定めた言語圏内で、分野別の補助ソースを振り分けます。

  • 英語圏(en、または both の英語側) — v2.2 から変更ありません。
    • 医学関連のシグナル(RCT、PRISMA、MeSH、臨床、疾患名)→ PubMed を有効化
    • CS/AI 関連のトピック(機械学習、LLM、transformer、NeurIPS、コンピュータビジョンなど)→ arXiv の最新レイヤーと OpenReview を有効化(ICLR/NeurIPS/ICML/COLM/TMLR の査読プラットフォーム。採択会場のラベル(「ICLR 2026 Oral」など)や、OpenReview のみに収録されている一部の論文を追加します)
    • 新しさを示すシグナル(プレプリント、「最新」、「今週」)→ 4日間の arXiv センチネルも有効化
    • 複数分野にまたがる場合(例:「放射線医学におけるAI」)→ 両方を有効化
    • 社会科学/人文学のみ → OpenAlex のみ
    • (判断事項:AI/CS の中心的なクエリでは、主要エンジンとして Semantic Scholar も選択できます。source_routing.md §「AI / CS queries → consider Semantic Scholar as primary」を参照してください。)
  • 中国語圏(zh、または both の中国語側) — 分野に応じて、同様に中国語向けの補助ソースを振り分けます。
    • 社会科学/人文学を示すシグナル → NSSD(国家哲社文献中心)を追加(OpenAlex ではほとんどカバーされていない CSSCI 収録ラベルを保持しています)
    • 医学関連のシグナル → yiigle(中华医学期刊全文数据库)を追加。PubMed も MEDLINE に収録された中华系ジャーナルをカバーするため、両者は相互補完的です
    • これらに該当しない科学技術分野のみ → 中国語側は OpenAlex のみで検索します(科学技術分野の中国語主要ジャーナルの多くは DOI を登録しているため、OpenAlex で十分にカバーできます)

1行で報告します(軸3の形式。質問ではなく、説明文です。22 §6.3)。英語のみで実行する場合は、PubMed/arXiv の通知を使用します(「医学とAIのシグナルを検出しました。PubMed、arXiv(昨年分)、OpenReview でも検索します。--no-pubmed で無効にできます。」)。中国語圏の場合の例:

本次按「中英都要」检索;中文侧检测到社科主题,已加 NSSD(国家哲社文献中心)。想去掉说 --no-nssd,只查一边说"只要英文/中文"。

カバレッジについても通知で正確に伝えます。 中国語圏に社会科学のトピックがあり、ユーザーが NSSD を使わないことを選んだ場合、OpenAlex では CSSCI の主要ジャーナル(经济研究/管理世界など)がほとんどヒットせず、そのレイヤーが欠けることを伝えます。ユーザーは明示的な指示でこれらをすべて上書きできます(クエリごとの上書きは他の設定より優先されます)。

上記の --flag 形式の略記(--no-nssd、--no-pubmed、--source …)について: この人間向けの経路では、これらは自然言語での上書きを表す表記です。ユーザーが言うこと(「NSSD を除外する」/「OpenAlex のみで検索する」)を簡潔に記述するものであり、LLM が解釈します。実行可能な CLI フラグではありません。ここではスクリプトが解析することはありません。実際にスクリプトが解析するフラグがあるのはエージェント/ヘッドレス経路(agent_search)のみで、そこでは中国語ソースはオプトイン方式です。--with-nssd/--with-yiigle を指定します(--no-nssd/--source はありません)。references/agent_mode.md を参照してください。

STEP 3 — OpenAlex から取得する(詳細)

📖 このステップの前に、references/openalex_helper_cheatsheet.mdをお読みください。

OpenAlex を必ず最初に実行してください。(OpenAlex は既定の主要ソースです。config.yamlのprimary_sourceで変更できます。Primary source selection & quota fallbackについては、references/source_routing.mdを参照してください。)

OpenAlex で呼び出しに対応できない場合(1日の予算を使い切った、スロットリングが継続している、障害が発生している場合)、openalex_helperは同じ呼び出しをSemantic Scholarから処理し、同じ形式のJSONを出力します。フラグも設定も不要です。その場合、標準エラー出力に[paper-search-pro] OpenAlex unavailableで始まる1行が表示されます。ルールCに従い、ユーザーに1文で伝えて処理を続けてください。確認のために処理を止めないでください。Semantic Scholarでも対応できない場合は、これまでのOpenAlexエラーと同様に、呼び出しは終了ステータス3で終了します(標準出力は引き続き有効なJSONです)。標準エラー出力には何が起きたかとOpenAlexのリセット時刻が表示されるため、OpenAlexエラーの場合と同様にユーザーに報告してください。例外はjournal-listです。これまでどおり、空の結果が終了ステータス0で返されます。

Standard+ティアでは、複数の戦略で詳細なクロールを行います。

PYTHONPATH=$PSP_HOME \
  python3 -m scripts.openalex_helper double-sort "<query>" \
    --n 50 \
    > "$SEARCH_DIR/raw/openalex.json"

3つの検索を1つのファイルにまとめます。被引用(トピックで最も引用されている研究)、新着(過去12か月間の最も関連性の高い研究と、その前の2年間の研究)、関連性(全体で最も一致度の高い研究)です。今年の論文を見つけるのは新着検索です。関連性の順位付けは引用数を重視するため、これがないと新しい研究はほとんど表示されません。

Quickティアでは、関連性検索に規模を縮小した新着検索を加えます。

PYTHONPATH=$PSP_HOME \
  python3 -m scripts.openalex_helper search "<query>" \
    --limit 30 --recent 20 \
    > "$SEARCH_DIR/raw/openalex.json"

次に、OpenAlex がメインクエリに対して保持している研究の数を記録します。レポートの年別チャートの下に1行で記載することで、直近の棒が低くても、その分野が小さいと誤解されないようにします(件数はSTEP 1の期間内のタイトルと抄録の一致数です。期間がない場合は、過去2年間が対象です)。

PYTHONPATH=$PSP_HOME \
  python3 -m scripts.openalex_helper count "<query>" [--year-min YYYY] [--year-max YYYY] \
    > "$SEARCH_DIR/pool_count.json"

countが30件未満を示す場合、またはヘルパーが単語だけのクエリが長く続いていると警告した場合は、クエリが狭すぎます(トピックが本当にニッチな場合を除く)。STEP 1のように語句をまとめ直し、分類する前に取得をやり直してください。

取得コマンドにもSTEP 1の期間を追加します。--year-min YYYY / --year-max YYYY(両端を含む)を指定してください。期間を指定しない場合は追加されません(ヘルパーはそれぞれ現在の年までに制限します)。新着検索は指定期間内に収まります。過去に終了する期間の場合は、その期間の最終年を対象にします。

raw/には取得結果のみを保存します。検索ごとに1ファイルとし、ヘルパーが書き出した状態のままにします。 STEP 7では、これらの個別の検索で同じ論文が見つかった頻度から網羅度を推定します。そこから作成したサブセット、統合ファイル、スクリーニング済みのコピーはraw/ではなく"$SEARCH_DIR/_working/"に保存してください。raw/に置くと、すべてを再発見した別の検索結果のように見えてしまいます。

サブコマンドとフラグの完全なリファレンス(search / double-sort / seminal / reviews / journal-list / citation-network。すべてargparseとの照合済み)は、references/openalex_helper_cheatsheet.mdにあります。上記2つのコマンド以外を使う前にお読みください。Deep+Auditでは、トピック固有のサブコマンド(例:seminal、reviews、journal-list)も呼び出し、出力を$SEARCH_DIR/raw/openalex_*.jsonに追記して、STEP 5ですべてをフェデレーションしてください。

STEP 4 — L2 ブースターを実行する(STEP 2 で有効になっている場合)

📖 このステップの前に、references/pubmed_helper_cheatsheet.md と references/arxiv_helper_cheatsheet.md を読んでください。

PubMed — デフォルトモードは search ではなく enrich です:

  • Standard/Deep ティア:OA で見つかった論文に MeSH 用語を付与します(openalex.json ファイルをその場で変更します):
    PYTHONPATH=$PSP_HOME \
      python3 -m scripts.pubmed_helper enrich \
        --input-file "$SEARCH_DIR/raw/openalex.json" \
        --output-file "$SEARCH_DIR/raw/openalex.json"
    
  • 明示的な MeSH クエリを使う Audit ティア:独立した MeSH 検索を行います(後でフェデレーションする新しいファイルを生成します):
    PYTHONPATH=$PSP_HOME \
      python3 -m scripts.pubmed_helper search-mesh "Diabetes Mellitus, Type 2" \
        --year-min 2020 --limit 30 --pub-type "Randomized Controlled Trial" \
        > "$SEARCH_DIR/raw/pubmed.json"
    
  • 汎用の pubmed_helper search は、MeSH 用語が不明な場合のフォールバックです。可能な限り enrich または search-mesh を優先してください。

arXiv — CS/AI トピック:最近の論文レイヤー。 過去 1 年間で最も関連性の高いプレプリントを検索します(OpenAlex の arXiv インデックスは遅く、不完全です。ある確認では、OpenReview にあった最近のトピック関連論文 20 件のうち 7 件が OpenAlex にありませんでした)。

PYTHONPATH=$PSP_HOME \
  python3 -m scripts.arxiv_helper search "<query>" \
    --sort relevance --since-days 365 --limit 30 \
    > "$SEARCH_DIR/raw/arxiv.json"

鮮度に関するシグナル(「最新」、プレプリント、「今週」)— 4 日間のセンチネルも対象:どのインデックスにもまだ載っていない新しすぎるプレプリントを検索します。

PYTHONPATH=$PSP_HOME \
  python3 -m scripts.arxiv_helper freshness "<query>" \
    --days 4 --limit 30 \
    > "$SEARCH_DIR/raw/arxiv_fresh.json"

クエリ内の通常の単語はすべて必須です(arXiv では OR 検索になります)。どちらのコマンドも、arXiv の失敗時またはタイムアウト時には [] と stderr メッセージを出力します。そのまま続行してください(Rule C:その旨を 1 行で伝えます)。

サブコマンドのリファレンス:

  • arxiv_helper freshness <query> --days N --limit M [--all-cats]
  • arxiv_helper search <query> --limit M --sort submitted|relevance|lastUpdated [--since-days N] [--all-cats]
  • arxiv_helper get <arxiv_id>

OpenReview — CS/AI トピックのみ。 📖 references/openreview_helper_cheatsheet.md。ICLR、NeurIPS、ICML、COLM、TMLR の査読プラットフォームです。ヘルパーが返すのは採択論文のみで、「ICLR 2026 Oral」のようなラベルが付きます。これは OpenAlex や Semantic Scholar にはなく、これらのサービスでは arXiv プレプリントとして掲載されています。STEP 5 では、各論文を同じ論文の arXiv/OpenAlex レコードに統合します。

PYTHONPATH=$PSP_HOME \
  python3 -m scripts.openreview_helper --search "<query>" --n 30 \
    [--year-min YYYY] [--year-max YYYY] \
    --output-file "$SEARCH_DIR/raw/openreview.json"

匿名で利用できるのは検索エンドポイントのみです。OpenReview にブロックされた場合、ヘルパーは [] を返します。その旨を 1 行で伝えて続行してください。

NSSD/yiigle — 中国語ブースター(STEP 1-2 で今回の実行が zh 空間に分類され、分野ルーティングで選択されたものに限る):

それぞれが中国語空間向けの独立した一次情報源(ss_helper --search と同じ役割)であり、openalex.json と同じ UnifiedPaperEntity 形式を出力するため、STEP 5 では同様にフェデレーションされます。クエリは中国語のままにし(翻訳しないでください — query_planner §Cross-language)、raw/nssd.json/raw/yiigle.json に書き出してください。

# NSSD — Chinese social-sciences & humanities (adds the CSSCI-tier layer OpenAlex lacks)
PYTHONPATH=$PSP_HOME \
  python3 -m scripts.nssd_helper --search "<中文检索式>" \
    --n 50 [--year-min YYYY] \
    > "$SEARCH_DIR/raw/nssd.json"

# yiigle — Chinese medical (中华医学期刊全文数据库; native-Chinese titles + abstracts)
PYTHONPATH=$PSP_HOME \
  python3 -m scripts.yiigle_helper --search "<中文检索式>" \
    --n 50 [--year-min YYYY] \
    > "$SEARCH_DIR/raw/yiigle.json"

どちらもネットワーク/HTTP エラー時は [] にフォールバックします(例外は発生しません)。空のファイルはフェデレーションしても何も追加されません。どちらも取得するのは書誌情報 + 抄録のみです(コンプライアンス上、全文ダウンロードとキャッシュは行いません)。出典の帰属情報は stderr に出力します。--year-min はクライアント側で絞り込むため、全年度を対象にする場合は省略してください。

config search_language: en なのに中国語のクエリが届いた場合(hard boundary 2): 中国語ブースターを有効にしないでください。ただし、その旨を 1 行で伝えてください。黙って翻訳してはいけません(22 §6.4)。

デフォルト(英語のみを検索)に従い、中国語のテーマを英語の検索式にしました。中国語の文献を検索したい場合は今回その旨をお伝えください。デフォルトを変更したい場合は「今後は…」とお伝えください。

ユーザーが知網/CNKI/万方/維普を指定した場合(マーカー該当 + コンプライアンス): これらは有料購読制のクローズドデータベースであり、PSP はスクレイピングしません。代替手段と検索式のエクスポートを 1 行で案内し、議論を重ねないでください(22 §6.5)。

PSP は知網/万方をスクレイピングしません(コンプライアンス上、クローズドデータベースはスクレイピングしません)。中国語文献は OpenAlex の中国語基盤 + NSSD(社会科学、CSSCI 表記を含む)/yiigle(医学)でカバーします。ただし、CNKI 専門検索構文に沿った知網の専門検索式は作成できます(関連検索の SU %=、ブロック内 OR/ブロック間 AND、英語の半角文字のみ、検索値は単一引用符で囲む)。そのまま**「専門検索」欄に貼り付けて**検索できます。中国語の医学論文なら、SinoMed(CMeSH 統制語による二重検索)も利用できます。エクスポートしますか?

「エクスポートしますか?」への同意は、STEP 11.5 の明示的な依頼トリガーです。ティアを問わずエクスポートを実行してください。

STEP 5 — 統合(重複排除+マージ)

📖 このステップの前に、references/source_routing.md の「Field priority table」を読んでください。

すべての検索結果を単一の重複排除済み KG に統合します。デフォルトの出力は canonical_key をキーとする dict です。これは後で rcs_parser が想定している形式なので、--as-list は渡さないでください。

PYTHONPATH=$PSP_HOME \
  python3 -m scripts.federated_kg_resolver \
    --input-files "$SEARCH_DIR/raw/openalex.json" \
                  "$SEARCH_DIR/raw/pubmed.json" \
                  "$SEARCH_DIR/raw/arxiv.json" \
                  "$SEARCH_DIR/raw/openreview.json" \
    --output "$SEARCH_DIR/kg.json"

実際に作成した入力ファイルだけを渡してください。STEP 2 で有効になっていなかったファイルは省きます(4-day sentinel が実行された場合は raw/arxiv_fresh.json を追加します)。OpenReview のレコードには DOI がありません。リゾルバーはタイトルを照合して、各レコードを同じ論文の arXiv/OpenAlex レコードに統合し、採択された会場名を付与します。STEP 4 で中国語ブースターを実行した場合は、"$SEARCH_DIR/raw/nssd.json" / "$SEARCH_DIR/raw/yiigle.json" を同じ --input-files リストに追加してください。これらのファイルは同一のエンティティ形式で、ほかのファイルと同じように統合されます(CJK に対応した重複排除は Phase 0 の canonical-key 修正で処理されるため、異なる中国語タイトルが同一視されることはありません)。英語のみの実行ではこれらのファイルは存在しないため、呼び出しは v2.2 とバイト単位で同一です(R-19)。DOI の正規化(arXiv の X→x の大文字・小文字)、バージョンの削除、E5b ガード(タイトルと年が同じでも DOI が異なる場合は別々に保持)、およびフィールドの優先順位に基づくマージに対応します。

--as-list もありますが、これは citation_count 順のリストを必要とする利用側向けです。このパイプラインでは使用しないでください。

STEP 1 でジャーナル区分のリクエストが見つかった場合に限り、分類の前にフィルタリングします。 区分は低コストで決定的なフィルターです。区分によって除外される論文を分類するのはコストがかかります。📖 references/journal_metrics.md。kg.json は全候補のままにし、kg_ranked.json を分類してください。

PYTHONPATH=$PSP_HOME \
  python3 -m scripts.rank_filter --kg "$SEARCH_DIR/kg.json" \
    --output "$SEARCH_DIR/kg_ranked.json" --platform cas --tiers 1,2
# JCR / SJR: --platform jcr --quartiles Q1,Q2 ; Top only: --top

すべての論文を 3 つのプラットフォームすべてで評価し、リクエストされたものを保持して、残りを kg_ranked_set_aside.json に書き込みます。出力された帰属情報とともに、印字された件数を 1 行でユーザーに伝えてください(「本次按中科院 1–2 区筛:留 N / 区外 M / 不在该表 K」)。STEP 6 では kg.json ではなく kg_ranked.json をバッチ処理してマージしてください。区分のリクエストがない場合は、この処理をすべて省略します。ほかに変更はありません。

STEP 6 — 並列バッチで分類する(LLMを使用します — メインエージェント + サブエージェント)

📖 このステップの前に、references/classifier_subagent_prompt.md と references/rcs_rubric.md を読んでください。

KGを各10件の論文に分割します。"$SEARCH_DIR/batches/batch_NNN.jsonl" に書き込みます。対象プールがそのティアで分類できる量を超える場合は、引用数ではなく、元ファイル全体から均等に間引きます。新しい論文は引用数がほとんどないため、引用数で絞ると、まさに最近の層が除外されてしまいます。

ディスパッチ前に、$PSP_HOME/references/rcs_rubric.md を実際の絶対パス(例:/Users/alice/.claude/skills/paper-search-pro/references/rcs_rubric.md)に展開し、分類プロンプトテンプレート内の {rubric_path} をそのパスに置き換えます。各サブエージェントは個別のシェルで実行され、$PSP_HOME はエクスポートされていません。そのため、文字列 $PSP_HOME をそのまま渡すと、サブエージェントはルーブリックを見つけられず、スコアの品質が気付かれないまま低下します。プレースホルダーの一覧は references/classifier_subagent_prompt.md を参照してください。

🔥 並列実行は必須です(ルールB):

1つのアシスタントメッセージ内で、複数の Task tool_use ブロックを使って、最大5つの分類サブエージェントをディスパッチする必要があります。順次ディスパッチ(メッセージごとに Task を1つだけ送り、結果を待つ方法)は、これまでに確認された最大のパフォーマンス低下要因で、Standardティアの所要時間を約10分から約17分に延ばします。

✅ 正しい方法 — 1つのアシスタントメッセージ内で:

Task tool_use #1  → subagent_type="general-purpose", prompt="<classifier prompt for batch_001.jsonl>"
Task tool_use #2  → subagent_type="general-purpose", prompt="<classifier prompt for batch_002.jsonl>"
Task tool_use #3  → subagent_type="general-purpose", prompt="<classifier prompt for batch_003.jsonl>"
Task tool_use #4  → subagent_type="general-purpose", prompt="<classifier prompt for batch_004.jsonl>"
Task tool_use #5  → subagent_type="general-purpose", prompt="<classifier prompt for batch_005.jsonl>"

5つすべての tool_use ブロックを同じ <assistant> メッセージに含めることで、並列実行されます。ハーネスによっては5つの結果がまとめて返されますが、サブエージェントをバックグラウンドで起動し、完了したものから結果を報告する場合もあります。いずれの場合も、そのラウンドの batch_NNN_result.json がすべて揃ってから一度だけマージしてください。

❌ 誤った方法 — 5つの別々のメッセージ(順次ディスパッチの例):

Message N:    Task tool_use #1 ─→ wait for result
Message N+1:  Task tool_use #2 ─→ wait for result   ← SERIAL, makes Standard run 70% slower
Message N+2:  Task tool_use #3 ─→ wait for result
...

バッチが5つを超える場合は、複数のメッセージに分けて5つずつ送信します。それぞれのメッセージには、引き続き並列実行する Task ブロックを5つ含めてください。

各サブエージェントはバッチファイルを読み込み、RCSルーブリックを適用して、"$SEARCH_DIR/classifications/batch_NNN_result.json" に書き込みます。その後、分類結果をKGにマージします。

PYTHONPATH=$PSP_HOME \
  python3 -m scripts.rcs_parser \
    --input-dir "$SEARCH_DIR/classifications/" \
    --kg "$SEARCH_DIR/kg.json" \
    --output "$SEARCH_DIR/kg_classified.json"
STEP 7 — 飽和曲線を計算する(すべてのティアで必須)

📖 このステップの前に、references/stop_decision.md を読んでください。

Quickでも、このステップは省略できません。STEP 8の判断には curve.json が使われ、STEP 12でも同じ推定値が表示されます。

PYTHONPATH=$PSP_HOME \
  python3 -m scripts.discovery_curve \
    --kg "$SEARCH_DIR/kg_classified.json" \
    --output "$SEARCH_DIR/curve.json"

curve.json には、ci_lower/ci_upper を伴う coverage_estimate(0~1)と method が記録されます。sample_coverage は、この実行で行った別々の検索が、関連度の高い同じ論文をどの程度再発見したかをもとに推定したことを意味します(relevance_band 7 = rcs ≥ 7、6 = rcs ≥ 6。rcs ≥ 7の論文が少なすぎて推定できない場合に使用します)。prior は測定対象がなかったことを意味します。検索が2回未満、関連論文が見つからなかった、またはいずれかのバンドの件数が少なすぎる場合に該当します。この値は測定値ではなく、50%を上限とするUndermindの中央値事前値です。引用する場合は、その旨を伝えてください。--raw-dir は検索結果の読み込み先を上書きします(デフォルト:--kg と同じ場所にある raw/)。

STEP 8 — 次のアクションを決定する(必須)

📖 このステップの前に、references/stop_decision.md を読んでください。

このステップは省略できません。curve.json、ティアの予算、ユーザーの意図に基づいて、判断を明示的に行い、理由をユーザーに伝えてください。直感だけで判断して、このステップを飛ばさないでください。

判断ツリー(coverage_estimate に基づく):

  • coverage < 0.6 かつ予算が残っており、ティアが {standard, deep, audit} のいずれか → 引用を展開する(STEP 9)
  • coverage > 0.85、または予算を使い切った → 停止してレポートを作成する(STEP 10以降)
  • 判断が曖昧 → 数値をユーザーに伝えて確認する
STEP 9 — 引用を拡張する(該当する場合)

📖 このステップの前に、references/citation_chasing.md を読んでください。

top-rcs 論文(rcs >= 7)について、引用ネットワークを取得します。シードに DOI がある場合は DOI を渡してください。DOI は Semantic Scholar のフォールバックでも使用できますが、W-ID のみでは OpenAlex 以外で解決できません。

PYTHONPATH=$PSP_HOME \
  python3 -m scripts.openalex_helper citation-network <doi_or_openalex_id> \
    --refs-limit 25 --cited-by-limit 25 \
    > "$SEARCH_DIR/raw/citations_01.json"      # one file per seed: citations_02.json, ...

その後、STEP 5 に戻ります。raw/citations_*.json ファイルを --input-files に追加し(リゾルバーはその references / cited_by リストを読み込みます)、STEP 6 で新しいエントリのみを再分類してから、STEP 7 を再実行してください。

STEP 10 — 上位 N 件の論文を拡充する(L3、任意ですが推奨)

📖 このステップの前に、references/ss_helper_cheatsheet.md と references/crossref_helper_cheatsheet.md を読んでください。

rcs >= 6 の論文について、Semantic Scholar(influentialCitationCount + abstract fallback + tldr)で情報を拡充します。どちらのヘルパーも、分類済み KG を読み込み、他のすべてのフィールドはそのままに、新しいフィールドを KG に書き戻します。--min-rcs 6 により、上位論文に対象を限定できます。概要で influential_citation_count に基づいて順位付けできるよう、STEP 11 の前に実行してください。

Quick tier では STEP 10 を省略してもかまいません。ただし、ルール C に従い、省略したことを伝えてください(「L3 拡充を省略 → influentialCitationCount はありません。これを含めるには --tier standard で再実行してください」)。

# Semantic Scholar — adds influentialCitationCount + abstract fallback + tldr
PYTHONPATH=$PSP_HOME \
  python3 -m scripts.ss_helper \
    --input-file "$SEARCH_DIR/kg_classified.json" \
    --mode enrich --min-rcs 6 \
    --output-file "$SEARCH_DIR/kg_classified.json"

拡充した論文の件数と、Semantic Scholar が拒否した場合(キーの拒否、レート制限など)はその理由を示す stderr の行が 1 行出力されます。件数が少ない場合は、その行を伝えてください。いずれの場合も実行は続行されます。

CrossRef(資金提供者/ライセンス/臨床試験番号)は、それらが重要な場合に限って使用してください — 臨床や資金に関する質問、またはユーザーから依頼があった場合です。レポートにはこれらのフィールドは表示されません。

PYTHONPATH=$PSP_HOME \
  python3 -m scripts.crossref_helper \
    --input-file "$SEARCH_DIR/kg_classified.json" \
    --mode all --min-rcs 6 \
    --output-file "$SEARCH_DIR/kg_classified.json"

任意(追加機能)— ジャーナル区分(中科院 / JCR / SJR)。 マルチプラットフォームの区分レイヤーでは、すべての論文に 3 つすべてのプラットフォームのラベルを付与します。これはオプトインで、デフォルトでは無効です。スキップしても、レポートはバイト単位で変更されません(R-19)。📖 まず references/journal_metrics.md を読んでください(ソース、ISSN の結合、帰属、R-04 の命名に関する SSOT です)。

  • 初回利用時には一度だけ取得が必要です(初期化は一度きり。データは実行時に ~/.paper-search-pro/ranks/ に取得され、リポジトリには同梱されません)。まだ取得していない場合は、一度実行してください(これは一度限りの手順であることをユーザーに伝えてください)。
    PYTHONPATH=$PSP_HOME python3 -m scripts.journal_rank fetch          # all three
    # or a single platform: ... journal_rank fetch --platform cas
    PYTHONPATH=$PSP_HOME python3 -m scripts.journal_rank info           # what's cached
    
  • 区分が指定されている場合 → 論文には STEP 5 の直後にすでにラベルが付与され、フィルタリングも済んでいます。ここで行うことはありません。
  • 区分が指定されておらず、ユーザーが区分の表示を希望する場合 → ラベル付与のみ行います(フィルターなし)。
    PYTHONPATH=$PSP_HOME python3 -m scripts.rank_filter \
      --kg "$SEARCH_DIR/kg_classified.json" --output "$SEARCH_DIR/kg_classified.json"
    
    キャッシュがない場合は、ヒントが 1 行表示されるだけで、何も変更されません。区分を有効にするには journal_rank fetch を実行できることをユーザーに伝えてください。
  • R-04 の命名は、シリアル化された dict で自動的に適用されます。impact_factor(実際の IF)を公開するのは JCR のみです。中科院の「区」と SJR の四分位は 分区/quartile です。
STEP 11 — エグゼクティブサマリーを作成する

📖 このステップの前に、references/summary_writer.mdを読んでください。

📖 さらに、references/report_title.mdを読んでから、サマリーと併せてDISPLAY_TITLEを作成してください。これは、保持されたコーパスに基づいて確定する、学術的かつエビデンスの範囲に即したレポートタイトルです。USER_QUERY、SEARCH_TOPIC、フィルターリストをそのままコピーしてはいけません。レポートの中心となるストーリーとビジュアルアイデンティティを表すタイトルにしてください。言語、日付、データベース、ジャーナルランク、エクスポート、ワークフローに関する要件は、それ自体が科学的に意味を持つ場合を除き、Methods / PRISMA-Sに記載します。エビデンスから具体的なタイトルを付けられない場合は、生のリクエストをH1に使うのではなく、ローカライズされた安全なフォールバック(文献检索报告 / Literature Search Report)を使用してください。STEP 12の前に、参照資料の事前レンダリング受け入れチェックを実行してください。

分類済み論文に基づき、約300語のエグゼクティブサマリーを自分の言葉で作成してください。

  • 分野における主なコンセンサス
  • 主な手法/理論的枠組み
  • 注目すべき見解の相違や未解決の課題
  • 最も影響力のある論文の上位3~5件(利用可能な場合はinfluential_citation_countに基づく)
  • (任意) STEP 10でSJR指標を付与した場合は、主要論文のジャーナルランクを記載してもかまいません。「SJR分区 / 期刊影响力」と表現し、「影响因子 / JCR」とは決して表現しないでください(R-04)。指標を付与していない場合、この項目は完全に省略してください。

"$SEARCH_DIR/summary.md"に保存してください。

分区のデフォルト/確認/フィルター/レポート/切り替えフロー(追加ルール — 分区を使う場合のみ)。 ジャーナル分区を使う場合(STEP 5後にフィルタリングした場合、またはSTEP 10でラベル付けした場合)は、このフローに従ってください。これは完全にオプトインであり、分区を使わないデフォルトのフローには何も変更を加えません(R-19)。

  • 工場出荷時のデフォルト基準はJCRです。 永続的なデフォルトは設定rank.default_platformに保存されます(初期設定はjcr。ユーザーはcas/sjrに設定できます)。デフォルトのプラットフォームは各論文にラベルを付けるだけであり、ユーザーが分区を指定しない限り、フィルタリングは行いません。
  • 分区の指定がなければ、フィルタリングしないでください。 STEP 10の注釈付けで既に行われているとおり、各論文の3プラットフォームすべてのラベルを表示し、ユーザーが確認・絞り込みできるようにします。ユーザーが求めていない分区フィルターを決して勝手に設定しないでください。
  • 分区が指定された場合(STEP 1の意図、または今回のユーザーの指示)→分類前に一度だけフィルタリングします(STEP 5の直後にrank_filterを使用)。STEP 1の解析結果(platformとtiers/quartiles/top)を使用してください。リクエストごとの分区フィルターは一時的なものです。設定に自動保存してはいけません。永続的なデフォルトを変更するのは、ユーザーが明示的に「以后都用 X」と指定した場合だけです。
  • プラットフォームの指定がなく、永続的なデフォルトもない状態で「Q1」だけが指定されて曖昧な場合は、短い質問を1つしてください(STEP 1ですでに尋ねているはずです。まだなら今尋ねてください)。「按 JCR 还是 SJR?顺带设默认吗?」 簡単な確認は歓迎しますが、質問しすぎないでください。
  • 今回の実行内容は必ず報告してください。 フィルタリング後、ユーザーに1行で伝えます。「本次按 {platform} 筛(留 N / 滤 M」。さらに、控えめに次のように案内します。「可换中科院/JCR/SJR 或换档位、可设为以后的默认。」 プラットフォームごとの出典情報(journal_rank.ATTRIBUTION[platform])も含めてください。
  • 基準や分区の切り替えでは、検索し直すのではなく、候補群を再フィルタリングします。 ユーザーが「换成中科院二区」や「看看 SJR Q1」と指定した場合、検索を再実行しないでください。新しいプラットフォーム/分区を指定して、候補群全体のkg.jsonに対してrank_filterを再実行します(数秒で完了します)。新たに採用された論文にはまだスコアがないため、その論文だけを分類し(STEP 6)、次に--kg kg_ranked.jsonを指定して、すべてのclassifications/に対しrcs_parserを再実行します。再フィルタリング後に残る論文が少なすぎる場合に限り、STEP 3に戻って検索を深めます。この「切り替え=再フィルタリング、再検索しない」というルールにより、分区の探索を低コストで行えます。
  • デフォルトの永続化(明示的に「以后都用 X」と指定された場合のみ):~/.paper-search-pro/config.yamlのrank.default_platformを設定します。分区の値は永続化せず、プラットフォームのデフォルトのみを保存します。
  • サマリーの項目でもR-04の表記ルールに従ってください。 中科院の「区」とSJRの四分位は分区 / quartileです。JCR IF(2024)だけが影响因子 / Impact Factorです。OpenAlexの2yr-mean-citednessの数値は「期刊影响力」(オープン)とし、JIFとは決して表現しないでください。
STEP 11.5 — 検索式をエクスポートする(オプトイン — デフォルトの手順では実行しない)

トリガーマトリックス — 何よりも先に、表に出さずに判断してください:

実行モードエクスポートの動作
Quick実行しません。言及せず、質問もしないでください — STEP 12 に進みます。このように何も言わずにスキップするのは、ルール C の唯一の例外です。スキップを告げること自体が、変更のないデフォルトの手順を乱すためです(R-19)。
Standard検索中には実行しません — 質問せず、STEP 12 に進みます。**STEP 14 では、今回の実行にエクスポートで補える不足がある場合に限り、1文だけで提案してください:検索対象に中国語(zh / both)が含まれていた(知網 / 万方は PSP では到達できない文献の多くを収録しています)、または coverage_estimate < 0.6(他のデータベースで補完できます)。そのような不足がなければ何も言いません。今回の実行で STEP 4 の提案をすでに行っている場合は、提案をスキップしてください。受け入れられた場合はこのステップを実行し、その後 12a–12c を再実行して、レポートにエクスポートタブを追加します。
Deep1度だけ、控えめな文で提案してください:「各プラットフォームに貼り付けられる専門的な検索式も、あわせてエクスポートしますか?」 受け入れられた場合は実行します。断られた場合、または返答がない場合は、それ以上言及せずスキップします。
Auditデフォルトで実行します — Audit の免責事項で約束している成果物です(例 4)。
明示的な依頼、すべてのティア「WOS の検索式を作って」/「知網で調べたい」/「検索式をエクスポートして」/STEP 4 の知網の提案を受け入れた場合 → ティアに関係なく、ただちに実行します。

📖 このステップの前に(実行する場合)、references/search_export/methodology.md を読んでください — 以下のすべての意味的判断のルールブックです。zh/both の検索対象から CNKI / 万方 / SinoMed にエクスポートする場合は、references/search_export/chinese_methodology.md も追加で読んでください(中国語の検索式は、西洋のブール検索式を逐語訳したものではありません)。

レイヤー 1 — 意味論。これはあなた(メインエージェント)の作業です(スクリプトが行うのは構文の組み立てだけです):

  1. "$SEARCH_DIR/query_plan.json" の概念ブロックを、methodology.md のブロック規則に従って再構築します — ブロック内の OR は1つの概念の同義語のみ、ブロック同士は AND で結合します。デフォルトは2ブロック(P+I)です。C/O は、主要な概念であり、タイトル/抄録で一貫して報告されている場合に限ります。NOT は禁止です。query_plan のブロックをそのままコピーしないでください。この再構築で、複数の概念が混在したブロックを修正します。
  2. ブロックごとに同義語と検索語を拡張します — 綴りの異形(tumour/tumor)、略称と正式名称(MBSR + "mindfulness-based stress reduction")、関連語などです。zh / both の実行では、各ブロックの free_text_zh に中国語の同義語も設定します(簡体字/繁体字/別名/正式名称–略称の異形 — 中国語には語尾の切り詰め検索がないため、明示的に列挙します)。CJK の検索先(CNKI / 万方 / SinoMed)は free_text_zh のみを読み取ります。これがないブロックが1つでもある場合、中国語の検索式はすべて正直に保留されます — 英語の語句を中国語データベース向けに変換することはありません。
  3. プラットフォームごとに統制語彙の候補を判断します — MeSH / Emtree / CINAHL / APA / CMeSH は、ライブラリごとに独立して判断します。あるシソーラスの用語を、別のシソーラス用に記号置換してはいけません。STEP 4 ですでに KG に補完されている MeSH(実際のヒットから得られた実際のディスクリプタ)を優先してください。
  4. Audit の全プラットフォーム一覧(PubMed、WOS、Scopus、Embase、Cochrane CENTRAL、PsycINFO、CINAHL、ERIC、IEEE Xplore、ACM DL、EconLit、CNKI、万方、SinoMed、ClinicalTrials.gov)から、分野に応じて対象を絞ります — 医学のトピックに IEEE/ACM は不要です。社会科学のトピックに Cochrane/SinoMed は不要です。zh / both の実行では、必ず CNKI + 万方 + SinoMed を含めます。
  5. 登録バイアスはティアに従います(audit = 再現率重視、統制語彙とフリーテキストの二重トラック)。研究デザインのフィルター(例:RCT)が必要な場合は、📖 references/search_export/filters_library.md を参照してください — 検証済みの定型フィルターをそのまま使用し、独自のものを書かないでください。また、CENTRAL にはフィルターを追加しないでください。
  6. 構文を作成する前に、1〜5 を PRESS の6領域に照らしてセルフレビューします。📖 references/search_export/press_checklist.md。 結果をジェネレーターのラッパー形式 {topic, framework, register, language_space, search_id, platforms, concept_model: {blocks (free_text + free_text_zh on zh/both + controlled_vocab_candidates), operator_logic, omitted_blocks + reasons, register_notes}} で "$SEARCH_DIR/concept_model.json" に書き込みます。omitted_blocks.reason と register_notes はユーザーの言語で記述してください。ユーザー向けの search_strategies.md にそのまま表示されます(中国語話者のユーザーには、英語のままではなく中国語の注記を表示します)。

レイヤー 2+3 — 機械的な組み立てと検証(スクリプトの役割。ホストごとの構文を手作業で組み立てないでください):

PYTHONPATH=$PSP_HOME \
  python3 -m scripts.search_export.generate \
    --concept-model "$SEARCH_DIR/concept_model.json" \
    --out "$SEARCH_DIR"

オプションのフラグ(argparse に照らして確認済み):--platforms pubmed,wos,cnki(CSV)はラッパーの platforms を上書きします。--topic / --framework / --register / --language-space / --search-id はラッパーの実行レベルのフィールドを上書きします。--no-verify-vocab は MeSH/ERIC の無料 API チェックをスキップします(用語には未検証の印が付きます)。--live-verify-links は各 A-tier リンクにライブ GET を行い、最新の verified_http / 日付を取得します。

search_strategies.md(プラットフォームごとの貼り付け用)と search_strategies.json を出力します。内部では、ホストごとの構文カード(references/search_export/syntax_cards/<host>.md)と近接変換テーブルを読み込み(n 値は手計算しません。あなたも計算しないでください)、無料の A-tier プラットフォーム(PubMed / ERIC / ClinicalTrials.gov)のみクリック可能なディープリンクを作成します(ログインや CAPTCHA の壁を迂回するリンクは作成しません)。MeSH/ERIC の用語を API で検証し、Emtree/CINAHL/APA/CMeSH には「待人工核对」の印を付け、各検索式をリントします。リンターに拒否された検索式は出力せず、非表示にします。後続処理での取り込み:STEP 12a は report_data.json の隣にある search_strategies.json を自動検出して取り込みます(追加フラグは不要です)。STEP 13 では、prisma_s_logger コマンドに --search-strategies "$SEARCH_DIR/search_strategies.json" を追加すると、PRISMA-S の項目 8/1/9/10 がこのファイルから補完されます。

引き渡し前に確認すること(誠実さを保つための最終確認):.json には各プラットフォームの 3 段階の検証ラベル(🟩机械已验 / 🟨语法已验·词表待核 / 🟦结构参考)と確認事項が含まれています。内容が正しいことを確認してください。ユーザー向けの .md では、これらがプラットフォームごとの平易な「使用前请核对」注記として表示されます(内部用語は使いません)。各注記が明確で、具体的な対応につながることを確認してください。購読の壁があるプラットフォームには「需机构登录,未在墙内实测」と正直に明記します。CNKI / 万方 / SinoMed 向けには、URL ではなく、検索ボックスに貼り付ける検索式を用意します。品質については「专业初稿 + 标注复核点」の範囲にとどめ、「可署名直用 / 馆员级」とは決して言わないでください。

STEP 12 — レポートをレンダリングする

📖 このステップの前に、references/output_files.md を読んでください。

# 12a. Materialize data for the renderer (also writes sibling chart_data / paper_list / metadata / prisma_log)
PYTHONPATH=$PSP_HOME \
  python3 -m scripts.data_materialization \
    --kg "$SEARCH_DIR/kg_classified.json" \
    --summary "$SEARCH_DIR/summary.md" \
    --query "<original query>" \
    --search-topic "$SEARCH_TOPIC" \
    --display-title "$DISPLAY_TITLE" \
    --language "$UI_LANG" \
    --tier "<quick|standard|deep|audit>" \
    --search-id "$SEARCH_ID" \
    --snapshots "$SEARCH_DIR/curve.json" \
    --output "$SEARCH_DIR/report_data.json"

# 12b. Render HTML (Shadcn webartifacts — only renderer; no size cap)
#      --language $UI_LANG selects EN vs ZH UI; the bundle ships with both
#      dictionaries inlined, $UI_LANG just picks which one mounts. Resolution
#      order inside the renderer is: explicit --language > metadata.language > en.
PYTHONPATH=$PSP_HOME \
  python3 -m scripts.html_renderer_webartifacts \
    --data "$SEARCH_DIR/report_data.json" \
    --output "$SEARCH_DIR/report.html" \
    --query "<original query>" \
    --search-topic "$SEARCH_TOPIC" \
    --display-title "$DISPLAY_TITLE" \
    --language "$UI_LANG"
#     add --rank-platform cas|jcr|sjr when this run filtered on a platform,
#     so the badges and zone filter show that platform (default: JCR)

# 12c. MD report (uses materialized-dir for speed)
PYTHONPATH=$PSP_HOME \
  python3 -m scripts.md_report \
    --materialized-dir "$SEARCH_DIR" \
    --summary "$SEARCH_DIR/summary.md" \
    --query "<original query>" \
    --search-topic "$SEARCH_TOPIC" \
    --display-title "$DISPLAY_TITLE" \
    --language "$UI_LANG" \
    --tier "<quick|standard|deep|audit>" \
    --output "$SEARCH_DIR/report.md"

# 12d. Exports (BibTeX / RIS / CSV / papers.json — only rcs >= 5 by default)
PYTHONPATH=$PSP_HOME \
  python3 -m scripts.generate_exports \
    --kg "$SEARCH_DIR/kg_classified.json" \
    --output-dir "$SEARCH_DIR/" \
    --min-rcs 5

12a~12c で No scholarly display title was given と表示された場合は、DISPLAY_TITLE が空で、レポートの H1 に汎用の代替タイトルが使われています。タイトルを設定し(STEP 11、references/report_title.md)、12a~12c を再実行してください。検索をやり直す必要はありません。

data_materialization では、自分で経過時間を記録している場合、--wall-clock-seconds を指定できます。指定しない場合、利用可能であればヘルパーがセッションのタイムスタンプから経過時間を計算します。

STEP 13 — PRISMA-S ログを作成する

📖 このステップの前に、references/prisma_s_checklist.md を読んでください。

PYTHONPATH=$PSP_HOME \
  python3 -m scripts.prisma_s_logger \
    --search-id "$SEARCH_ID" \
    --kg "$SEARCH_DIR/kg_classified.json" \
    --user-query "<original query>" \
    --tier "<quick|standard|deep|audit>" \
    --query-plan "$SEARCH_DIR/query_plan.json" \
    --snapshots "$SEARCH_DIR/curve.json" \
    --output "$SEARCH_DIR/execution_log.json"

透明性と監査のために、PRISMA-S の 16 項目を記録します。

STEP 14 — レポートを開いてユーザーに報告する

まず、ユーザーのデフォルトブラウザーで HTML レポートを自動的に開きます(ユーザーからの依頼を待ってはいけません)。プラットフォームに対応した Bash:

# macOS — most common dev setup
open "$SEARCH_DIR/report.html"
# Linux fallback — xdg-open "$SEARCH_DIR/report.html"
# Windows fallback — start "" "$SEARCH_DIR/report.html"

macOS ではデフォルトで open を使います。失敗した場合(まれなケースです。Linux の最小構成コンテナーに限られます)は、xdg-open、次に start を順に試します。この手順を省略してはいけません。ユーザーはレポートを待つために 5~30 分かけています。準備ができたら、すぐに表示してください。

次に、ユーザーに以下を伝えます。

  • 「デフォルトブラウザーでレポートを開きました。」(確認の一文)
  • レポートの保存場所(絶対パス:$SEARCH_DIR/report.html)。後から見つけられるように伝えます。
  • 主な調査結果(エグゼクティブサマリーから 3~5 文)
  • 注意点。Rule C に従って省略した手順も含めます(例:「医学系のシグナルが検出されなかったため、PubMed は検索していません」「Quick ティアのため STEP 10 の L3 エンリッチメントを省略しました。資金提供者/ライセンスのフィールドを含めるには、Standard で再実行してください」)
  • Standard ティアの場合、STEP 11.5 の Standard 行で不足が見つかったときに限り、検索式のエクスポートを提案する一文を添え、不足している項目と所要時間を伝えます。例:「今回、中国語側では CNKI、Wanfang の文献が主に不足しています。必要であれば、この 2 つのデータベース用の専門検索式を作成します(約 3~4 分)。検索ボックスに貼り付ければ検索できます。」 または 「推定カバー率は 45%で、まだかなりの数が見つかっていません。必要であれば、WOS、Scopus、PubMed 用の検索式を作成します(約 3~4 分)。補足検索にご利用ください。」

出力規約

📖 ディレクトリ構成の詳細は references/output_files.md を参照してください。以下のすべてのパスは、ユーザーの作業ディレクトリ(PWD)を基準とした相対パスです。Skill のアセットディレクトリは基準にしないでください。

$(pwd)/paper-search-results/<search_id>/
├── report.html              # Main deliverable (Shadcn style)
├── report.md                # Markdown copy
├── papers.csv               # Spreadsheet export
├── papers.bib               # Citation manager import (BibTeX)
├── papers.ris               # Alternative citation format
├── papers.json              # Full structured data
├── kg_classified.json       # Internal KG with RCS scores
├── summary.md               # Your executive summary
├── metadata.json            # Includes original_user_query / search_topic / display_title
├── execution_log.json       # PRISMA-S 16-item log
├── report_data.json         # Renderer bundle
├── chart_data.json          # Sibling: chart series
├── paper_list.json          # Sibling: per-paper list
├── prisma_log.json          # Sibling: PRISMA log JSON view
├── curve.json               # Coverage snapshot (STEP 7)
├── query_plan.json          # STEP 1 output
├── raw/                     # Retrieval output only, one file per search (openalex.json, pubmed.json, citations_01.json, …)
├── batches/                 # batch_NNN.jsonl files
└── classifications/         # batch_NNN_result.json files

エラー処理

📖 references/error_handling.md を参照してください。よくあるケース:

エラー対応
Config のキーが不足ユーザーに references/setup.md を案内して停止します
レート制限(SS 429/NCBI 429)ヘルパーが自動的に再試行します。解消しない場合は、そのエンリッチャーを外します
SS enrichment が「0/N papers enriched (…)」と出力Semantic Scholar が拒否しました(キーが無効、またはレート制限)。ヘルパーは早期終了しています。この行をユーザーに伝え、これを使わずに続行します
OpenAlex を利用できない(予算を使い切った/スロットルされた/ダウン)openalex_helper が呼び出しを Semantic Scholar 自体に切り替えます。その stderr の行をユーザーに伝えて続行します。終了コード 3 は Semantic Scholar でも提供できなかったことを示します。OpenAlex のエラーと同様に処理し(何が起きたか、OpenAlex がいつリセットされるかをユーザーに伝えます)
DOI で OpenAlex が 404 を返すタイトル検索にフォールバックします(ヘルパーが処理します)
L2 booster が 0 件の論文を返す何も伝えずにスキップし、STEP 13 を通じて PRISMA-S ログに記録します
SubAgent classifier が無効な JSON を返すrcs_parser.py に 5 層のフォールバック(正規表現による解析)があります
HTML 出力サイズサイズ上限やフォールバックはありません。html_renderer_webartifacts は常に Shadcn の完全なバンドルを生成します。通常、250 件の論文を含むレポートは約 1.7 MB です。極端なケースでは、1000 件を超える論文の Audit が 5~10 MB に達することがあります。最新のブラウザーであれば、10 MB を超える HTML も問題なく扱えます。

References(段階的開示 — 現在のステップに該当するものを読む)

毎回すべてを読む必要はありませんし、読むべきでもありません。該当するステップに到達し、そのケースで重要な場合に、そのステップのリファレンスを読んでください(ルール D)。core =該当するステップで読む、cond =トリガーが発生した場合のみ読む。

ファイル読み込み読むタイミング
tier_decision.mdcoreティアの選択時(STEP 0 の前)
setup.mdcoreSTEP 0 — 設定と 5 キーの取得
runtime_bootstrap.mdcondSTEP 0/1 — $PSP_HOME 環境変数の注入に失敗した場合、またはインストールパスの全リスト/言語ルーティングの根拠が必要な場合のみ
query_planner.mdcoreSTEP 1 — PICO/SPIDER/PEO フレームワーク
source_routing.mdcoreSTEP 1 の言語範囲(§「Language scope」SSOT)+ STEP 2 のルーティング+ STEP 5 のフィールド優先マージ
openalex_helper_cheatsheet.mdcoreSTEP 3 + STEP 9 — サブコマンド、パラメーター、注意点
pubmed_helper_cheatsheet.mdcondSTEP 4 — PubMed が有効な場合のみ
arxiv_helper_cheatsheet.mdcondSTEP 4 — arXiv が有効な場合のみ
classifier_subagent_prompt.md、rcs_rubric.mdcoreSTEP 6 — SubAgent プロンプト+ RCS 0-10 評価基準
stop_decision.mdcoreSTEP 7 + STEP 8
citation_chasing.mdcondSTEP 9 — 引用をたどって拡張する場合のみ
ss_helper_cheatsheet.md、crossref_helper_cheatsheet.mdcondSTEP 10 — 上位 N 件を充実させる場合のみ
summary_writer.mdcoreSTEP 11
report_title.mdcoreSTEP 1 の正規化されたトピック+ STEP 11 のエビデンスに基づく表示タイトル。生のクエリが H1 に使われるのを防ぎます
search_export/methodology.mdcondSTEP 11.5 — 戦略のエクスポートがトリガーされた場合のみ(Audit がデフォルト/明示的な依頼/承諾された Deep の提案)。レイヤー 1 のセマンティック・ルールブック
search_export/chinese_methodology.mdcondSTEP 11.5 — zh/both トラックのみ(CNKI/万方/SinoMed 戦略。西洋式ブール検索の翻訳ではありません)
search_export/press_checklist.mdcondSTEP 11.5 — 概念モデルの PRESS 6 領域セルフレビュー
search_export/filters_library.mdcondSTEP 11.5 — 研究デザインフィルターが必要な場合のみ(検証済みの既製フィルター。自作は禁止)
search_export/syntax_cards/<host>.mdcondSTEP 11.5 — ホストごとの構文情報。ジェネレーター/リンターが機械的に読み取ります。単一プラットフォームの戦略を手動で調整する場合のみ、自分で開いてください
journal_metrics.md(SSOT)condSTEP 1/STEP 10-11 — ユーザーがジャーナル区分(中科院/JCR/SJR)または SJR メトリクスを求める場合のみ。ISSN の結合、帰属、R-04 の命名
output_files.mdcoreSTEP 12 — 出力ディレクトリのレイアウト(PWD 相対)
prisma_s_checklist.mdcoreSTEP 13
agent_mode.md(SSOT)cond別のエージェント/ヘッドレス環境がこの Skill を呼び出す場合のみ — agent_search のエンベロープ+フラグ
error_handling.mdcond予期しないエラーが発生した場合

例

例 1:クイックスキャン(5〜8 分)

ユーザー:「意思決定におけるプロスペクト理論について、影響力の高い論文を 5〜6 件探してください。古典的な論文に加え、最近の論文も数件お願いします」

あなた:Quick ティアを選びます(シグナル:「5〜6 件」、「影響力の高い」、短いクエリ)。STEP 0〜2 は簡易的に実行します。STEP 3 では、古典的な論文に openalex_helper seminal、最近の論文(2020 年以降)に openalex_helper search を使います。純粋な社会科学のため、STEP 4 では L2 ブースターを使いません。STEP 6 では、1 つのメッセージ内で 2 つの並列 SubAgent により、20〜30 件の論文を分類します。STEP 7 と 8 も実行します(レポートに曲線を表示します)。ルール C に従い、STEP 9 と STEP 10 を省略することを伝えます。レポートを生成します。

例 2:標準(ZH)(10〜17 分)

ユーザー:「用 paper-search-pro 帮我找一些关于工作记忆训练干预的文献 老板让我看 我对这块完全不懂 要给老年人群体的最好 谢谢🙏」

あなた:標準ティアを選択します(デフォルト。「找一些」「老板让我看」がシグナルです)。STEP 2 で医療シグナル(「干预」+「老年」)を検出 → PubMed エンリッチャーを有効にします。クエリ計画:PICO(P=高齢者、I=ワーキングメモリトレーニング、O=認知機能のアウトカム)。STEP 3 で OpenAlex の double-sort 上位 100 件を取得します。STEP 4 で openalex.json を PubMed の enrich にかけます。STEP 5 でフェデレーションを実行します(dict 出力)。STEP 6 で 4 バッチ × 5 SubAgent により 60〜180 件の論文を分類します — 1 回のメッセージですべての Task を 5 件実行します(ルール B)。STEP 7 でカーブを作成し、飽和度が 0.6 未満の場合は STEP 8 で拡張します。レポートを生成します。

例 3:ディープ × 文献レビュー執筆(30〜45 分)

ユーザー:「高齢者ケアの文脈におけるアタッチメントと人間・ロボット間のインタラクションについて、きちんとした文献レビュー論文を書いています。深く掘り下げる必要があります……」

あなた:ディープティアを選択します(「proper literature review article」+「real depth」)。STEP 2 で分野横断(心理学+CS)を検出 → arXiv の recent レイヤーと OpenReview を有効にします。STEP 1 で SPIDER 計画を作成します。STEP 3 で OpenAlex の double-sort 上位 200 件と reviews サブコマンドを実行します。STEP 6 で 8 バッチにより 200 件以上の論文を分類します — メッセージごとに並列 Task を 5 件実行し、2 回に分けます。STEP 9 で引用を 2 ホップ拡張します。STEP 10 で上位 50 件を SS + CrossRef でエンリッチします。PRISMA-S ログ付きでレポートを生成します。

例 4:監査 × SR 準備(2〜3 時間)

ユーザー:「助けが必要です — 成人の IBS に対する食事介入のシステマティックレビューを準備しています。採用基準:RCT、成人集団(≥18)、低 FODMAP または食物繊維ベースの介入、英語、2010 年以降に発表されたもの。」

あなた:監査ティアを選択します(「systematic review」+PICO+IC)。まず制限事項に関する警告を表示し、ユーザーの確認を得てください — 監査の免責事項は、STEP 11.5(監査ではデフォルトで実行)によって実現される、実行を約束する内容です。提供時には、次のように記載します。

これは SR 準備用のアシスタントであり、PRISMA の代替ではありません。各プラットフォームで貼り付けて使える専門的な検索式の草案を作成しました — 各プラットフォームに「使用前にご確認ください」チェックリストが付いています(公式シソーラスで確認済みの MeSH 主題語と、データベース内で手動確認が必要な Emtree などの主題語を、それぞれ明記しています)。登録制の SR では、引き続きご自身で購読データベースを検索する必要があります。また、ClinicalTrials.gov(登録データベースの検索は方法論上必須です。検索式+直接リンクを用意しました)と ICTRP/グレー文献も補足してください。

(実行前に、同じ約束を未来形で「作成します」と伝えてください。)STEP 4 で pubmed_helper search-mesh "Irritable Bowel Syndrome" --pub-type "Randomized Controlled Trial" を使い、独立して MeSH を検索します。STEP 3 では openalex_helper journal-list --preset Cochrane も呼び出します。STEP 10 では、資金提供者と臨床試験番号のための CrossRef エンリッチメントを追加します。STEP 11.5 でプラットフォームごとの検索式をエクスポートします(監査のデフォルト)。STEP 12 で PRISMA フロー図を付けて生成します。

コメント