auto-paper-collecter (スキル)
コーディングエージェント内で動作するセルフホスト型研究文献レーダー。 Pythonスクリプトは決定論的な処理(API取得、重複除去、レンダリング、メール送信)のみを行います。判断作業 — クエリ拡張、コンピュータサイエンス関連性フィルタリング、中国語サマリー、注目トピックの合成 — はすべて、このスキルを実行するアシスタント(あなた)が担当します。 つまり AI APIキーは不要 — このスキルを実行しているモデル(Claude CodeのClaude、CodexのGPT、など)がそのままLLMとして機能します。
レイアウト
skill/
├── SKILL.md
├── scripts/ common.py · fetch.py · render.py · notify.py (stdlibのみ)
├── state/ config.json · (queries/candidates/curated/trends/seen .json)
└── digests/ YYYY-MM-DD.md + .html
スクリプトは scripts/ から実行: cd skill/scripts && python3 <script>.py
設定 — state/config.json
keywords: 追跡するトピック文字列(最大約3つ)。domain: 関連性を制限する分野(デフォルトcomputer science)。sources: 情報源のON/OFFarXiv / Crossref / Semantic Scholar / GitHub / HuggingFace / PapersWithCode / RSS。lookback_days: 取得する過去日数(重複除去はすでに行われます)。max_per_source,rss_feeds。
ユーザーがキーワード・情報源・分野の変更を依頼した場合、このファイルを編集し、変更内容をユーザーに確認してください。
オプションの環境変数(リポジトリに保存しないこと):
SEMANTIC_SCHOLAR_KEY(Semantic Scholarのレート制限緩和)、GITHUB_TOKEN(GitHubの制限緩和)、SMTP_*/EMAIL_TO(メール)、およびプッシュ通知チャンネル —TELEGRAM_BOT_TOKEN/TELEGRAM_CHAT_ID、SLACK_WEBHOOK_URL、WECHAT_WEBHOOK(企業微信群ロボット)、SERVERCHAN_KEY(Server醬)。
実行パイプライン — 以下の順序に従ってください
1 · 設定の読み取りとクエリ拡張 (あなた)
state/config.json を読み取ります。各キーワードについて、2~3個の連想英語検索クエリ(同義語、正式名称、周辺サブトピック)を考え、文字通りの用語だけに限定されないようにします(例: C2Rust → ["C2Rust", "C-to-Rust translation", "migrating legacy C code to Rust"])。それらを state/queries.json に {"<keyword>": ["q1", "q2", ...], ...} の形式で書き込みます。
2 · 候補の取得 (スクリプト)
cd skill/scripts && python3 fetch.py
有効な各情報源からそれらのクエリに基づいて取得し、state/seen.json に既にあるアイテムまたは lookback_days より古いアイテムを除外し、state/candidates.json に書き込みます。取得結果が0件の場合、ユーザーに「暂无新文献」と伝えて停止します(他にすることはありません)。
3 · 関連性フィルタリングとサマリー作成 (あなた)
state/candidates.json を読み取ります。各アイテムについて以下を判断: (a) コンピュータサイエンス かつ (b) そのtopicキーワードに対して真に関連があるか? 該当しないものは除外します(医療分野の「翻訳」、金融の「AI」、無関係なGitHubスターリストなど)。保持する各アイテムについて簡潔な中国語サマリーを作成し、state/curated.json を構築します — 以下のオブジェクトのリスト:
{"source","topic","title","url","venue","authors","published",
"tldr":"一句话核心 (<=60字)","method":"方法简述 (<=80字)",
"contributions":["核心贡献1","核心贡献2"]}
論文を先に、GitHubリポジトリを最後にします(補足的なシグナルです)。情報源がすでに tldr を提供している場合は、それを基に構築しても構いません。
GitHubアイテムはリポジトリであり、論文ではありません — 過度に要約しないでください。リポジトリの説明(その
abstract)をtldrとして使用し、method/contributionsは空のままにします。fetch.pyはスター数10以上のリポジトリのみを保持し、スター数順にランク付けするため、これらは(コース/フレームワーク/awesome-listなど)個人のノイズではなく、実質的なものである傾向があります。
4 · 注目トピックの合成 (あなた、推奨、必須ではありません)
保持したアイテムをいくつかの大まかなCSサブ分野(自然言語処理 / コンピュータビジョン / システムとコンパイラ …; 積極的にマージ)にクラスタリングします。state/trends.json を書き込みます:
{"top": [{"name","delta": <件数>, "summary": "<=80字方向总结", "papers": ["title", ...]}, ... 最大3つ]}。
5 · ダイジェストのレンダリング (スクリプト)
cd skill/scripts && python3 render.py
curated.json(+ trends.json)から digests/YYYY-MM-DD.md + .html を書き込み、表示したすべてのアイテムを seen.json に記録して繰り返し表示されないようにします。
6 · 通知 (スクリプト、オプション)
cd skill/scripts && python3 notify.py # SMTP_* 環境変数が設定されていれば、HTMLダイジェストをメール送信します
7 · 報告 (あなた)
保持した論文の数、上位の注目方向、ダイジェストのパスをユーザーに伝えます。HTMLを開くか、キーワードを調整するかを提案します。
補足
- スクリプトは純粋なPython標準ライブラリ —
pip installは不要です。 fetch.pyはすでに不正な未来日付をフィルタリングし、実行間の重複除去を行います。- このスキルは、プロジェクトのFastAPI Webダッシュボードのエージェント駆動版であり、両者は同じ情報源とパイプラインの思想を共有しています。