关于 onecite
OneCite 是一个命令行与 Python 工具包,可将 DOI、PMID、arXiv 编号、ISBN、URL 等混合格式的文献引用规范化为 BibTeX 或 CSL-JSON。它面向需要可审计结果的研究写作与批处理流程,并将不确定的纯文本引用作为候选结果交由人工复核。
主要功能
- 01解析 DOI、PMID、arXiv、ISBN 等标识符
- 02输出 BibTeX 或 CSL-JSON 格式
- 03无法解析的条目单独报告
- 04suggest 命令提供候选结果供人工复核
- 05JSON、NDJSON 输出与明确的退出码
适用场景
- 01将手稿或综述中的混合格式参考文献统一格式
- 02在自动化文献流程中批量生成可复现的引用
- 03检查引用的元数据与原文文本是否一致
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
OneCite
为研究工作流提供可审计的引文规范化处理
功能 • 快速开始 • 隐私与外部服务 • 📖 高级用法 • 🗺️ 路线图 • 🤝 参与贡献
OneCite 是一款命令行和 Python 工具包,可将杂乱、格式混杂的参考文献——DOI、PMID、arXiv ID、ISBN、URL 和 BibTeX 片段——转换为可审计的 BibTeX 或 CSL-JSON 记录。对于明确标识符,OneCite 会依照文档记录的元数据服务路径进行处理;普通且含义模糊的纯文本参考文献则会作为候选项返回以供审核,不会由 process 自动采纳。
AI 辅助写作、自动化文献处理流水线和复制粘贴式研究习惯,产生了越来越多格式各异的参考文献,也带来了更多错误、虚构或不匹配的书目信息。参考文献管理器(Zotero)、解析器(AnyStyle、GROBID)、格式转换器(Citation.js)和标识符转 BibTeX工具(doi2bib、Manubot)各自只解决了问题的一部分。OneCite 面向参考文献进入论文、系统综述或管理器之前这一服务不足的环节:提供一个可审计的规范化层,将明确标识符(DOI、PMID、arXiv、ISBN、URL、数据/软件 DOI)路由至适用的元数据服务,补全可获取的元数据,报告无法解析的条目,并生成 BibTeX 或 CSL-JSON。
OneCite 并非又一个参考文献管理器,而且 process 不会自动接受模糊的标题匹配。明确标识符会通过文档记录的来源路径进行解析;明确标注为学位论文的引文则使用独立的 OpenAIRE/BASE 路径,并可回退到从输入中解析出的字段。对于含义普通且模糊的文本,onecite suggest 会返回排序后的候选项供人工审核,而不会悄然将其作为来源已解析的输出。process/suggest 的分离,加上机器可读的 JSON/NDJSON、退出代码和确定性的离线检查,使 OneCite 成为 Agent、批处理任务和可复现综述的脚本化构建模块,而非 GUI 库。来源解析并不能证明作品真实存在、未被撤稿,也不能保证上游元数据描述准确。
功能特性
| 功能 | 描述 |
|---|---|
| 候选建议 | 使用 onecite suggest 搜索不完整的纯文本引用,而不将其加入已解析的参考文献输出。 |
| 多种格式 | 输入 .txt/.bib → 输出 BibTeX 或 CSL-JSON。 |
| 4 阶段流水线 | 包含 4 个阶段的流程(解析 → 识别 → 补充 → 格式化),并明确列出未解析条目。 |
| 字段补全 | 填充元数据来源返回的可用字段,例如期刊、卷、页码、作者和摘要。 |
| 🎓 7+ 种引用类型 | 支持期刊文章、会议论文、图书、软件、数据集、学位论文和预印本。 |
| 按输入路由查询 | 使用针对 Crossref、arXiv、PubMed、Semantic Scholar、Google Books 等来源的专用路由。并非每个输入都会查询所有来源。 |
| 多种标识符类型 | 解析 DOI、PMID、arXiv ID、ISBN、GitHub URL、Zenodo DOI 和 DataCite DOI 输入。 |
| 自定义模板 | 基于 YAML 的预设,在自动检测结果不明确时提供备用 BibTeX 条目类型。 |
🌐 数据来源
隐私与外部服务
常规的 process 和 suggest 运行可能会根据输入内容发送外部请求。
例如,解析 DOI 会将 DOI 发送给 Crossref(有时也会发送给备用注册机构);suggest 会将引用查询发送给 Crossref、Semantic
Scholar 和 arXiv;任意 URL 输入都会从所提供的主机获取内容;学位论文查询可能会发送给 OpenAIRE 和 BASE。Google Scholar 是一种基于抓取的可选 suggest 备用方案,默认关闭,并且可能被拦截或遇到 CAPTCHA 验证。
OneCite 不保证符合隐私法规,也不会持久缓存常规实时响应。服务提供方、代理、输出文件和日志可能会保留数据。使用前请检查并删去机密输入。有关确切的
process/suggest 路由、传输字段、来源健康状态限制以及离线基准测试/诊断的边界,请参阅
隐私与外部服务。
快速开始
只需几步即可安装并试用 OneCite。
1. 安装
当前公开发布于 PyPI 的版本是 0.1.1。此工作树记录的是尚未发布的
0.2.0 候选版本,因此验证仅在候选版本中提供的行为时,请从检出目录安装:
# Current stable public release
pip install onecite
# Unreleased 0.2.0 candidate, from the repository checkout
python -m pip install -e .
2. 创建输入文件
创建名为 references.txt 的文件,其中包含混合格式的引用:
# references.txt
# Add blank lines between entries to avoid misidentification
10.1038/nature14539
arXiv:1706.03762
ISBN:9780262035613
https://github.com/tensorflow/tensorflow
10.5281/zenodo.3233118
arXiv:2103.00020
Smith, J. (2020). Neural Architecture Search. PhD Thesis. Stanford University.
3. 运行 OneCite
执行命令以处理文件并生成整洁的 .bib 输出。
onecite process references.txt -o results.bib --quiet
4. 查看输出
你的 results.bib 文件现在包含不同类型的条目。
查看完整输出(results.bib)
@article{LeCun2015Deep,
doi = "10.1038/nature14539",
title = "Deep learning",
author = "LeCun, Yann and Bengio, Yoshua and Hinton, Geoffrey",
journal = "Nature",
year = 2015,
volume = 521,
number = 7553,
pages = "436-444",
publisher = "Springer Science and Business Media LLC",
url = "https://doi.org/10.1038/nature14539",
type = "journal-article",
abstract = "Deep learning allows computational models that are composed of multiple processing layers to learn representations of data with multiple levels of abstraction...",
}
@inproceedings{Vaswani2017Attention,
arxiv = "1706.03762",
title = "Attention Is All You Need",
author = "Vaswani, Ashish and Shazeer, Noam and Parmar, Niki and Uszkoreit, Jakob and Jones, Llion and Gomez, Aidan N. and Kaiser, Lukasz and Polosukhin, Illia",
year = 2017,
booktitle = "Advances in Neural Information Processing Systems (NeurIPS)",
url = "https://arxiv.org/abs/1706.03762",
}
# ... and 5 more entries ...
📖 高级用法
直接输入字符串和标准输入
onecite process "10.1038/nature14539"
onecite suggest "Attention is all you need, Vaswani et al., NIPS 2017"
echo "10.1038/nature14539" | onecite process -
🐍 作为 Python 库使用
在 Python 脚本中直接使用 OneCite。
from onecite import process_references
result = process_references(
input_content="10.1038/nature14539",
input_type="txt",
template_name="journal_article_full",
output_format="bibtex",
)
print('\n\n'.join(result['results']))
💻 CLI 命令和选项
OneCite 提供了命令行界面,包含以下命令和选项:
onecite process
用于通过 OneCite 流水线处理参考文献的主命令。
用法:
onecite process <input_file> [OPTIONS]
参数:
input_file- 输入文件路径、表示标准输入的-,或强标识符/参考文献字符串
选项:
| 选项 | 简写 | 说明 | 默认值 |
|---|---|---|---|
--input-type | 输入格式:txt 或 bib | txt | |
--template | 自动检测无法确定时使用的 BibTeX 条目类型备用预设 | journal_article_full | |
--output-format | 输出格式:bibtex,或供使用 CSL-JSON 的下游工具使用的 csl-json | bibtex | |
--output | -o | 输出文件路径(默认:标准输出) | - |
--quiet | -q | 禁止输出详细日志 | False |
--json | 输出稳定的 JSON 封装,而非 BibTeX 文本 | False | |
--ndjson | 输出以换行符分隔的 JSON 事件,用于流式自动化工作流 | False | |
--fail-on-unresolved | 任一条目无法解析时返回退出代码 2 | False |
示例:
# Process a text file
onecite process references.txt -o results.bib
# Process a BibTeX file with auto-detection
onecite process references.bib
# Use stdin
echo "10.1038/nature14539" | onecite process -
# Process a direct string (DOI)
onecite process "10.1038/nature14539"
# Process with custom template
onecite process references.txt --template conference_paper
# Quiet mode for scripts
onecite process references.txt -o results.bib --quiet
# Automation-friendly JSON with unresolved-entry exit-code handling
onecite process references.txt --json --fail-on-unresolved
# Streaming NDJSON for automation
onecite process references.txt --ndjson
# CSL-JSON item output (a development fixture verifies Pandoc 3.10 consumption)
onecite process references.txt --output-format csl-json -o references.json
开发验证证实,Pandoc 3.10 能够使用代表性输出条目。此版本未单独验证 Quarto、独立 citeproc 和参考文献管理器导入工作流。
报告字段。 除了 results 和 failed_entries,处理报告还包含两个审计信号:
warnings— 针对已解析条目的非阻断性审核警告。最重要的是text_metadata_mismatch:已解析 DOI 周围的输入文本似乎描述了另一篇作品(典型的标题与 DOI 幻觉配对)。该 DOI 仍是已解析的标识符,条目也会解析成功,但系统会将其标记为待审核,而不是悄然作为干净输出发出。duplicates— 同一作品在批次中出现了多次(裸 DOI、PMID、格式化引文)。该作品只会输出一次;重复项会连同输出条目的引文键一起报告。
失败条目包含原始输入摘录(raw_text)和 reason 代码 — doi_not_found(在已实现的回退流程之后仍未返回注册记录)、no_strong_identifier(文本存在歧义;请使用 onecite suggest)、source_error(该路由上出现了来源/身份解析失败)等。这些代码便于区分重要情况,但并非完整的提供方调用轨迹:目前,某些 PMID、ISBN 和 DataCite 请求错误会与查询未命中归为同一未解析原因。
onecite suggest
搜索候选匹配项,不生成 BibTeX,也不返回验证 passed 状态。
onecite suggest "Attention is all you need, Vaswani et al., NIPS 2017" --json
候选项供审核使用,并非已通过来源核实的引文。 每条建议都会在 sources 列表中披露所查询学术索引的健康状况。如果某个来源受到速率限制或发生错误,建议状态会变为 candidates_found_incomplete / no_candidates_incomplete——正确的匹配项可能完全不在列表中,因此不得将候选列表视为完整列表。年份与查询中引用的年份相矛盾的候选项会受到惩罚,并标记为 year_conflict。若要将审核通过的候选项转换为已通过来源核实的 BibTeX,请通过 onecite process "<doi>" 解析其 DOI。
可选的 Google Scholar 回退。 suggest 接受 --google-scholar(需要可选的 scholarly 软件包:pip install onecite[scholar])。仅当 CrossRef 和 Semantic Scholar 均未返回结果时,才会将其用作尽力而为的回退。由于它会抓取没有公开 API 的服务,因此默认关闭,可能受到速率限制或被 CAPTCHA 拦截,也无法保证结果可复现——它仅用于 suggest(供人工审核的候选项),不会用于 process。
pip install onecite[scholar]
onecite suggest "some obscure title" --google-scholar
onecite --version
显示已安装的 OneCite 版本。
用法:
onecite --version
onecite version
显示版本信息的备用命令。
用法:
onecite version
onecite templates
列出随附的 BibTeX 回退模板及其所需字段。
用法:
onecite templates
onecite templates --json
onecite benchmark
运行一组小型、确定性的回归测试,涵盖 DOI 查询、arXiv 查询、PMID/PubMed 查询、GitHub 软件 URL、Zenodo/DataCite 数据集 DOI,以及有效和无效条目的混合批次。此命令专为 CI 和自动化工作流而设计,可提供机器可读的通过/失败检查;它并非全面的引文准确性基准测试。
用法:
onecite benchmark [OPTIONS]
选项:
| 选项 | 说明 | 默认值 |
|---|---|---|
--cases | 自定义基准测试套件 JSON 文件的路径 | 随附的黄金案例 |
--min-success-rate | 退出代码为 0 所需的最低已覆盖案例通过率 | 1.0 |
--json | 将基准测试报告以 JSON 格式打印 | False |
--live | 使用实时外部 API,而非随附的离线测试数据 | False |
--anti-hallucination | 运行带标签的非编造评估,而非黄金案例 | False |
示例:
onecite benchmark
onecite benchmark --json
onecite benchmark --live --json
onecite benchmark --cases my_cases.json --min-success-rate 1.0 --json
onecite benchmark --anti-hallucination
onecite benchmark --anti-hallucination --json
仓库基线记录存储在 benchmarks/leaderboard.json 中,复现说明见 benchmarks/README.md。
防幻觉评估
onecite benchmark --anti-hallucination 会运行带标签、完全离线的评估,以检验 OneCite 的核心安全属性。它会将真实的强标识符(A 类)解析为已通过来源核实的 BibTeX;对于存在歧义的纯文本参考文献(B 类)以及虚构的、不存在的 DOI(C 类——大模型可能会幻觉生成的类型),它会保持未解析,而不是输出错误引文;对于不匹配的配对(D 类——真实 DOI 与另一篇论文的标题关联,这是最常见的幻觉引文形式),它会附加 text_metadata_mismatch 警告,而不是悄然将其作为无误的来源核实结果输出。它会报告三项指标:
- 解析率——正确解析的 A 类输入所占比例;
- 非编造率——正确保持未解析(未编造)的 B/C 类输入所占比例。
100%表示 OneCite 未编造任何引文; - 不匹配检测率——附带不匹配警告进行解析的 D 类输入所占比例。
管线崩溃会记录为 error,且在任何指标中都不会计为正确——干净地拒绝和管线故障是不同的结果。
数据集位于 src/onecite/benchmarks/anti_hallucination_cases.json,也可通过 Python 使用
onecite.run_anti_hallucination_eval() 运行此评估。
onecite doctor
检查自动化和 CI 的本地安装健康状况。doctor 命令会检查软件包是否可导入、内置模板、打包的基准测试资源、 仓库内的 OneCite Skill,以及离线基准测试回归检查。
用法:
onecite doctor
onecite doctor --json
JSON 输出是一个稳定的封装,包含 schema_version、tool、
command、status、environment、summary 和 checks 字段。
面向自动化工作流的 OneCite Skill
仓库包含一个本地技能包,位于 skills/onecite/SKILL.md。
它为自动化和贡献者工作流提供可重复的流程,用于
清理参考文献、运行基准测试和 doctor 检查,以及明确
报告未解决的条目。
该 Skill 位于仓库内,不会将自身安装到任何本地
工具记忆中。
输入类型自动检测
未指定 --input-type 时,OneCite 会自动检测输入类型:
- 以
.bib结尾的文件会被视为 BibTeX 格式 - 其他所有文件和字符串都会被视为纯文本
可用模板
OneCite 支持多种适用于不同条目类型的模板预设:
journal_article_full- 完整期刊文章条目(默认)conference_paper- 会议论文集论文book- 书籍条目thesis- 学位论文条目dataset- 数据集条目software- 软件/代码条目
退出代码
0- 成功1- 发生错误(输入无效、处理失败等)2- 使用--fail-on-unresolved时存在一个或多个未解决的条目
对于 onecite benchmark 和 onecite doctor,退出代码 0 表示
配置的检查均已通过;退出代码 1 表示至少有一项检查失败。
🗺️ 路线图
- OneCite Skill — 面向本地引文清理工作流的仓库内操作指南
- 基准测试 — 小型确定性回归测试套件、可配置的通过率门槛和基线记录
- 增强型 CLI — 面向自动化的 JSON、NDJSON、摘要和参考文献处理退出代码
- 反幻觉评估 — 对不捏造属性(解析率、不捏造率和不匹配检测率)进行带标签的离线评估,并在 CI 中设门槛
- 审计级报告 — 文本/DOI 不匹配警告、附带原始输入的失败原因代码、按 DOI 去重,以及建议披露来源健康状况
- CSL-JSON 输出 —
--output-format csl-json会输出 CSL-JSON 条目,供使用该格式的下游工具使用;开发用测试样例可验证 Pandoc 3.10 对其的使用,但 Quarto、独立 citeproc 和参考文献管理器导入未经过单独验证 - 扩展建议来源 — 直接搜索 arXiv 候选项,覆盖 CrossRef 未索引的计算机科学会议
- 并发批量解析 — 为大型参考文献列表并行查询来源(当前为顺序查询;延迟取决于所选路由和外部服务)
- 更大的反幻觉数据集 — 为每个类别增加更多带标签的案例,并发布实时模式基线
🤝 参与贡献
欢迎随时贡献!请参阅 CONTRIBUTING.md,了解开发指南和提交拉取请求的说明。
📄 许可证
本项目采用 MIT License 许可。详情请参阅 LICENSE 文件。
OneCite
在 GitHub 上点 Star • 文档 • 🐛 报告问题 • 讨论
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。