UQLM 是一个用于大语言模型(LLM)幻觉检测的 Python 库,基于不确定性量化(Uncertainty Quantification)技术。它面向需要评估 LLM 输出可靠性的开发者与研究者,提供一套响应级置信度评分器,每个评分器返回 0 到 1 之间的置信度分数,分数越高表示输出出错或幻觉的可能性越低。最新版本可从 PyPI 安装。
【主要能力】 UQLM 将评分器分为若干类型:
- 黑盒评分器(基于一致性):通过衡量同一提示多次生成结果之间的一致性来评估不确定性。兼容任意 LLM,无需访问模型内部状态或 token 概率。可用评分器包括:离散语义熵、语义集合数量、非矛盾概率、蕴含概率、精确匹配、BERTScore、余弦相似度,以及通过 CodeGenUQ 提供的代码适配评分器。
- 白盒评分器(基于 token 概率):利用 token 概率估计不确定性,支持单次生成评分,比黑盒方法更快、成本更低,但需要访问 LLM 内部概率,因此并非兼容所有 LLM/API。单次生成评分器包括:最小 token 概率、长度归一化序列概率、序列概率、平均 Top-K token 负熵、最小 Top-K token 负熵、概率边际。自反思评分器:P(True)。多次生成评分器:蒙特卡洛序列概率、一致性置信度(CoCoA)、语义熵、语义密度。
- LLM-as-a-Judge 评分器:使用一个或多个 LLM 评估原始 LLM 响应的可靠性,可通过提示工程和选择评审 LLM 实现高度定制。包括:分类式 LLM 评审、连续式 LLM 评审、李克特量表 LLM 评审、LLM 评审团(Panel)。
- 集成评分器:通过加权平均组合多个单独评分器,产生更稳健的不确定性估计。可固定权重直接使用(无监督),也可训练以获得最优性能(有监督),例如 BS Detector 与有监督 UQ 集成。
- 长文本评分器(声明级):以细粒度方式在声明或句子级别评分。它采样同一提示的多个响应,将原始响应分解为声明或句子,评估每个原始声明/句子与采样响应的一致性。评分后可移除置信度低于指定阈值的声明并重建响应,从而提升长文本生成的事实精确度。包括 LUQ 评分器、基于图的评分器、广义长文本语义熵。
- 代码生成 UQ:提供 CodeGenUQ 专用接口,用于在不执行代码的情况下预测 LLM 生成代码是否功能正确。包含白盒评分器、基于功能等价性的代码适配黑盒评分器,以及反思式自评估评分器;白盒方法与 WhiteBoxUQ 中基于 token 概率的评分器相同。
【使用方式】 UQLM 提供 BlackBoxUQ、WhiteBoxUQ、LLMPanel、UQEnsemble、LongTextUQ、CodeGenUQ 等类。示例中可使用 ChatOpenAI、ChatVertexAI、ChatOllama、AzureChatOpenAI 等任意 LangChain Chat Model。例如 BlackBoxUQ 的 use_best=True 可启用缓解措施,选择不确定性最小的响应。长文本评分中,response 与 entailment 反映原始响应及其响应级置信度,refined_response 与 refined_entailment 是响应精炼后的对应值,claims_data 列包含每条响应的细粒度数据(声明、声明级置信度、是否在精炼中保留)。
【示例与文档】 UQLM 附带完整的示例笔记本和教程,涵盖:黑盒与白盒不确定性量化、单次与多次生成方法、LLM-as-a-Judge 技术、集成方法、语义熵与语义密度等前沿技术、多模态不确定性量化、分数校准。每个笔记本都包含详细说明与可适配的代码示例。官方文档站点提供 API 参考与详细使用说明。
【适用场景】 适用于对 LLM 输出进行幻觉检测、为生成结果提供置信度评分、在长文本生成中做声明级事实性精炼、在代码生成中预测功能正确性,以及构建可定制的多评审集成评估流程。
【限制与依赖】 黑盒评分器需要多次生成,成本与延迟较高(多次生成白盒评分器同样如此);白盒评分器需要访问模型内部概率,并非兼容所有 LLM/API;部分评分器需要多次额外生成。具体安装命令、完整 API、演示与论文引用信息以官方文档与仓库为准,部分细节暂未提供。