FEATURED · 精选文章

多LLM协作不确定性量化:基于协作熵(CoE)的评估框架与实践

发布时间 / 2026/8/25 11:32:21
来源 / 创域科博编辑部
栏目 / 资讯中心
多LLM协作不确定性量化:基于协作熵(CoE)的评估框架与实践 1. 项目概述当多个LLM“组团”干活如何判断谁更靠谱最近在折腾一些多智能体Multi-Agent或者多LLM协作的系统比如让GPT-4、Claude、Gemini几个模型一起讨论一个问题或者让一个LLM负责规划另一个负责执行和校验。玩着玩着就发现一个挺头疼的问题当这几个“大脑”给出的答案不一致甚至互相矛盾时我该信谁的更麻烦的是有时候它们看起来“一致”地给出了一个答案但这个答案本身可能错得离谱只是它们“集体犯错”了。这种不确定性Uncertainty如果处理不好整个系统的可靠性就无从谈起。这其实就是“不确定性量化”Uncertainty Quantification, UQ在多LLM系统Agentic Multi-LLM Systems中的核心挑战。传统的单一模型不确定性评估方法比如直接看模型输出的置信度分数Logits或者用蒙特卡洛Dropout采样在多模型协作的场景下往往不太灵光。因为每个LLM都是一个复杂的“黑盒”它们的内部置信度不仅不透明而且不同模型之间的置信度尺度还不一样直接比较就像用米尺和市尺去量同一个东西没有可比性。于是一个叫CoECollaborative Entropy协作熵的思路进入了我的视野。它不依赖于任何单个模型的内部参数而是通过分析多个LLM在协作过程中输出结果的“不一致性”或“分散程度”来反向推断整个系统对当前任务的不确定性。简单说它不是问每个模型“你有多确定”而是观察一群模型“你们吵得有多凶”。吵得越凶熵值越高说明这个问题越不确定如果大家异口同声熵值很低那要么是问题很简单要么就是大家集体掉进了同一个陷阱——这时CoE还能结合其他信号帮我们识别出这种“一致性幻觉”。这个项目我就想深入聊聊CoE这套方法论。它不是什么现成的开源工具包而是一种评估框架和设计理念。我会结合自己搭建多LLM工作流的经验拆解CoE的核心思想、怎么计算、如何融入到智能体协作的流程中以及最重要的——在实际应用中会遇到哪些坑怎么避开。2. CoE的核心思想从“个体自信”到“群体分歧”要理解CoE得先跳出对单个模型的依赖。我们过去评估一个LLM的回答可能会看它生成答案时最后一个token的probability或者用一些prompt技巧让它自我评估“请为你刚才的回答给出一个1-10分的置信度”。但这些方法在多模型系统里问题很大尺度不统一模型A说的“90%置信度”和模型B说的“90%置信度”可能根本不是一回事。过度自信LLM普遍存在过度自信的问题即使错了也可能给出高置信度。黑盒性对于商用API模型如GPT-4我们根本拿不到内部的logits或概率分布。CoE的思路则另辟蹊径。它的理论基础是一个问题的真实不确定性会体现在多个独立或半独立的求解者即多个LLM给出的答案的差异上。如果所有智能体在经过充分、独立的思考后依然汇聚到同一个答案那么这个答案的可靠性就高如果答案五花八门则说明问题本身模糊、复杂或者信息不足不确定性自然就高。这里的关键词是“协作”和“熵”。协作指的是多个LLM以某种结构如辩论、评审、投票共同处理一个任务。它们会交换信息、相互质疑或补充但最终会保留各自的判断或输出一个集体结论。熵信息论中的概念用来度量系统的混乱度或信息量。在这里我们计算的是多个LLM输出结果的熵。输出结果越分散、越不一致熵值就越高代表不确定性越大。CoE的计算本质上就是设计一种方法将多个LLM在协作后的输出状态可能是一组答案、一系列投票、或一个经过讨论的决策分布转化成一个可以计算的熵值。2.1 从理论到公式如何量化“分歧”假设我们有一个由N个LLM智能体组成的系统共同处理一个查询Q。经过一轮协作可能是简单的并行回答也可能是复杂的多轮辩论每个智能体 i 产生了一个输出 O_i。这个输出可能是一个具体的答案文本如“巴黎是法国的首都”。一个从候选答案集合A{a1, a2, ..., ak}中的选择。一个对可能答案的概率分布如果模型能生成的话。CoE的计算根据输出形式的不同而有所变化。最常见和实用的场景是分类或选择题因为答案空间是离散且有限的便于计算。场景一离散答案投票这是最直观的情况。假设问题Q是一个选择题有K个选项。每个LLM智能体独立或在有限信息交互后选择其中一个选项。我们统计N个智能体选择各个选项的频数。 设选择选项j的智能体数量为 n_j则选项j的频率为 p_j n_j / N。 那么这次协作的熵即CoE值可以用经典的香农熵公式计算H - Σ (p_j * log(p_j))求和遍及所有p_j 0的选项H值接近0表示几乎所有智能体都选择了同一个选项群体意见高度一致不确定性低。H值较大表示智能体的选择很分散没有明显共识不确定性高。注意这里的log通常以2为底这样熵的单位是“比特”。但底数不是关键重要的是熵值的相对大小用于比较不同问题之间的不确定程度。场景二自由文本生成的语义聚类对于开放式的文本生成任务输出O_i是自由文本直接比较字符串是否相等没有意义。这时CoE的计算就需要引入文本相似度度量。 基本步骤是嵌入Embedding将每个智能体生成的文本 O_i 通过一个文本嵌入模型如OpenAI的text-embedding-3-small或开源的BGE模型转化为向量表示 e_i。聚类Clustering对这些向量进行聚类分析如简单的K-means或基于密度的DBSCAN。聚类的数量和质量反映了答案的分散程度。基于聚类的熵计算将每个聚类看作一个“观点类”。假设最终形成了C个聚类每个聚类c的大小包含的智能体数量为 m_c。那么可以计算 p_c m_c / N。同样利用香农熵公式计算H - Σ (p_c * log(p_c))。聚类数量C越多或者聚类大小越均匀没有占主导的大聚类熵H就越大表明智能体们“各说各话”系统不确定性高。场景三带权重的协作输出在更复杂的协作机制中不同智能体的意见权重可能不同。例如在辩论后系统可能根据每个智能体论据的质量为其分配一个可信度权重 w_iΣ w_i 1。或者系统最终综合所有意见形成了一个对可能答案的概率分布 π。 此时CoE可以直接定义为这个最终分布π的熵H - Σ (π_j * log(π_j))。 这个熵值度量了系统最终决策的犹豫程度。即使前期争论激烈但如果最终能收敛到一个很尖锐的分布其中一个π_j接近1那么CoE值也会很低。2.2 为什么CoE比单一模型置信度更可靠无需模型内部权限CoE只依赖于模型的最终输出文本完全不需要访问模型的logits、概率或内部状态。这使得它对于通过API调用的闭源模型和开源模型同样适用。自然抵消偏差不同的LLM有不同的训练数据偏差和推理弱点。当多个模型协作时它们的个体偏差有可能在集体决策中相互抵消或暴露出来。一个高CoE值可能正揭示了某个问题触及了多数模型的认知盲区。检测“一致性幻觉”这是CoE一个非常强大的能力。有时候多个LLM由于共同的训练数据缺陷或提示词误导会一致地给出一个错误答案例如在一些反直觉的数学或逻辑问题上。如果只看一致性低熵我们会误以为很确定。但CoE可以结合**答案本身的“惊奇度”**来综合判断。例如对于一个常识问题如果所有LLM都给出了一个违背常识的相同答案那么即使熵为0这个“0熵”事件本身也是高度异常的提示我们需要警惕。我们可以设定一个基线对于某类问题正常低熵答案应落在某个质量范围内超出范围的低熵同样代表风险。3. 将CoE集成到多LLM智能体系统中的实操设计理解了CoE是什么接下来就是怎么用它。你不能把它当作一个事后的分析工具而应该将其设计为智能体协作流程中的一个有机组成部分实时地为决策提供不确定性信号。3.1 系统架构设计模式一个集成了CoE评估层的多LLM智能体系统其工作流程大致可以抽象为以下环节用户查询 | v [查询分析与任务路由] -- (确定协作策略) | v [并行调用多个LLM智能体] -- (每个智能体可能角色不同、提示词不同) | v [收集原始输出] ---------- [计算CoE熵值] | | v v [协作机制] -------------- [不确定性信号反馈] (如辩论、投票、评审) (高熵触发复审/人工介入) | v [产生最终输出] ---------- [输出 不确定性报告]关键点在于“不确定性信号反馈”这个箭头。CoE计算模块需要被设计成轻量且快速的以便在协作机制如多轮辩论的中间环节就能提供反馈。例如第一轮并行生成后立即计算CoE如果熵值非常高说明大家分歧巨大可以直接触发一个“调解者”智能体介入或者增加一轮针对分歧点的专项辩论。在每一轮辩论后计算CoE观察熵值的变化趋势。如果熵值随着辩论轮次增加而显著下降说明协作有效共识正在形成。如果熵值居高不下或反而上升可能意味着问题本身有歧义或者需要引入外部知识如工具调用、知识库检索。3.2 不同协作模式下的CoE实现模式A投票委员会Voting Committee这是最简单的模式。N个智能体独立回答问题然后进行多数投票。CoE的计算就在投票结果统计后自然完成。实操步骤准备N份略有差异的提示词System Prompt以鼓励多样性。例如让一些智能体“扮演保守的专家”另一些“扮演创新的思考者”。并行调用N个LLM可以是同模型不同参数也可以是不同模型。收集N个答案。对于分类问题直接统计。对于生成问题使用嵌入模型聚类将答案归为几类然后统计每类“票数”。计算香农熵H。设定阈值τ需通过实验校准。如果 H τ则采用得票最多的答案如果 H τ则触发“高不确定性处理流程”。注意事项提示词工程是关键如果所有智能体的提示词过于相似可能会人为降低熵值制造“一致性幻觉”。需要刻意引入适度的角色或视角差异。成本考量N越大评估越稳健但API成本也线性增长。通常N3到5是一个不错的起点。模式B辩论与迭代提炼Debate Iterative Refinement智能体们进行多轮对话相互挑战、辩护最终各自更新答案或共同产出一个答案。实操步骤初始化每个智能体给出初始答案。计算初始CoE(H0)。进入辩论循环 a. 随机或按策略选择一个智能体作为“挑战者”让其审视其他智能体的答案并提出质疑。 b. 被质疑的智能体进行辩护或修改答案。 c. 一轮结束后重新计算当前CoE(H_t)。 d. 判断终止条件例如H_t 下降到阈值以下或连续两轮H_t变化小于某个Δ或达到最大轮次。循环结束后根据最终答案分布输出结果和最终的H_t。实操心得辩论过程的提示词设计非常复杂要防止智能体陷入循环争吵或偏离主题。通常需要引入一个“主持人”智能体来管理流程。CoE在这里不仅是不确定性的度量也成为了辩论过程的收敛性指标。我们可以绘制H_t随轮次变化的曲线用来分析和优化辩论机制的有效性。模式C分层评审与仲裁Hierarchical Review Arbitration智能体分为“执行者”和“评审者”。执行者生成答案评审者进行评估、打分或提出修正。CoE可以计算在评审意见的一致性上。实操步骤M个“执行者”智能体生成初始答案。K个“评审者”智能体对每个答案进行评审输出“通过/需修改/拒绝”或一个分数。对于每个执行者的答案统计评审者的评价分布。例如针对答案A有3个“通过”1个“需修改”1个“拒绝”。这个分布本身就可以计算一个熵值反映了评审团对该答案意见的一致性。系统可以设定如果一个答案获得的评审意见熵值很低例如一致通过则直接采纳如果熵值高争议大则送入“仲裁者”另一个更强大的LLM或人工进行最终裁决。优势这种模式将“答案生成”和“答案评估”的不确定性分开了。即使生成答案的环节分歧大但评审环节如果能高效达成共识同样可以可靠地筛选出好答案。3.3 阈值τ的校准如何设定“不确定性红线”CoE熵值H是一个相对值没有绝对的“好”或“坏”。阈值τ的设定需要根据具体任务、模型组合和风险承受度进行经验校准。方法一基于历史数据的百分位。收集一批已知正确答案的测试问题运行你的多LLM系统计算每个问题的CoE值。然后观察那些系统回答错误的问题它们的CoE值分布如何。将τ设定在错误样本CoE值的某个低百分位例如25%。这意味着当新问题的CoE值低于这个阈值时其风险错误概率与你历史错误案例中风险较低的那部分相似。方法二模拟高不确定性场景。故意构造一些模糊、矛盾或信息不足的查询输入系统记录下这些“明知道不确定”的问题所产生的CoE值范围。将这个范围的下限作为τ的参考。当新问题的CoE值落入这个范围时就应触发警告。重要原则τ不应是一个固定值而可以是一个动态范围或与答案本身的属性联动。例如对于医疗、法律等高风险领域τ应设置得更低更敏感对于创意生成等低风险领域τ可以放宽。此外如果低熵对应的答案本身在语义上就很反常例如用另一个嵌入模型计算答案与常识库的相似度极低即使H很低也应视为高不确定性情况。4. 实战演练构建一个带CoE评估的问答系统下面我将用一个简化的Python示例演示如何为一个基于多模型例如GPT-4和Claude的问答系统集成CoE评估。我们假设任务是一个封闭领域的多选问答。import openai import anthropic import numpy as np from collections import Counter import math # 初始化客户端 (请替换为你的API密钥) openai_client openai.OpenAI(api_keyyour-openai-key) anthropic_client anthropic.Anthropic(api_keyyour-claude-key) class MultiLLMQAWithCoE: def __init__(self, models_config): models_config: 列表定义每个智能体。例如 [ {name: GPT-4, client: openai, model: gpt-4-turbo}, {name: Claude-3-Opus, client: anthropic, model: claude-3-opus-20240229}, {name: GPT-4-保守版, client: openai, model: gpt-4-turbo, system_prompt: 你是一个谨慎的专家...} ] self.agents models_config def query_agent(self, agent, question, options): 向单个智能体提问返回其选择的选项字母如A,B,C prompt f请回答以下选择题。只输出选项的字母不要输出其他任何内容。 问题{question} 选项 A. {options[0]} B. {options[1]} C. {options[2]} D. {options[3]} 你的选择是 if agent[client] openai: response openai_client.chat.completions.create( modelagent[model], messages[ {role: system, content: agent.get(system_prompt, 你是一个有帮助的助手。)}, {role: user, content: prompt} ], temperature0.3, # 较低的温度使输出更确定 max_tokens5 ) answer response.choices[0].message.content.strip().upper() # 简单清理只取第一个出现的A-D字母 for ch in answer: if ch in [A, B, C, D]: return ch return X # 解析失败标记 elif agent[client] anthropic: response anthropic_client.messages.create( modelagent[model], systemagent.get(system_prompt, 你是一个有帮助的助手。), messages[{role: user, content: prompt}], max_tokens5, temperature0.3 ) answer response.content[0].text.strip().upper() for ch in answer: if ch in [A, B, C, D]: return ch return X else: raise ValueError(fUnsupported client: {agent[client]}) def calculate_coe(self, answers_list): 计算协作熵。answers_list是选项字母的列表。 # 过滤掉解析失败的X valid_answers [a for a in answers_list if a ! X] if not valid_answers: return 0.0 # 所有都失败不确定性极高这里返回0或一个特殊值需根据业务定义 counter Counter(valid_answers) total len(valid_answers) entropy 0.0 for count in counter.values(): p count / total entropy - p * math.log2(p) # 以2为底计算香农熵 return entropy def ask_with_uncertainty(self, question, options, uncertainty_threshold0.5): 主流程询问所有智能体计算CoE并根据阈值决定最终答案。 返回最终答案、CoE值、以及每个智能体的回答详情。 all_answers [] agent_details [] print(f问题: {question}) for agent in self.agents: answer self.query_agent(agent, question, options) all_answers.append(answer) agent_details.append({agent: agent[name], answer: answer}) print(f - {agent[name]}: {answer}) coe self.calculate_coe(all_answers) print(f协作熵(CoE): {coe:.3f}) # 决策逻辑 if coe uncertainty_threshold: # 低不确定性采用多数投票 valid_answers [a for a in all_answers if a ! X] if valid_answers: final_answer Counter(valid_answers).most_common(1)[0][0] confidence 高 else: final_answer 无法确定 confidence 极低 else: # 高不确定性需要特别处理 final_answer 高不确定性-需人工复核 confidence 低 # 这里可以触发更复杂的流程如调用仲裁者、进行第二轮辩论等 result { final_answer: final_answer, coe_value: coe, uncertainty_level: confidence, agent_responses: agent_details, all_answers: all_answers } return result # 配置和运行示例 if __name__ __main__: config [ {name: GPT-4-默认, client: openai, model: gpt-4-turbo}, {name: Claude-3-Sonnet, client: anthropic, model: claude-3-sonnet-20240229}, {name: GPT-4-严谨模式, client: openai, model: gpt-4-turbo, system_prompt: 你是一个极其严谨的科学家在没有绝对把握时倾向于选择不确定。请仔细分析题目中的每一个词。} ] qa_system MultiLLMQAWithCoE(config) # 示例问题1一个相对确定的问题 question1 光在真空中的传播速度是多少 options1 [约每秒30万公里, 约每秒10万公里, 约每秒100万公里, 速度可变] print(--- 示例1 ---) result1 qa_system.ask_with_uncertainty(question1, options1, 0.5) print(f系统最终决定: {result1[final_answer]} (不确定性: {result1[uncertainty_level]})\n) # 示例问题2一个可能模糊或有陷阱的问题 question2 以下哪种动物是卵胎生的 options2 [大熊猫, 鸭嘴兽, 海马, 鸵鸟] # 海马是雄性育儿但属于卵生。严格说某些鲨鱼是卵胎生这里选项都模糊。 print(--- 示例2 ---) result2 qa_system.ask_with_uncertainty(question2, options2, 0.5) print(f系统最终决定: {result2[final_answer]} (不确定性: {result2[uncertainty_level]})\n)这个示例展示了核心流程初始化多智能体配置了三个智能体其中两个使用不同的基础模型GPT-4和Claude第三个GPT-4被赋予了更严谨的系统角色以引入多样性。并行查询与收集同时向三个智能体发送问题收集它们的答案选项字母。计算CoE基于三个答案计算香农熵。如果答案一致如三个都是A熵为0如果各选各的A, B, C熵达到最大值 log2(3) ≈ 1.585。基于阈值的决策设定一个阈值这里示例是0.5。如果熵低于阈值认为不确定性低采用多数投票结果如果熵高于阈值则标记为高不确定性触发更复杂的处理流程示例中简化为返回需人工复核。5. 避坑指南与进阶思考在实际部署CoE框架时你会遇到一些预料之中和预料之外的问题。5.1 常见陷阱与解决方案陷阱一成本激增多LLM系统本身就意味着数倍于单模型的API调用成本。CoE的计算虽然本身不贵主要是内存计算或简单的嵌入模型调用但为了获得可靠的熵估计你需要足够多的智能体样本N不能太小。同时为了降低“一致性幻觉”风险你可能需要为不同智能体设计不同的提示词这增加了开发和测试的复杂度。解决方案分层抽样不是所有查询都需要全量智能体。可以设计一个“侦察兵”机制先用一个轻量级模型或少量智能体快速评估查询的难度例如通过初步的CoE预计算。对于看似简单、一致性高的查询直接采用结果或只用少数智能体复核对于初步评估就分歧大的查询再启动完整的多智能体协作流程。缓存与复用对于常见或相似的查询可以缓存智能体的回答和计算出的CoE值避免重复计算。使用小模型在非关键路径上可以使用更便宜、更快的模型如GPT-3.5-Turbo Claude Haiku作为智能体成员与主力大模型混合编排降低成本。陷阱二答案对齐与标准化难题对于自由文本生成任务如何判断两个答案“相同”或“不同”是CoE计算的最大挑战。简单的字符串匹配不行用嵌入模型聚类则严重依赖于所选嵌入模型的质量和领域适应性。解决方案任务设计尽可能将任务形式化为选择题、判断题或分类题从根本上规避对齐问题。分阶段评估对于生成任务可以分两步走。第一步让智能体生成关键要素如关键词、实体、结论主张对这些离散要素计算CoE。第二步再对完整的、高不确定性的文本进行深入分析或人工复核。集成专用评估模型训练或微调一个小的“答案等价性判别模型”专门用于判断两个文本答案在特定任务背景下是否语义一致。这比通用的嵌入模型更精准。陷阱三阈值τ的过拟合与动态性在测试集上校准的阈值τ换到真实生产数据上可能就不准了。数据分布漂移Data Drift是机器学习系统的常见问题CoE系统也不例外。解决方案在线学习与自适应持续监控生产环境中的决策结果。当系统因低不确定性而自信地给出答案但后续反馈如用户点踩、人工审核表明答案是错误时记录下该查询的CoE值。用这些数据动态调整阈值τ或建立一个“错误-CoE”关系的预警模型。使用分位数而非固定值不设定一个固定的熵阈值而是设定一个“不确定性百分位”。例如始终将CoE值最高的20%的查询标记为高不确定性。这样阈值能自适应数据分布的变化。陷阱四协作过程引入的偏差如果协作机制设计不当可能会压制少数派的正确定见导致系统过早收敛到一个错误的低熵状态。例如在辩论中表达能力强的模型可能主导话语权而不是正确性高的模型。解决方案匿名化处理在投票或评审阶段隐藏答案是由哪个模型生成的避免模型“品牌”效应带来的偏差。加权投票根据智能体在历史任务中的表现为其分配不同的投票权重。但要注意这需要持续的性能评估和更新。引入“魔鬼代言人”故意设置一个角色其任务就是挑战主流意见确保反面观点得到充分表达从而在协作中暴露潜在问题避免群体思维。5.2 CoE的延伸应用场景CoE的思想不仅可用于评估最终答案的不确定性还可以在智能体协作的各个环节发挥作用规划阶段的不确定性评估让多个LLM为同一个任务制定执行计划计算这些计划在步骤、工具调用顺序上的熵值。高熵值意味着任务规划路径不明确可能需要更详细的需求澄清或更频繁的人工检查点。工具调用选择评估当智能体需要调用外部工具如计算器、搜索引擎、代码解释器时可以让多个“顾问”智能体建议应调用哪个工具。如果顾问们对工具选择分歧很大高CoE可能说明当前问题超出了现有工具链的能力范围或者问题表述不清。持续学习与系统自诊断长期跟踪不同领域问题上CoE的分布变化。如果某个以往很稳定的领域突然CoE值普遍升高可能预示着外部世界发生了变化如出现了新的信息范式或者模型的知识出现了集体性老化提醒我们需要更新知识库或重新评估模型。5.3 对未来的展望超越熵的协作不确定性度量香农熵是CoE一个强大而简洁的起点但它并非唯一选择。在实践中我们可以根据具体需求引入更复杂的度量基于Brier分数的度量如果智能体能输出概率分布可以计算Brier分数它同时衡量了“校准性”和“锐度”比单纯的熵更能反映预测质量。基于分歧的深度学习不确定性方法借鉴深度学习中的“深度集成”Deep Ensemble和“证据深度学习”Evidential Deep Learning思想我们可以将每个LLM视为一个“基学习器”然后研究它们输出之间的分歧如何更好地表征认知不确定性Epistemic Uncertainty。结合外部知识的验证CoE度量的是内部一致性。我们可以将其与外部一致性验证结合起来形成一个二维的不确定性评估矩阵。例如X轴是CoE内部一致性Y轴是答案与权威知识库的匹配度外部一致性。一个“低CoE低外部匹配”的答案集体性错误和一个“高CoE高外部匹配”的答案有争议但可能新颖正确将得到完全不同的处理策略。在我自己的项目中引入CoE框架最大的收获不是它总能给出正确答案——没有系统能做到这一点——而是它让系统变得诚实。它让系统能够明确地告诉我“对于这个问题我们内部吵翻了天你得小心点”或者“我们看起来达成了一致但这个一致结论有点反常建议你再查查”。这种对自身认知局限性的量化感知是构建可靠、可信、可解释的AI系统的关键一步。它把AI从“总是给出一个答案”的黑箱向“能评估答案可靠性”的合作伙伴推进了一步。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻