跳到主内容

course materials · 2026 秋季本科

工具说明:文献核验接口

Week 7 · 2026-10-20 · 工具说明

返回本周材料

用 Crossref、Semantic Scholar、OpenAlex、arXiv 逐条核参考文献:查到、对上、读到、支持。

本页目录

项目介绍

**它是什么。**Crossref、Semantic Scholar、OpenAlex、arXiv 这几个公开学术数据库提供免费的 HTTP 接口(HTTP 接口:程序通过网址发请求、拿回结构化数据的通道),智能体按 DOI 或题名去查,就能判断一条参考文献是否存在、元数据对不对、能不能读到摘要或全文。它们解决的问题是“智能体写的参考文献可能是编的”。这些是在线服务,不是可安装的软件,没有版本号:

服务提供方与性质开始服务国内网络
Crossref非营利会员组织,出版商在这里登记 DOI;REST API 免费2000 年成立能连
Semantic Scholar艾伦人工智能研究所(Ai2)的学术搜索引擎;大多数接口免 Key2015 年能连
OpenAlex非营利组织 OurResearch 运营的开放学术目录,数据以 CC0 发布;2026 年起按用量计费2022 年 1 月能连
arXiv康奈尔大学运营的预印本库1991 年能连
UnpaywallOurResearch 运营,查开放全文链接—连不上,不用

“开始服务”一栏来自公开资料。

社区对照 paper-search-mcp:GitHub 组织 openags 开发,MIT 许可;PyPI 首个版本 0.1.0 发布于 2025-04-06,最新 0.1.4(2026-07-02);GitHub 约 2,860 星(2026-10 核查)。

接入方式:HTTP 接口(任何能发网络请求的智能体都能直接调)。本课通过 Skill(一份写给智能体的说明书,告诉它某类任务按什么步骤做)把查询步骤和判定规则交给智能体;paper-search-mcp 是 MCP(把外部能力包装成工具、供智能体调用的标准接口)方式的对照。

核心能力:

  • 判断一个 DOI 是否存在;
  • 取回题名、作者、年份、期刊、卷期页码,对照清单核验;
  • 按题名+作者找回正确 DOI,分清工作论文版和期刊发表版;
  • 读摘要,查合法的开放全文链接。

**在同类工具里的位置:**Google Scholar 没有官方 API,国内网络也连不上 Google;知网、万方面向中文文献,没有免费公开接口。这几个库免费、可编程访问,适合让智能体批量核对英文文献。中文文献查不到不等于假,要另行核对。

**国内网络:**Crossref、Semantic Scholar、OpenAlex、arXiv、NBER 都能连;查开放全文的 Unpaywall 在国内网络下连不上,不要用。开放全文改看 OpenAlex 和 Semantic Scholar 返回的链接。

官方链接表

核查日期:2026-10。这些是在线服务,没有版本号,下表“当前限额”以官方页面为准。

接口官网API 文档要不要 key/邮箱当前限额(官方)
Crossrefhttps://www.crossref.orghttps://api.crossref.org (Swagger);使用建议 https://www.crossref.org/documentation/retrieve-metadata/rest-api/tips-for-using-the-crossref-rest-api/不要 key;建议带 mailto=邮箱 进入 polite 池公共池单条记录 5 次/秒、并发 1;polite 池 10 次/秒、并发 3;返回列表的检索请求另有更低上限(官方社区公告:公共 1 次/秒、polite 3 次/秒)
Semantic Scholarhttps://www.semanticscholar.org/product/apihttps://api.semanticscholar.org/api-docs/大多数接口免 key;key 免费申请(邮件发放)免 key 用户共用每秒 1000 次的总池,高峰期会被进一步限流;个人 key 起步 1 次/秒
OpenAlexhttps://openalex.orghttps://developers.openalex.org ;计费 https://developers.openalex.org/access/example-costs可不带 key;个人免费 key 在 https://openalex.org/settings/api-key 申请2026 年起按用量计费:匿名请求按 IP 共用每天 0.10 美元,个人免费 key 每天 1 美元(UTC 零点重置)。按 DOI 取单条免费;列表+过滤每千次 0.10 美元;检索每千次 1 美元。速率:无 key 10 次/秒,免费 key 30 次/秒
Unpaywall(国内网络连不上,不用)https://unpaywall.orghttps://unpaywall.org/products/api不要 key;每个请求必须带 email= 参数—
arXivhttps://arxiv.orghttps://info.arxiv.org/help/api/ ;使用条款 https://info.arxiv.org/help/api/tou.html不要 key每 3 秒不超过 1 次请求,同一时间只开一个连接;限额针对你控制的全部机器合计

NBER 一句带过:NBER 工作论文的 DOI 是 10.3386/w编号(例如 10.3386/w23470),Crossref 和 OpenAlex 都能查到。NBER 官网在国内网络下能打开;网站另有免 key 的 JSON 检索接口,但没有官方文档,用不了时改查 Crossref 或 OpenAlex。

OpenAlex 计费:匿名请求的返回里 meta.notice 写明“同一 IP 共用每天 0.10 美元”;用 filter=title.search:... 按题名查一次,返回里的 meta.cost_usd 是 0.001,也就是匿名额度约够 100 次题名查询。学校机房或宿舍同一出口 IP 下所有人共用这 0.10 美元,一个班同时跑很快就会 429(请求过多)。按 DOI 取单条不计费。

能做什么、不能做什么

能做:

  • 判断一个 DOI 是否存在(Crossref、OpenAlex 返回 404 即“该 DOI 未注册”)。
  • 取回权威元数据:题名、作者、年份、期刊、卷期页码,对照你清单里写的是否一致。
  • 按题名+作者找回正确 DOI,发现“工作论文版”和“期刊发表版”。
  • 读摘要(Crossref 部分记录带摘要,Semantic Scholar 常有 abstract),查开放获取全文链接(Semantic Scholar 的 openAccessPdf、OpenAlex 的 open_access.oa_url)。

不能做:

  • 不能替你判断“这篇文献是否支持你文中那句话”。接口只给元数据和摘要,原句核验要读摘要或全文,再由人判断。
  • 查不到不等于假。中文期刊(知网、万方收录的大部分)、学位论文、政府报告、书的章节,常常不在这些库里或元数据不全。
  • 不下载付费全文;OpenAlex、Semantic Scholar 只给合法开放的版本链接,常是工作论文版而不是期刊排版版。

适合本课的任务:核报告或论文的参考文献清单;让智能体写文献综述时附带自查;检查 AI 生成的 BibTeX。

两个 Skill 与一个 MCP 对照

名称是什么用来做什么使用时注意
academic-paper-search纯说明书型 Skill:一份 SKILL.md 写清“按什么信息查哪个库”的决策树和 curl 示例按 DOI 取元数据、按题名检索、查开放全文,覆盖 arXiv、NBER、SSRN、Crossref、OpenAlex、Unpaywall、Semantic ScholarUnpaywall 国内网络连不上,查开放全文一步改用 OpenAlex open_access.oa_url 与 Semantic Scholar openAccessPdf;SSRN 连不上时改用 Crossref 或 OpenAlex 查同一篇;文末限额表与上面的官方限额不同时,以上表为准;curl 管道写法在 Windows PowerShell 下要改
bib-citation-validator带 Python 脚本的 Skill:解析 .bib 和 .tex,查本地 Zotero、Crossref(DOI 与题名)、OpenAlex(题名),按固定阈值给 PASS/WARN/FAIL批量核一整份 BibTeX,输出 report.md、report.csv、report.json--tex 和 --bib 都是必填,没有 LaTeX 稿的同学用不了;默认 Zotero 路径是 ~/Zotero/zotero.sqlite,没有 Zotero 也能跑(该项记为未找到);依赖 requests、rapidfuzz;不查 Semantic Scholar,也不核验论断;部分网络异常会被脚本当成“没找到”,表现为 FAIL 或 UNCHECKED,FAIL 要人工复查
paper-search-mcp(社区,https://github.com/openags/paper-search-mcp ,MIT)MCP 服务器,把 20 多个来源(含 Crossref、OpenAlex、Semantic Scholar、Unpaywall)包成工具跨库检索、按 DOI 查、开放全文下载Python ≥ 3.10,用 uvx paper-search-mcp 启动,包从 PyPI 下载,要指定清华镜像;Unpaywall 国内连不上,不配 PAPER_SEARCH_MCP_UNPAYWALL_EMAIL;20 多个来源里不少在境外,某个来源连不上就换 Crossref、OpenAlex;仓库带可选 Sci-Hub 回退,默认关闭,本课不启用

选择建议:本课用两个 Skill。它们把“查哪几个库、怎样判定”写成规则,你能读懂每一步;MCP 对照用于说明同一件事也可以做成工具,但工具内部逻辑你看不到,判定规则还得自己写进提示词。

安装与配置

前置依赖:

1. 首选:交给智能体装

Claude Code 端,安装两个 Skill(项目作用域)。把课程提供的两个 Skill 文件夹放到电脑上某处后,复制下面这段给 Claude Code:

请帮我把文献核验用的两个 Skill 装到当前项目里,并配好运行环境。

要装的东西:
1. academic-paper-search 文件夹(我放在:<填你的路径>)
2. bib-citation-validator 文件夹(我放在:<填你的路径>)

要求:
- 两个文件夹都复制到当前项目的 .claude/skills/ 下,不要放到全局目录。
- 检查电脑上有没有 Python 3.10 以上版本;有的话用它安装 requests 和 rapidfuzz 两个包,命令用 python -m pip install requests rapidfuzz -i https://pypi.tuna.tsinghua.edu.cn/simple(清华镜像连不上换 https://mirrors.aliyun.com/pypi/simple/ ,不要用 pypi.org 官方源)。不要做其他全局改动;如果需要装 Python 本身,先停下来问我。
- 打开 bib-citation-validator/scripts/api_client.py,如果里面写死了某个邮箱,改成读取环境变量 CROSSREF_MAILTO,读不到就不带邮箱。把改了哪几行告诉我。
- 打开 academic-paper-search/SKILL.md,把文末的限额表改成:Crossref 公共池 5 次/秒、polite 池 10 次/秒;OpenAlex 匿名每 IP 每天 0.10 美元、个人免费 key 每天 1 美元;Semantic Scholar 免 key 共用池、可能 429;arXiv 每 3 秒 1 次。再把查开放全文的步骤从 Unpaywall 改成 OpenAlex 的 open_access.oa_url 和 Semantic Scholar 的 openAccessPdf,注明 Unpaywall 在国内网络连不上。
- Windows 下所有 curl 命令写成 curl.exe,URL 用英文双引号包起来。
- 装完自查:
  a) 用 curl.exe 请求 https://api.crossref.org/works/10.1257/aer.20171330 ,确认返回的 title 是 Measuring and Bounding Experimenter Demand;
  b) 请求 https://api.crossref.org/works/10.1257/aer.20231999 ,确认返回 404;
  c) 运行 python bib-citation-validator/scripts/validate_refs.py --help 能看到帮助。
- 需要我填邮箱、申请 key、或者要从网上下载安装包时,停下来问我。

它装的过程中会请求的权限:

请求处理
读写当前项目下的 .claude/skills/允许
运行 python、pip install requests rapidfuzz允许;看清包名只有这两个,地址是清华或阿里云镜像
运行 curl.exe 访问 api.crossref.org、api.openalex.org、api.semanticscholar.org、export.arxiv.org允许
修改 api_client.py允许,改完看它报告的行号
下载并安装 Python、改系统 PATH、写用户级 ~/.claude/看清再点;装 Python 建议自己从国内镜像下载安装包(见 Python 读写 Excel)
访问上面四个接口域名和 PyPI 镜像以外的网站、要你输入密码拒绝,问清原因

Claude Code 端,MCP 对照(可选,用户作用域):

请帮我在 Claude Code 里添加社区的 paper-search-mcp 作为对照,只做配置,不要改别的。

- 仓库:https://github.com/openags/paper-search-mcp ,包名 paper-search-mcp
- 先检查 uv 是否已安装(运行 uv --version)。没装就停下来告诉我,我自己用 python -m pip install uv -i https://pypi.tuna.tsinghua.edu.cn/simple 装(官方安装脚本从 GitHub 下载,国内访问慢、不稳定,只作备选)。
- 用 claude mcp add 添加,作用域 user,启动命令是 uvx paper-search-mcp;加环境变量 UV_DEFAULT_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple ,让 uvx 从清华镜像下载包。
- 不配置 Unpaywall(国内网络连不上),不要设 PAPER_SEARCH_MCP_UNPAYWALL_EMAIL。
- 不要启用任何 Sci-Hub 相关选项,不要配置付费来源的 key。
- 装完运行 claude mcp list,确认 paper-search 状态为 connected;再告诉我重开 Claude Code 后在 /mcp 里应看到什么。

WorkBuddy 端(用 WorkBuddy 的“技能”和“自定义连接器”两个入口):

请帮我在 WorkBuddy 里配置文献核验。

1. 技能:把 academic-paper-search 和 bib-citation-validator 两个文件夹放进当前工作目录的 .workbuddy/skills/ 下(如果 WorkBuddy 要求从“技能 → 添加技能 → 上传”导入,就告诉我要点哪里,我自己点)。
2. 检查 Python 3.10 以上和 requests、rapidfuzz 是否可用,缺了先问我再装,装时加 -i https://pypi.tuna.tsinghua.edu.cn/simple 。
3. 装完用 curl.exe 请求 https://api.crossref.org/works/10.1257/aer.20171330 ,确认能拿到题名。
遇到需要填邮箱、key 或授权弹窗时停下来问我。

MCP 对照放 WorkBuddy 的“自定义连接器”:填 command 为 uvx(找不到就填 uvx.exe 的绝对路径,JSON 里反斜杠写成 \\),args 为 ["paper-search-mcp"],env 里填 UV_DEFAULT_INDEX 为清华镜像地址。不要混用 WSL 路径和 Windows 原生路径。

UV_DEFAULT_INDEX 是 uv 官方文档列出的环境变量,用来替换默认的 PyPI 地址。如果设了之后 uvx 启动仍然很慢、下载失败,就先不用 MCP 对照,用两个 Skill。

2. 要你亲手做的部分

  • 邮箱:Crossref 的 mailto 填自己的学校邮箱。智能体不该替你编邮箱。
  • OpenAlex 个人免费 key(推荐):到 https://openalex.org/signup 注册,在 Settings → API key 复制。OpenAlex 也允许智能体用你的邮箱代申请,但激活链接发到你的邮箱,要你本人点;不要让智能体用别人的邮箱。
  • Semantic Scholar key(可选):在 https://www.semanticscholar.org/product/api#api-key-form 申请,邮件发放。不申请也能用;免 key 共用池高峰期可能连续返回 429。
  • 把 key 写进环境变量(Windows PowerShell,写入当前用户,重开终端后生效):
setx OPENALEX_API_KEY "你的key"
setx S2_API_KEY "你的key"
setx CROSSREF_MAILTO "你的学校邮箱"
  • 重启客户端:设完环境变量,关掉 Claude Code 或 WorkBuddy 再打开,它才读得到。
  • key 不进截图和共享文件:录屏前把终端里显示过 key 的窗口关掉;不要把 key 写进 .bib、.md、Skill 文件,也不要发到聊天群里;项目要上 GitHub 时,含 key 的 .env 加进 .gitignore。

3. 参考:手动命令

Windows 11(PowerShell),按 DOI 查:

# Crossref:元数据
curl.exe -s "https://api.crossref.org/works/10.1257/aer.20171330?mailto=you@mail2.sysu.edu.cn"

# Semantic Scholar:题名、年份、作者、摘要、开放全文
curl.exe -s "https://api.semanticscholar.org/graph/v1/paper/DOI:10.1257/aer.20171330?fields=title,year,authors,venue,abstract,openAccessPdf,externalIds"

# OpenAlex:按 DOI 取单条(不计费);有 key 时末尾加 &api_key=你的key
curl.exe -s "https://api.openalex.org/works/doi:10.1257/aer.20171330?select=id,doi,title,publication_year,authorships,open_access"

# arXiv:按编号
curl.exe -s "https://export.arxiv.org/api/query?id_list=1706.03762"

按题名+作者查(URL 里的空格写成 %20,整个 URL 用双引号包住,否则 PowerShell 会把 & 当成命令分隔符):

# Crossref:题名放 query.bibliographic,作者放 query.author,只取前 3 条
curl.exe -s "https://api.crossref.org/works?query.bibliographic=Measuring%20and%20Bounding%20Experimenter%20Demand&query.author=de%20Quidt&rows=3&mailto=you@mail2.sysu.edu.cn"

# Semantic Scholar:按题名取最佳匹配
curl.exe -s "https://api.semanticscholar.org/graph/v1/paper/search/match?query=Measuring%20and%20Bounding%20Experimenter%20Demand&fields=title,year,authors,externalIds"

# OpenAlex:题名过滤(每次约 0.001 美元)
curl.exe -s "https://api.openalex.org/works?filter=title.search:measuring%20and%20bounding%20experimenter%20demand&per_page=3&select=id,doi,title,publication_year"

# arXiv:题名+作者,两次请求之间隔 3 秒以上
curl.exe -s "https://export.arxiv.org/api/query?search_query=ti:%22attention%20is%20all%20you%20need%22+AND+au:vaswani&max_results=3"

查开放全文不用 Unpaywall(国内网络连不上):看上面 OpenAlex 返回的 open_access.oa_url 和 Semantic Scholar 返回的 openAccessPdf.url。

Python requests(Windows 和 macOS 通用):

import time, requests

HEADERS = {"User-Agent": "course-check/0.1 (mailto:you@mail2.sysu.edu.cn)"}

def crossref_doi(doi):
    r = requests.get(f"https://api.crossref.org/works/{doi}", headers=HEADERS, timeout=20)
    if r.status_code == 404:
        return {"status": 404}
    r.raise_for_status()
    m = r.json()["message"]
    return {
        "status": 200,
        "title": m.get("title", [""])[0],
        "authors": [a.get("family") for a in m.get("author", [])],
        "year": m["issued"]["date-parts"][0][0],
        "journal": (m.get("container-title") or [""])[0],
        "has_abstract": "abstract" in m,
    }

def s2_doi(doi, retries=3):
    url = f"https://api.semanticscholar.org/graph/v1/paper/DOI:{doi}"
    params = {"fields": "title,year,authors,abstract,openAccessPdf"}
    for i in range(retries):
        r = requests.get(url, params=params, headers=HEADERS, timeout=20)
        if r.status_code != 429:
            return r.status_code, (r.json() if r.ok else r.text[:100])
        time.sleep(2 ** i * 5)  # 429:等 5、10、20 秒再试
    return 429, "多次限流,换 OpenAlex 或 Crossref"

for doi in ["10.1257/aer.20171330", "10.1257/aer.20231999"]:
    print(doi, crossref_doi(doi))
    time.sleep(1.5)
    print(doi, s2_doi(doi))

macOS 把 curl.exe 换成 curl,其余相同。

返回里看哪些字段

接口看这些字段注意
Crossref /works/{doi}message.title[0]、message.author[].family/given、message.issued.date-parts[0][0](年份)、message.container-title[0](期刊)、volume、issue、page、type、abstract(JATS 格式,有的记录没有)404 正文是 Resource not found.;issued 是出版年,可能和工作论文年份差 1 年
Crossref /works?query...message.items[].title、DOI、score按得分排序,第一条不一定是期刊版(见下文教程)
Semantic Scholartitle、year、authors[].name、venue、abstract、openAccessPdf.url、externalIds.DOI字段要用 fields= 点名,不点名只返回 paperId 和 title
OpenAlextitle、publication_year、authorships[].author.display_name、primary_location.source.display_name、open_access.oa_url、meta.cost_usd返回的 doi 带 https://doi.org/ 前缀;meta.notice 会提示额度
arXivAtom XML 里的 <entry><title>、<author><name>、<published>、<summary>(摘要)、<arxiv:doi>(若已发表)返回 XML 不是 JSON;查不到时 <entry> 为空,不报 404

4. 怎样确认装好了

  • curl.exe -s -o NUL -w "%{http_code}" "https://api.crossref.org/works/10.1257/aer.20171330" 输出 200;把 DOI 换成 10.1257/aer.20231999 输出 404。
  • Claude Code 里输入 /skills(或问它“你现在有哪些 Skill”)能看到 academic-paper-search 和 bib-citation-validator。
  • 装了 MCP 对照的:claude mcp list 显示 paper-search 为 connected,重开后 /mcp 里能看到它的工具列表。
  • WorkBuddy:技能列表里出现两个技能;自定义连接器显示已连接。如果连接器一直连不上,先不用 MCP 对照,两个 Skill 照常可用。

核验四项与判定

每条参考文献核四项,前一项不过,后一项不用做:

项怎样核结论写法
1. 是否存在有 DOI:Crossref 或 OpenAlex 按 DOI 取,200 为存在。无 DOI:按题名+第一作者在 Crossref、OpenAlex、Semantic Scholar 至少查两家存在/DOI 未注册/多源未找到
2. 题名、作者、年份是否一致对照返回的题名(忽略大小写和标点)、第一作者姓、年份(允许差 1 年,常见于工作论文与发表年)、期刊一致/元数据有误(写出正确值)
3. 能否读到摘要或全文Crossref abstract、Semantic Scholar abstract、arXiv summary;全文看 OpenAlex open_access.oa_url、Semantic Scholar openAccessPdf读到摘要/读到全文(注明版本)/都读不到
4. 是否支持原句把你文中引用它的那句话和摘要或全文对照:数字、方向、范围是否吻合,有没有夸大支持/部分支持(写出差在哪)/不支持/论断未核验

一个例子(据 Crossref 返回的摘要):de Quidt、Haushofer、Roth(2018)在 11 个经典实验任务上估计实验者需求效应的界,平均约 0.13 个标准差,作者的结论是典型需求效应大概不大。若你文中写“该文在 11 个任务上估计需求效应的界约为 0.13 个标准差”,摘要支持;若写“该文证明实验者需求效应可以忽略、实验无需处理”,摘要不支持,原文提出的是一套界定和稳健性检验的方法。

回退顺序

  1. DOI 对不上(404,或返回的题名和清单不符):不要直接判假。先查 DOI 是否抄错(多一位、少一位、l 与 1 混淆),再用题名+第一作者到 Crossref query.bibliographic+query.author 查,再到 OpenAlex title.search 查。
  2. 429(请求过多):停下来等,按 5、10、20 秒递增退避,最多 3 次;还不行就换源(Semantic Scholar → OpenAlex → Crossref)。OpenAlex 的 429 若是日额度用完,要等 UTC 零点(北京时间早上 8 点)或换用个人 key。
  3. 超时或连接失败:换源,不判定。Crossref、Semantic Scholar、OpenAlex、arXiv 在国内网络下都能连,偶发超时就换另一家;Unpaywall 连不上,不要再试它。
  4. 全文读不到:第 4 项标“论断未核验”,写明只核了元数据或只核了摘要,不写“已核实”。
  5. 多源都查不到:标“未找到,需人工核查”,不写“伪造”。查不到可能因为:中文文献(知网、万方的大部分期刊不在这些库)、学位论文、政府和机构报告、书和书的章节、非常新的论文。中文文献改到知网、万方或期刊官网人工查,或让智能体用浏览器工具(如 agent-browser)到知网查。

使用教程:核一份 5 条参考文献清单

任务:你写的一份报告里有 5 条参考文献,其中一部分是让智能体写的。逐条核验,产出一张核验表。

准备清单

在项目目录新建 refs.md,内容如下(第 2 条是本教程编的虚构文献,用来演示 404):

1. de Quidt, J., Haushofer, J., & Roth, C. (2018). Measuring and Bounding Experimenter Demand. American Economic Review, 108(11), 3266–3302. https://doi.org/10.1257/aer.20171330
   文中引用句:该文在 11 个经典任务上估计实验者需求效应的界,平均约 0.13 个标准差。
2. Zhang, W., & Liu, H. (2023). Algorithmic Advice and Household Portfolio Choice. American Economic Review, 113(9), 2401–2440. https://doi.org/10.1257/aer.20231999
   文中引用句:算法投顾使家庭股票持有比例提高了 12%。
3. Bala, V., & Goyal, S. (2001). A Noncooperative Model of Network Formation. Econometrica, 68(5), 1181–1229.
   文中引用句:该文研究个人单方面决定建立连接时会形成哪些网络结构。
4. Vaswani, A., et al. (2017). Attention Is All You Need. arXiv:1706.03762.
   文中引用句:Transformer 结构不使用循环网络,完全基于注意力机制。
5. de Quidt, J., Haushofer, J., & Roth, C. (2017). Measuring and Bounding Experimenter Demand. NBER Working Paper No. 23470.
   文中引用句:实验者需求效应总体上很大,会推翻多数实验结论。

提示词

请用 academic-paper-search 技能逐条核验 refs.md 里的 5 条参考文献,结果写进 refs_check.md。

每条核四项:
1. 是否存在:有 DOI 先用 Crossref 按 DOI 查;没有 DOI 用题名加第一作者在 Crossref 和 OpenAlex 查;arXiv 编号用 arXiv 接口查。
2. 题名、作者、年份、期刊卷期是否和返回结果一致,不一致的写出正确值和来源。
3. 能否读到摘要或开放全文:查 Crossref 的 abstract、Semantic Scholar 的 abstract 和 openAccessPdf、OpenAlex 的 open_access.oa_url;读到全文时写明是投稿版还是期刊版。不要请求 api.unpaywall.org(国内网络连不上)。
4. 文中引用句是否被摘要或全文支持:支持、部分支持(说明差在哪)、不支持,或“论断未核验”(读不到摘要和全文时)。

规则:
- 每个结论后面附上你实际请求的 URL 和 HTTP 状态码。
- DOI 返回 404 时,先检查 DOI 写法,再用题名加作者查,查完再下结论。
- 遇到 429 等待后最多重试 3 次,然后换另一个库。
- 查不到写“未找到,需人工核查”,不要写“伪造”。
- Windows 下用 curl.exe 或 Python requests,两次 arXiv 请求间隔 3 秒以上。
- 最后给一张汇总表:序号、四项结果、建议怎么改。

预期看到的工具调用

  • 若干次 curl.exe 或 python 调用,访问 api.crossref.org/works/10.1257/aer.20171330、api.crossref.org/works/10.1257/aer.20231999、api.crossref.org/works?query.bibliographic=...、api.openalex.org/works?filter=title.search:...、api.openalex.org/works/doi:...、api.semanticscholar.org/graph/v1/paper/DOI:...、export.arxiv.org/api/query?id_list=1706.03762。如果出现 api.unpaywall.org,说明它没按提示词做,这个请求在国内会超时。
  • 可能出现 Semantic Scholar 429:免 key 共用池高峰期会连续返回 429,隔几秒重试也可能还是 429。智能体应等待后重试,或换 OpenAlex、Crossref。

预期结果

序号存在元数据摘要/全文原句
1存在(Crossref 200)一致:AER 第 108 卷第 11 期,3266–3302 页,2018Crossref 有摘要;开放全文看 OpenAlex oa_url 与 Semantic Scholar openAccessPdf,注意链接指向投稿版还是期刊版支持
2Crossref 404,OpenAlex 404;按题名查无匹配——未找到,需人工核查(本例为教程虚构)
3存在,题名+作者检索找到 DOI 10.1111/1468-0262.00155年份有误:应为 2000 年(Econometrica 第 68 卷第 5 期,2000 年 9 月);补上 DOI摘要需另查待读摘要后判定
4存在(arXiv 200)一致arXiv 摘要可读,全文开放支持(摘要写明不用循环和卷积,只基于注意力)
5存在,DOI 为 10.3386/w23470一致,但已有期刊版(第 1 条),应合并为一条,引期刊版同第 1 条不支持:原文结论是需求效应大概不大

第 3 条和第 5 条展示了两类常见问题。用 Crossref 按题名+作者查第 1 条时,排在前两位的是 SSRN 版(10.2139/ssrn.2999695)和 NBER 版(10.3386/w23470),期刊版不在前两位:按题名查回来的第一条不一定是期刊版,要对照期刊名和年份再选。

产出文件与验收

  • 产出:refs_check.md(逐条结论+请求 URL 与状态码+汇总表)。
  • 验收:
    • 第 2 条必须是“未找到”而不是“已核实”;如果智能体给出了这篇虚构论文的摘要或页码,说明它在编,结果作废。
    • 第 3 条要指出年份 2001 应为 2000。
    • 第 5 条要指出与第 1 条是同一研究的两个版本,且原句不被支持。
    • 每条结论都附了 URL 和状态码;随机挑一个 URL 自己用 curl.exe 或浏览器打开,结果一致。

有 LaTeX 稿和 .bib 的同学,可以再让智能体运行 bib-citation-validator 做一次批量核对:

请用 bib-citation-validator 技能核验 paper/main.tex 和 paper/refs.bib,输出到 check_report/。邮箱从环境变量 CROSSREF_MAILTO 读取。跑完把 report.md 里的 Critical flags 和 FAIL 条目列给我;FAIL 条目逐条再用 Crossref 按题名加作者手动查一次,确认不是网络错误造成的。

常见问题与排错

现象原因处理
PowerShell 里 curl 弹出“是否运行脚本”或输出一堆对象属性curl 是 Invoke-WebRequest 的别名写 curl.exe
URL 里有 &,PowerShell 报“不允许使用与号”& 被当作命令运算符整个 URL 用英文双引号包住
中文或空格题名查不到URL 未编码空格写 %20,或改用 Python requests 的 params= 自动编码
Semantic Scholar 一直 429免 key 用户共用总池,高峰期限流退避重试 3 次后换 OpenAlex 或 Crossref;需要常用就申请免费 key,请求头加 x-api-key
OpenAlex 返回 429,meta 提示额度同一出口 IP(校园网、机房)共用每天 0.10 美元,被同学用完用个人免费 key(每天 1 美元);按 DOI 取单条不计费,能用 DOI 就用 DOI
OpenAlex 带 key 返回 403 key_not_activated还没点邮箱里的激活链接去邮箱点链接;链接 7 天有效
Crossref 返回 404 但论文确实存在DOI 抄错,或该文的 DOI 不是 Crossref 注册的(如部分 DataCite、中文 DOI)检查 DOI;用题名+作者查;中文 DOI 到中国知网查,或去 https://doi.org 解析,doi.org 打不开就改用题名查
按题名查回来的第一条是 SSRN 或 NBER 版同一研究有多个版本,排序按相关度对照期刊名、年份选期刊版
返回成功但年份差 1 年在线优先出版年和印刷年不同,或工作论文年份以期刊版 issued 为准,差 1 年记为“需确认”而不是错误
请求 api.unpaywall.org 一直等、最后超时国内网络连不上 Unpaywall不用 Unpaywall;开放全文看 OpenAlex open_access.oa_url 和 Semantic Scholar openAccessPdf
arXiv 返回很慢或 503请求太密每 3 秒最多 1 次,同时只开一个连接
Semantic Scholar 连接超时网络波动换 Crossref、OpenAlex;不要因为超时判文献不存在
uvx 启动 paper-search-mcp 很慢或下载失败uv 默认从 pypi.org 下载设 UV_DEFAULT_INDEX 为清华镜像;不行就先不用 MCP 对照,用两个 Skill
bib-citation-validator 报大量 FAIL部分网络异常被脚本当成“没找到”检查网络后带 --cache 重跑;FAIL 条目手动复查
bib-citation-validator 提示缺 --tex脚本要求 .tex 和 .bib 都有没有 LaTeX 稿就用 academic-paper-search 逐条查
中文文献全部“未找到”这几个库很少收中文期刊改用知网、万方或期刊官网人工查,标“需人工核查”

费用、额度、隐私与安全

  • 费用:这几个接口对本课这种用量都免费。OpenAlex 超出每日额度后可以付费充值,本课不需要,也不要绑定支付方式。
  • 额度:OpenAlex 匿名额度按出口 IP 共用,全班集中使用时最先遇到问题;Semantic Scholar 免 key 共用池高峰期可能 429。
  • 隐私:mailto 会让服务方知道是谁在请求,填自己的学校邮箱即可,不填别人的。查询的 DOI 和题名会被服务方记录,未发表论文的题名属于你的研究信息,介意的话少用题名检索。
  • Key:OpenAlex 和 Semantic Scholar 的 key 放环境变量,不写进文件、不进截图、不发到聊天群。OpenAlex 个人 key 也是网站登录凭据,泄露后到 Settings → API key 轮换。
  • 版权:arXiv 条款允许个人和研究用途读取论文,不允许把论文 PDF 存到自己服务器再对外提供;OpenAlex、Semantic Scholar 给出的开放版本按各自许可使用。paper-search-mcp 的 Sci-Hub 回退默认关闭,本课不启用。
  • 封号风险:按限额请求不会被封。不要为了绕过限额换多台机器或多个 IP 并发请求,arXiv 和 Crossref 都写明会封禁这类行为。

与同类工具的一句对比

Google Scholar 覆盖面更广,但国内网络连不上,也没有官方 API,智能体抓取容易被验证码拦下;Zotero 自带“按 DOI 添加”能拿到同样的元数据,适合管理文献,不适合批量核验;本课的做法是用这几个公开接口加 Skill 里的判定规则,每一步都能看到请求和返回。

信息来源

内容来源类型
Crossref 限额与池https://www.crossref.org/documentation/retrieve-metadata/rest-api/access-and-authentication ;https://community.crossref.org/t/refining-rest-api-limits-for-improved-stability-and-reliability/16137官方文档;官方社区公告
Crossref 使用建议(select、rows、429 退避)https://www.crossref.org/documentation/retrieve-metadata/rest-api/tips-for-using-the-crossref-rest-api/ (2025-10-24 更新)官方文档
Semantic Scholar 免 key 共用池、key 起步 1 次/秒https://www.semanticscholar.org/product/api官方文档
OpenAlex 计费、每日额度、速率、key 申请https://developers.openalex.org/how-to-use-the-api/rate-limits-and-authentication ;https://developers.openalex.org/access/pricing ;https://developers.openalex.org/access/example-costs官方文档
Unpaywall 需 emailhttps://unpaywall.org/products/api官方页
arXiv 每 3 秒 1 次、单连接、版权条款https://info.arxiv.org/help/api/tou.html官方文档
paper-search-mcp 功能、环境变量、Sci-Hub 默认关闭https://github.com/openags/paper-search-mcp ;PyPI 版本 0.1.4社区仓库
uv 的 UV_DEFAULT_INDEX 环境变量https://docs.astral.sh/uv/reference/environment/官方文档
WorkBuddy 技能上传与自定义连接器https://www.codebuddy.cn/docs/workbuddy/From-Beginner-to-Expert-Guide/Function-Description/Skills-Market ;https://www.codebuddy.cn/docs/workbuddy/From-Beginner-to-Expert-Guide/Function-Description/Connector官方文档
Claude Code 添加 MCP 与 Skill 目录https://code.claude.com/docs/en/mcp官方文档