乐于分享
好东西不私藏

被OpenAI收购的uv创始人:我一行代码没读就发了版

被OpenAI收购的uv创始人:我一行代码没读就发了版

一行代码都没读,就敢按下发布键

2026 年 3 月,OpenAI 宣布收购 Python 工具开发商 Astral。消息落地那一刻,整个 Python 社区的第一反应不是「又一家被巨头收编」,而是——uv、Ruff、ty 这三件套以后还能不能用。创始人 Charlie Marsh 在公告里给了一颗定心丸:继续开源,继续独立发展。

但真正让开发者圈讨论了一整个夏天的,不是收购本身,而是一次播客访谈里,Marsh 说出的一句话:

「我一行代码都没读,就发布了。」

他描述的不是一次手抖的失误,而是被 AI Agent 接管工作流之后,正在变得日常的一种状态。Marsh 讲他早上醒来,看到自己昨晚让 agent 写的代码,扫了两眼,质量令人堪忧。他没读完,也没改,直接提交,发版。事后回看,bug 一堆。

作为 uv 的作者、Ruff 的作者、Astral 的创始人——一个把 Python 工具链性能推进了一个时代的工程师——他开始公开反思:当 AI 让「写代码」和「发代码」的门槛都被踩到零,真正贵起来的是什么?

从计算生物学,到 9 天写出 Ruff

要理解 Marsh 此刻的反思,得先看他来时的路。

Marsh 本科学的不是计算机,是计算生物学。毕业后他在一家生物科技公司做研究员,干了几年,意识到自己真正享受的不是生物学,而是「写代码解决问题」这件事。于是他辞职,转行做开发工具。

转行后的第一个项目就是 Ruff,一个用 Rust 写的 Python Linter 和代码格式化工具。

他在 9 天内写出了 Ruff 的原型。

Ruff 之所以能引爆社区,是因为它做了一件反直觉的事:用 Rust 重新实现一个 Python 生态里早就有的工具——Flake8、Black、isort——然后把执行速度拉到了原来 10 倍、100 倍的量级。开发者原本要等十几秒的 lint,瞬间变成几百毫秒。Ruff 很快成了 GitHub 上 Star 增长最快的 Python 项目之一。

凭借 Ruff 的成功,Marsh 在 2022 年正式成立 Astral,开始系统性地重写 Python 工具链——uv 是包管理器,ty 是类型检查器,加上 Ruff,组成了一套用 Rust 驱动的 Python 工具三件套。

Python 生态用了十年没解决的痛点,被一个 Rust 重写浪潮一次性掀翻。

uv 的性能:8 倍只是起步

uv 是 Astral 给 Python 社区最大的礼物。它做的事情看起来很普通——包管理、虚拟环境、Python 版本管理——但执行速度让人重新理解了「基础设施」这两个字。

几个关键的性能数字:

冷启动(无缓存)安装:比 pip 快 8–10 倍。 热缓存安装:比 pip 快 80–115 倍。 创建虚拟环境:比 python -m venv 快 80 倍。

# 安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# 创建一个新项目(冷启动 < 3 秒)

uv init my-project
cd
 my-project

# 锁定并安装依赖(uv.lock + uv sync)

uv add fastapi uvicorn pydantic
uv sync

# 一键运行脚本(自动管理临时环境)

uv run python main.py

# 安装指定 Python 版本(替代 pyenv)

uv python install 3.12

这套命令组合在传统 Python 工具链里要拆成 pip + virtualenv + pip-tools + pyenv 四个工具,每个都有自己的配置、缓存和行为。uv 把它们揉进同一个二进制文件里,再用 Rust 的性能托底,让原本 11 秒才能完成的项目初始化压缩到 3 秒以内。

GitHub 上 uv 攒下了 79,000+ Star,每月下载量以亿计,已经成为事实上的现代 Python 包管理标准。

Astral 三件套加起来,已经不是「更好用的工具」,而是现代 Python 开发的底层土壤。

这也是 OpenAI 要买它的根本原因——AI 编程的下一战场,不在「谁能写出更好的代码」,而在「谁能接管整条开发链路」。uv 负责依赖管理,Ruff 负责质量检查,ty 负责类型安全,Codex 负责生成代码——一条链路全接管。

「提交 PR 的成本归零,但审查成本反而更高」

收购尘埃落定后,Marsh 在一次播客里谈了 AI Agent 对软件工程的真实冲击。整场访谈里,被讨论最多的是一段关于 PR 的观察。

他原话大意是:

「提交一个『看起来合理』的 PR 的成本已经降到了零,但审查和验证一个『看起来合理』的 PR 的成本依然很高,甚至更高。」

这句话击中了很多开源维护者的痛点。

在 AI Agent 普及之前,一个外部贡献者要提一个 PR,得先读文档、装环境、跑测试、复现问题,然后才敢提。这个过程本身就是一次学习。提上来的 PR,质量参差但大多有真实背景,维护者花半小时到一小时 review,是合理的成本交换。

但 AI 把这个交换结构彻底打碎了。

一个 Agent 可以在十分钟内生成十几个看起来语法干净、CI 通过、甚至写了测试的 PR。每一个单独看都「说得过去」。但每一个都缺乏对项目历史、架构意图、边界条件的理解。

维护者的工作量从「筛掉明显错的 PR」变成了「逐行判断 PR 是否真的对项目有益」。

Marsh 透露,他自己的 PR 也在被团队逐行细审——不是因为他水平下降了,而是因为那些 PR 不是他写的,团队无法用「Charlie 自己肯定想清楚了」这个默认假设来放行。

这就是所谓的信任危机:当 PR 不再代表一个人对系统的理解,PR 就不再是协作的单元,而变成了一份待审计的代码。

Astral 的 AI 政策:禁止「不理解」的 Agent 贡献

为了对抗这种「AI slop」(AI 产生的低质量代码)冲击,Marsh 在 Astral 内部推了一套明文政策,核心条款非常直白:

「禁止把不理解的 agent 代码合并进主分支。」

具体落地分三层:

第一层:自动化验证。

用 Valgrind 跑内存安全检查,用 CodSpeed 跑性能回归基线,再跑一遍 Python 生态测试套件确认没有破坏兼容性。任何一项不通过,PR 直接卡掉,不进入人工 review。

第二层:Codex 内部 Review。

Astral 团队在内部部署了 OpenAI 的 Codex,让它先对每一个 PR 做一轮自动 review,标注可疑改动、复杂度异常点、潜在副作用。这一层不是为了替代人,是为了把人 review 的时间从「通读全篇」压缩到「重点验证 Codex 标红的地方」。

第三层:人 review 必须能讲清楚 PR 的设计意图。

提 PR 的人要能向 reviewer 解释「为什么这么改」「有哪些替代方案」「边界条件是什么」。如果只能复述代码做了什么,而讲不出为什么,这条 PR 不收。

这套三层防线不是反 AI,恰恰相反——它是在用 AI 帮人类把审查时间花在刀刃上。

初级工程师的困境:教练被学员替代了

访谈里最让开发者社区共鸣的,是 Marsh 关于初级工程师的一段担忧。

他讲了一个很具体的场景:一个初级工程师开始用 Agent 写代码,Agent 写得快、跑得通、交差没问题。但这位工程师其实没有真的学到

为什么?因为传统的学习回路是这样的:

遇到问题 → 查文档 → 试错 → 跑通 → 内化。

Agent 介入之后,这个回路被压缩成:

遇到问题 → 让 Agent 写 → 跑通 → 抄进项目。

表面看效率提升了十倍。但人跳过了查文档、跳过了试错、跳过了内化。下一次遇到类似问题,他还是只能去找 Agent。

更糟的是,初级工程师没有能力指导 Agent。

指导 Agent 需要两件事:一是清楚地表达意图,二是能判断 Agent 的输出是否真的对。前者需要工程语言能力,后者需要经验积累。一个刚入行的新人,两样都没有。当他给 Agent 提了一个模糊需求,Agent 给了 5 个方案,他根本分辨不出哪个好。

Marsh 打了个比方:「你不能把一个还没学会下棋的人送去当 AI 棋手的教练。」

他担心的不是初级工程师被 AI 取代,而是初级工程师的学习回路被 Agent 切断后,整个行业未来三到五年会出现一个工程师断层——能当 Agent 教练的人不够用了。

性能优化的两层:Rust 是地板,架构是天花板

关于性能优化,Marsh 给出了一个非常清醒的层次划分。

他承认 Rust 是工具链性能飞跃的基础。「用 Rust 写的程序,基线性能会显著高于其他语言。」这句话本身没问题。但 Rust 只是地板——它决定了你的程序『至少不会太慢』,而不是「会快得离谱」。

uv 比 pip 快 80–115 倍,这背后不全靠 Rust。Rust 给的是「无缓存时比 pip 快 8–10 倍」这一层基线。但从 10 倍跳到 100 倍,靠的是架构创新。

具体来说:

uv 用 u64 表示版本号,而不是用字符串。 版本比较变成一次整数减法,而不是一次字符串解析。

uv 维护一个全局模块缓存。 同一个包在机器上只存一份,配合 Copy-on-Write 技术,多个项目共享,磁盘占用节省 50% 以上。

uv 在依赖解析阶段就用并行化处理。 传统 pip 在解析依赖时是串行的,uv 把整张依赖图拆开并行算。

uv 用 Rust 的零成本抽象,把 Python 生态里几个工具的边界抹掉。 pip + virtualenv + pip-tools + pyenv 的中间状态全部消失,只剩一个统一的二进制。

这些优化都不是 AI 能直接给出的。AI 擅长的是「在已有结构里找局部最优」,但「重新设计一个 u64 版本号表示」这种决策,需要的是对问题本质的理解。

Marsh 在播客里直接讲了这段话:

「如果你不先用大脑从第一性原理去思考『这个东西理论上应该有多快』、『系统应该怎么工作』,那你就会把那些积累起来的复杂度直接交付出去。」

优秀工程师用 AI 反而更高效

但 Marsh 并不是悲观主义者。

他对「高级工程师 vs AI」这件事反而乐观——真正优秀的工程师使用 AI 之后,效率提升幅度比初级工程师大得多。

为什么?因为高级工程师能精准地指导 Agent。

他能用工程语言描述需求,能在 Agent 给出多个方案时迅速判断哪个最好,能在 Agent 的输出里发现微妙的 bug,能把 Agent 写出来的代码重构进自己的系统。

AI 没有让高级工程师变得平庸,而是让他们多了一个不知疲倦的执行助手。

但初级工程师用 AI,更像是「在不会游泳的情况下被丢进深水池」。Agent 写出来的代码能让他们暂时浮在水面,但一旦 Agent 出了错,他们没有纠错能力。

这就是为什么 Marsh 主张:在团队里区分「Agent 教练」和「Agent 骑手」是必要的。 不是所有人都应该被一视同仁地塞进 AI 工作流,有些人需要更扎实的人工训练期。

给创业者的三条原则

访谈最后,主持人问 Marsh:如果你现在重新创业,最重要的原则是什么?

他给了三条非常反共识的回答。

第一条:不找联合创始人。

Astral 从创立到被收购,他始终是唯一的创始人。不是没机会找,是刻意没找。他解释:「我知道自己想要的节奏,和别人想要的节奏,往往不一样。事情一多就要妥协,妥协多了方向就散了。」

第二条:接受远程办公,但不接受「假装在远程」。

Astral 团队分布在美国和欧洲,完全异步工作。但 Marsh 要求每一次代码评审、每一次设计讨论都必须有清晰的书面记录。「远程办公没问题,但不能成为模糊决策的借口。」

第三条:每件事都要做取舍,但取舍之前先想清楚自己真正要什么。

要不要融资?要。要不要做商业版?要。要不要进大公司渠道?不要。Astral 的每一个选择都和行业「标准答案」不完全一致,但每一个都有清晰的内部逻辑。

Marsh 的总结是:「不要盲从行业标准答案。每件事都有取舍,关键是知道自己真正想要什么。」

这三条原则听起来朴素,但每一条背后都是他和团队真实的挣扎和取舍。uv 之所以能从一个 9 天写出来的原型变成整个 Python 生态的底层设施,本质上就是这三原则的执行结果。

真正的护城河,是判断力

回到开头那个让所有人震惊的瞬间——「我一行代码都没读,就发布了」。

Marsh 后来澄清,这不是他引以为傲的事,恰恰相反,这是他最警惕的事

他在播客里说:「AI 让你走得更快,但也让你更容易走错路。当我看到一个 PR 顺利通过 CI、看起来干净整洁,我会忍不住想『应该没问题吧』。但经验告诉我,这种『应该没问题』正是 bug 最爱藏的地方。」

他在访谈最后给所有开发者留了一段话,大意是:

「AI 不会淘汰工程师,但会淘汰不会用 AI 的工程师——前提是你真的知道自己写的代码在做什么。如果你连自己 agent 写的代码都看不懂,那不是你用了 AI,是 AI 用了你。」

这句话值得每一个写代码的人抄下来贴在显示器上。

uv 是好工具,Ruff 是好工具,ty 是好工具,Codex 也是好工具。但工具永远是工具。真正决定一个工程师价值的,不是他会用多少工具,而是他在工具出错的时候,能不能立刻看出来。

这个能力,AI 暂时给不了你。只能你自己练。