Minions: Stripe’s one-shot, end-to-end coding agents

Minions are Stripe’s homegrown coding agents, responsible for more than a thousand pull requests merged each week. Though humans review the code, minions write it from start to finish. Learn how they work, and how we built them.

stripe.dev

Stripe 开发了名为 Minions 的内部原生编程智能体(Coding Agents),旨在实现“一键式”(one-shot)且完全无人值守的端到端编程任务。目前,Stripe 每周有超过 1,000 个合并的拉取请求(PR)完全由 Minions 生成。虽然这些代码仍需人工审核,但代码本身不含任何人工编写的内容。

Minions 的核心价值在于通过并行化处理任务来节省开发者宝贵的注意力资源。它们通常从 Slack 消息或内部工单系统启动,自动在隔离的开发环境(devbox)中运行,完成代码编写、运行 Lint 检查、通过 CI 测试,并最终提交 PR。

Stripe 选择自研而非直接使用市面上的通用工具,是因为其代码库规模庞大(数亿行)、技术栈独特(Ruby + Sorbet)且业务风险极高(年处理交易额超 1 万亿美元)。Minions 深度集成了 Stripe 的内部开发工具链,利用 MCP(模型上下文协议)访问内部文档和 400 多个工具。通过“左移”反馈机制,Minions 能够在本地环境和 CI 阶段自动修复错误,确保交付高质量的代码。Minions 的成功标志着编程智能体已从实验阶段进入到大规模生产实践。


Minions 的定位与核心价值

Minions 是 Stripe 内部开发的无人值守编程智能体,专门用于处理端到端的编程任务。在 Stripe 这样规模的企业中,开发者的时间是最稀缺的资源。Minions 的出现并非为了取代开发者,而是通过并行化处理那些琐碎、重复或定义明确的任务(如修复不稳定的测试、更新配置等),让工程师能够专注于更高价值的架构设计和复杂逻辑。

目前,Minions 已经深度融入 Stripe 的工作流。每周有上千个 PR 由 Minions 独立完成。一个典型的流程是:工程师在 Slack 中提及 Minion 并描述任务,Minion 自动执行并生成一个通过了所有持续集成(CI)测试的 PR,最后由人工进行审查。这种“一键式”的体验极大地提高了研发效率,尤其是在处理值班期间的小型问题时,工程师可以同时启动多个 Minion 并行工作。

为什么选择自研:应对复杂性与高风险

Stripe 没有直接使用现成的 AI 编程工具,而是选择构建 Minions,主要基于以下三个挑战:

  1. 独特的代码库与技术栈:Stripe 拥有数亿行代码,主要使用 Ruby(非 Rails 框架)并配合 Sorbet 类型检查。这种组合在业界并不常见,通用 LLM 缺乏针对性的训练。此外,Stripe 大量使用自研库,AI 必须学习这些特定上下文。
  2. 极高的业务风险:Stripe 每年处理超过 1 万亿美元的交易,代码的任何瑕疵都可能导致严重的金融后果或合规问题。
  3. 复杂的依赖关系:代码必须遵循复杂的金融监管和内部架构约束。

为了解决这些问题,Stripe 将 Minions 与现有的开发者生产力基础设施深度集成。Minions 使用与人类工程师完全相同的工具链(如版本控制、CI、代码生成工具)。Stripe 的理念是:如果一个工具对人类工程师好用,那么它对 LLM 智能体也同样有效。

Minions 的工作流程与集成方式

Minions 的设计强调“人体工程学”,即无缝嵌入工程师现有的沟通和工作场景:

  • 多入口启动:工程师可以通过 Slack 标签直接启动 Minion,Minion 会自动读取 Slack 线程中的上下文和链接。此外,Minions 还集成在内部文档平台、特性开关(Feature Flag)平台和工单系统中。例如,当 CI 检测到不稳定的测试时,系统会自动生成工单并附带一个“启动 Minion 修复”的按钮。
  • 透明的执行过程:工程师可以通过 Web 界面实时查看 Minion 的决策路径和采取的操作。
  • 端到端交付:Minion 完成任务后会创建分支、推送代码并按照 Stripe 的模板准备 PR。如果代码不完美,工程师可以提供反馈让其继续迭代,或者直接在 Minion 的基础上进行修改。

技术实现与反馈机制

Minions 的技术架构结合了灵活性与确定性:

  1. 隔离的开发环境(Devbox):Minion 在预热好的云端开发机上运行,10 秒内即可启动,且与生产环境隔离,确保安全性。
  2. 核心引擎与工具集成:基于 Block 的 goose 智能体框架进行定制,通过 MCP(Model Context Protocol)连接到名为 "Toolshed" 的内部服务器,该服务器托管了 400 多个内部工具,涵盖文档搜索、代码检索等。
  3. 确定性与创造性的平衡:Minion 的运行逻辑交织了 AI 的创造性(编写代码)和确定性的脚本(如 Git 操作、Lint 检查)。
  4. 高效的反馈循环
    • 反馈左移:在代码推送前,Minion 会在本地运行快速 Lint 检查(小于 5 秒)。
    • CI 迭代:如果本地检查通过但 CI 失败,Minion 会根据错误信息进行最多两轮的自动修复。Stripe 认为两轮迭代在成本和收益之间达到了最佳平衡,避免了昂贵的 LLM 算力浪费。

问答

问:Minions 生成的代码是否可以直接上线? 答:不可以。虽然 Minions 独立完成代码编写和测试,但所有生成的拉取请求(PR)都必须经过 Stripe 人类工程师的审查和批准后才能合并。

问:Minions 如何获取 Stripe 内部的私有知识? 答:Minions 通过 MCP(模型上下文协议)连接到内部工具服务器,可以实时检索内部文档、工单信息、代码搜索结果(通过 Sourcegraph)以及构建状态。

问:如果 Minion 第一次尝试修复失败了怎么办? 答:Minion 拥有自动反馈机制。它会先在本地运行 Lint 检查,如果失败则立即自我修正。如果代码推送到 CI 后失败,Minion 会根据 CI 返回的错误信息进行最多一到两次的再次尝试。

问:Minions 主要处理什么样的任务? 答:它们擅长处理定义明确的任务,如修复不稳定的测试(Flaky tests)、根据工单要求修改配置、处理简单的重构或更新内部库的使用方式。

问:为什么 Stripe 限制 Minion 在 CI 阶段的尝试次数? 答:因为 CI 运行涉及大量的 Token 消耗、计算资源和时间成本。Stripe 发现 LLM 在两轮 CI 迭代后,进一步尝试的边际收益会递减,因此将上限设为两次,以平衡速度与成本。