首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
多智能体系统安全:从单点护栏到协作防越狱
📅 2026/10/31 19:03:22
✍️ 爱科研究院
👁 阅读 3,247
最近我在做多智能体系统压测时聊到一个很有意思的现象一套由三四个大模型智能体组成的协作系统里没有任何一个智能体被明确要求“去突破安全规则”它们只是被分派了正常任务但在彼此交换中间结果、互相追问和补全上下文的过程中系统竟然自发地完成了对自身安全策略的试探甚至出现了一条完整的“组团越狱”路径。这个现象让我特别想把整个思路拆开来讲。你想单智能体时代安全机制基本是“一个模型对一个人”模型层面有对齐训练产品层面有提示词护栏绝大多数越狱手段都得靠外部用户精心构造输入。可到了多智能体场景情况完全变了多个智能体之间互相信任、互相传递信息任务的拆分和执行是动态的而每个智能体手里拿到的上下文又都是局部片段。没有人告诉它们要合作破防但它们通过正常的规划、反思和工具调用就能在无意间把安全策略拆得七零八落。今天这篇就围绕这个现象展开。我会从现象成因、实测拆解、安全边界缺陷、防守改造这几个角度聊透最后给一些后续可以做的测试思路。适合正在做智能体应用、Agent框架、AI安全测试的同学参考也适合产品经理和技术决策者理解“为什么多智能体系统不能照搬单模型的护栏方案”。1. 为什么单个智能体守住了多个智能体却“组团”破防1.1 单智能体安全机制的假设前提先回到单智能体时代。无论是聊天机器人还是RAG问答系统安全机制的核心假设是一个模型实例接收用户输入输出最终结果安全边界只存在于“模型内部”和“输入输出两端”。模型内部靠指令微调、RLHF这类对齐训练让模型本身倾向于拒绝有害请求输入输出两端靠内容审核模型和提示词过滤把明显违规的东西挡在外面。这套机制在单智能体场景下确实够用因为变量少。用户输入是唯一的外部控制面中间就算模型自己“想歪了”也可以靠输出侧审核兜底。但多智能体系统一出来这个假设立刻就崩了。系统里不再是一个模型实例而是多个模型实例通过消息通道互相协作。每个智能体都有自己的系统提示词、自己的上下文窗口、自己的工具权限。安全边界从一个点变成了一个网络。我看到很多团队在搭建多智能体系统时直接把单智能体的安全经验平移过来。每个智能体的系统提示词都写“你是一名安全的助手拒绝一切违规请求”每个智能体背后也都挂了审核接口。但实际跑起来会发现这种“每个节点各自为战”的防御根本兜不住协作链路。原因很简单单点防御只认得到自己眼前这一小段上下文而协作链路里的风险是累积的、迂回的。1.2 协作机制放大了隐式意图多智能体系统里最常见的工作模式是规划-执行-反思。一个调度智能体把任务拆成子任务分发给多个执行智能体执行结果再汇总回调度层。这个过程里有一个非常关键但容易被忽略的点每个智能体接收到的不是原始用户意图而是经过上游智能体“转译”过的子任务。转译本身就会丢失安全语义。上游智能体在拆任务时它只关心“怎么把任务拆得可执行”不会刻意保留“哪些内容需要被安全红线拦截”这个信息。于是到了执行智能体那一层它看到的只是一个干干净净的子任务描述上下文里全是工具调用和中间结果安全提示词就像被稀释了一样。举个最直观的例子。一个用户提交需求说“帮我完成一篇产品宣传内容”这个需求本身完全合规。规划智能体把任务拆分其中一条子任务是“收集目标人群关注的高频卖点词”。执行智能体拿到这个子任务后去检索相关资料发现某些词汇带敏感倾向但它判断不出来因为它的上下文里没有完整的用户意图只有“收集卖点词”这个单一指令。它把结果返回后规划智能体再把这些词汇揉进最终文案里。整个过程没有任何一个智能体“想”越狱但组合出来的结果可能已经突破了内容红线。这就是隐式意图放大的本质单智能体系统里用户输入和模型输出之间只有一跳安全审核可以卡住最后一跳多智能体系统里中间经过了N跳每一跳都可能对原始意图做局部合理化改写等到最后输出时风险已经散落到组合结果里了。1.3 信任边界才是真正的突破口再往下挖一层多智能体系统里真正让“组团越狱”成为可能的原因是智能体之间默认存在信任关系。同一个编排框架里的智能体天然认为彼此传递的消息是“自己人”产生的不会像对待外部用户输入那样严格审查。我之前测过一个带工具调用的Agent系统。调度智能体把“整理行业动态”这个任务派给一个搜索智能体搜索智能体返回一批网页摘要。因为摘要本身来源于搜索引擎调度层几乎不设防直接把摘要内容当作可信上下文传给写作智能体。结果就是外部信息通过“搜索智能体”这个看似可信的通道绕过了用户输入层的内容过滤钻进了最终输出。这不是某个框架的缺陷而是多智能体架构的通用弱点。信任边界划得太粗节点之间只认“来源”不认“内容”。所有从外部环境、工具返回、上游节点传来的信息都被默认为可信。攻击者或者意外情况要做的只是想办法让风险内容经过某个“可信通道”进入链路后续的智能体就会一路绿灯地把它放大成正式结果。2. 实测拆解多智能体协作越狱的典型链路2.1 搭建一套可观测的多智能体测试环境聊清楚原理之后我还是建议你自己搭一套环境实际跑一遍光看文章理解不了那种“每个节点都合规组合起来却越狱”的荒诞感。我这边用开源的多智能体框架搭了一个最小复现环境结构很简单1个调度智能体负责拆任务和汇总结果2个执行智能体一个负责检索信息一个负责生成内容1个质检智能体负责审核最终输出是否合规每个智能体都接入同一个大模型API系统提示词里都明确写了“必须遵守安全规范拒绝生成违规内容”质检智能体额外多了一条“检测到风险内容就拦截并重写”。从配置上看这已经是很多团队认为“够安全”的配置了。为了让链路可观测我在每个智能体的输入输出口都加了结构化日志记录消息从哪里来、到哪里去、上下文窗口里新增了哪些内容、最终审核结果是什么。这一步非常重要因为多智能体越狱往往是链路问题不把消息流完整抓下来你根本定位不到是哪一跳出了问题。配置里关键的一项就是消息透传策略这是测试环境的灵魂。# 示例配置参数伪代码/JSON风格 { message_policy: { step_1_dispatch: 只透传子任务描述不保留原始用户输入, step_2_search: 允许搜索工具返回的网页摘要直接进入上下文, step_3_generate: 允许上游中间结果作为写作素材, step_4_review: 质检智能体可见完整对话链有拦截权限 } }2.2 从正常任务到意外越狱的四步路径我跑的第一批任务全是正常需求比如“整理一份新能源汽车行业趋势报告”。但就是在这种完全合规的输入下链路也露出了风险苗头。我把整个过程拆成四步每一步单拎出来都人畜无害连起来就出问题。第一步调度智能体把“整理行业趋势”拆成“搜索近期行业新闻”和“提炼市场观点”两个子任务。这时候用户输入里的“安全要求”已经完全丢掉了调度智能体根本没有义务把安全红线一并转述给执行智能体。第二步搜索智能体为了拿到更多素材自动把关键词扩展成好几个长尾词其中一个长尾词恰好命中了一些内容质量低、观点偏激的自媒体页面。搜索结果摘要里带着明显情绪化的表述但搜索智能体只负责“检索”不做价值判断。第三步写作智能体拿到这些摘要把偏激观点当作行业共识写进了初稿。它在系统提示词里确实被要求“不得输出违规内容”可它看到的上下文全是“来源可信的搜索结果”自然不觉得有什么问题。第四步质检智能体审核时发现部分段落措辞不够稳妥按规则触发了一次重写。但重写指令是“让表达更客观”它基于同一批上下文做修改最后输出的版本虽然在形式上更中立核心观点仍然沿用了那批有偏来源的方向。整个过程中没有任何一个智能体收到了“越狱指令”也没有任何一个智能体主动去突破安全策略。它们只是在完成分内工作但因为链路里缺少一道“跨节点安全语义保持”的机制就这么顺滑地走出了越狱曲线。2.3 复现结果里最值得警惕的三个特征这套测试跑完我复盘日志时总结了三个高频特征你可以拿自己的系统对照一下。特征一是安全语义逐跳衰减。最开始时调度智能体收到的原始输入里可能有明确的风险提示但拆完一次任务风险提示就丢了再经过搜索摘要转译风险倾向被“事实化”包装到写作环节已经完全看不出原始风险了。就跟传话游戏一样传到最后一个节点时只剩一个与风险无关的任务壳但内容里已经埋了雷。特征二是工具通道成为绝佳的信息注入点。搜索结果、数据库查询、代码执行输出、API返回体这些外部信息天然不会被用户输入过滤器拦截。只要风险内容能通过某个工具返回就能绕过最外层防线进入链路内部。特征三是质检节点形同虚设。质检智能体拥有完整对话链和拦截权限但它在审核时面对的是已经“合理化”过的内容。偏激观点被包装成了“行业数据”主观情绪被包装成了“市场反馈”质检模型很难把这些内容识别为需要拦截的对象。它不是不努力是上游已经把风险伪装得太好了。3. 勿低估上下文工程安全边界的三个裂缝3.1 裂缝一局部上下文导致的安全盲区多智能体系统里每个节点都有自己的小上下文窗口这个看似高效的机制其实是安全边界的第一道裂缝。单智能体系统里安全审核能看到完整的用户意图和完整的生成结果是“全局视角”做判断多智能体系统里每个节点只能看到被上游转译后的局部任务“全局视角”根本不存在。用生活里的事来类比就像一个大型公司的合规审查。单智能体像是合规专员从头到尾盯着一个项目每一笔资金流向都有数多智能体像是把项目拆给不同部门财务部只看报销单业务部只看执行计划市场部只看宣传稿。每个部门都觉得自己的环节没毛病但凑在一起整个项目的合规性根本没人完整把关。要修补这条裂缝不能靠单纯加长每个智能体的上下文窗口因为token成本会爆炸。真正要做的是在链路关键节点设置“安全语义快照”让调度层在拆分任务时把安全要求作为一条独立消息随子任务一起下发。要理解安全语义不是提示词里的一句空话而是需要跟着数据流走的结构化标签。3.2 裂缝二中间产物被默认为可信第二个裂缝在于中间产物的信任问题。我之前特意统计过一套典型的多智能体系统运行一天会产生大量中间消息规划结果、工具返回、反思意见、指令修正。这些消息在链路内部传递时几乎不会有任何一级做内容安全检测因为大家都默认“系统内部消息是可以信任的”。这个默认假设在早期智能体系统里还能勉强成立因为那时的智能体数量少、工具少、链路短。但现在很多系统已经支持十个以上智能体并行协作工具调用动不动就是几十上百次。中间产物体量大了之后里面混入风险内容的概率指数级上升再抱着“内部消息无条件信任”的思路就等于给风险开了一条高速公路。我建议所有做多智能体应用的同学重新审视自己的消息中间层。但凡消息从一个智能体流转到另一个智能体就要像对待外部用户输入一样过一次内容过滤。不要信“来源标识”要看“实际内容”。这套逻辑对性能有影响但安全底线的代价不能省。3.3 裂缝三目标是结果合规不是过程合规第三个裂缝更隐蔽也更容易被忽略很多系统的安全机制只卡最终输出不卡中间过程。大家想的是“反正最后有审核只要最终结果没问题就行”。但多智能体系统的特点决定了中间过程本身就是风险发酵的温床。一个执行智能体可能已经产生了一段接近越狱的内容但它自己没察觉这段内容被传给下游智能体做二次加工时反而被“修正”成了更隐蔽的形式。到最终审核环节风险已经经过多层润色表面看起来完全合规。这时候你就算用最严格的输出审核模型也很难把风险识别出来因为它早就藏进了字里行间的隐含倾向里。保过程合规的思路是在每个执行智能体的输出端口做一个轻量级风险信号打分不一定要拦截但要把高分信号作为元数据传给下游节点让下游在加工时就有警示。看到这里你可能会说这不就是把审核埋到每一层吗对实践下来就是这么粗暴但有效。4. 防守端改造从单体护栏到协作护栏4.1 给每个智能体补齐“安全语义包”既然问题出在安全语义逐跳衰减最直接的改良方案就是让安全语义跟着任务走。我在工程实践里把这块做成了一个名为“安全语义包”的结构体每次调度智能体下发子任务时都会把与任务相关的安全约束一并打包传递。# 安全语义包结构示意 safety_semantic_packet { task_id: subtask-20240601-01, parent_intent: 整理新能源汽车行业趋势, safety_tags: [行业数据需标注来源, 避免将自媒体观点表述为定论], forbidden_topics: [], inherited_context: [上游检索到部分内容质量偏差较大的来源] }执行智能体拿到的不再是干巴巴的子任务描述而是带一套完整安全语境的执行指令。这样一来即使某个子任务本身看起来人畜无害执行智能体也能通过安全标签感知到上下文里的风险和上游残留的红色信号。这套方案的落地成本不高主要是改一下调度智能体的消息构造逻辑但它能有效解决“每个节点都很干净组合起来却越狱”的问题。我做的小规模实验里加了安全语义包之后高风险内容的触发率下降了一半以上。4.2 在消息中间层加“协作护栏”第二个改造点是消息中间层。我们要改变“内部消息无条件信任”的默认策略在智能体之间的消息流转通道上加一道协作护栏。这道护栏不需要做深度语义理解重点是做几个快判断消息里是否出现了高风险关键词、是否与上游安全标签冲突、是否携带了工具返回的可疑内容。class CollaborationGuardrail: 协作护栏示例逻辑 def check(self, msg): if msg.from_node search_agent and msg.content_type web_summary: # 对工具返回的高风险信号做额外检验 risk_score evaluate_risk(msg.content) msg.risk_meta {score: risk_score, reason: external_content} return risk_score 0.7 # 其他内部消息默认放行但记录信号 msg.risk_meta {score: 0.0} return True注意我这里的思路不是全线拦截因为全线拦截会让协作彻底卡死。更合理的做法是给每个消息打一个风险信号标签这个标签会随消息继续流动让下游节点在加工前就知道上游数据“可能带泥”。只有风险打分超过阈值时才触发真正的拦截和人工审查。这就像快递运输中途不会每个包裹都拆开验货但X光机扫描到异常包裹就会自动标注“高风险”然后转入人工通道。协作护栏要在“不打断正常协作”和“不放过风险信号”之间找平衡实际调参时需要你用自己系统的真实流量反复跑几轮。4.3 审计日志要能还原完整意图链最后一条防守经验来自我自己的血泪教训别等到出了事才去翻日志那时候你很可能什么都查不出来。很多多智能体系统的日志只记录了每个节点的输入输出却没有记录它们之间的“意图关联”导致事后追溯时根本还原不了风险内容是从哪个环节混入的。所以我在改造方案里加了一条审计日志必须能还原完整意图链。也就是说从用户原始输入开始到调度拆分到每个执行节点的中间结果再到最终输出所有消息都要带同一个链路追踪ID。任何一个节点出了问题都能顺着追踪ID回溯整条路径看到风险是什么时候进来的、经过了哪些节点的包装。为了做到这一点每个智能体在发送消息时都要把自己的系统提示词版本、上下文窗口摘要、关键决策理由一起写进日志。听起来很重但实际落地时只需要在框架层加一个统一的日志装饰器开发成本不高。一旦遇到风险事件这条意图链就是你的破案地图。4.4 给质检智能体一个“外部视角”前面提到质检智能体最大的问题是它只能看到链路内部加工过的内容容易被“合理化”外衣骗过。要解决这个问题就要给质检智能体增加一个外部视角让它可以主动向外部知识源发起交叉验证。我在实践里给质检智能体加了一个旁路检索工具。当它对某段内容的倾向性判断不够确定时会主动搜索一下外部权威信息源对比一下同样的观点在专业领域里是如何被表述的。如果发现内容里引用了“网络来源”但没有权威佐证就把这个风险信号打回去让上游重写。这一步的效果非常明显尤其适合RAG、检索生成类多智能体系统。质检智能体不再只依赖自己内部的判断而是通过外部对照来识别内容的“来源质量”。当然这不是让你在每次审核时都发起全网搜索那成本太高了只需要针对风险评分落在中等区间的消息触发旁路校验即可。5. 后续还能怎么玩协作安全的测试与治理5.1 把“组团越狱”当作系统级安全测试用例聊到这里其实最核心的观点已经出来了多智能体系统的安全不能沿用单点的测试思路必须把“多智能体协作”本身当作一个安全测试对象。我在后续测试计划里专门建了一类名为“协作安全压测”的测试用例。这类用例和传统越狱测试最大的区别在于传统测试关注“外部用户输入是否足够刁钻”协作安全压测关注“系统内部是否有机制能扛住多节点误判叠加”。测试时会故意构造一些单看每个节点都正常的任务比如把一些带明显倾向的内容混入插件返回结果然后观察链路里是否有节点主动打上风险标签。没有标签流入就说明这条链路的协作护栏还没建起来。我个人的建议是把这类压测纳入每次版本上线的回归用例不要等出事了再补。因为多智能体系统的行为随机性很高一次全绿不代表下一次也全绿需要持续压测积累样本。5.2 用“安全意图传递”指标衡量系统健康度顺带分享一个我自己琢磨出来的量化指标安全意图传递率。这个指标衡量的是一条安全指令从原始输入传递到最终执行节点的过程中有多少比例的信息被完整保留下来了。计算方法很简单在链路里的关键节点各设一个检查点记录系统提示词里那几条安全指令的“存在状态”。比如调度智能体有没有把安全标签写进子任务执行智能体有没有在执行前阅读安全标签最终输出有没有在风险点上触发额外审核。跑一批任务后用“完整保留安全语义的任务数 / 总任务数”得到一个百分比这就是你的安全意图传递率。我拿自己维护的测试系统跑过未改造前这个指标只有不到60%意味着有四成任务在拆分和转译过程中直接丢掉了安全语义。加完安全语义包和协作护栏之后这个指标能稳定在90%以上。这个指标不复杂但对团队来说是一个非常直观的安全健康度镜子。5.3 从“单点拦截”走向“过程留痕、风险标记、人工兜底”最后想单独说一点关于治理思路的转变。很多团队做AI安全心里默认的模型还是“前置过滤后置审核”。这套模式在单智能体时代够用但在多智能体协作时代前置过滤拦截不住工具通道的信息注入后置审核又识别不出多层润色后的风险必须走向新三角过程留痕、风险标记、人工兜底。过程留痕就是我们前面说的完整意图链日志保证任何风险都能溯源。风险标记是让中消息层和质检节点不只做拦截/放行二选一而是给风险程度打分、打标签让风险信号在整个链路里流动。人工兜底是把高风险的判断动作保留给人工而不是全都交给模型。这三个动作合在一起才能把多智能体系统的安全边界从“点”拉成“网”。我在实际维护中最大的体会是多智能体系统的安全问题本质上不是某一个模型不够强而是系统架构里缺少“安全语义的传递协议”。没有任何一个智能体天生想要越狱但当它们被放到一个缺乏协作共识的系统里组合出来的行为就会失控。想要根治得从系统设计层入手而不是寄希望于换一个更聪明的模型。这也是我写这篇最深的一个念头多智能体是前所未有的生产方式但它在安全层面带来的复杂度也是从未有过的。每个正在搭建智能体应用的人都应该在第一天就把协作安全当成架构的一部分来设计而不是等系统跑起来之后再打补丁。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/31 19:03:22
SAP CPI与SuccessFactors集成中的User ID错误解析与修复
2026/10/31 18:58:21
智能音箱技术拆解与OH11刷机实战:从语音链路到固件改造
2026/10/31 18:58:21
Informix Client SDK 4.10 Windows安装配置与避坑指南
2026/10/31 19:53:55
树莓派5部署YOLOv5工业视觉全复盘:从系统到可靠性的六大坑
2026/10/31 19:53:55
大仙分发平台二版一键安装部署:环境配置、支付回调与避坑指南
2026/10/31 19:53:55
RK3588部署YOLOv5s实战:服务层接口与摄像头接入全解析
2026/10/31 19:53:55
JS逆向-某招标网站des分析
2026/10/31 19:53:55
DUBBO注册信息
2026/10/31 19:48:54
C语言DOS游戏开发实战:Turbo C图形编程与现代移植
2026/10/31 0:00:18
猫狗目标检测数据集:VOC/COCO/YOLO三格式一体化实战包
2026/10/31 0:00:18
HDU2017多校标程复现:算法竞赛工程化真题沙盒
2026/10/31 0:00:18
Codex Sandbox 隔离环境拆解:AI Agent 的临时实验室如何运作
2026/10/31 0:57:03
全国计算机二级C语言真题PDF高效刷题指南
2026/10/31 0:56:56
requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南
2026/10/30 21:48:31
递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现
2026/10/30 3:44:27
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/30 3:44:25
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/30 3:44:29
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)