关于 alterlab-arxiv
alterlab-arxiv 是通过 arXiv 公共 Atom API 搜索和获取预印本的技能,面向研究者与文献综述工作。它支持作者、类别和 ID 查询,并可下载 PDF;结果以结构化 JSON 返回。
主要功能
- 01按关键词和字段搜索论文
- 02按作者或类别筛选
- 03按 arXiv ID 查询论文
- 04下载单篇或批量 PDF
- 05以 JSON 返回论文元数据
适用场景
- 01检索机器学习领域预印本
- 02跟踪作者的最新论文
- 03浏览指定类别的新投稿
- 04构建文献综述数据集
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alterlab-ieu/ alterlab-academic-skills --skill alterlab-arxiv安装后在 Claude Code 中输入/alterlab-arxiv确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
evals/evals.jsonreferences/api_reference.mdscripts/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)
最佳实践
- 遵守速率限制:API 要求每次调用间隔 3 秒。脚本会自动处理。
- 使用类别筛选条件:可大幅减少无关结果。大多数机器学习论文都属于
cs.LG。 - 缓存结果:保存为 JSON,避免重复获取。
- 近期论文使用
sort_by=submittedDate,关键词搜索使用relevance。 - 每次调用最多返回 2000 条结果:arXiv 将单次请求上限设为 2000(脚本会将数量限制在此范围内)。如需获取更多结果,可使用
start参数分页,总上限为 30000 条。 - arXiv ID:在程序代码中使用纯 ID(
2309.10668),而不是完整 URL。 - 结合使用
alterlab-openalex:获取 arXiv 不提供的引用数和影响力指标。
限制
- 不支持全文搜索:仅搜索元数据(标题、摘要、作者、评论)
- 不提供引用数据:可使用
alterlab-openalex或 Semantic Scholar 查询引用 - 不支持按机构搜索:
au:仅匹配作者姓名 - 每次调用最多返回 2000 条结果:如需获取更多结果,请使用分页(
start),总上限为 30000 条。 - 存在速率限制:建议每 3 秒最多发送 1 次请求
- Atom XML 响应:脚本会自动将其解析为 JSON
- 搜索延迟:新论文可能需要数小时才会出现在 API 结果中
- 严格的查询验证:语法无效时会返回包含错误条目的 HTTP 400(见“查询语法”)
参考文档
- API 参考:完整的端点规范、所有类别和响应架构,请参阅 references/api_reference.md