目录

paper2code:用AI把arxiv论文变成可验证的代码实现,1.2k星的开源技能

“LLM 生成的代码运行正常但不匹配论文。更糟的是,你分不清哪些来自论文,哪些是模型自己编造的。"——paper2code 的 README 开篇就点破了当前 AI 代码生成的致命问题。


一句话定位

paper2code 是一个 AI Agent 技能(skill),通过自然语言指令接收任意 arXiv 论文 URL,输出带引用锚定的可复现代码实现

输入:论文 URL(如 https://arxiv.org/abs/1706.03762) 输出:一个完整项目目录,包含架构代码、配置文件、复现笔记和可运行的 walkthrough notebook。

当前 GitHub ⭐ 1.3k,创建于 2026 年 4 月,MIT 许可证。


核心问题:为什么 paper2code 存在

当前 AI 代码生成的致命缺陷

当你让 GPT-4/Claude 实现一篇 ML 论文时,典型流程是:

  1. 把论文扔给 LLM
  2. LLM “凭感觉"生成代码
  3. 代码能跑,但存在大量未验证的假设
  4. 论文没有明确说明的超参数被悄悄填充了"行业惯例”
  5. 你无法判断哪个细节来自论文,哪个是模型幻觉

这在学术场景下是灾难性的:代码和论文不对应,意味着你复现不出论文的结果,而你自己都不知道哪里出了问题。

paper2code 的解决思路

不是让 AI “把论文写成代码”,而是让 AI 在写每行代码之前先审计论文的模糊地带

  • Citation Anchoring(引用锚定):每行关键代码引用对应论文的章节和公式
  • Ambiguity Auditing(模糊审计):生成代码前,先把论文的所有实现选择分为 SPECIFIED / PARTIALLY_SPECIFIED / UNSPECIFIED
  • Honest Uncertainty(诚实不确定性):论文没明确的参数,不静默填充,而是显式标记 [UNSPECIFIED] 并列出常见替代方案

这让 paper2code 的输出变成了一份可验证的论文实现清单,而非一段"看起来合理但无法保证正确"的代码。


核心功能详解

1. Citation Anchoring(引用锚定)

生成的代码中,每个关键实现都标注来源:

# §3.2 — "We apply layer normalization before each sub-layer" (Pre-LN variant)
class TransformerBlock(nn.Module):
    def forward(self, x):
        # §3.2, Eq. 2 — attention_weights = softmax(QK^T / sqrt(d_k))
        attn_out = self.attention(self.norm1(x))
        x = x + attn_out  # §3.2 — residual connection

变量名直接对应论文符号(Q, K, V, d_k, d_model)。reviewer 验证《Attention is All You Need》时指出:d_k = d_model/n_heads = 64 而非 d_model,这是论文明确的细节,paper2code 正确处理了。

2. Ambiguity Auditing(模糊审计)

生成代码前,paper2code 会生成一份 REPRODUCTION_NOTES.md,列出每个实现选择的来源:

标签含义示例
§X.Y论文第 X.Y 节明确指定d_model=512 from §5.3 Table 3
§X.Y, Eq. N论文第 X.Y 节的公式 Nsoftmax(QK^T/√d_k) from §3.2, Eq. 1
[UNSPECIFIED]论文未提及[UNSPECIFIED] LayerNorm epsilon — using 1e-6 (common default)
[PARTIALLY_SPECIFIED]论文提及但模糊[PARTIALLY_SPECIFIED] weight init — paper says "standard init"
[ASSUMPTION]基于论文上下文的合理推断[ASSUMPTION] Using pre-norm based on "pre-norm more stable" in §4.1
[FROM_OFFICIAL_CODE]来自作者官方实现LSTM hidden from official code: 4096

3. 输出结构

运行 /paper2code https://arxiv.org/abs/1706.03762 后,生成:

attention_is_all_you_need/
├── README.md                    # 论文摘要、贡献点、快速开始
├── REPRODUCTION_NOTES.md        # 模糊审计:每个选择及来源
├── requirements.txt             # 固定版本的依赖
├── src/
│   ├── model.py                 # 架构代码,每行引用论文章节
│   ├── loss.py                  # 损失函数,带公式引用
│   ├── data.py                  # Dataset 类骨架(含数据获取说明)
│   ├── train.py                 # 训练循环(如在范围内)
│   ├── evaluate.py              # 评估指标
│   └── utils.py                 # 共享工具(masking、positional encoding 等)
├── configs/
│   └── base.yaml                # 所有超参数,每个标注来源或 [UNSPECIFIED]
└── notebooks/
    └── walkthrough.ipynb        # 可在 CPU 上运行的 pedagogical notebook

4. 四种生成模式

# 最小实现(仅架构)
/paper2code https://arxiv.org/abs/1706.03762

# 指定框架
/paper2code https://arxiv.org/abs/2006.11239 --framework jax

# 完整模式(含训练循环)
/paper2code 2106.09685 --mode full

# 教育模式(额外注释 + pedagogical notebook)
/paper2code https://arxiv.org/abs/2010.11929 --mode educational

# 直接用 arxiv ID
/paper2code 1706.03762

人工审核案例:Attention Is All You Need

README 包含一份对《Attention is All You Need》输出的完整人工 review(reviewer 是人类)。审核结果:

✅ 正确的部分

  • Multi-head attention 实现符合 §3.2.1 和 §3.2.2
  • Scaled dot-product attention 正确实现 Eq.1:softmax(QK^T/√d_k)V
  • d_k = d_model/n_heads = 64 而非 d_model——这是论文明确指定的,reviewer 特别指出"这是一个常见错误”
  • 位置编码正确匹配 §3.5 的正弦公式
  • Encoder/Decoder 使用 N=6 层(Table 3 指定)
  • 三向 weight tying(源 embedding、目标 embedding、输出投影)正确实现

✅ 诚实标记未指定参数

人工审核确认,以下论文未指定的参数被正确标记为 [UNSPECIFIED]

  • LayerNorm epsilon(论文未提及,使用 1e-6)
  • Weight initialization(论文未描述,使用 Xavier uniform)
  • Bias terms(论文从未讨论)
  • 最大序列长度 PE 上限(论文未指定)
  • 梯度裁剪(论文未提及)
  • Dropout 放置位置(论文说 P_drop=0.1 但未枚举每个放置点)

⚠️ 存在争议的部分

Pre-norm vs Post-norm:论文 Figure 1 显示 post-norm,但 §4.1 提到"pre-norm 更稳定"。实现使用 post-norm(匹配 Figure 1),但 REPRODUCTION_NOTES.md 正确记录了这个歧义。reviewer 判定"可接受——选择合理且歧义已记录"。


适用场景

✅ 强项场景:

  • 论文复现研究:需要从零实现一篇论文,paper2code 提供可验证的起点
  • 论文代码审查:想快速检查某篇论文的实现是否有明显错误
  • 学习新模型架构:walkthrough notebook 让你在 CPU 上用玩具维度跑通整个流程
  • 写论文代码对比基线:生成标准实现的引用锚定版本

❌ 不适合的场景:

  • 需要完整训练流程和数据集下载(paper2code 不处理这部分)
  • 分布式训练和实验追踪(不在范围内)
  • 非 arXiv 论文(目前只支持 arXiv URL)

与同类工具的比较

工具核心功能论文解析引用锚定歧义标记
paper2codearXiv → 可验证代码✅ 结构化解析✅ 每行标注✅ UNSPECIFIED 系统
ChatPDFPDF 对话
Elicit论文辅助阅读
Scispace论文深度理解
**直接让 LLM 写论文实现⚠️ LLM 会遗漏

paper2code 是唯一一个把"论文实现信任度"作为核心目标的工具。


技术实现细节

依赖 Claude Code 等 Agent

paper2code 以 Agent Skill(技能)的形式工作,部署方式:

npx skills add PrathamLearnsToCode/paper2code/skills/paper2code

安装时会让你:

  1. 选择要绑定到的 coding agent(如 Claude Code)
  2. 选择全局安装还是项目级安装
  3. 选择链接方式(symlink 推荐)

安装后在 agent 中运行 /paper2code <arxiv-url> 即可触发。

支持的模型类型

类型说明示例
架构论文只实现模型结构Attention is All You Need
训练方法论文实现训练循环DDPM, GAN
两者混合架构 + 训练根据论文内容决定

paper2code 会识别论文类型并调整生成内容的范围。

数据和训练的处理

  • data.py 提供 Dataset 类骨架,包含数据获取来源和预处理说明,不下载数据
  • train.py 仅实现论文贡献所需的最小训练逻辑,不包含分布式训练、实验追踪等基础设施

限制与诚实声明

README 明确列出了 paper2code 不会做什么

  • ❌ 不保证正确性:实现匹配论文描述,不保证论文本身正确
  • ❌ 不发明细节:未指定的超参数会被标记,不会静默填充
  • ❌ 不下载数据集:只提供 Dataset 类骨架
  • ❌ 不设置训练基础设施:无分布式、实验追踪、检查点
  • ❌ 不实现基线:只实现论文的核心贡献
  • ❌ 不重新实现标准组件:论文说"standard transformer encoder"会导入而非重写

这个边界定义非常清晰,让用户知道能期待什么、不能期待什么。


总结

paper2code 解决的是一个长期被忽视的问题:如何让论文的实现可验证、可审计、值得信赖

它的核心洞察是:AI 生成的代码最大的问题不是"写错了",而是"你不知道哪部分是基于事实,哪部分是 AI 编造的"。通过引用锚定和歧义标记,paper2code 把这个问题变成了一个可操作的可信度评估框架。

对于需要复现论文的研究者、工程师,以及需要理解论文实现细节的学习者,这是一个值得加入工作流的工具。


项目信息