Page QiView

多 Agent 协作机制:分工、通信与一致性

多 Agent 协作机制:分工、通信与一致性

1. 协作不是把单 Agent 简单并联

多 Agent 的核心难点不是“多几个模型”,而是让多个局部决策形成全局最优。
常见失败来自三类问题:

  1. 分工不清,重复工作。
  2. 通信无约束,信息噪声放大。
  3. 缺乏一致性校验,错误被级联传播。

2. 角色与任务分解

一个可操作的结构是:

  1. Planner:拆解任务并分配子目标。
  2. Specialist:按能力边界处理子任务。
  3. Critic:审查中间结论并给出反例。
  4. 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}} $$

其中:

  1. $Q$:最终质量评分。
  2. $C_{tool}$:工具调用成本。
  3. $C_{comm}$:通信轮次与消息长度成本。
  4. $R_{risk}$:安全与合规风险罚项。

这能避免“无限讨论换一点点精度”的低效协作。

4. 通信协议设计

推荐固定消息槽位,降低歧义:

  1. goal:当前子目标。
  2. evidence:证据或工具结果。
  3. uncertainty:不确定性说明。
  4. request:对其他 Agent 的明确请求。

通信消息结构化后,可做自动审计与回放。

5. 冲突消解与一致性机制

当 Agent 结论冲突时,不能简单多数投票。更稳妥方式:

  1. 证据加权:高可信来源权重更高。
  2. 反事实检查:要求每个候选结论给出可证伪条件。
  3. 仲裁器复核:由 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. 评测协作机制而非只评最终答案

建议至少记录:

  1. 任务成功率与平均成本。
  2. 每次任务的通信轮次。
  3. 冲突率与冲突后修复成功率。
  4. 幻觉传播率(一个错误被多少 Agent 复述)。

8. 实务建议

  1. 先从 2-3 个角色开始,不要一次上 8 个代理。
  2. 对每个角色设“能力边界声明”,减少越权推断。
  3. 为关键任务启用“证据必填”策略,没有证据不允许进入汇总阶段。

多 Agent 协作的本质是机制工程,而不是提示词工程。