mcpField
A
alterlab-arxiv

alterlab-arxiv

github.com/alterlab-ieu生产力7868 次安装5 周前更新
代码仓库

关于 alterlab-arxiv

alterlab-arxiv 是通过 arXiv 公共 Atom API 搜索和获取预印本的技能,面向研究者与文献综述工作。它支持作者、类别和 ID 查询,并可下载 PDF;结果以结构化 JSON 返回。

主要功能

  1. 01按关键词和字段搜索论文
  2. 02按作者或类别筛选
  3. 03按 arXiv ID 查询论文
  4. 04下载单篇或批量 PDF
  5. 05以 JSON 返回论文元数据

适用场景

  1. 01检索机器学习领域预印本
  2. 02跟踪作者的最新论文
  3. 03浏览指定类别的新投稿
  4. 04构建文献综述数据集

安装

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

$npx skills add https://github.com/alterlab-ieu/alterlab-academic-skills --skill alterlab-arxiv

安装后在 Claude Code 中输入/alterlab-arxiv确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

evals/
evals.json
references/
api_reference.md
scripts/
arxiv_search.py

详细介绍

arXiv 数据库

概述

此技能提供 Python 工具,可通过 arXiv.org 的公开 Atom API 搜索和获取预印本。它支持关键词搜索、作者搜索、类别筛选、按 arXiv ID 查询以及 PDF 下载。结果以结构化 JSON 返回,包含标题、摘要、作者、类别和链接。

脚本通过 PEP 723 内联标头声明了对 requests 的依赖,因此最可靠的运行方式是 uv run scripts/arxiv_search.py ...(可自动解析依赖)。以下 python scripts/arxiv_search.py ... 示例适用于已安装 requests 的情况。

何时使用此技能

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

  • 搜索计算机科学、机器学习、人工智能、物理、数学、统计学、定量生物学、定量金融或经济学领域的预印本
  • 按 arXiv ID 查找特定论文(例如,2309.10668)
  • 跟踪某位作者近期发布的预印本
  • 按 arXiv 类别筛选论文(例如,cs.LG、cs.CL、stat.ML)
  • 下载 PDF 以进行全文分析
  • 为 AI/机器学习研究构建文献综述数据集
  • 监控某个细分领域的新提交论文
不适用的情况
场景改用
经过同行评审且已按 MeSH 编入索引的生物医学期刊文章alterlab-pubmed
生命科学预印本(bioRxiv / medRxiv)alterlab-biorxiv
引用次数、引用轨迹,或跟踪某机构 / 实验室的成果alterlab-openalex
在 arXiv 上提交自己的预印本(类别、许可、版本管理)alterlab-preprint-deposition
使用 PRISMA 筛选进行多数据库系统综述alterlab-literature-review

核心搜索功能

1. 关键词搜索

按标题、摘要或所有字段中的关键词搜索论文。

python scripts/arxiv_search.py \
  --keywords "sparse autoencoders" "mechanistic interpretability" \
  --max-results 20 \
  --output results.json

添加类别筛选:

python scripts/arxiv_search.py \
  --keywords "transformer" "attention mechanism" \
  --category cs.LG \
  --max-results 50 \
  --output transformer_papers.json

搜索特定字段:

# Title only
python scripts/arxiv_search.py \
  --keywords "GRPO" \
  --search-field ti \
  --max-results 10

# Abstract only
python scripts/arxiv_search.py \
  --keywords "reward model" "RLHF" \
  --search-field abs \
  --max-results 30
2. 作者搜索

au: 仅匹配作者姓名——API 无法按所属机构筛选,因此搜索 au:anthropic 或 au:deepmind 不会返回结果(除非某个组织被列为 集体作者)。若要关注某个实验室,请按其成员姓名查询;若要关注 整个机构,请使用 alterlab-openalex(机构筛选器)。

python scripts/arxiv_search.py \
  --author "Yoshua Bengio" \
  --max-results 50 \
  --output bengio_papers.json
python scripts/arxiv_search.py \
  --author "Ilya Sutskever" \
  --category cs.LG \
  --max-results 20
3. arXiv ID 查询

获取特定论文的元数据:

python scripts/arxiv_search.py \
  --ids 2309.10668 2406.04093 2310.01405 \
  --output sae_papers.json

也接受完整的 arXiv URL:

python scripts/arxiv_search.py \
  --ids "https://arxiv.org/abs/2309.10668"
4. 按类别浏览

列出某个类别中的近期论文:

python scripts/arxiv_search.py \
  --category cs.AI \
  --max-results 100 \
  --sort-by submittedDate \
  --output recent_cs_ai.json
5. PDF 下载
python scripts/arxiv_search.py \
  --ids 2309.10668 \
  --download-pdf papers/

批量下载搜索结果中的论文:

import json
from scripts.arxiv_search import ArxivSearcher

searcher = ArxivSearcher()

# Search first
results = searcher.search(query="ti:sparse autoencoder", max_results=5)

# Download all
for paper in results:
    arxiv_id = paper["arxiv_id"]
    searcher.download_pdf(arxiv_id, f"papers/{arxiv_id.replace('/', '_')}.pdf")

arXiv 类别

计算机科学(cs.*)
类别描述
cs.AI人工智能
cs.CL计算与语言(自然语言处理)
cs.CV计算机视觉
cs.LG机器学习
cs.NE神经与进化计算
cs.RO机器人学
cs.CR密码学与安全
cs.DS数据结构与算法
cs.IR信息检索
cs.SE软件工程
统计学与数学
类别描述
stat.ML机器学习(统计学)
stat.ME方法论
math.OC优化与控制
math.ST统计理论
其他相关类别
类别描述
q-bio.BM生物分子
q-bio.GN基因组学
q-bio.QM定量方法
q-fin.ST统计金融学
eess.SP信号处理
physics.comp-ph计算物理

完整列表请参阅 references/api_reference.md。

查询语法

arXiv API 使用基于前缀的字段搜索,并结合布尔运算符。

字段前缀:

  • ti: - 标题
  • au: - 作者
  • abs: - 摘要
  • cat: - 类别
  • all: - 所有字段(默认)
  • co: - 评论
  • jr: - 期刊引用
  • id: - arXiv ID

布尔运算符(必须使用大写):

ti:transformer AND abs:attention
au:bengio OR au:lecun
cat:cs.LG ANDNOT cat:cs.CV

使用括号分组:

(ti:sparse AND ti:autoencoder) AND cat:cs.LG
au:"Chris Olah" AND (abs:interpretability OR abs:alignment)

日期范围(GMT,YYYYMMDDTTTT,含起止日期):

cat:cs.LG AND submittedDate:[202501010000 TO 202501312359]

**验证(自 2025 年 11 月后端迁移以来):**格式错误的查询——括号不匹配、前缀为空(如 au:)、字段语法嵌套——会返回带有 Atom 错误条目(<summary>Invalid query string: …</summary>)的 HTTP 400,而不是空的 200 响应。裸词会自动添加前缀(pineapple → all:pineapple);添加 raw=1 可禁用此改写。脚本会显示这些错误,而不是报告零个结果。

示例:

from scripts.arxiv_search import ArxivSearcher

searcher = ArxivSearcher()

# Papers about SAEs in ML
results = searcher.search(
    query="ti:sparse autoencoder AND cat:cs.LG",
    max_results=50,
    sort_by="submittedDate"
)

# Specific author in specific field
results = searcher.search(
    query='au:"Neel Nanda" AND cat:cs.LG',
    max_results=20
)

# Complex boolean query
results = searcher.search(
    query="(abs:RLHF OR abs:reinforcement learning from human feedback) AND cat:cs.CL",
    max_results=100
)

输出格式

所有搜索都会返回结构化 JSON:

{
  "query": "id_list:2309.10668",
  "result_count": 1,
  "results": [
    {
      "arxiv_id": "2309.10668",
      "title": "Language Modeling Is Compression",
      "authors": ["Grégoire Delétang", "Anian Ruoss", "..."],
      "abstract": "Full abstract text...",
      "categories": ["cs.LG", "cs.AI", "cs.CL", "cs.IT"],
      "primary_category": "cs.LG",
      "published": "2023-09-19T14:50:38Z",
      "updated": "2024-03-18T23:15:47Z",
      "doi": "",
      "pdf_url": "https://arxiv.org/pdf/2309.10668v2",
      "abs_url": "https://arxiv.org/abs/2309.10668v2",
      "comment": "",
      "journal_ref": ""
    }
  ]
}

常见用法模式

文献综述工作流
from scripts.arxiv_search import ArxivSearcher
import json

searcher = ArxivSearcher()

# 1. Broad search
results = searcher.search(
    query="abs:mechanistic interpretability AND cat:cs.LG",
    max_results=200,
    sort_by="submittedDate"
)

# 2. Save results
with open("interp_papers.json", "w") as f:
    json.dump({"result_count": len(results), "results": results}, f, indent=2)

# 3. Filter and analyze
import pandas as pd
df = pd.DataFrame(results)
print(f"Total papers: {len(df)}")
print(f"Date range: {df['published'].min()} to {df['published'].max()}")
print(f"\nTop categories:")
print(df["primary_category"].value_counts().head(10))
跟踪研究小组

arXiv 不支持按机构搜索,因此可通过成员姓名跟踪研究小组(或者切换到 alterlab-openalex,并按机构 ID 筛选作品):

searcher = ArxivSearcher()

members = ["Chris Olah", "Neel Nanda", "Tom Henighan"]  # the group's authors
query = "(" + " OR ".join(f'au:"{m}"' for m in members) + ") AND (cat:cs.LG OR cat:cs.CL)"

results = searcher.search(query=query, max_results=50, sort_by="submittedDate")
print(f"{len(results)} recent papers")
监控新提交的论文
searcher = ArxivSearcher()

# Most recent ML papers
results = searcher.search(
    query="cat:cs.LG",
    max_results=50,
    sort_by="submittedDate",
    sort_order="descending"
)

for paper in results[:10]:
    print(f"[{paper['published'][:10]}] {paper['title']}")
    print(f"  {paper['abs_url']}\n")

Python API

from scripts.arxiv_search import ArxivSearcher

searcher = ArxivSearcher(verbose=True)

# Free-form query (uses arXiv query syntax)
results = searcher.search(query="...", max_results=50)

# Lookup by ID
papers = searcher.get_by_ids(["2309.10668", "2406.04093"])

# Download PDF
searcher.download_pdf("2309.10668", "paper.pdf")

# Build query from components
query = ArxivSearcher.build_query(
    title="sparse autoencoder",
    author="anthropic",
    category="cs.LG"
)
results = searcher.search(query=query, max_results=20)

最佳实践

  1. 遵守速率限制:API 要求每次调用间隔 3 秒。脚本会自动处理。
  2. 使用类别筛选条件:可大幅减少无关结果。大多数机器学习论文都属于 cs.LG。
  3. 缓存结果:保存为 JSON,避免重复获取。
  4. 近期论文使用 sort_by=submittedDate,关键词搜索使用 relevance。
  5. 每次调用最多返回 2000 条结果:arXiv 将单次请求上限设为 2000(脚本会将数量限制在此范围内)。如需获取更多结果,可使用 start 参数分页,总上限为 30000 条。
  6. arXiv ID:在程序代码中使用纯 ID(2309.10668),而不是完整 URL。
  7. 结合使用 alterlab-openalex:获取 arXiv 不提供的引用数和影响力指标。

限制

  • 不支持全文搜索:仅搜索元数据(标题、摘要、作者、评论)
  • 不提供引用数据:可使用 alterlab-openalex 或 Semantic Scholar 查询引用
  • 不支持按机构搜索:au: 仅匹配作者姓名
  • 每次调用最多返回 2000 条结果:如需获取更多结果,请使用分页(start),总上限为 30000 条。
  • 存在速率限制:建议每 3 秒最多发送 1 次请求
  • Atom XML 响应:脚本会自动将其解析为 JSON
  • 搜索延迟:新论文可能需要数小时才会出现在 API 结果中
  • 严格的查询验证:语法无效时会返回包含错误条目的 HTTP 400(见“查询语法”)

参考文档

评论

支持 Markdown