# 双代理法则:开发新功能,别被上下文淹没了 用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润色。)*