深入 Uber 的 AI 基础设施
可在 YouTube、Apple 和 Spotify 上收听和观看。本期文字稿见页面顶部,时间戳见页面底部。
本期赞助
- turbopuffer – turbopuffer 工程团队正在做一件很有意思的事:他们从底层重新设计存储架构,让大规模搜索更快、成本更低、更可靠。整个过程都会公开记录!你可以在 turbopuffer.com/v3 跟进这次重写。
- Linear – 开发者面临的一大挑战是代码审查量太大。Linear Diffs 是 Linear 里的新功能,可以集中在一个地方审查 PR,所有上下文一目了然,甚至支持堆叠 PR。欢迎体验。
- WorkOS – 智能体的权限管理怎么做?WorkOS 推出了 Airlock,这是面向 AI 智能体的授权层。它会根据智能体的意图和你的规则评估每个请求,然后放行、拒绝,或转交人工审批。支持 Claude Code、Codex 和 MCP 网关。欢迎试用。
本期内容
Uber 内部的开发者工具现在是什么样?和大多数公司看到的很不一样。比如,你能猜出 DevPods、Code Inbox、Slate 或 Wisdom 这些系统分别为工程师提供什么服务吗?
DevPods、Code Inbox、Slate 和 Wisdom:Uber 工程师日常使用的 20 多个内部工具中的四个。
本期节目深入探访 Uber 开发者的日常工作工具,带我们参观的是 Uber 任职时间最长的工程师之一:Uday Kiran Medisetty。Uday 是公司少数几位杰出工程师之一,目前负责智能体 AI 的大量工作。
我们和 Uday 聊了 Uber 的开发者基础设施如何为 AI 智能体做好准备。我们回顾了 Uber 在生成式 AI 之前搭建的系统,以及把智能体连接到代码、内部服务和工程知识的新工具。Uday 解释了工程师如何使用后台智能体,为什么 Slate 这类工具能让开发(以及修 bug!)更高效,以及代码审查正在发生什么变化。我们还聊了 Uber 对 token 成本的处理方式,以及在工程师角色变化之际如何衡量生产力。
与 Uday 对话的收获
以下是今天这期节目里 11 条有意思的发现:
-
Uber 的服务数量变化很不规律:2015 年 Uday 加入时,总共只有两个服务。到 2019 年,已经变成数千个。而到 2026 年,服务数量会和 2019 年差不多——尽管业务规模大约是那时的 10 倍!
-
Uber 大部分服务都是自研的,因为现成的软件要么扛不住它的规模,要么根本不存在!以下是 Uber 不得不自建的几个例子:
- uOwn:显示某个服务或资产归谁所有。2015 年时,市面上还没有这样的产品。
- M3DB:Uber 每秒产生约 5 亿条指标,没有供应商能扛住这个负载,所以自己造了一个。可观测性公司 Chronosphere 就是基于开源的 M3DB 构建的;我们之前也介绍过 Uber 如何搭建它的可观测性平台。
- Cadence:一个持久化的工作流引擎,用来处理持续多天的流程,比如司机入驻。Uber 需要它的时候,市面上没有这样的系统。Temporal 就是基于开源的 Cadence 框架构建的。
-
Morpheus:一个把功能开关和实验结合起来的系统,支持 switchback 测试,并且兼容 Uber 运营的双边和三边市场。同样,Uber 需要它时,没有现成的方案。
-
在 Uber,“城市”是一等概念,一直延伸到物理基础设施层。Uber 不得不自建大量工具的另一个原因,是“城市”这个概念属于“基础原语”,需要在可观测性、功能开关、部署,甚至服务分片等系统中统一处理。比如早期,有些服务的数据库就是按城市分片的。即便在今天,每个城市仍绑定到一个云区域,并且可以随时故障转移到另一个区域。我们之前也介绍过 Uber 如何从裸金属迁移到云上。
-
统一的 AI 模型网关带来了很大回报。2023 年,Uber 的平台团队做了一个决定:所有用 AI 构建的东西,都必须做到模型无关、工具无关(model- and harness-agnostic)。
他们搭建了 Model Gateway,用来支持在 Anthropic、OpenAI 等厂商的模型之间切换,现在还支持他们自己运行的开放模型。Model Gateway 就位后,扩展新能力就方便多了:
- AI Guard:安全团队维护的一个中间件,负责检查所有请求和响应,并统计延迟(对过慢的模型或查询打标记)
- 费用追踪:按用户统计花费
- 可观测性:审计日志和会话链路跟踪
5. AIFX 让工程师切换工具时不丢配置。 Uber 目前支持 Claude Code、Codex 和 OpenCode 三种工具(harness)。AIFX(AI Foundations 的缩写)是在这些工具之上封装的一层,工程师换工具时,设置、技能和插件都会一并带过去。
6. Uber 对 AI 花费采用混合管理。 每位工程师会被分配一个消费额度档位;用超了,经理可以审批当月追加。大致的原则是:只要工作对路,就没有花钱上限,但 Uber 不希望工程师随手乱烧 token。有个叫 CostCheck 的插件会跨会话统计,并提示如何优化个人的成本结构。如我们之前报道过的,Uber 最近几个月把 token 成本降了约 50%。
7. 所有 PR 仍由工程师评审,但 Uber 做了一些工具,帮开发者判断每次代码改动该花多少时间。 Uday 承认代码评审已经成为公司内部的一大瓶颈,于是 Uber 开发了 Code Review 工具,让评审更省事、更高效。开发者打开一个改动时,AI 代码评审已经跑完,功能截图和录屏(在适用的情况下)已经附上,改动也被打上了风险评分。
8. 今年早些时候,Uber 不得不为其 CI 系统宣布内部「红色警报」。 原因是 CI 任务在 12 个月内翻了一倍多,把 CI 系统的负载推得过高。为了保住构建速度,团队把简单的 CI 任务(比如 lint、构建和模板规则检查)挪进了「内循环」:让 agent 在开 PR 之前就用 afx validate 命令跑一遍。
9. Uber 会给每个 PR 打上工作类型标签。
过去,Uber 用「PR 速度」来衡量:一个 PR(Uber 内部叫「diff」)从提交到上线要多久。有了智能体(agent)之后,这个指标就不太管用了:现在很容易一口气创建几十甚至几百个 PR,其中很多对产品根本没有业务影响。于是 Uber 现在给所有 PR 按类型打标签:功能、修 bug、维护、测试、文档。他们发现「功能类 PR」的占比在上升,「维护类 PR」的占比在下降。我觉得这种分类思路很巧妙!
- 在 Uber 这样的公司里,软件工程师的工作就是构建上下文。Uday 这样反思这份工作的变化:
「从某种意义上说,工程工作变成了:'你如何为智能体构建正确的上下文,让它们产出可靠的结果?'你必须真正精通上下文工程。另外,多任务处理能力也变得重要了。以前创建一个 PR 要花很长时间,所以你会全神贯注在这上面。但现在你要不断在众多事情之间来回切换。你需要能够验证自己的工作,从智能体的产出中嗅出代码坏味道,避免把回归问题带到生产环境。上下文工程、多任务能力、审查和验证输出的能力——这些技能现在重要多了,因为你能并行的东西比以往多得多。」
- Uber 的 AI 工具看似是一年之内建成的,实际上是建立在十年开发工具投入的基础之上。2025 年打造的 Minion,底层靠的是 Uber 在 2017 年创建的 DevPods。Uber 的 MCP Gateway 之所以能快速搭建,得益于已有的 Thrift 和 Protobuf 注册表。Jaeger 追踪让 Slate 路由和上下文图(Context Graph)的实现变得更简单,如此等等。
Uday 的原话是:“我们为了让工程师的日子好过而做的一切,同样也让我们的 agent 更轻松了!”
本集相关的 The Pragmatic Engineer 深度文章
- Uber 如何用 AI 做开发:内部视角
- 与 Thuan Pham(Uber 首任 CTO)聊 Uber 的规模化
- Uber 上云的幕后
- Uber 的平台与项目拆分
- 超高速增长的创业公司:Uber 与 CloudKitchens,对话 Charles-Axel Dein
- Uber 如何搭建可观测性平台
- Uber 如何衡量工程效能
- Uber 的开发者体验,对话 Gautam Korlam
时间轴
- 00:00 开场
- 02:48 Uday 在 Uber 的早期经历
- 05:40 Uber 转向微服务
- 07:55 Uber 工程团队的今昔对比
- 09:05 AI 之前的开发者工具链
- 16:03 DevPods
- 19:28 为 AI agent(智能体)而构建
- 29:27 MCP 网关
- 34:37 Agent Skills 代码仓库
- 38:46 上下文图谱与 Cortana
- 47:54 PRD 与 ERD 工具
- 50:45 Minion
- 54:46 用 Bazel、Slate 和 Capri 做测试与代码评审
- 1:12:26 Edge Gateway、Shepherd 与 Wisdom
- 1:21:33 工程师角色的变化与效能度量
- 1:30:40 Uday 最喜欢的新产品
参考资料
找到 Uday Kiran Medisetty 的渠道:
- X:https://x.com/udaykiran
- LinkedIn:https://www.linkedin.com/in/udaykiran
节目中提到的内容:
- 与 Thuan Pham(Uber 首任 CTO)聊 Uber 的规模化:https://newsletter.pragmaticengineer.com/p/scaling-uber-with-thuan-pham-ubers
- Uber 如何用 AI 做开发:内部视角:https://newsletter.pragmaticengineer.com/p/how-uber-uses-ai-for-development
- Bazel:https://opensource.google/projects/bazel
- Uber 的开发者体验,对话 Gautam Korlam:https://newsletter.pragmaticengineer.com/p/developer-experience-at-uber
- 超高速增长的创业公司:Uber 与 CloudKitchens,对话 Charles-Axel Dein:https://newsletter.pragmaticengineer.com/p/high-growth-startups-uber-and-cloudkitchens
- Instinct:https://instinct.com
- Muse:https://ai.meta.com/muse
- Grok Bot:https://x.ai/bot
—— 制作与市场由 Pen Name 负责。