neptay
全部洞察

产品

智能体开发环境(ADE):如何并行运行多个 AI 编程智能体

如何并行运行多个 AI 编程智能体:什么是智能体开发环境(ADE),如何用 git worktree 隔离每个智能体,怎样拆分任务、避免代码冲突,如何实时监控各智能体的进度,以及为什么 AI 生成的代码仍然离不开人工代码审查。

本文目录

智能体开发环境(Agent Development Environment,ADE)是一个可以同时运行多个 AI 编程智能体的工作空间。每个智能体都有自己的任务、一份相互隔离的代码副本和清晰可见的状态;而人负责拆分工作、监控进度,并在每项改动合并之前进行审查。

核心要点

  • 只有当任务相互独立、范围明确且可验证时,并行运行 AI 智能体才能真正带来收益。
  • 隔离是第一位的:为每个智能体分配独立的 git worktree 和分支。
  • 可观测性是 ADE 的核心功能:一眼就能看出哪个智能体正在工作、在等待、被阻塞,还是已经完成。
  • 瓶颈会从生成代码转移到审查代码,所以你能审查多少,就只运行多少个智能体。
  • 每一次合并都由人负责:亲自阅读 diff,亲自运行检查。

什么是 AI 编程智能体?

AI 编程智能体是一种由模型驱动的工具,它能读取代码仓库、编辑文件、运行命令和测试,从而完成你描述的任务,而不只是在你打字时提供代码补全建议。常见的例子包括 Claude Code、Codex CLI 和 Gemini CLI 等终端智能体,代码编辑器中的智能体模式,以及在云端沙箱中工作并最终提交 Pull Request 的托管型智能体。

什么是智能体开发环境?

传统 IDE 是围绕“一个人编辑一份工作副本”来设计的,如今许多编辑器也加入了各自的智能体功能。但一旦同时运行多个智能体,你一天工作的重心就从编辑代码变成了协调工作。这个术语有时也写作 agentic development environment,它指的是借助 AI 编程智能体开发软件的环境,而不是用来构建 AI 智能体的工具。

ADE 并不取代你的编辑器或智能体本身。它是位于二者之上的编排层,负责处理那些随着智能体数量增加而成倍增长的工作:

  • 工作区隔离:每个智能体都有独立的工作目录和分支,无需手动管理 git。
  • 任务跟踪:每个智能体收到的任务说明始终一目了然。
  • 实时状态:哪些智能体正在运行、在等待输入、已完成或已失败。
  • 审查界面:每个智能体的 diff、执行过的命令和测试结果集中在一处。
  • 代码集成:从每个智能体的分支回到主线的受控路径。

为什么要并行运行多个 AI 编程智能体?

处理一项有一定复杂度的任务时,智能体往往要连续运行好几分钟,反复阅读、编辑、测试和修复。如果一次只盯着一个智能体,大部分时间都花在了等待上。并行运行智能体能把等待时间变成产出:一个在重构代码,另一个在为别的模块写测试,第三个在排查一份 bug 报告。

在实践中,大多数并行工作可以归为三种模式:

  • 扇出(Fan-out):从同一份待办列表中拿出几个相互独立的任务,每个任务交给一个智能体,分别合并。
  • 多方案竞争:对于不太明确的问题,把同一个任务交给两个智能体,或用不同的指令运行两次,保留更好的结果。
  • 流水线:一个智能体负责实现,第二个智能体审查结果或为其编写测试,最后由人拍板。

并行运行 AI 编程智能体有哪些方式?

大多数团队会采用以下四种方式之一,也有很多团队组合使用:

  • 终端标签页或 tmux 窗格,每个运行一个智能体、对应一个 git worktree:无需引入新工具,但每个智能体的状态都得自己盯着。
  • 编辑器内置的多智能体功能:如果整个团队都在用同一款编辑器,会很方便。
  • 在托管沙箱中运行并提交 Pull Request 的云端或后台智能体:本地不运行任何东西,你只需审查 PR。
  • 专门的智能体开发环境:所有智能体的状态、diff 和审查都集中在一处。

哪些任务适合交给并行的 AI 编程智能体?

用四个问题来检验每个候选任务:它是否独立于其他正在运行的任务?能否用一份简短的任务说明描述清楚?能否通过测试、类型检查、构建或验收标准来验证?它涉及的是否是代码库中的不同部分?

适合的任务

  • 为缺少测试覆盖的模块补充测试。
  • 可以清晰复现、影响范围独立的 bug 修复。
  • 边界清晰、接口定义明确的独立功能,例如新增一个 API 端点或 UI 组件。
  • 可以按目录或包干净拆分的机械性迁移工作。
  • 在没有其他人修改的区域完善文档、改进类型定义和修复 lint 问题。

不适合的任务

  • 会波及共享类型或数据模型的架构性改动。
  • “完成标准”取决于个人品味的任务。
  • 两个任务都需要修改同一个核心文件,例如路由、数据库 schema 或依赖清单。
  • 依赖于另一个尚未完成任务的产出的工作。

如何运行多个 AI 编程智能体:分步指南

  1. 把工作拆分成相互独立的任务。
  2. 用独立的 git worktree 和分支隔离每个智能体。
  3. 为每个智能体写一份可执行的任务说明。
  4. 观察进度、及时解除阻塞、必要时介入。
  5. 逐个分支审查并合并。

第 1 步:把工作拆分成相互独立的任务

从目标结果出发,而不是从智能体出发。把目标拆分成可以各自独立完成、验证和合并的任务。如果两个任务会修改同一批文件,就把它们合并,或者按顺序执行。写一条简短的依赖说明,例如“依赖任务 2 中的新 schema”,就能避免大部分集成时的意外。

第 2 步:用 git worktree 隔离每个智能体

两个智能体在同一个工作目录中工作,可能会互相覆盖对方的修改,也会干扰彼此的测试运行。最简单可靠的隔离方式是 git worktree:它是挂载在同一个仓库上的额外工作目录,拥有自己的分支。

代码示例
# One worktree and one branch per agent
git worktree add -b agent/auth-refactor ../app-agent-auth
git worktree add -b agent/billing-tests ../app-agent-tests

# See what is checked out where
git worktree list

# Clean up once the branch has been merged locally (use -D after a squash merge)
git worktree remove ../app-agent-auth
git branch -d agent/auth-refactor

默认情况下,git 不允许同一个分支同时在两个 worktree 中检出,而这正是你需要的保护。清理时,如果 worktree 中有已修改或未跟踪的文件,git worktree remove 会拒绝删除;请先提交或丢弃这些改动,或者在确认无误后加上 --force。worktree 隔离的是文件,而不是一切。以下共享资源需要提前规划:

  • 依赖和构建产物:每个 worktree 通常都需要单独安装依赖包(node_modules、虚拟环境)并生成各自的构建产物。
  • 端口:两个开发服务器无法绑定同一个端口,因此要为每个智能体分配一个端口。
  • 数据库:使用各自独立的本地数据库或 schema,切勿共用预发布(staging)环境。
  • 环境配置文件:只复制每个智能体所需的非敏感配置。

第 3 步:为每个智能体写一份可执行的任务说明

任务说明中留下的每一处空白,智能体都会用自己的假设去填补。一份好的任务说明简短而完整:

  • 目标:用一句话描述要达成的结果,而不是具体实现方式。
  • 背景:相关的文件、模块或文档,以及需要遵守的规范。
  • 边界:智能体不得修改的内容,例如公共接口、数据库迁移或依赖项。
  • 完成标准:必须通过的测试、类型检查或必须实现的行为。
  • 交付:需要汇报的内容,例如改动摘要和待解决的问题。

把项目的长期规范写进智能体启动时会读取的文件里,例如 AGENTS.md 或 CLAUDE.md(取决于所用的智能体),就不必在每份任务说明中重复这些约定。

第 4 步:观察进度、及时解除阻塞、必要时介入

智能体开始运行后,你的角色就从作者变成了监督者。按固定节奏查看进度,而不是一直盯着某个智能体的输出滚动;对于权限请求要尽快回应,因为被阻塞的智能体意味着时间的浪费。一旦发现智能体跑偏,就尽早叫停:用一份更精准的任务说明重新开始,通常比挽救一次跑偏的长时间运行更快。

第 5 步:逐个分支审查并合并

按照依赖顺序,一次合并一个分支。每次合并后,把剩下的分支 rebase 到更新后的主线上,并重新运行它们的检查。这个阶段出现的冲突是很有价值的信息:它们揭示出哪些任务其实并没有看上去那么独立。

如何避免 AI 智能体之间的代码冲突

并行智能体之间的大多数冲突,都来自少数几个共享的“热点”:

  • 锁文件和依赖清单:每一轮只允许一个智能体新增或升级依赖。
  • 数据库迁移:按顺序执行,因为并行生成的迁移可能在执行顺序或 schema 状态上发生冲突。
  • 路由、配置等共享注册文件:为每个文件指定唯一的负责方,或者由你先亲自完成修改。
  • 生成的代码:合并后重新生成,而不是合并来自多个分支的生成文件。
  • 格式化造成的无谓改动:要求智能体不要重新格式化它们本来没有修改的文件。

答案的另一半是保持分支短命:几小时内就能合并的小任务,发生冲突的概率远低于偏离主线好几天的分支。

如何监控每个 AI 编程智能体在做什么?

只有一个智能体时,你看着终端就行。有五个时,就做不到了。对于每个智能体,你都应该能一眼回答以下问题:

  • 它在处理什么任务?收到的是哪份任务说明?
  • 它处于什么状态:正在运行、等待输入或授权、因错误而阻塞,还是已经完成?
  • 到目前为止它改了什么?与基准分支相比的 diff 是什么?
  • 它运行过哪些命令?测试和检查是否通过?
  • 它已经运行了多长时间?消耗了多少用量?

通知和仪表盘同样重要。一个智能体为了等一个字的确认而空等十分钟,是并行工作中常见的隐性成本。好的智能体开发环境会在这些时刻第一时间提醒你。

运行多个 AI 编程智能体的成本是多少?

成本分为两部分:模型用量和人力时间。模型用量随智能体数量、运行时长以及读取的上下文量而增长。无论你是按 token 付费,还是在订阅额度内使用,并行智能体都会更快地消耗预算;而多方案竞争则是有意把预算花在最终会被丢弃的工作上。

人力时间是最常被低估的成本,因为每个智能体的产出都需要有人阅读、测试和集成。一条实用的经验法则:用审查同事 Pull Request 的认真程度来衡量,你能审查多少个智能体的产出,就只运行多少个。要同时控制这两类成本:

  • 让任务保持小巧,这样运行时间短,diff 也便于审查。
  • 让智能体聚焦于相关文件,而不是整个仓库。
  • 对跑偏的运行及时叫停,而不是任其跑完。
  • 按任务跟踪用量,了解哪些类型的工作值得委派给智能体。

为什么 AI 生成的代码仍然需要人工审查

AI 编程智能体能力很强,但它们无法承担责任。它们可能误解需求,写出断言了错误行为的测试,把错误压下去而不是修复它,或者报告某项检查已通过、而实际上根本没有运行。人写的代码出于同样的原因也要接受审查;并行智能体只不过是以更快的速度产生更多改动。

一个实用的审查闭环分为三层:智能体先对照完成标准自查;可选地,由第二个智能体在全新的上下文中审查 diff;最后由人阅读 diff,决定是否合并。自动化的审查层可以减少干扰,但无法取代最后这个决定。

智能体代码改动审查清单

  • 阅读 diff 本身,而不只是智能体对 diff 的总结。
  • 亲自运行测试和检查,或者确认它们已在 CI 中运行。
  • 留意范围蔓延:任务说明中从未提及的文件被修改了。
  • 检查新增的依赖、网络调用,以及任何涉及身份认证、支付或个人数据的内容。
  • 确保没有提交任何密钥、令牌或特定于本机的路径。
  • 确认新增的测试确实覆盖了新行为,而不只是能通过。

运行多个 AI 智能体时的常见错误

  • 让两个智能体在同一个工作目录中运行,结果文件被覆盖、工作成果丢失。
  • 让智能体的分支一开就是好几天,直到无法干净地合并。
  • 给智能体授予不必要的生产环境凭据或权限。
  • 统计的是运行中的智能体数量,而不是已合并且能正常工作的改动数量。

常见问题

IDE 和智能体开发环境有什么区别?

传统 IDE 以“一个人在一份工作副本中编辑代码”为中心,尽管如今许多编辑器已加入智能体功能。智能体开发环境则以“监督多个 AI 编程智能体”为中心,提供工作区隔离、任务跟踪、实时状态,以及受控的审查与合并路径。很多开发者会两者并用:用 ADE 协调智能体,用 IDE 检查或完善它们的工作。

应该同时运行多少个 AI 编程智能体?

你能认真审查多少个,就运行多少个。一个经验法则是:先从两到三个智能体开始,分别处理明显相互独立的任务。只有当你的审查和合并流程跟得上时,才增加数量。如果 diff 要等好几天才能被审查,或者你发现自己不看代码就合并了,说明运行的智能体太多了。

并行运行智能体一定要用 git worktree 吗?

你需要某种形式的隔离,而 git worktree 是最轻量的选择:每个智能体在同一个共享仓库中拥有自己的目录和分支。单独克隆仓库或使用容器能提供更强的隔离,但会占用更多磁盘空间,配置也更麻烦。提交 Pull Request 的托管沙箱把隔离工作从你的电脑上移走了,但审查工作仍然留给你。无论如何,都不要让两个智能体同时编辑同一个工作目录。

AI 编程智能体可以互相审查代码吗?

可以,而且这是一道很有用的额外防线。给第二个智能体一份审查者的任务说明和全新的上下文,它往往能发现缺失的测试、未处理的边界情况和范围蔓延。但它不应该是最后一道关卡:智能体之间可能存在相同的盲区,因此凡是要进入生产环境的代码,仍应由人阅读 diff 并决定是否合并。

让 AI 编程智能体在我的电脑上运行命令安全吗?

在有护栏的前提下是安全的。只给智能体最小必要权限,不让生产环境凭据进入它们的运行环境,并要求破坏性命令或涉及网络的命令必须经过批准。智能体从代码库之外读取的任何内容,例如 issue、网页或第三方文件,都应视为不可信内容,因为其中可能藏有专门用来误导智能体的指令,这种风险被称为提示词注入。使用容器可以进一步加强保护。

Neptay 如何看待智能体开发

我们为客户设计 AI 智能体与自动化方案,同时以 Anlato 品牌打造自有的技术产品。Anlato Space 是 Anlato 产品家族的旗舰产品,也是我们的智能体开发环境:在一个原生窗口中并排运行多个 AI 编程智能体,每个智能体都有自己的任务和状态,每一项改动都等待你的审查。它即将推出。如果你正在为团队设计智能体工作流,或者想关注 Anlato Space 的进展,欢迎发邮件至 hello@neptay.com。

Neptay 相关业务Anlato Space

Neptay Media & Technology Services

聊聊吧

正在筹划类似的项目?

这些文章中的方法,正是我们在客户项目中使用的方法——涵盖软件开发、AI 自动化、内容制作、社交媒体与直播制作。告诉我们您的想法,我们将在 24 小时内回复。