乐于分享
好东西不私藏

【AI实践】如何用7个Agent维护Heron项目

【AI实践】如何用7个Agent维护Heron项目

一个真实的工程实践:把"读 issue、写代码、做代码审查、改 bug、合并、上线巡检"这条软件维护流水线,交给七个各司其职的自动化"数字员工"来跑。本文写给所有对"用 AI 维护项目"感兴趣的人——不需要你是程序员,也能看懂它的门道。

先讲个故事

想象你给一个软件项目提了个需求,写成一张"工单"(在开发里叫issue)。

在很多团队里,接下来会发生的事是:工单躺在列表里等人看;某个工程师有空了,读一读,觉得靠谱,于是动手写代码;写完提交一份"改动包"(叫PR,Pull Request);另一个同事抽空帮他审查(code review);审出问题打回去改;改好再审;通过了点合并;最后部署上线,再盯着监控看有没有出岔子。

这条链路里,每一步都要"等一个人有空"。

在我们维护的 Heron 项目里,这整条链路——从工单进来到代码上线、再到线上巡检——大部分时候没有人在中间等。它由七个 AI Agent(你可以理解成七个 7×24 在线的"数字员工")接力完成。人类做的,是定方向、拍板有争议的事、以及在 AI 拿不准时兜底。

这篇文章,就带你认识这七位"员工",看看它们怎么配合、又怎么被约束着不闯祸。

Heron 是什么?一句话:它是一套"AI 接口性能监测系统"——通过分析网络流量,测量大模型(LLM)服务到底快不快、稳不稳。这是一个开源软件。 本文不展开讲 Heron 本身,Heron是用来观察AI智能体的,而今天我们来说的是AI智能体又是怎么来开发维护Heron的

为什么要这么干?

先说动机,因为这决定了整套设计的取舍。

软件维护里,大量工作是"显而易见但很费神"的。比如代码审查,一个有经验的人看 PR,80% 的问题其实是套路化的——某处忘了同步改另一处、某个老坑又踩了一遍、某个边界没考虑。这些不难,但需要人静下心一行行看,很占精力。

我们的核心思路不是"让 AI 取代人",而是:

> 让 AI 把"显而易见的 80%"先处理掉,人类只在真正需要判断力的地方出场。

于是我们没有造一个"什么都管"的超级 AI,而是拆成了七个职责单一的小 Agent。每个只干一件事、干好一件事——这也是软件工程里一条很老的原则:职责单一,组合成线

认识这七位"数字员工"

我把它们按工单在流水线上的旅程顺序介绍。为方便记忆,我给每个起了个中文岗位名(括号里是它们在代码里的真实代号)。

1️⃣ 分诊员(triage)——工单进门的第一道关

每当有人提一张新工单,分诊员第一个上岗。

它的工作很像医院急诊的分诊台:读一遍工单,判断这事该不该做、能不能做。它会按一套严格的"门槛"来评估——比如:需求说清楚了吗?是不是真的属于这个项目该解决的范围?信息够不够动手?

然后它给出三种结论之一:

:贴上一个"可以试"的标签,自动喊醒下一位员工(开发员)。

需要更多信息:留言告诉提需求的人,到底缺了什么、补什么才能往下走。

跳过:这事不该自动做,留给人来定。

注意一个细节:分诊员不会自作主张写代码,它只做"该不该往下走"的判断。门槛故意设得偏严——宁可多问一句,也不要让机器在没搞清楚需求的情况下乱动手。如果它判断错了,人类随时可以手动给工单贴标签,强制启动或叫停。

> 💡给非技术读者的类比:分诊员就是前台兼接线员。它不解决问题,但决定"这个电话该转给谁、还是该先让你把话说清楚"。

2️⃣ 开发员(wiwi)——真正动手写代码的那个

工单一旦被分诊员放行,开发员 wiwi接手。这是整套体系里"最像程序员"的一位。

它会:

3️⃣ 审查员(vivi)——挑刺的那位

开发员提交后,审查员 vivi上场,做代码审查。

但这里有个关键的前置条件——它不是立刻就看。它会等一个叫CI的自动化检查先跑完。

> 💡CI 是什么?可以理解成"自动质检流水线":每次有人提交代码,机器会自动编译、跑一大批测试,确认没把现有功能搞坏。

只有 CI 通过了,审查员才出场。为什么?因为如果代码连编都编不过,花算力让 AI 去做精细审查毫无意义——先让质检把"连门都进不了"的挡掉。这是一条很省钱、也很务实的设计。

审查员看完,会给出三种结论之一,跟人类审查员一模一样:

> 💡 这是整套设计的灵魂之一:永远不要让 AI 陷入无限循环。给每个自动流程设一个"刹车",超过就交还给人。

5️⃣ 合并员(auto-merge)——按规矩落地

当审查员给出"通过",合并员检查一组硬性条件,全部满足才把代码正式合并进主干(并顺手删掉临时分支)。

但请注意——合并员不是 AI,它是一套死板的规则。它只在以下条件同时成立时才动手,比如:这是 AI 开发员出品的改动、审查员确实给了"通过"、改动的发起人在一份受信任名单里,等等。

这是个有意思的设计取舍:

> 不是所有自动化都该用 AI。越是"扣扳机"(合并、上线这种不可逆)的动作,越应该交给可预测、不会发挥的规则去把关,而不是让 AI 临场判断。

换句话说:让 AI 负责"思考",让规则负责"扣扳机"。而且,自动合并只对"项目维护者本人的低风险改动"开放;其他任何人的 PR,AI 的审查都只是"参考意见",最终还是要人来合并

在合并之后,我省掉了针对各个软件项目的特定的打包部署准生产/双跑/混沌工程中的一系列智能体(实际上这个项目里还有另外3位数字员工是负责部署和功能验证以及安全检查),这部分每个软件项目会有些不同,尤其涉及到环境,还会涉及到密钥/密码等,就不在这篇文章里说了。我们主要来看看相对标准化的智能体们。

6️⃣ 巡检员(mara)——盯着线上的哨兵

前面五位都在管"代码怎么写进来"。第六位,巡检员 mara,管的是"上线之后稳不稳"。

它每隔几分钟去探一次线上服务的健康状况,专门盯几类问题,比如:

7️⃣ 体检员(probe)——开工前先验环境

最后一位最低调,但少了它整条线都可能莫名其妙地崩。

这些 AI Agent 都跑在我们自己的一台服务器(自托管运行器)上。这台机器需要装好一堆东西、配好网络,AI 才能正常干活。体检员 probe就负责在每次环境有变动(比如机器重装)后,把这些前提条件一项项检查一遍,哪项不达标,一眼就能在日志里看出来。

它同样不是 AI,就是一套朴实的检查清单。但它体现了一条工程经验:

> **自动化系统最怕"环境悄悄变了"导致的离奇故障。 与其等出事了挠头排查,不如提前用一个"体检"把环境钉死。

把七位串起来:流水线全景

现在把它们放到一张图里,看一张工单是怎么"自己走完"全程的:

顺利的话,从工单进来到代码合并,**全程没有人在中间等**。人类只在两种时刻出现:一开始定方向,以及 AI 拿不准、吵起来、或线上告警时来拍板。

最关键的部分:怎么让 AI 不闯祸?

很多人一听"让 AI 自动改代码、自动合并",第一反应是:这不得出事?

问得好。这恰恰是整套体系里我们最用心的地方。我们靠四道"护栏"把风险摁住:

护栏一:只给"只读"权限。

审查员看代码时,我们只允许它"读"和"搜索",**明确禁止它修改、删除任何文件**。它能看、能提意见,但碰不了东西。能动代码的只有开发员/返工员,而且它们动的是隔离的工作分支,碰不到正式代码。

护栏二:质检(CI)必须先过。

任何 AI 写的代码,都得先过自动质检——编译、跑测试。过不了,后面的审查、合并根本不会启动。AI 的"创意"必须先撞过这道客观的墙。

护栏三:循环有上限,超了交给人。 前面讲过的“改了又审“循环,最多 3 轮。AI 之间谈不拢,不会无限内耗,而是自动停下、贴标签喊人。任何自动循环都有刹车——这是铁律。
护栏四:扣扳机的活交给规则,不交给 AI。合并、上线这种不可逆的动作,由死板的规则把关,不是 AI 临场发挥。而且自动合并只对维护者本人的低风险改动开放;其他人的代码,AI 的意见只是参考,最终人来定。出任何岔子,流程也设计成“报警但不阻塞“——人随时能接手收尾。
把这四条合起来,本质是一句话:
给 AI 自由去“想“,但把每一个“可能造成伤害“的出口,都用客观规则和人类兜底守住。
如果你只能从这篇文章记住一件事,我希望是这个。
审查员之所以好用,不是因为它用了多厉害的大模型,而是因为我们把“这个项目历史上踩过的坑“一条条写进了它的工作说明里。
每当人类审查员抓到一个 AI 漏掉的问题,我们就把这类问题总结成一行,加进它的“避坑清单“;每当它揪着一个根本不是问题的地方反复唠叨,我们就把对应那条删掉或改细。
久而久之,它不再是一个“通用的代码审查 AI“,而变成了一个懂我们这个项目脾气的老员工。一个泛泛的“帮我审一下代码“只会给你一堆没营养的格式建议;真正的价值,在于这些沉淀下来的、项目专属的经验。

它不是万能的

为了不夸大,也说说这套体系的局限:
  • 它擅长“显而易见的 80%“,但搞不定真正难的判断。 复杂的架构取舍、有歧义的需求,仍然得靠人。
  • 七位里只有四位真正“用 AI“(分诊、开发、审查、返工)。合并员、体检员是规则脚本,巡检员是“规则发现问题 + AI 写报告“。这是有意为之——能用简单规则解决的,绝不硬塞 AI。
  • 它要花算力。 一份中等大小的改动,审查一遍大约要十几分钟、消耗一定的计算资源。所以我们才设了“质检不过就不审“这种省钱的闸。
  • 它需要持续调教。 那份“避坑清单“不会自己长出来,是人一条条喂进去的。

如果你也想试试,几条朴素经验

最后,把这套实践里最通用的几条道理留给你,不管你是不是程序员都用得上:
  • 拆小,别造超级 AI。 七个只干一件事的小 Agent,比一个什么都管的大家伙更可控、更好调试。
  • 每个自动循环都要有刹车。 设个次数上限,超了就停、就喊人。这一条能帮你躲掉绝大多数“AI 失控“的噩梦。
  • 让 AI 思考,让规则扣扳机。 不可逆的动作交给可预测的规则,别让 AI 临场发挥。
  • 能用规则就别用 AI。 不是所有自动化都需要大模型。
  • 喂给它你的独家经验。 AI 的上限,往往由你给它的背景知识决定,而不是模型本身。
  • 永远留一条人类兜底的路。 最好的自动化,不是“没有人“,而是“人只在关键时刻出现“。
Heron 是一套通过分析网络流量来监测大模型和AI智能体行为和性能的开源项目。本文介绍的,是我们日常维护它所用的这套 AI Agent 协作流水线——它本身,也是“用 AI 工程化地维护软件“的一次真实实践。