news 2026/6/25 22:38:27

多Agent协作的边界设计——谁能写代码、谁能改代码、为什么

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
多Agent协作的边界设计——谁能写代码、谁能改代码、为什么

之前我用5个AI Agent协作开发了一个股票分析软件。**

整个过程不到3小时——从一句话需求到1800行可运行代码。每个Agent各司其职:CEO拆任务、CTO写代码、CFO管项目、市场总监收集数据、投资专家定策略。

但如果你仔细看协作日志,会发现一个细节:CTO(技术总监)只负责"写新代码",从来没有"改已有代码"。

修改代码的操作,要么由CEO在审查后执行,要么由人工介入。

这不是技术限制——AI Agent完全有能力直接改文件。这是刻意的设计

这篇文章就来聊聊这件事:多Agent协作中,谁能写代码、谁能改代码——以及为什么这个边界决定了你的项目是越来越稳还是越来越烂。


一、一个真实的翻车现场

先说一个我没写在复盘文章里的细节。

在5个Agent协作开发股票软件的过程中,有一次CTO写完K线图渲染模块后,发现之前写的均线计算函数有个bug——它把MA20算成了MA30。

CTO的第一反应是:“我直接改掉这个函数。”

但从协作架构的设计来看,这个操作被拦截了。原因有三:

1. CTO不知道这个函数有没有被其他地方调用。它只是执行层Worker,上下文里只有当前任务的代码,看不到全局依赖关系。

2. 改一行代码可能引入新问题。均线计算的参数变化会连锁影响后面的技术指标计算、图表渲染、数据导出。

3. 如果允许Worker自由改代码,第二天你会发现没有任何Agent能理解整个代码库了。每个Agent都在自己的上下文窗口里局部优化,全局一致性被破坏。

最后是CEO(Orchestrator)出面:先读完所有调用点,确认改动范围,然后一次性修正均线函数、更新所有调用方、跑完整测试。用时3分钟。

这个3分钟的延迟不是低效——它避免了30分钟的连锁排查。


二、三层边界模型

多Agent协作不是"一群AI聊天",而是一个受控的工程系统。在我的实践中,它分为三层:

第一层:规划层(Orchestrator)——只规划,不执行

角色:CEO、项目经理、架构师
权限:读所有代码、拆解任务、分配角色、仲裁争议
禁令:不能直接写代码、不能直接执行命令

为什么?因为规划层掌握全局上下文。如果它自己下场写代码,就没有人能客观评估代码质量。裁判不能同时是运动员。

真实案例:Hi3519DV500编译环境搭建时,我作为Hermes Agent承担了Orchestrator的角色。我制定了10个阶段的编译方案、编写了6个自动化脚本——但每个脚本在执行前都经过了用户的审查确认。

第二层:执行层(Worker)——只执行,不决策

角色:技术总监、开发工程师
权限:写新代码、跑测试、查资料、执行命令
禁令:不能修改已有代码、不能改变项目架构、不能绕过审查层

执行层Agent的能力最强——它们会写代码、会调库、会用工具。但能力越强,边界越重要。

真实案例:在5 Agent股票软件项目中,CTO写了6个Python文件。其中有一次它想"优化"主窗口的布局逻辑——那个函数涉及到GUI框架的信号槽机制。如果贸然改动,可能导致整个界面的事件处理崩溃。

规则是:Worker可以写新功能,但要改现有功能,必须提Pull Request,由审查层评估。

第三层:审查层(Reviewer)——只审查,不创作

角色:Code Reviewer、安全扫描、质量门禁
权限:读取diff、运行测试、标记问题
禁令:不能直接修改代码(只能提建议)

这一层最容易因为"太麻烦"而被省略——但在多Agent场景下,它是唯一的质量底线

真实案例:公众号文章发布流程。每篇文章写完后的审查步骤:

1. 内容隐私扫描——有没有出现真实姓名、API Key、IP地址
2. 格式修正——有没有微信不支持的编号列表(变黑点)
3. 代码块渲染——<div> 灰底白字格式是否正确闭合
4. AI痕迹清除——有没有"本文由辅助撰写"、"让我们"等字样

这些审查如果交给写文章的Agent自己做,等于让考生批改自己的试卷。


三、为什么"写代码"和"改代码"需要不同权限

这是整个边界设计的核心问题。

3.1 上下文窗口不对称

一个Worker Agent在执行任务时,上下文窗口里装的是"当前任务相关的代码"。它不知道:

• 这个函数被几个模块调用
• 改动会影响哪些下游系统
• 3天前别人为什么这样写
• 这段代码是不是在修另一个bug时引入的workaround

让一个看不到全局的Agent去改全局代码,就像让一个只看了引擎盖下的修理工去调变速箱——他能拧螺丝,但不知道这辆车为什么抖。

3.2 修改的"蝴蝶效应"

真实案例。在89份PDF批量摄入到LLM Wiki的过程中,有一次我发现[[U-Boot 移植]]页面需要更新。如果直接改那个页面,看起来简单。但实际上:

修改 [[U-Boot 移植]]
→ 影响了 [[启动配置]] 中引用的移植步骤
→ 影响了 [[裸烧与非裸烧升级]] 中提到的启动方式
→ 影响了 [[DDR 参数配置]] 中的 U-Boot Table 说明
→ 需要同步更新 3 个页面的交叉引用 + log.md

如果让执行层Agent直接改,它大概率只改第一个页面,断开另外3条链接。知识网络退化为知识碎片。

3.3 "所有权"混乱

这是最隐蔽的问题。当一个代码库被多个Agent修改过后,没有任何一个Agent能说清楚"为什么这行代码是这样的"。

修改的Agent早就忘了它当时的上下文。下一个Agent看到这行代码,只能猜测意图。猜错了就引入新bug。代码变成考古现场——每个Agent都在解读上一个Agent的意图,但谁都没有完整的考古记录。

这个问题的解法是:修改权的集中化。要么由Orchestrator统一修改,要么由人工操作。不允许Worker自由交叉修改。


四、真实案例一:5 Agent股票软件的边界设计

回到开头那个项目。5个Agent的具体分工和边界:

Agent能做什么不能做什么为什么
CEO拆解任务、分配角色、合并结果写代码、执行命令保持全局视角
CTO写新代码、跑测试改已有代码、改架构避免局部优化破坏全局
CFO项目管理、质量验收修改交付物验收者不能是被验收者
市场总监数据收集、测试验证修改分析逻辑数据层不能掺杂分析偏好
投资专家策略设计、模型参数直接改数据策略不能"看到了未来数据"

一个具体场景:

场景:CTO写完K线图,发现Y轴刻度有问题——价格从0开始导致K线被压扁。

错误做法:CTO直接改plot_kline()函数,把Y轴改成自适应范围。

正确做法:

1. CTO在Todo中标记"K线Y轴需优化",附上当前输出截图
2. CEO审查后确认这是需要修复的bug,不是设计选择
3. CEO检查 plot_kline() 的调用链——确认改动范围
4. CTO提出修改方案(改哪些行、为什么)
5. CFO(审查层)跑测试验证,确认不改坏其他图表
6. 修改生效

6步看起来很啰嗦,但如果不走这套流程——第二步直接跳到第六步——后果是什么?

真实发生过一次:某个Agent改了一个"看起来无关紧要"的日期格式化函数,从%Y-%m-%d改成%Y/%m/%d。结果另一个模块的正则表达式是用-来split日期的,瞬间崩了。如果不走审查流程,这个bug可能要20分钟后才能发现——那时候Agent的上下文早换了。


五、真实案例二:Hi3519DV500编译环境搭建的"改代码"边界

2026年6月,我辅助搭建了海思Hi3519DV500的完整编译环境。这个过程中写了6个自动化脚本,踩了9个坑。

其中一个坑特别典型:Ubuntu 24.04的pip安装需要--break-system-packages参数。

当时脚本01(依赖安装)已经写完了,里面写的是:

pip3 install meson ninja

执行时直接报错——Ubuntu 24.04用externally-managed-environment策略拦截了全局pip安装。

如果让同一个Agent直接改这个脚本,它会怎么做?大概率加上--break-system-packages就完事。但它不会考虑:

• 这个改动是不是最佳实践?(apt install python3-meson 更安全)
• 加了这个参数会不会影响脚本的其他部分?
• 其他依赖(ninja-build、pkg-config)是不是也有更好的apt替代方案?

实际的正确做法:

1. 执行层Agent跑脚本 → 遇到pip报错 → 汇报
2. 审查层(人工+Agent)评估:这不是pip的问题,是Ubuntu 24.04的策略变更
3. 决策:不用 --break-system-packages,改用 apt install python3-meson python3-ninja
4. 更新所有依赖安装策略(不只是这一个包)
5. 更新方案文档,记录决策原因
6. 生成 check_deps.sh 自动检测脚本,避免下次踩同一个坑

如果让执行层Agent自己"修一下",它不会走到第3步——它只看到pip报错,看不到系统包管理器的替代方案。


六、真实案例三:Ingest Pipeline的"改知识"边界

在上面提到的89份PDF→LLM Wiki的Ingest Pipeline中,有一个比代码更敏感的"修改"场景:修改已有的知识页面。

当新的PDF(比如《裸烧及非裸烧升级 使用手册》)被摄入时,Agent需要判断:

• 已有页面 [[裸烧与非裸烧升级]] 存在,但只有3个段落
• 新PDF包含19页详细内容
→ 不是创建新页面,而是更新已有页面

这个"更新"的边界设计是:

✅ 可以做的事情:
• 在已有段落后面追加新内容(不删不改原有内容)
• 添加新的交叉引用 [[wikilinks]]
• 在 frontmatter 的 sources 字段追加新的来源引用
• 更新 log.md 记录改动

❌ 不能做的事情:
• 删除已有段落(可能包含其他来源的交叉验证信息)
• 重写页面结构(可能破坏已有 wikilinks)
• 修改已有来源标注
• 修改其他Agent写入的内容

为什么追加而非覆盖?因为知识不是代码——代码的旧版本可以直接丢弃,但知识的旧来源可能是正确的,只是不完整。新来源补充了它,但不等于否定它。

如果允许Agent自由覆盖,三个月后你会发现:第一版写的内容全被后面的Agent改没了,但你永远不知道是改得更好了还是改丢了什么。

log.md的不可变设计就是为这个场景服务的:

## [2026-06-19] ingest | 裸烧及非裸烧升级 使用手册 - 操作: UPDATE [[裸烧与非裸烧升级]] - 原因: 已有页面只有3段概述,PDF包含19页完整内容 - 新增: 烧录流程对比表、失败原因分析、模式选择决策树 - 保留: 原有3段概述(未删除)

三个月后,任何人都能回溯这次修改的完整决策过程。


七、边界设计的三条铁律

从这些真实案例中,我提炼出三条铁律:

铁律一:写代码的Agent不能改已有代码

理由:上下文窗口不对称 + 修改的蝴蝶效应 + 所有权混乱

操作方式:改代码必须经过Orchestrator或人工审查。delegate_task的子Agent只能创建新文件或在指定位置追加内容——不能用patch工具修改其他Agent的输出。

铁律二:审查必须由不同角色执行

理由:自审自批 = 无审无批。考生不能批改自己的试卷。

操作方式:

• 代码审查:由不同的Agent或人执行
• 安全扫描:由自动化脚本执行(不依赖Agent判断)
• 格式检查:由规则引擎执行(不依赖"Agent觉得对不对")

铁律三:任何修改必须有log

理由:没有记录的修改 = 不存在。三个月后没人知道为什么改的。

操作方式:

• 代码修改 → Git commit(必须带描述性message,不能用"fix")
• 知识修改 → log.md 追加(不可变日志,只追加不修改)
• 配置修改 → 变更记录(改了什么、为什么、影响范围)

八、什么时候可以"放宽"边界

不是说所有场景都必须走严格的3层审查。有些场景下,边界可以适度放宽:

可以放宽的场景:

✅ 临时实验项目(写完就扔的spike代码)
✅ Agent自己创建的新文件(还没有被其他模块依赖)
✅ 格式修改(不影响逻辑,如代码格式化)
✅ 单Agent独占的项目(没有多人协作的冲突风险)

绝不能放宽的场景:

❌ 被多个模块依赖的核心代码
❌ 已经部署到生产环境的代码
❌ 其他Agent也在编辑的同一个文件
❌ 知识库中的已有页面
❌ 配置文件(改错一个参数影响全局)

九、对比:业内其他方案的边界设计

来看看业界主流方案是怎么处理这个问题的:

方案边界设计优点问题
Claude Code (Anthropic)人工审批所有文件写入安全可控人工成为瓶颈
Codex CLI (OpenAI)默认审批,可配置always approve灵活配置失误后果严重
Cursor AgentAgent直接写文件,人工可回滚速度快回滚成本高
本文方案3层边界:规划→执行→审查平衡效率和安全需要Agent间通信机制

我的方案不是最自动化的——但它是唯一一个在3小时后还能维护的方案。


十、给你的实操建议

如果你正在搭建自己的多Agent协作系统,以下是可以直接拿去用的规则:

建项目时的初始设置:

1. 指定一个Orchestrator Agent:它不写代码,只拆任务、分角色、合并结果
2. Worker Agent 只开放 write_file(创建新文件),禁止 patch(修改已有文件)
3. 任何代码修改走 Mini-PR 流程:Worker提方案 → Orchestrator审查 → 确认后执行
4. 所有操作记录到 log.md:时间、操作者、改动内容、原因
5. 安全扫描和格式检查设为自动化规则,不依赖Agent主观判断

运行中的检查清单:

□ 这次修改涉及几个文件?→ 超过1个 = 需要审查
□ 这个文件被几个模块引用?→ 超过0个 = 需要审查
□ 上次修改是什么时候?→ 最近24小时内 = 需要审查(可能和别人冲突)
□ 这个修改是"追加"还是"覆盖"?→ 覆盖 = 必须审查
□ 有没有在log里记录?→ 没有 = 不算完成

写在最后

多Agent协作的效率提升是真实的——5个Agent、3小时、1800行代码。

但效率的提升有一个前提:边界设计。

没有边界的多Agent协作,不是协作,是"一群AI在同一个仓库里各写各的"。速度快但质量不可控。一个Agent改了一个函数,另一个Agent不知道,第三个Agent引用了旧版本——代码库变成考古现场。

边界不是限制效率,是保护效率。

就像高速公路的护栏——没有护栏你可以开300,但你不敢。有了护栏你只开120,但你能安全到达。

写代码和改代码——这是第一条护栏。审查不能自审自批——这是第二条。任何修改必须有log——这是第三条。

三条护栏,保护你的项目在3小时后、3天后、3个月后还能维护。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/25 22:29:45

Django毕业设计-基于 Django + 协同过滤算法的电影推荐系统设计与实现 基于 Django + 协同过滤算法的个性化电影推荐平台(源码+LW+部署文档+全bao+远程调试+代码讲解等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/25 22:28:41

XXTEA-C轻量级加密库:嵌入式与IoT开发中的高效数据保护方案

1. 项目概述&#xff1a;为什么我们需要一个轻量级加密库&#xff1f;在嵌入式开发、IoT设备通信或者对性能有极致要求的桌面应用中&#xff0c;我们常常会遇到一个两难的选择&#xff1a;数据安全与资源开销。标准的AES、RSA算法固然强大&#xff0c;但其计算复杂度和内存占用…

作者头像 李华
网站建设 2026/6/25 22:28:29

Mythos能力跃迁:从AI助理到安全决策伙伴的质变

1. 这不是一次普通升级&#xff1a;Mythos 的能力跃迁本质是什么&#xff1f;如果你过去三年持续关注大模型演进&#xff0c;大概率会记得2023年Claude 2发布时那种“稳扎稳打”的观感——推理更连贯、长文本更可靠、越狱难度更高&#xff0c;但没人会说它“颠覆了什么”。2024…

作者头像 李华