后端第十六课:Multi-Agent 多智能体(让多个 Agent 分工协作)
👋 我是 Yulia,一线 AI 应用开发工程师:4 年工程经验,在职做大模型应用落地。
只写一件事------把最新 AI 技术讲成人话 + 给你能直接上手用的代码 (真实可验证,不搬运不注水)。
有用就点个 关注,持续更新大模型应用的前沿实战。
📚 本文是《后端开发从入门到靠谱》系列第 16 篇。前面我们把单 Agent 做明白了(工具、记忆、上下文工程),但真实项目里,一个 Agent 单打独斗常常不够------上下文会爆、职责会乱、错误会传染。这一课讲 Multi-Agent 多智能体:把一个大任务拆给多个 Agent 分工协作。
一个 Agent 很强,但让它一个人写代码、查资料、审代码、跑测试、改 bug......上下文越塞越多,最终"看花眼"、顾此失彼。这就像一个人既要当经理又要当员工------累且容易出错。
多智能体(Multi-Agent) 的思路很简单:别让一个 Agent 干所有事,让多个 Agent 各司其职、互相协作。
读完你会拿到:
- 一个直觉模型:多智能体 = 一家公司(有经理、有员工,各司其职)
- 为什么需要多智能体(单 Agent 的三大硬伤)
- 三种协作模式:编排者-执行者 / 交接(Handoff)/ 路由(Router)
- 底层原理:每个子 Agent 有独立的上下文窗口------这是它"不串味、不爆仓"的根因
- 一个完整实现:编排者 + 多个执行者的代码骨架(逐行讲解)
- 多智能体的常见坑(状态共享、通信开销、无限递归)
先看全景图,多智能体协作的样子:
#mermaid-svg-PPT0RMzVlxkmJKwe{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-PPT0RMzVlxkmJKwe .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-PPT0RMzVlxkmJKwe .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-PPT0RMzVlxkmJKwe .error-icon{fill:#552222;}#mermaid-svg-PPT0RMzVlxkmJKwe .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-PPT0RMzVlxkmJKwe .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-PPT0RMzVlxkmJKwe .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-PPT0RMzVlxkmJKwe .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-PPT0RMzVlxkmJKwe .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-PPT0RMzVlxkmJKwe .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-PPT0RMzVlxkmJKwe .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-PPT0RMzVlxkmJKwe .marker{fill:#333333;stroke:#333333;}#mermaid-svg-PPT0RMzVlxkmJKwe .marker.cross{stroke:#333333;}#mermaid-svg-PPT0RMzVlxkmJKwe svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-PPT0RMzVlxkmJKwe p{margin:0;}#mermaid-svg-PPT0RMzVlxkmJKwe .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-PPT0RMzVlxkmJKwe .cluster-label text{fill:#333;}#mermaid-svg-PPT0RMzVlxkmJKwe .cluster-label span{color:#333;}#mermaid-svg-PPT0RMzVlxkmJKwe .cluster-label span p{background-color:transparent;}#mermaid-svg-PPT0RMzVlxkmJKwe .label text,#mermaid-svg-PPT0RMzVlxkmJKwe span{fill:#333;color:#333;}#mermaid-svg-PPT0RMzVlxkmJKwe .node rect,#mermaid-svg-PPT0RMzVlxkmJKwe .node circle,#mermaid-svg-PPT0RMzVlxkmJKwe .node ellipse,#mermaid-svg-PPT0RMzVlxkmJKwe .node polygon,#mermaid-svg-PPT0RMzVlxkmJKwe .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-PPT0RMzVlxkmJKwe .rough-node .label text,#mermaid-svg-PPT0RMzVlxkmJKwe .node .label text,#mermaid-svg-PPT0RMzVlxkmJKwe .image-shape .label,#mermaid-svg-PPT0RMzVlxkmJKwe .icon-shape .label{text-anchor:middle;}#mermaid-svg-PPT0RMzVlxkmJKwe .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-PPT0RMzVlxkmJKwe .rough-node .label,#mermaid-svg-PPT0RMzVlxkmJKwe .node .label,#mermaid-svg-PPT0RMzVlxkmJKwe .image-shape .label,#mermaid-svg-PPT0RMzVlxkmJKwe .icon-shape .label{text-align:center;}#mermaid-svg-PPT0RMzVlxkmJKwe .node.clickable{cursor:pointer;}#mermaid-svg-PPT0RMzVlxkmJKwe .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-PPT0RMzVlxkmJKwe .arrowheadPath{fill:#333333;}#mermaid-svg-PPT0RMzVlxkmJKwe .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-PPT0RMzVlxkmJKwe .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-PPT0RMzVlxkmJKwe .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PPT0RMzVlxkmJKwe .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-PPT0RMzVlxkmJKwe .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PPT0RMzVlxkmJKwe .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-PPT0RMzVlxkmJKwe .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-PPT0RMzVlxkmJKwe .cluster text{fill:#333;}#mermaid-svg-PPT0RMzVlxkmJKwe .cluster span{color:#333;}#mermaid-svg-PPT0RMzVlxkmJKwe div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-PPT0RMzVlxkmJKwe .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-PPT0RMzVlxkmJKwe rect.text{fill:none;stroke-width:0;}#mermaid-svg-PPT0RMzVlxkmJKwe .icon-shape,#mermaid-svg-PPT0RMzVlxkmJKwe .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PPT0RMzVlxkmJKwe .icon-shape p,#mermaid-svg-PPT0RMzVlxkmJKwe .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-PPT0RMzVlxkmJKwe .icon-shape .label rect,#mermaid-svg-PPT0RMzVlxkmJKwe .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PPT0RMzVlxkmJKwe .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-PPT0RMzVlxkmJKwe .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-PPT0RMzVlxkmJKwe :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-PPT0RMzVlxkmJKwe .blue>*{fill:#4E79A7!important;color:#fff!important;stroke:none!important;}#mermaid-svg-PPT0RMzVlxkmJKwe .blue span{fill:#4E79A7!important;color:#fff!important;stroke:none!important;}#mermaid-svg-PPT0RMzVlxkmJKwe .blue tspan{fill:#fff!important;}#mermaid-svg-PPT0RMzVlxkmJKwe .orange>*{fill:#F28E2B!important;color:#fff!important;stroke:none!important;}#mermaid-svg-PPT0RMzVlxkmJKwe .orange span{fill:#F28E2B!important;color:#fff!important;stroke:none!important;}#mermaid-svg-PPT0RMzVlxkmJKwe .orange tspan{fill:#fff!important;}#mermaid-svg-PPT0RMzVlxkmJKwe .green>*{fill:#59A14F!important;color:#fff!important;stroke:none!important;}#mermaid-svg-PPT0RMzVlxkmJKwe .green span{fill:#59A14F!important;color:#fff!important;stroke:none!important;}#mermaid-svg-PPT0RMzVlxkmJKwe .green tspan{fill:#fff!important;}#mermaid-svg-PPT0RMzVlxkmJKwe .red>*{fill:#E15759!important;color:#fff!important;stroke:none!important;}#mermaid-svg-PPT0RMzVlxkmJKwe .red span{fill:#E15759!important;color:#fff!important;stroke:none!important;}#mermaid-svg-PPT0RMzVlxkmJKwe .red tspan{fill:#fff!important;} 用户任务
编排者 Agent
执行者 写代码
执行者 查资料
执行者 审代码
汇总结果
一、为什么需要多智能体?单 Agent 的三大硬伤
先搞清楚"为什么",否则容易为了多而多。
- 上下文爆仓:单 Agent 干长任务,所有中间过程都堆进一个上下文窗口,撞上第十四课讲的 O(n²) 注意力墙;
- 职责混乱:一个 Agent 既要写代码又要审代码、既要查资料又要下结论,prompt 里塞满矛盾指令,容易顾此失彼;
- 错误传染:一个环节出错,整个上下文被污染,后面全跑偏,且很难定位。
#mermaid-svg-o2YJYT2qmMeyzD4H{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-o2YJYT2qmMeyzD4H .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-o2YJYT2qmMeyzD4H .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-o2YJYT2qmMeyzD4H .error-icon{fill:#552222;}#mermaid-svg-o2YJYT2qmMeyzD4H .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-o2YJYT2qmMeyzD4H .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-o2YJYT2qmMeyzD4H .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-o2YJYT2qmMeyzD4H .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-o2YJYT2qmMeyzD4H .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-o2YJYT2qmMeyzD4H .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-o2YJYT2qmMeyzD4H .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-o2YJYT2qmMeyzD4H .marker{fill:#333333;stroke:#333333;}#mermaid-svg-o2YJYT2qmMeyzD4H .marker.cross{stroke:#333333;}#mermaid-svg-o2YJYT2qmMeyzD4H svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-o2YJYT2qmMeyzD4H p{margin:0;}#mermaid-svg-o2YJYT2qmMeyzD4H .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-o2YJYT2qmMeyzD4H .cluster-label text{fill:#333;}#mermaid-svg-o2YJYT2qmMeyzD4H .cluster-label span{color:#333;}#mermaid-svg-o2YJYT2qmMeyzD4H .cluster-label span p{background-color:transparent;}#mermaid-svg-o2YJYT2qmMeyzD4H .label text,#mermaid-svg-o2YJYT2qmMeyzD4H span{fill:#333;color:#333;}#mermaid-svg-o2YJYT2qmMeyzD4H .node rect,#mermaid-svg-o2YJYT2qmMeyzD4H .node circle,#mermaid-svg-o2YJYT2qmMeyzD4H .node ellipse,#mermaid-svg-o2YJYT2qmMeyzD4H .node polygon,#mermaid-svg-o2YJYT2qmMeyzD4H .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-o2YJYT2qmMeyzD4H .rough-node .label text,#mermaid-svg-o2YJYT2qmMeyzD4H .node .label text,#mermaid-svg-o2YJYT2qmMeyzD4H .image-shape .label,#mermaid-svg-o2YJYT2qmMeyzD4H .icon-shape .label{text-anchor:middle;}#mermaid-svg-o2YJYT2qmMeyzD4H .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-o2YJYT2qmMeyzD4H .rough-node .label,#mermaid-svg-o2YJYT2qmMeyzD4H .node .label,#mermaid-svg-o2YJYT2qmMeyzD4H .image-shape .label,#mermaid-svg-o2YJYT2qmMeyzD4H .icon-shape .label{text-align:center;}#mermaid-svg-o2YJYT2qmMeyzD4H .node.clickable{cursor:pointer;}#mermaid-svg-o2YJYT2qmMeyzD4H .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-o2YJYT2qmMeyzD4H .arrowheadPath{fill:#333333;}#mermaid-svg-o2YJYT2qmMeyzD4H .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-o2YJYT2qmMeyzD4H .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-o2YJYT2qmMeyzD4H .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-o2YJYT2qmMeyzD4H .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-o2YJYT2qmMeyzD4H .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-o2YJYT2qmMeyzD4H .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-o2YJYT2qmMeyzD4H .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-o2YJYT2qmMeyzD4H .cluster text{fill:#333;}#mermaid-svg-o2YJYT2qmMeyzD4H .cluster span{color:#333;}#mermaid-svg-o2YJYT2qmMeyzD4H div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-o2YJYT2qmMeyzD4H .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-o2YJYT2qmMeyzD4H rect.text{fill:none;stroke-width:0;}#mermaid-svg-o2YJYT2qmMeyzD4H .icon-shape,#mermaid-svg-o2YJYT2qmMeyzD4H .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-o2YJYT2qmMeyzD4H .icon-shape p,#mermaid-svg-o2YJYT2qmMeyzD4H .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-o2YJYT2qmMeyzD4H .icon-shape .label rect,#mermaid-svg-o2YJYT2qmMeyzD4H .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-o2YJYT2qmMeyzD4H .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-o2YJYT2qmMeyzD4H .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-o2YJYT2qmMeyzD4H :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-o2YJYT2qmMeyzD4H .blue>*{fill:#4E79A7!important;color:#fff!important;stroke:none!important;}#mermaid-svg-o2YJYT2qmMeyzD4H .blue span{fill:#4E79A7!important;color:#fff!important;stroke:none!important;}#mermaid-svg-o2YJYT2qmMeyzD4H .blue tspan{fill:#fff!important;}#mermaid-svg-o2YJYT2qmMeyzD4H .orange>*{fill:#F28E2B!important;color:#fff!important;stroke:none!important;}#mermaid-svg-o2YJYT2qmMeyzD4H .orange span{fill:#F28E2B!important;color:#fff!important;stroke:none!important;}#mermaid-svg-o2YJYT2qmMeyzD4H .orange tspan{fill:#fff!important;}#mermaid-svg-o2YJYT2qmMeyzD4H .red>*{fill:#E15759!important;color:#fff!important;stroke:none!important;}#mermaid-svg-o2YJYT2qmMeyzD4H .red span{fill:#E15759!important;color:#fff!important;stroke:none!important;}#mermaid-svg-o2YJYT2qmMeyzD4H .red tspan{fill:#fff!important;} 单 Agent
上下文爆仓
职责混乱
错误传染
多智能体的解法:把任务拆开,每个 Agent 只干一件小事、只在自己的上下文里思考,最后汇总。
二、底层原理:每个子 Agent 有独立的上下文窗口
这是多智能体"为什么有效"的根因,也是面试最该讲清的一点。
回忆第十四课:上下文是"有限的注意力预算",塞得越多越笨。多智能体的核心价值就在于------每个子 Agent 有自己干净的上下文窗口:
#mermaid-svg-KQ9LbfME7KX2jd9K{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-KQ9LbfME7KX2jd9K .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-KQ9LbfME7KX2jd9K .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-KQ9LbfME7KX2jd9K .error-icon{fill:#552222;}#mermaid-svg-KQ9LbfME7KX2jd9K .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-KQ9LbfME7KX2jd9K .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-KQ9LbfME7KX2jd9K .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-KQ9LbfME7KX2jd9K .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-KQ9LbfME7KX2jd9K .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-KQ9LbfME7KX2jd9K .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-KQ9LbfME7KX2jd9K .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-KQ9LbfME7KX2jd9K .marker{fill:#333333;stroke:#333333;}#mermaid-svg-KQ9LbfME7KX2jd9K .marker.cross{stroke:#333333;}#mermaid-svg-KQ9LbfME7KX2jd9K svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-KQ9LbfME7KX2jd9K p{margin:0;}#mermaid-svg-KQ9LbfME7KX2jd9K .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-KQ9LbfME7KX2jd9K .cluster-label text{fill:#333;}#mermaid-svg-KQ9LbfME7KX2jd9K .cluster-label span{color:#333;}#mermaid-svg-KQ9LbfME7KX2jd9K .cluster-label span p{background-color:transparent;}#mermaid-svg-KQ9LbfME7KX2jd9K .label text,#mermaid-svg-KQ9LbfME7KX2jd9K span{fill:#333;color:#333;}#mermaid-svg-KQ9LbfME7KX2jd9K .node rect,#mermaid-svg-KQ9LbfME7KX2jd9K .node circle,#mermaid-svg-KQ9LbfME7KX2jd9K .node ellipse,#mermaid-svg-KQ9LbfME7KX2jd9K .node polygon,#mermaid-svg-KQ9LbfME7KX2jd9K .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-KQ9LbfME7KX2jd9K .rough-node .label text,#mermaid-svg-KQ9LbfME7KX2jd9K .node .label text,#mermaid-svg-KQ9LbfME7KX2jd9K .image-shape .label,#mermaid-svg-KQ9LbfME7KX2jd9K .icon-shape .label{text-anchor:middle;}#mermaid-svg-KQ9LbfME7KX2jd9K .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-KQ9LbfME7KX2jd9K .rough-node .label,#mermaid-svg-KQ9LbfME7KX2jd9K .node .label,#mermaid-svg-KQ9LbfME7KX2jd9K .image-shape .label,#mermaid-svg-KQ9LbfME7KX2jd9K .icon-shape .label{text-align:center;}#mermaid-svg-KQ9LbfME7KX2jd9K .node.clickable{cursor:pointer;}#mermaid-svg-KQ9LbfME7KX2jd9K .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-KQ9LbfME7KX2jd9K .arrowheadPath{fill:#333333;}#mermaid-svg-KQ9LbfME7KX2jd9K .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-KQ9LbfME7KX2jd9K .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-KQ9LbfME7KX2jd9K .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-KQ9LbfME7KX2jd9K .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-KQ9LbfME7KX2jd9K .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-KQ9LbfME7KX2jd9K .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-KQ9LbfME7KX2jd9K .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-KQ9LbfME7KX2jd9K .cluster text{fill:#333;}#mermaid-svg-KQ9LbfME7KX2jd9K .cluster span{color:#333;}#mermaid-svg-KQ9LbfME7KX2jd9K div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-KQ9LbfME7KX2jd9K .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-KQ9LbfME7KX2jd9K rect.text{fill:none;stroke-width:0;}#mermaid-svg-KQ9LbfME7KX2jd9K .icon-shape,#mermaid-svg-KQ9LbfME7KX2jd9K .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-KQ9LbfME7KX2jd9K .icon-shape p,#mermaid-svg-KQ9LbfME7KX2jd9K .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-KQ9LbfME7KX2jd9K .icon-shape .label rect,#mermaid-svg-KQ9LbfME7KX2jd9K .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-KQ9LbfME7KX2jd9K .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-KQ9LbfME7KX2jd9K .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-KQ9LbfME7KX2jd9K :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-KQ9LbfME7KX2jd9K .blue>*{fill:#4E79A7!important;color:#fff!important;stroke:none!important;}#mermaid-svg-KQ9LbfME7KX2jd9K .blue span{fill:#4E79A7!important;color:#fff!important;stroke:none!important;}#mermaid-svg-KQ9LbfME7KX2jd9K .blue tspan{fill:#fff!important;}#mermaid-svg-KQ9LbfME7KX2jd9K .orange>*{fill:#F28E2B!important;color:#fff!important;stroke:none!important;}#mermaid-svg-KQ9LbfME7KX2jd9K .orange span{fill:#F28E2B!important;color:#fff!important;stroke:none!important;}#mermaid-svg-KQ9LbfME7KX2jd9K .orange tspan{fill:#fff!important;}#mermaid-svg-KQ9LbfME7KX2jd9K .green>*{fill:#59A14F!important;color:#fff!important;stroke:none!important;}#mermaid-svg-KQ9LbfME7KX2jd9K .green span{fill:#59A14F!important;color:#fff!important;stroke:none!important;}#mermaid-svg-KQ9LbfME7KX2jd9K .green tspan{fill:#fff!important;} 只放 高层规划
只放 专注任务1
主 Agent 上下文
子 Agent 上下文1
子 Agent 上下文2
子 Agent 可以各自深入探索几万 token ,但只把浓缩后的结果 (通常几千 token 的摘要)返回给主 Agent。详细的中间过程隔离在子 Agent 内部,主 Agent 只看到"结论"------这样主 Agent 的上下文永远干净,不会"看花眼"。
这正是第十四课"子智能体(sub-agent)"那一招的完整展开:它不只是"绕过上下文限制",更是关注点分离(separation of concerns)------让每个 Agent 专注自己那一小块。
三、三种协作模式
多智能体不是"随便堆几个 Agent",而是有几种经典的协作结构:
#mermaid-svg-BakeXUjV32WFtCec{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-BakeXUjV32WFtCec .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-BakeXUjV32WFtCec .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-BakeXUjV32WFtCec .error-icon{fill:#552222;}#mermaid-svg-BakeXUjV32WFtCec .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-BakeXUjV32WFtCec .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-BakeXUjV32WFtCec .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-BakeXUjV32WFtCec .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-BakeXUjV32WFtCec .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-BakeXUjV32WFtCec .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-BakeXUjV32WFtCec .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-BakeXUjV32WFtCec .marker{fill:#333333;stroke:#333333;}#mermaid-svg-BakeXUjV32WFtCec .marker.cross{stroke:#333333;}#mermaid-svg-BakeXUjV32WFtCec svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-BakeXUjV32WFtCec p{margin:0;}#mermaid-svg-BakeXUjV32WFtCec .edge{stroke-width:3;}#mermaid-svg-BakeXUjV32WFtCec .section--1 rect,#mermaid-svg-BakeXUjV32WFtCec .section--1 path,#mermaid-svg-BakeXUjV32WFtCec .section--1 circle,#mermaid-svg-BakeXUjV32WFtCec .section--1 polygon,#mermaid-svg-BakeXUjV32WFtCec .section--1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .section--1 text{fill:#ffffff;}#mermaid-svg-BakeXUjV32WFtCec .node-icon--1{font-size:40px;color:#ffffff;}#mermaid-svg-BakeXUjV32WFtCec .section-edge--1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .edge-depth--1{stroke-width:17;}#mermaid-svg-BakeXUjV32WFtCec .section--1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-BakeXUjV32WFtCec .disabled,#mermaid-svg-BakeXUjV32WFtCec .disabled circle,#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:lightgray;}#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:#efefef;}#mermaid-svg-BakeXUjV32WFtCec .section-0 rect,#mermaid-svg-BakeXUjV32WFtCec .section-0 path,#mermaid-svg-BakeXUjV32WFtCec .section-0 circle,#mermaid-svg-BakeXUjV32WFtCec .section-0 polygon,#mermaid-svg-BakeXUjV32WFtCec .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-BakeXUjV32WFtCec .section-0 text{fill:black;}#mermaid-svg-BakeXUjV32WFtCec .node-icon-0{font-size:40px;color:black;}#mermaid-svg-BakeXUjV32WFtCec .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-BakeXUjV32WFtCec .edge-depth-0{stroke-width:14;}#mermaid-svg-BakeXUjV32WFtCec .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-BakeXUjV32WFtCec .disabled,#mermaid-svg-BakeXUjV32WFtCec .disabled circle,#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:lightgray;}#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:#efefef;}#mermaid-svg-BakeXUjV32WFtCec .section-1 rect,#mermaid-svg-BakeXUjV32WFtCec .section-1 path,#mermaid-svg-BakeXUjV32WFtCec .section-1 circle,#mermaid-svg-BakeXUjV32WFtCec .section-1 polygon,#mermaid-svg-BakeXUjV32WFtCec .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .section-1 text{fill:black;}#mermaid-svg-BakeXUjV32WFtCec .node-icon-1{font-size:40px;color:black;}#mermaid-svg-BakeXUjV32WFtCec .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .edge-depth-1{stroke-width:11;}#mermaid-svg-BakeXUjV32WFtCec .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-BakeXUjV32WFtCec .disabled,#mermaid-svg-BakeXUjV32WFtCec .disabled circle,#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:lightgray;}#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:#efefef;}#mermaid-svg-BakeXUjV32WFtCec .section-2 rect,#mermaid-svg-BakeXUjV32WFtCec .section-2 path,#mermaid-svg-BakeXUjV32WFtCec .section-2 circle,#mermaid-svg-BakeXUjV32WFtCec .section-2 polygon,#mermaid-svg-BakeXUjV32WFtCec .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .section-2 text{fill:#ffffff;}#mermaid-svg-BakeXUjV32WFtCec .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-BakeXUjV32WFtCec .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .edge-depth-2{stroke-width:8;}#mermaid-svg-BakeXUjV32WFtCec .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-BakeXUjV32WFtCec .disabled,#mermaid-svg-BakeXUjV32WFtCec .disabled circle,#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:lightgray;}#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:#efefef;}#mermaid-svg-BakeXUjV32WFtCec .section-3 rect,#mermaid-svg-BakeXUjV32WFtCec .section-3 path,#mermaid-svg-BakeXUjV32WFtCec .section-3 circle,#mermaid-svg-BakeXUjV32WFtCec .section-3 polygon,#mermaid-svg-BakeXUjV32WFtCec .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .section-3 text{fill:black;}#mermaid-svg-BakeXUjV32WFtCec .node-icon-3{font-size:40px;color:black;}#mermaid-svg-BakeXUjV32WFtCec .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .edge-depth-3{stroke-width:5;}#mermaid-svg-BakeXUjV32WFtCec .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-BakeXUjV32WFtCec .disabled,#mermaid-svg-BakeXUjV32WFtCec .disabled circle,#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:lightgray;}#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:#efefef;}#mermaid-svg-BakeXUjV32WFtCec .section-4 rect,#mermaid-svg-BakeXUjV32WFtCec .section-4 path,#mermaid-svg-BakeXUjV32WFtCec .section-4 circle,#mermaid-svg-BakeXUjV32WFtCec .section-4 polygon,#mermaid-svg-BakeXUjV32WFtCec .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .section-4 text{fill:black;}#mermaid-svg-BakeXUjV32WFtCec .node-icon-4{font-size:40px;color:black;}#mermaid-svg-BakeXUjV32WFtCec .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .edge-depth-4{stroke-width:2;}#mermaid-svg-BakeXUjV32WFtCec .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-BakeXUjV32WFtCec .disabled,#mermaid-svg-BakeXUjV32WFtCec .disabled circle,#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:lightgray;}#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:#efefef;}#mermaid-svg-BakeXUjV32WFtCec .section-5 rect,#mermaid-svg-BakeXUjV32WFtCec .section-5 path,#mermaid-svg-BakeXUjV32WFtCec .section-5 circle,#mermaid-svg-BakeXUjV32WFtCec .section-5 polygon,#mermaid-svg-BakeXUjV32WFtCec .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .section-5 text{fill:black;}#mermaid-svg-BakeXUjV32WFtCec .node-icon-5{font-size:40px;color:black;}#mermaid-svg-BakeXUjV32WFtCec .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .edge-depth-5{stroke-width:-1;}#mermaid-svg-BakeXUjV32WFtCec .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-BakeXUjV32WFtCec .disabled,#mermaid-svg-BakeXUjV32WFtCec .disabled circle,#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:lightgray;}#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:#efefef;}#mermaid-svg-BakeXUjV32WFtCec .section-6 rect,#mermaid-svg-BakeXUjV32WFtCec .section-6 path,#mermaid-svg-BakeXUjV32WFtCec .section-6 circle,#mermaid-svg-BakeXUjV32WFtCec .section-6 polygon,#mermaid-svg-BakeXUjV32WFtCec .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .section-6 text{fill:black;}#mermaid-svg-BakeXUjV32WFtCec .node-icon-6{font-size:40px;color:black;}#mermaid-svg-BakeXUjV32WFtCec .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .edge-depth-6{stroke-width:-4;}#mermaid-svg-BakeXUjV32WFtCec .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-BakeXUjV32WFtCec .disabled,#mermaid-svg-BakeXUjV32WFtCec .disabled circle,#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:lightgray;}#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:#efefef;}#mermaid-svg-BakeXUjV32WFtCec .section-7 rect,#mermaid-svg-BakeXUjV32WFtCec .section-7 path,#mermaid-svg-BakeXUjV32WFtCec .section-7 circle,#mermaid-svg-BakeXUjV32WFtCec .section-7 polygon,#mermaid-svg-BakeXUjV32WFtCec .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .section-7 text{fill:black;}#mermaid-svg-BakeXUjV32WFtCec .node-icon-7{font-size:40px;color:black;}#mermaid-svg-BakeXUjV32WFtCec .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .edge-depth-7{stroke-width:-7;}#mermaid-svg-BakeXUjV32WFtCec .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-BakeXUjV32WFtCec .disabled,#mermaid-svg-BakeXUjV32WFtCec .disabled circle,#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:lightgray;}#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:#efefef;}#mermaid-svg-BakeXUjV32WFtCec .section-8 rect,#mermaid-svg-BakeXUjV32WFtCec .section-8 path,#mermaid-svg-BakeXUjV32WFtCec .section-8 circle,#mermaid-svg-BakeXUjV32WFtCec .section-8 polygon,#mermaid-svg-BakeXUjV32WFtCec .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .section-8 text{fill:black;}#mermaid-svg-BakeXUjV32WFtCec .node-icon-8{font-size:40px;color:black;}#mermaid-svg-BakeXUjV32WFtCec .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .edge-depth-8{stroke-width:-10;}#mermaid-svg-BakeXUjV32WFtCec .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-BakeXUjV32WFtCec .disabled,#mermaid-svg-BakeXUjV32WFtCec .disabled circle,#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:lightgray;}#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:#efefef;}#mermaid-svg-BakeXUjV32WFtCec .section-9 rect,#mermaid-svg-BakeXUjV32WFtCec .section-9 path,#mermaid-svg-BakeXUjV32WFtCec .section-9 circle,#mermaid-svg-BakeXUjV32WFtCec .section-9 polygon,#mermaid-svg-BakeXUjV32WFtCec .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .section-9 text{fill:black;}#mermaid-svg-BakeXUjV32WFtCec .node-icon-9{font-size:40px;color:black;}#mermaid-svg-BakeXUjV32WFtCec .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .edge-depth-9{stroke-width:-13;}#mermaid-svg-BakeXUjV32WFtCec .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-BakeXUjV32WFtCec .disabled,#mermaid-svg-BakeXUjV32WFtCec .disabled circle,#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:lightgray;}#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:#efefef;}#mermaid-svg-BakeXUjV32WFtCec .section-10 rect,#mermaid-svg-BakeXUjV32WFtCec .section-10 path,#mermaid-svg-BakeXUjV32WFtCec .section-10 circle,#mermaid-svg-BakeXUjV32WFtCec .section-10 polygon,#mermaid-svg-BakeXUjV32WFtCec .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .section-10 text{fill:black;}#mermaid-svg-BakeXUjV32WFtCec .node-icon-10{font-size:40px;color:black;}#mermaid-svg-BakeXUjV32WFtCec .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .edge-depth-10{stroke-width:-16;}#mermaid-svg-BakeXUjV32WFtCec .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-BakeXUjV32WFtCec .disabled,#mermaid-svg-BakeXUjV32WFtCec .disabled circle,#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:lightgray;}#mermaid-svg-BakeXUjV32WFtCec .disabled text{fill:#efefef;}#mermaid-svg-BakeXUjV32WFtCec .section-root rect,#mermaid-svg-BakeXUjV32WFtCec .section-root path,#mermaid-svg-BakeXUjV32WFtCec .section-root circle,#mermaid-svg-BakeXUjV32WFtCec .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-BakeXUjV32WFtCec .section-root text{fill:#ffffff;}#mermaid-svg-BakeXUjV32WFtCec .section-root span{color:#ffffff;}#mermaid-svg-BakeXUjV32WFtCec .section-2 span{color:#ffffff;}#mermaid-svg-BakeXUjV32WFtCec .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-BakeXUjV32WFtCec .edge{fill:none;}#mermaid-svg-BakeXUjV32WFtCec .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-BakeXUjV32WFtCec :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 协作模式
编排者 执行者
一个规划 多个执行
交接 Handoff
任务转给下一位
路由 Router
按类型分流
3.1 编排者-执行者(Orchestrator-Worker)
最主流的模式:一个编排者 Agent 负责拆解任务、分配、汇总;多个执行者 Agent 各干一件事。
- 适合:任务能清晰拆成几个子任务(如"做一个功能"→ 写代码 + 写测试 + 写文档)。
3.2 交接(Handoff)
一个 Agent 把任务直接交给另一个 Agent 接手,像"转接客服"。
- 适合:不同专长接力(如"通用客服 → 技术客服"、"销售 → 售后")。
3.3 路由(Router)
一个路由 Agent 先判断任务类型,再分流到对应的专职 Agent。
- 适合:入口统一、分支清晰的场景(如"知识库问答 → RAG Agent / 写代码 → 代码 Agent")。
四、完整实现:编排者 + 执行者
用最主流的"编排者-执行者"模式,写一个最小骨架(逐行讲解):
python
def orchestrator(task: str):
"""编排者:拆任务 → 分配 → 汇总"""
plan = call_llm(f"把这个任务拆成子任务,列出子任务列表:\n{task}")
sub_tasks = parse_subtasks(plan) # 拆成 [子任务1, 子任务2, ...]
results = []
for sub in sub_tasks: # 逐个分配
result = worker(sub, role="执行者") # 每个子任务交给独立的执行者
results.append(result)
# 汇总所有子结果,生成最终答案
final = call_llm(f"根据这些子结果,回答原始任务:\n{task}\n\n子结果:\n{results}")
return final
def worker(sub_task: str, role: str) -> str:
"""执行者:在自己的独立上下文里干一件小事,返回浓缩结果"""
# 关键:这里是一个"干净"的上下文,只包含这一个子任务
result = call_llm(f"你是{role},专注完成下面这一件事,完成后返回简洁的结果摘要:\n{sub_task}")
return result
逐行讲清三个关键设计:
- 编排者负责"拆"和"汇":它只做高层规划(拆任务、汇总结果),不深入细节------所以它的上下文很干净;
- 执行者负责"干" :每个子任务在一个独立的
worker调用里完成,上下文只装这一件事,不互相污染; - 执行者返回"摘要"而非"全过程" :
worker让执行者"返回简洁的结果摘要",这样主 Agent 拿到的永远是浓缩结论,而不是几万 token 的中间过程。
五、多智能体的进阶:状态共享与通信
真实的多智能体系统,还要解决两个问题:
5.1 状态怎么共享?
多个 Agent 需要共享"进展到哪了"(比如"代码已经写完了,该测试了")。通常用一个共享状态(图状态、共享内存、消息队列):
python
state = {"status": "待开始", "artifacts": {}} # 共享状态
def worker(sub_task: str, state: dict):
result = call_llm(f"当前状态:{state}\n完成:{sub_task}")
state["artifacts"][sub_task] = result # 写回共享状态
return result
关键:共享状态要少而精(只放关键结论和状态,别放全过程),否则又回到"上下文爆仓"的老路。
5.2 怎么通信?
Agent 之间通信有两条路:
- 通过编排者中转(星型):所有结果都汇总到编排者,由它分配------简单、可控,但编排者成瓶颈;
- 直接通信(网状):Agent 之间直接传递消息------灵活,但容易失控(消息乱飞)。
生产上星型更常见:可控、易调试。网状只在对时效要求高的场景用。
六、常见坑与避坑指南
| 坑 | 原因 | 解决方案 |
|---|---|---|
| 无限递归 | Agent 之间来回踢皮球 | 设最大轮数 + 编排者强制收敛 |
| 上下文照样爆 | 主 Agent 塞进所有子结果 | 子 Agent 只回浓缩摘要 |
| 状态不一致 | 共享状态没同步 | 状态集中管理 + 版本控制 |
| 拆任务拆太碎 | 子任务过细,通信开销超过收益 | 只在"确实能拆分"时才用多智能体 |
| 通信开销大 | Agent 之间来回传太多 | 星型拓扑 + 减少不必要的往返 |
重要提醒 :多智能体不是银弹。如果单 Agent 能搞定,就别上多智能体 ------多一个 Agent 就多一层通信开销、多一个出错点。Anthropic 的建议始终是"先做能跑通的最简方案"。
七、什么时候用单 Agent,什么时候用多 Agent
| 场景 | 用哪种 |
|---|---|
| 单一职责、流程短 | 单 Agent |
| 长任务、上下文会爆 | 多智能体(子 Agent 隔离上下文) |
| 需要并行探索(多线研究) | 多智能体(并行子 Agent) |
| 需要多种专长接力 | 多智能体(交接/路由) |
判断标准 :任务能不能清晰拆成多个相对独立、可并行、各有专长的子任务?能 → 多智能体;不能 → 单 Agent。
总结:一张图带走
这课的核心,一句话串起来:
- 多智能体 = 一家公司:编排者是经理(拆任务、汇总),执行者是员工(各干一件事)。
- 为什么有效 :每个子 Agent 有独立的上下文窗口,关注点分离------主 Agent 只看到浓缩结论,不"看花眼"。
- 三种模式:编排者-执行者(最主流)、交接(转接专长)、路由(按类型分流)。
- 关键设计:执行者只回"摘要"不回"全过程";状态共享要少而精;通信用星型拓扑可控。
- 别滥用:单 Agent 能搞定就别上多智能体------多一层 Agent 多一层开销和出错点。

三个立即可用的行动:
- 把上一课"写代码"的任务拆成"写代码 + 写测试 + 审代码"三个子任务,用编排者-执行者模式跑一遍;
- 观察执行者返回的内容------强制它"只回摘要",看看主 Agent 的上下文是不是干净多了;
- 给你的多智能体系统加一个"最大轮数"限制,防止 Agent 之间无限踢皮球。
如果这篇对你有帮助,点个赞、收藏一下 ,下一篇我们讲 Agent 安全与护栏------多智能体系统越大,越要考虑防越权、防注入、防失控。
关注我,我会持续更新 AI 应用开发的前沿实战,陪你从单 Agent 一路进阶到多智能体系统。
你在做多智能体时,是不是遇到过"Agent 之间来回踢皮球、任务推不下去"的情况?你是怎么收敛的?评论区聊聊,我挨个回。
(本文多智能体模式参考主流 Agent 框架(LangGraph 等)的通用设计,具体编排方式可替换,以官方文档为准,评论区提醒我。)