arXiv 检索与分析 Skill
概述
本 skill 提供强大的 arXiv 学术论文检索、下载和分析功能,帮助智能体高效进行学术文献调研。支持关键词检索、作者检索、日期范围过滤、分类筛选等多种检索方式,并提供批量下载、元数据提取、论文总结等功能。
所有配置均通过命令行参数传入,无需配置文件。可选参数均有合理默认值。
目录结构
arxiv-search-skill/
├── skill.md # 本文件 - 使用说明与规范
├── README.md # 快速入门指南
├── requirements.txt # Python 依赖
├── arxiv_search.py # 统一入口(可选)
├── scripts/
│ ├── __init__.py
│ ├── utils.py # 工具函数
│ ├── search.py # 检索模块
│ ├── download.py # 下载模块
│ ├── metadata.py # 元数据处理模块
│ ├── batch_search.py # 批量检索模块
│ └── summarize.py # 论文总结模块
├── output/ # 输出目录
│ ├── pdfs/ # 下载的 PDF 文件
│ ├── metadata/ # 元数据 JSON 文件
│ └── summaries/ # 生成的摘要文件
└── examples/ # 使用示例
├── example_queries.jsonl
└── ids.txt
安装与配置
1. 安装依赖
pip install -r requirements.txt
2. 切换到 scripts 目录
所有脚本在 scripts/ 目录下运行:
cd scripts
核心功能
1. 检索模块 (search.py)
功能
在 arXiv 中按关键词、标题、摘要、作者、分类等检索论文,支持日期范围过滤。
使用方法
python search.py --query "quantum computing" --max-results 50
命令行参数
检索条件 (至少提供一个)
| 参数 | 简写 | 说明 | 必需 |
|---|
--query | -q | 通用查询字符串 | 否 |
--title | -t | 标题关键词 | 否 |
--abstract | -a | 摘要关键词 | 否 |
--author | -au | 作者名 | 否 |
--category | -c | arXiv 分类 (如 cs.AI, quant-ph) | 否 |
日期过滤 (可选)
| 参数 | 简写 | 说明 | 默认值 |
|---|
--start-date | -s | 起始日期 (YYYY-MM-DD) | - |
--end-date | -e | 结束日期 (YYYY-MM-DD) | - |
检索控制 (可选)
| 参数 | 说明 | 默认值 |
|---|
--max-results | 最大结果数 | 100 |
--sort-by | 排序方式: relevance, lastUpdatedDate, submittedDate | relevance |
--sort-order | 排序顺序: descending, ascending | descending |
--timeout | 请求超时秒数 | 30 |
--retry-attempts | 重试次数 | 3 |
速率限制 (可选)
| 参数 | 说明 | 默认值 |
|---|
--requests-per-second | 每秒最大请求数 | 2.0 |
--min-delay | 请求间最小延迟秒数 | 0.5 |
输入输出
| 参数 | 简写 | 说明 |
|---|
--id-list | - | 从文件读取 arXiv ID 列表进行检索 |
--output | -o | 输出元数据 JSON 文件路径 |
日志 (可选)
| 参数 | 说明 | 默认值 |
|---|
--log-level | 日志级别: DEBUG, INFO, WARNING, ERROR | INFO |
--log-file | 日志文件路径 | - |
高级查询语法
# 标题中包含关键词
python search.py --query "ti:quantum AND ti:computing"
# 摘要中包含关键词
python search.py --query "abs:machine AND abs:learning"
# 组合条件
python search.py --query "cat:cs.AI AND (ti:neural OR abs:network)"
使用示例
# 基础关键词检索
python search.py --query "quantum computing" --max-results 50
# 标题检索
python search.py --title "transformer" --max-results 30
# 作者检索
python search.py --author "Smith, J" --max-results 100
# 分类检索
python search.py --category "cs.AI" --start-date "2023-01-01"
# 组合检索并保存结果
python search.py --query "deep learning" --category "cs.LG" --max-results 50 --output results.json
输出示例
{
"search_metadata": {
"query": "quantum computing",
"original_query": {
"query": "quantum computing",
"title": null,
"abstract": null,
"author": null,
"category": null,
"start_date": null,
"end_date": null
},
"timestamp": "2023-01-15T10:30:00Z",
"returned_results": 50
},
"papers": [
{
"arxiv_id": "2301.01234",
"arxiv_url": "https://arxiv.org/abs/2301.01234",
"pdf_url": "https://arxiv.org/pdf/2301.01234.pdf",
"title": "Quantum Computing for Machine Learning",
"authors": [
{"name": "John Smith"},
{"name": "Alice Johnson"}
],
"abstract": "We present a novel approach...",
"categories": ["quant-ph", "cs.LG"],
"primary_category": "quant-ph",
"published_date": "2023-01-05",
"updated_date": "2023-01-10",
"doi": "10.1234/arxiv.2301.01234",
"journal_ref": null,
"comments": "15 pages, 5 figures"
}
]
}
2. 下载模块 (download.py)
功能
下载单个或批量论文 PDF 文件。
使用方法
python download.py --id 2301.01234
命令行参数
输入源 (选择一个)
| 参数 | 说明 | 必需 |
|---|
--id | arXiv ID(可多次指定) | 否 |
--id-list | 包含 arXiv ID 列表的文本文件 | 否 |
--metadata | 包含论文元数据的 JSON 文件 | 否 |
输出选项 (可选)
| 参数 | 简写 | 说明 | 默认值 |
|---|
--output-dir | -o | 输出目录 | output/pdfs |
--skip-existing | - | 跳过已存在的文件 | 默认启用 |
--no-skip-existing | - | 覆盖已存在的文件 | - |
下载控制 (可选)
| 参数 | 说明 | 默认值 |
|---|
--parallel | 并行下载数 | 3 |
--chunk-size | 下载块大小字节 | 8192 |
--verify-ssl | 验证 SSL 证书 | 默认启用 |
--no-verify-ssl | 不验证 SSL 证书 | - |
速率限制 (可选)
| 参数 | 说明 | 默认值 |
|---|
--requests-per-second | 每秒最大请求数 | 2.0 |
--min-delay | 请求间最小延迟秒数 | 0.5 |
日志 (可选)
| 参数 | 说明 | 默认值 |
|---|
--log-level | 日志级别: DEBUG, INFO, WARNING, ERROR | INFO |
--log-file | 日志文件路径 | - |
使用示例
# 下载单个论文
python download.py --id 2301.01234
# 下载多个论文
python download.py --id 2301.01234 --id 2302.05678
# 从 ID 列表文件下载
python download.py --id-list ids.txt
# 从元数据文件下载
python download.py --metadata results.json
# 指定输出目录
python download.py --id 2301.01234 --output-dir my_papers/
# 强制覆盖已存在的文件
python download.py --id 2301.01234 --no-skip-existing
3. 元数据处理模块 (metadata.py)
功能
提取论文元数据,支持多种格式导出(JSON、BibTeX、CSV、RIS),以及合并多个元数据文件。
使用方法
python metadata.py --input results.json --format bibtex --output refs.bib
命令行参数
输入方式 (选择一个)
| 参数 | 说明 | 必需 |
|---|
--id | 单个 arXiv ID | 否 |
--input | -i | 输入元数据 JSON 文件 |
--merge | 合并多个元数据文件 | 否 |
输出选项
| 参数 | 简写 | 说明 | 默认值 |
|---|
--format | -f | 输出格式: json, bibtex, csv, ris | json |
--output | -o | 输出文件路径 | - |
日志 (可选)
| 参数 | 说明 | 默认值 |
|---|
--log-level | 日志级别: DEBUG, INFO, WARNING, ERROR | INFO |
--log-file | 日志文件路径 | - |
使用示例
# 获取单个论文元数据
python metadata.py --id 2301.01234
# 从元数据文件导出 BibTeX
python metadata.py --input results.json --format bibtex --output refs.bib
# 导出 CSV
python metadata.py --input results.json --format csv --output papers.csv
# 导出 RIS
python metadata.py --input results.json --format ris --output papers.ris
# 合并多个元数据文件
python metadata.py --merge result1.json result2.json --output merged.json
输出格式
BibTeX 格式
@article{smith:2023:quantum,
title = {Quantum Computing for Machine Learning},
author = {Smith, John and Johnson, Alice},
year = {2023},
month = {01},
journal = {arXiv preprint 2301.01234},
eprint = {2301.01234},
archivePrefix = {arXiv},
primaryClass = {quant-ph},
url = {https://arxiv.org/abs/2301.01234},
abstract = {We present a novel approach...}
}
4. 批量检索模块 (batch_search.py)
功能
从 JSONL 文件批量执行多个检索任务。
使用方法
python batch_search.py --input queries.jsonl --output batch_results/
命令行参数
输入 (必需)
| 参数 | 简写 | 说明 |
|---|
--input | -i | 输入 JSONL 文件路径 |
输出 (可选)
| 参数 | 简写 | 说明 | 默认值 |
|---|
--output | -o | 输出目录 | output/metadata |
--no-individual | - | 不保存单独的查询结果 | - |
检索控制 (可选)
| 参数 | 说明 | 默认值 |
|---|
--timeout | 请求超时秒数 | 30 |
--retry-attempts | 重试次数 | 3 |
--requests-per-second | 每秒最大请求数 | 2.0 |
--min-delay | 请求间最小延迟秒数 | 0.5 |
日志 (可选)
| 参数 | 说明 | 默认值 |
|---|
--log-level | 日志级别: DEBUG, INFO, WARNING, ERROR | INFO |
--log-file | 日志文件路径 | - |
输入文件格式 (JSONL)
{"query": "deep learning", "max_results": 50}
{"query": "transformer architecture", "category": "cs.CL", "max_results": 30, "name": "transformer_2023"}
{"author": "Bengio, Y", "max_results": 100, "name": "bengio_papers"}
{"category": "cs.AI", "start_date": "2023-01-01", "max_results": 50}
JSONL 每行一个查询对象,支持的字段:
query / q: 通用查询
title / t: 标题关键词
abstract / a: 摘要关键词
author / au: 作者名
category / c / categories: 分类
start_date / start-date / s: 起始日期
end_date / end-date / e: 结束日期
max_results / max-results / m: 最大结果数
sort_by / sort-by: 排序方式
sort_order / sort-order: 排序顺序
name: 查询名称(用于输出文件名)
使用示例
# 从 JSONL 文件运行批量检索
python batch_search.py --input queries.jsonl
# 指定输出目录
python batch_search.py --input queries.jsonl --output batch_results/
# 不保存单独查询结果,只保存合并文件
python batch_search.py --input queries.jsonl --no-individual
5. 论文总结模块 (summarize.py)
功能
生成论文摘要和关键点总结,以及文献综述概览。
使用方法
python summarize.py --metadata results.json --overview --topic "deep learning"
命令行参数
输入方式 (选择一个)
| 参数 | 说明 | 必需 |
|---|
--id | 单个 arXiv ID | 否 |
--metadata | 包含论文元数据的 JSON 文件 | 否 |
输出选项 (可选)
| 参数 | 简写 | 说明 | 默认值 |
|---|
--output | -o | 输出文件路径 | - |
--output-dir | - | 输出目录(用于批量模式) | output/summaries |
功能选项 (可选)
| 参数 | 说明 |
|---|
--overview | 生成文献综述概览 |
--topic | 研究主题(用于综述) |
日志 (可选)
| 参数 | 说明 | 默认值 |
|---|
--log-level | 日志级别: DEBUG, INFO, WARNING, ERROR | INFO |
--log-file | 日志文件路径 | - |
总结内容
单篇论文总结包括:
- 标题、作者、发表日期
- 分类、URL
- 短摘要(前 500 字符)
- 关键点:
文献综述包括:
- 论文集合统计
- 分类分布
- 年份分布
- 方法和任务统计
- 关键洞察
使用示例
# 总结单篇论文
python summarize.py --id 2301.01234
# 从元数据文件批量生成总结
python summarize.py --metadata results.json
# 生成文献综述
python summarize.py --metadata results.json --overview --topic "deep learning" --output overview.json
常见 arXiv 分类
| 分类 | 说明 |
|---|
| cs.AI | Artificial Intelligence |
| cs.CL | Computation and Language |
| cs.CV | Computer Vision and Pattern Recognition |
| cs.LG | Machine Learning |
| cs.NE | Neural and Evolutionary Computing |
| cs.RO | Robotics |
| quant-ph | Quantum Physics |
| stat.ML | Machine Learning (Statistics) |
| math.OC | Optimization and Control |
| physics.data-an | Data Analysis, Statistics and Probability |
API 使用示例 (Python 模块)
基础检索
from search import ArxivSearch
searcher = ArxivSearch()
# 简单关键词检索
results = searcher.search(
query="transformer architecture",
max_results=20,
sort_by="submittedDate"
)
# 高级检索
results = searcher.search(
query="cat:cs.CL AND abs:transformer",
start_date="2023-01-01",
end_date="2023-12-31",
max_results=50
)
批量下载
from download import PaperDownloader
downloader = PaperDownloader(output_dir="output/pdfs")
# 下载单个论文
downloader.download_by_id("2301.01234")
# 批量下载
arxiv_ids = ["2301.01234", "2302.05678", "2303.09012"]
papers = [{"arxiv_id": id} for id in arxiv_ids]
downloader.download_batch(papers, skip_existing=True)
元数据处理
from metadata import MetadataExtractor
extractor = MetadataExtractor()
# 获取元数据
metadata = extractor.get_metadata("2301.01234")
# 导出为 BibTeX
papers = [metadata]
extractor.export_bibtex(papers, "references.bib")
完整工作流示例
# 1. 定义检索查询列表
cat > my_queries.jsonl << EOF
{"query": "large language model", "max_results": 50, "name": "llm"}
{"query": "chain-of-thought reasoning", "max_results": 30, "name": "cot"}
{"category": "cs.CL", "max_results": 100, "start_date": "2023-01-01", "name": "cl_2023"}
EOF
# 2. 执行批量检索
python batch_search.py --input my_queries.jsonl --output my_results/
# 3. 下载相关论文
python download.py --metadata my_results/merged_metadata.json --output-dir my_pdfs/
# 4. 生成文献综述
python summarize.py --metadata my_results/merged_metadata.json --overview --topic "LLMs" --output llm_overview.json
# 5. 导出 BibTeX
python metadata.py --input my_results/merged_metadata.json --format bibtex --output references.bib
输出规范
元数据 JSON 格式规范
见 search.py 输出示例。
错误处理规范
所有脚本遵循以下错误码规范:
| 错误码 | 含义 |
|---|
| 0 | 成功 |
| 1 | 通用错误 |
| 2 | 参数错误 |
| 3 | 网络错误 |
| 4 | 文件IO错误 |
| 5 | API 限流 |
日志规范
[INFO] 2023-01-15 10:30:00 - Starting search for query: "quantum computing"
[INFO] 2023-01-15 10:30:02 - Found 1500 results, returning first 50
[WARNING] 2023-01-15 10:30:03 - Rate limit approaching, slowing down
[ERROR] 2023-01-15 10:30:05 - Failed to download 2301.01234: Connection timeout
高级技巧
1. 检索优化
- 使用引号进行精确匹配:
"graph neural network"
- 使用通配符:
transformer*
- 使用布尔运算符:
AND, OR, ANDNOT
- 字段限定:
ti:, abs:, au:, cat:
2. 分类组合
# 多个分类
python search.py --query "cat:cs.AI OR cat:cs.LG"
# 排除分类
python search.py --query "cat:cs.* ANDNOT cat:cs.RO"
3. 时间范围检索
# 最近一个月 (Linux/Mac)
python search.py --query "deep learning" --start-date "$(date -d '1 month ago' +%Y-%m-%d)"
# 特定年份
python search.py --query "transformer" --start-date "2023-01-01" --end-date "2023-12-31"
常见问题
Q: 如何提高检索速度?
A: 使用 --max-results 限制返回数量,使用分类过滤减少结果集。
Q: 遇到 rate limit 怎么办?
A: 脚本会自动处理限流。可通过 --requests-per-second 和 --min-delay 调整速率限制参数。
Q: 下载的 PDF 文件名格式是什么?
A: 默认格式: {arxiv_id}_{title_slug}.pdf,例如: 2301.01234_quantum-computing-for-machine-learning.pdf
Q: 所有参数都有默认值吗?
A: 是的,所有可选参数都有合理的默认值。只需提供必需参数(如检索条件、输入源等)即可。
更新日志
v1.1.0
- 移除配置文件,所有配置改为命令行参数
- 所有可选参数添加默认值
- 更新文档,添加完整参数说明
v1.0.0
- 初始版本发布
- 支持基础检索、下载、元数据提取
- 支持批量操作