2021 年 OpenAI 的一篇论文,直接催生了 GitHub Copilot——它做对了一件「反直觉」的事

  • 关联论文:2107.03374

你今天让 ChatGPT 写一段 Python 函数,它真的会给你一段能直接跑起来的代码。

但 2021 年之前,大多数 AI 写的代码都跑不通——要么语法错误,要么逻辑不对,要么干脆给你一段看起来像代码的英文。

OpenAI 2021 年 7 月发的那篇论文,把这件事翻了过来。

被引 10800+ 次、直接催生了 GitHub Copilot、定义了今天几乎所有「代码 AI」评估的元标准——它到底讲了什么?


一句话告诉你这篇论文干了什么

OpenAI 把 GPT 模型放在 GitHub 代码上微调,得到了 Codex;同时发布了一个叫 HumanEval 的评测集(164 道带单元测试的编程题)。

但真正反直觉的发现是:

让 AI 写一次代码,成功率只有 28.8%。让它写 100 次然后选一个能跑通的,成功率直接飙到 70.2%。

换句话说:让 AI 重复试 100 次,比让它一次写对更靠谱。


为什么这件事值得普通人关注

如果你今天用过任何代码 AI(ChatGPT、Cursor、Copilot、通义灵码、文心一言),它们底层的核心思路都来自这篇论文:

🧑‍💻 GitHub Copilot——直接由 Codex 衍生,2021 年底上线 🤖 Cursor、Claude Code、Codeium——都在用「采样+测试过滤」的思路 📚 学生学编程——AI 现在能当 24 小时陪练,也是这篇论文的遗产 🏢 企业内部工具——很多公司用「多次采样+单测验证」做内部代码助手

更广地说,这篇论文改变了「评估 AI」的方式:

以前的 AI 评测用 BLEU 这种「文本相似度」指标——生成的代码「看着像」就得分。 这篇论文之后,默认是「生成的代码能不能跑通测试」——能用就有用,不能用就是零。


它讲了什么?去掉术语版

第一步:造了一个「考试卷」——HumanEval

研究人员手工写了 164 道 Python 编程题,每道题长这样:

def add_two_numbers(a, b):
    """返回 a + b 的和"""
    # 你的代码写在这里

并且每道题都附带了单元测试:

assert add_two_numbers(2, 3) == 5
assert add_two_numbers(-1, 1) == 0

AI 写完函数后,自动跑测试——能跑通就得分,跑不通就是 0 分。

这个数据集成为了「代码 AI」的托福考试——今天任何新出的代码大模型(Code Llama、DeepSeek-Coder、Qwen-Coder)发布时,HumanEval 分数都是必报指标。

第二步:在 GitHub 代码上微调 GPT

研究人员拿 GPT 的架构,在 GitHub 上的几十亿行公开代码上做微调,得到了 Codex 系列——从 12M 到 12B 参数(12B 是最大的)。

关键发现: - 从零训练的代码模型(GPT-Neo) = 几乎写不出能跑的代码 - 微调 GPT 权重的 Codex-12B = 单次写代码 28.8% 能跑通 - 再在「正确代码」上微调一次的 Codex-S = 单次能跑通率提升到 37.7%

核心反直觉点:代码能力不是「学语法」,是「在大量真实代码上模仿人类写法」

第三步:反直觉的发现——「重复 100 次比一次写对更靠谱」

这是整篇论文最炸的实验结果:

采样次数 pass@1(单次) pass@100(100 次里中一次)
Codex-12B 28.8% 70.2%
Codex-S-12B 37.7% ——

意思是:AI 一次写对的概率不到 30%,但给它 100 次机会,它能从 100 个候选里挑出一个对的——这时候成功率超过 70%。

这直接催生了「AI 写代码 + 自动跑测试」这条技术路线,也是今天所有代码 Agent 的核心机制。


它打破了一个「常识」

以前的 AI 圈认为:模型越大、训练越好,单次输出就应该越准

这篇论文说:不,有时候「让模型多试几次」比「让模型一次写对」更有效

这是一个范式转换——从「追求单个高质量输出」转向「用多样性+筛选换质量」。

今天这个思想被广泛用在: - 代码生成(Codex 原生场景) - 数学解题(AlphaCode 用 100 万次采样刷 Codeforces) - Agent 决策(多路径探索+自评) - 蛋白质设计(AlphaFold 多次采样后挑最优)


谁该关注这件事?

🎯 写代码的开发者——你今天用的 AI 工具(无论 Copilot 还是 Cursor)都站在这篇论文的肩膀上;理解了「采样+测试」的原理,你才能更聪明地用 AI(例如对复杂任务主动让它多生成几个版本)

🎯 AI 产品经理——评估一个代码 AI,不能只看「写得像不像」,必须用 HumanEval 这种「能跑不能跑」的指标

🎯 企业技术决策者——如果想自建代码助手,核心是要有沙盒+测试 pipeline,否则 LLM 生成的代码直接进生产会出大事

🎯 学生/研究者——这是 LLM 「涌现能力」的早期实证:微调就能解锁写代码能力,后续所有 LLM 都在这个方向狂奔


它也有局限(不能无脑吹)

⚠️ HumanEval 已严重饱和:今天 GPT-4 / Claude-3.5 / Gemini-2.5 在 HumanEval 上都 90%+,区分度没了。评测新模型要用 LiveCodeBench、SWE-bench 这种动态题库

⚠️ 只看「单函数生成」:真实编程要改 bug、跨文件、改架构——HumanEval 完全测不到这些

⚠️ 沙盒安全问题:让 LLM 写的代码直接跑 = 让一个不请自来的程序员在你的机器上跑命令——必须有 Docker + 网络隔离

⚠️ GitHub 版权争议:用 GitHub 公开代码训练,2023 年起引发多起集体诉讼,这条训练路线今天已不那么干净


一句话总结

Codex 论文证明:让 AI 在 GitHub 代码上微调就能写代码,「多次采样+测试过滤」比「一次写对」更靠谱——这两件事一起催生了今天的 GitHub Copilot 和整个代码 AI 产业。

被引 10800+ 次不是偶然——它重新定义了「AI 能不能写代码」这件事的评估方式,以及「AI 怎么写代码才靠谱」的工程范式。


三个标题变体

  1. 让 AI 写 100 次代码然后选一个能跑的——OpenAI 这篇论文定义了今天的 Copilot(反直觉策略+权威钩子)
  2. 为什么 ChatGPT 能写出能跑的 Python?故事要从 2021 年这篇被引过万的论文说起(问答钩子+历史溯源)
  3. 代码 AI 的「托福考试」是怎么来的?一篇论文催生了 GitHub Copilot 也定下了行业标准(类比钩子+产业影响)

小红书风格卡片文案(可直接发布)

💻 AI 写的代码,真的能跑吗?

你以为 ChatGPT 写代码是靠「一次写对」?错了❌

2021 年 OpenAI 的这篇论文证明: 让 AI 写 100 次代码,从里面挑一个能跑通的——成功率直接飙到 70%+

📌 它讲了啥? ✅ 把 GPT 微调在 GitHub 代码上 → 得到 Codex ✅ 造了 164 道编程题 + 自动测试 → HumanEval 评测集(代码 AI 的「托福考试」) ✅ 关键发现:采样 100 次 vs 一次写对,效果天差地别

📌 它影响了啥? 🤖 直接催生 GitHub Copilot(2021 年底上线) 📊 HumanEval 成为代码 AI 事实标准(Code Llama / DeepSeek-Coder 都报这个分) 🛠️ 「采样+测试」成为代码 Agent 核心机制 🧬 「多次采样换质量」思路影响数学解题 / 蛋白质设计 / Agent 决策

📌 局限提醒 ⚠️ HumanEval 现在 90%+ 饱和,新模型要看 LiveCodeBench / SWE-bench ⚠️ 真实编程要跨文件改 bug,HumanEval 测不到 ⚠️ AI 写代码必须有沙盒,不然等于让陌生人跑命令

💡 被引 10800+ 次,直接重塑了「AI 写代码」这件事的玩法

一句话总结:AI 不需要一次写对,需要「多次试+自动筛」

你用 AI 写过最爽的一段代码是啥?评论区聊聊 👇

AI科普 #人工智能 #编程 #OpenAI #Codex #GitHubCopilot #代码生成 #LLM #Cursor #ChatGPT #AI日报 #开发者