Featured image of post 双代理法则:开发新功能,别被上下文淹没了
科技 软件开发 AI工具 工程实践 开发流程

双代理法则:开发新功能,别被上下文淹没了

一种实用的AI编程助手协作模式,专门解决复杂代码库场景——理解上下文窗口的局限,合理安排开发流程,事半功倍。

用AI编程助手写点简单的小功能,谁不会?可一旦要动点“大手术”——比如新功能开发、系统集成——不少人就会陷入一种“我是不是智商税交多了”的无力感。

本来目标很明确,AI一开始也挺聪明,左看看右看看代码,问几个问题,甚至还给出点靠谱方案。可一到真动手写代码,画风突变:代码集成得四不像,边界条件忘得一干二净,AI还一本正经提出些能直接把系统搞崩的改动建议。

于是你发现,自己不是在写功能,而是在debug AI的迷之思路……

其实,问题不是AI不行,而是我们用错了方法。别把AI当实习生,什么都记得牢牢的。它们更像天赋异禀但记性极差的咨询顾问——短时记忆就那么点,还经常“跑题”。

明白这一点,开发流程就该升级了。

真正的难题:上下文越积越乱

和AI助手聊得越久,问题越大。每一次“走错路”,每一个被推翻的假设,每个查过的无关文件——对AI来说,都是不可磨灭的“历史遗留”。不像人类能自我总结、自动遗忘,AI只会越背越重,还全都塞在短期记忆里。

想象一下你专心写作时,有个人把你所有草稿、废话、删掉的段落都大声朗读一遍。信噪比越来越低,最后脑袋瓜子只剩“乱”。

这也是为什么有时候你和AI规划得头头是道,真到实现阶段却步步踩坑。AI虽然最后想明白了,但所有的歧路亡羊都还“留在脑子里”——一不小心就又走回老路。

解决办法不是少用AI,而是让你的开发流程更适合AI的“脑回路”。

双代理模式登场

最靠谱的做法很简单:一人(代理)负责探索,一人(代理)专职实现,各司其职,分工明确。

第一个AI代理,姑且叫“探索者”:它就像项目里的“侦查兵”,专注于搞清楚代码结构、问关键问题、梳理集成点,最后输出一份清晰明了的开发方案。这步的核心是“把问题想透、把方案写清”。

第二个AI代理,叫“实现者”:它啥都不带入,只接受探索者的成果文档,干净利落地写代码。没有历史包袱,没有莫名其妙的上下文污染。

其实,这不就是高级工程师和开发小组的惯用套路吗?架构师负责搞清楚全局、制定方案,开发同学根据方案实现。哪怕同一个人,方案和实现也是“两副面孔”——前半场思考,后半场执行。

第一阶段:带约束的探索

首先,你要清晰地描述清需求。别小看这一步,后面一切的质量都靠它打地基。

给探索者AI指明方向:要查什么模块,只看相关代码,别瞎溜达。比如要给用户认证系统加OAuth,就请它“专注查auth相关文件”,别让它在全仓库里迷路,把宝贵的上下文窗口全浪费在无关代码上。

还得加一句“魔法提示”:“如果你有任何不确定,先问清楚,别自己脑补。”

这句话的力量堪比“防脱发洗发水”——大模型如果不被约束,最喜欢自作聪明地瞎猜,但你明确要求它“有疑问就问”,它反而会提出不少专业、靠谱的问题。

这些问题要认真答,别怕麻烦。比如它问“软删除用户还能登陆吗”,你别只回答“不行”,而是把用户删除的整个生命周期讲透,顺带把相关联的系统规则都说清楚。

随着探索推进,AI会不断提问、查代码、细化理解。直到有一天,它自信地宣布:“我明白了,这就是完整方案。”

关键交接点

大部分人到这步就掉坑里了——一看到计划靠谱,立刻喊:“好,直接在这个对话里实现吧!”

千万别!这一步是分水岭。

你要让探索者AI不是写“操作指南”,而是写“开发文档”给另一个开发者看。二者差别大得很。

“操作指南”像是:“给User模型加个deleted_at字段,把UserService.get_active_users()方法改成排除已删除用户。”

“开发文档”则是:“models/user.py里的User模型,当前没有软删除机制,delete()方法会直接删除。要做软删除,可以加个deleted_at时间戳。services/user_service.py的UserService负责返回用户集合,这里需要过滤掉已删除用户。admin/users.py是管理后台用户列表,数据来源于UserService。”

前者是“照做”,后者是“指导思路”——既指出重点位置,又保留实现灵活性,方便后续开发者(AI)独立思考。

交接文档里最好有:

  • 相关文件路径和大致内容
  • 集成点以及原因
  • 可能的实现方案和权衡
  • 具体需求、业务约束
  • 你的代码风格偏好

这就是“交接文档”。

第二阶段:清爽实现

新开个对话,把交接文档和最初的需求一起贴进去。

你会看到有趣的变化:

如果探索者AI的文档写得够好,实现者AI通常会很快领会架构,认认真真看了相关文件后说:“我可以开始写啦。”

这句话其实是个“质量信号”:能顺利开工,说明文档清晰全面。如果还要追问一堆细节,说明探索阶段还差点火候。

此时实现者AI有如下优势:

  • 上下文极为干净,只关注核心信息
  • 没有探索阶段的“杂音记忆”
  • 站在“局外人”的新视角,容易发现集成盲点
  • 可以自主做实现决策

通常写出来的代码,更贴合现有架构,风格一致,集成自然。

为什么这招真管用?

大模型不像人类“选择性遗忘”,它会把上下文窗口里的每个token都平均权重地处理。你30条消息前的迷惑发言,和刚刚描述的需求影响力几乎一样大。

重置上下文,不只是省点token,更是把那些“误导信号”一锅端,避免影响实现。

这就像两种会议:

  • 一种东拉西扯两小时,每条歪路都讨论一遍,最后还要带着一堆废话来做决策
  • 一种是有人拿一页纸,清清楚楚总结了重点,大家直接讨论执行

后者的决策效率和质量,自然高出一大截。

实战举例

比如你要给数据平台做数据导出功能。系统里权限复杂,数据格式多,敏感信息边界一堆。

“探索者”AI就要:

  • 仔细梳理权限系统,弄明白各项控制规则
  • 查现有导出代码,保证风格一致
  • 找出敏感数据的过滤点
  • 问清导出需求:格式?大小?异步还是同步?
  • 看看类似功能怎么做错误处理和日志
  • 最后出一份覆盖数据流、权限、格式转换、异常处理的开发计划

交接文档可能会写:“services/reports.py里的报表生成用的是Celery异步任务,大数据集建议也用这个模式,防止请求超时。权限校验在服务层,不是在API层,参照ReportService.get_report()。数据脱敏统一用utils/sanitize.py。”

“实现者”AI看了文档和相关代码,照着现有架构写导出功能:用Celery做异步、在服务层校验权限、用统一的脱敏工具。

如果让同一个AI从头到尾搞,很容易出现风格错乱:权限校验位置不对、处理方式不统一、同步异步混用……这些细节虽然不致命,但积累多了,代码库就会越来越难维护。

什么时候适合用双代理?

不是所有需求都需要这么大阵仗。加个小工具函数、修个显眼bug,让AI单兵作战就够。

这套流程特别适合:

  • 涉及多个系统模块的新功能
  • 集成比“单点突破”更重要
  • 需要新代码无缝融入既有体系
  • 对架构理解有要求
  • 你已经反复给AI补充上下文,依然沟通不畅

一个简单判断:如果你觉得“这活儿最好有高级工程师先审设计”,那就用双代理。

模式变种

有些团队更“花哨”——

  • Architect(架构师)代理专门做方案评审
  • Reviewer(评审员)代理专门挑刺
  • Documenter(文档员)代理专门写用户文档

核心原则不变:每个代理只关心自己那一块,脑子越干净越好。

隐藏的好处

除了代码质量提升,这个模式还有个隐形福利:逼着你自己把需求想明白。

要写出合格的交接文档,自己必须先厘清思路。探索者AI问得越细,你越不能蒙混过关,反而提前发现了需求歧义和漏洞。

很多bug其实不是AI写得差,而是“设计阶段就没想明白”,这个流程刚好把问题提前暴露了。

实用建议

实际用的时候还有几点小窍门:

  • 一开始就告诉探索者你的需求和相关目录,别让它全仓库乱跑
  • 探索阶段AI问的问题一定要认真答,哪怕看起来“很傻”,有些问题其实暴露了隐含冲突
  • 交接文档不用长,三四段就行,重在清晰,不必面面俱到
  • 如果实现者AI还追问很多细节,说明探索阶段还欠火候,可以考虑补充
  • 你的代码风格(格式、文档、命名)要明说,AI不会“耳濡目染”吸收

局限性

这套方法不是万能的。实现者AI照样可能写出bug,集成阶段也还是会有意外。代码评审依然必不可少。

但它至少解决了“上下文污染”这个大难题,让复杂功能开发变得可靠许多。

拓展思路:不只有编程

只要是复杂任务,AI都适合用这个分阶段流程:先调研/探索,产出清晰文档,再执行/实现。

领域不同,模式可变,但核心铁律不会变——认知清晰,远胜于“模型参数大”。一个“中等资质”模型,拿着干净简洁的上下文,往往能干掉“天赋型选手”却被上下文垃圾拖后腿的“天才”。


(本文由人类原创,并在部分环节借助AI润色。)

© 2022 - 2025 张欣耕

保留所有权利