投票模式:多数决 + 加权 + 辩论
概念速查
投票模式(Voting Pattern)是 Multi-Agent 系统中最基础的共识机制:多个 Agent 各自输出对同一问题的回答,通过聚合函数选出一个最终答案。常见的变体有三种:
| 模式 | 聚合方式 | 适用场景 |
|---|---|---|
| 多数决 | 统计相同答案的 Agent 数量,取最高票 | 答案空间有限(分类、选择题) |
| 加权投票 | 每个 Agent 按权重(历史准确率、专业领域匹配度)折算票数 | 答案质量悬殊(专家 + 新手混合) |
| 辩论投票 | Agent 先公开各自输出,允许互相质疑后重新投票 | 需要深度推理(复杂逻辑、数学证明) |
三种变体的演化路径是:多数决 → 加权 → 辩论,每一步都增加通信开销以换取正确率提升。
底层原理
投票模式有效的前提是一个被反复验证的统计学事实——多数决定理(Condorcet’s Jury Theorem):当每个投票者的正确率 > 0.5 时,随着投票人数增加,多数决的正确率趋近于 1。
核心公式(加权投票):
最终得分(c) = Σ(wᵢ × I(answerᵢ == c)) 其中 wᵢ 是第 i 个 Agent 的权重, I(·) 是指示函数,c 是候选答案。辩论投票在此之上增加了 Agent 之间的信息交换回合:
每一轮辩论相当于一次贝叶斯更新——Agent 观察到其他 Agent 的证据后调整自身的后验概率。
架构设计原则
原则一:独立性与去相关。投票模式最隐蔽的坑是 Agent 之间的相关性。如果多个 Agent 共享了相同的训练数据、同样的 prompt 模板、甚至同一个 LLM 实例,它们的错误会高度相关,多数决定理的前提就不成立。实践中应确保:不同模型的 backbone、不同的 context window、不同的 temperature。
原则二:权重应该动态更新。静态权重设置是一次性的拍脑袋决策。正确做法是通过历史正确率滑动窗口(通常取最近 20~50 轮)计算每个 Agent 的即时可信度。
原则三:辩论轮数要有终止条件。辩论不是辩论赛——没有固定轮数。当相邻两轮的答案收敛率超过阈值(例如 95% 的 Agent 不再改变立场)时,应该提前终止,避免浪费 token。
# agent_voting.py — Python 3.11+# 最小化加权投票和辩论投票实现fromcollectionsimportCounterfromtypingimportAnydefweighted_vote(agents:list[dict[str,Any]])->str:"""agents: [{"answer": str, "weight": float}, ...]"""score:Counter[str]=Counter()forainagents:score[a["answer"]]+=a["weight"]best=score.most_common(1)[0]returnbest[0]defconvergence_reached(agents:list[dict[str,Any]])->bool:"""检查是否超过 95% 的 Agent 不再改变立场"""answers=[a["answer"]forainagents]most_common_count=Counter(answers).most_common(1)[0][1]returnmost_common_count/len(agents)>=0.95defdebate_vote(agents:list[dict[str,Any]],rounds:int=3)->str:for_inrange(rounds):forainagents:a["public"]=a["answer"]# Agent 看到其他 Agent 的证据后修正others=[x["answer"]forxinagentsifx!=a]ifothersanda["answer"]notinothers:a["answer"]=Counter(others).most_common(1)[0][0]ifconvergence_reached(agents):breakreturnweighted_vote(agents)原则四:答案空间不重叠时走加权,重叠时走多数决。如果 Agent 输出的是同构的离散标签(“A/B/C”),多数决最直接;如果输出的是异构的文本段落,需要先用语义相似度聚类,再对同类答案加权。
原则五:成本与收益的边界。投票不是越多越好。经验值:3~5 个 Agent 是甜点区间(正确率提升 10~15%),超过 7 个 Agent 后边际收益急剧下降,而 token 成本线性增长。推理卷气最重的场景(数学、代码、逻辑)适合上辩论模式,事实性问答多数决就够。
何时不该用
投票模式不适合:实时性要求 < 500ms 的场景(串行调用多个 LLM 延迟太高)、单个 Agent 已经 99%+ 准确率的简单任务、Agent 之间没有独立性保证的团队。这时一个 Agent + 自检(Self-Consistency)比多 Agent 投票更省更快。