多 Agent 协作机制:分工、通信与一致性
1. 协作不是把单 Agent 简单并联
多 Agent 的核心难点不是“多几个模型”,而是让多个局部决策形成全局最优。
常见失败来自三类问题:
- 分工不清,重复工作。
- 通信无约束,信息噪声放大。
- 缺乏一致性校验,错误被级联传播。
2. 角色与任务分解
一个可操作的结构是:
- Planner:拆解任务并分配子目标。
- Specialist:按能力边界处理子任务。
- Critic:审查中间结论并给出反例。
- Integrator:合并证据,输出最终答案。
把任务图写成有向图 $G=(V,E)$,每个节点对应可验证子任务。
比“自由对话到结束”的方式更易控、更可复现。
3. 协作中的优化目标
可将系统目标写为:
$$ \max_{\pi} \ \mathbb{E}[Q(\text{answer})] - \lambda_1 C_{\text{tool}} - \lambda_2 C_{\text{comm}} - \lambda_3 R_{\text{risk}} $$
其中:
- $Q$:最终质量评分。
- $C_{tool}$:工具调用成本。
- $C_{comm}$:通信轮次与消息长度成本。
- $R_{risk}$:安全与合规风险罚项。
这能避免“无限讨论换一点点精度”的低效协作。
4. 通信协议设计
推荐固定消息槽位,降低歧义:
goal:当前子目标。evidence:证据或工具结果。uncertainty:不确定性说明。request:对其他 Agent 的明确请求。
通信消息结构化后,可做自动审计与回放。
5. 冲突消解与一致性机制
当 Agent 结论冲突时,不能简单多数投票。更稳妥方式:
- 证据加权:高可信来源权重更高。
- 反事实检查:要求每个候选结论给出可证伪条件。
- 仲裁器复核:由 Critic 或专门 Judge 进行最终裁决。
6. Python 最小协作骨架
from dataclasses import dataclass
from typing import Dict, Any, List
@dataclass
class Message:
goal: str
evidence: str
uncertainty: str
request: str
class Agent:
def __init__(self, name, fn):
self.name = name
self.fn = fn
def run(self, context: Dict[str, Any]) -> Message:
return self.fn(context)
def aggregate(messages: List[Message]) -> Dict[str, Any]:
# 简化示意:真实系统应接入证据评分与来源可信度模型
return {
"goals": [m.goal for m in messages],
"evidence": [m.evidence for m in messages],
"uncertainty": [m.uncertainty for m in messages],
}
7. 评测协作机制而非只评最终答案
建议至少记录:
- 任务成功率与平均成本。
- 每次任务的通信轮次。
- 冲突率与冲突后修复成功率。
- 幻觉传播率(一个错误被多少 Agent 复述)。
8. 实务建议
- 先从 2-3 个角色开始,不要一次上 8 个代理。
- 对每个角色设“能力边界声明”,减少越权推断。
- 为关键任务启用“证据必填”策略,没有证据不允许进入汇总阶段。
多 Agent 协作的本质是机制工程,而不是提示词工程。