cvs-health/uqlm

[JMLR 2026] UQLM: A Python package for LLM hallucination detection using uncertainty quantification

📚 什么是 UQLM?

UQLM (Uncertainty Quantification for Language Models) 是一个 Python 库,可帮助您检测大型语言模型 (LLM) 何时可能产生幻觉——即产生事实错误或缺乏根据的陈述。它通过为每个 LLM 回应附加一个 置信度分数 (0-1) 来实现这一点,分数越高代表模型越值得信赖。


🎯 核心概念

LLM 擅长生成流畅的文本,但它们可能会自信地说出错误的内容。UQLM 将此视为一个不确定性问题:如果模型不确定,置信度分数就应该很低。该库实现了几种最先进的不确定性量化 (UQ) 技术,并将它们封装在易于使用的类中。


🧩 主要组件 (类)

类 功能 典型使用场景
BlackBoxUQ 针对同一个提示生成多个回应,并测量它们的一致性。适用于任何 LLM,因为它只需要生成的文本。 当您能以低成本访问 LLM 并负担额外的 API 调用时。
WhiteBoxUQ 使用模型的 Token 级别概率(例如最小 Token 概率、序列概率)来评分单个生成结果。需要一个能返回 Token 概率的 LLM。 当提供者公开 Token 概率数据(例如 Gemini、OpenAI “logprobs”)时,进行快速、低成本的评分。
LLMPanel 使用一个或多个 LLM 作为评委,阅读原始回应并输出置信度评级。可通过提示词完全自定义。 当您想要使用“模型作为评委”方法,或结合多个 LLM 的意见时。
UQEnsemble 通过加权平均结合多个评分器(黑盒、白盒、评委)。可直接使用,或在小型标记数据集上进行微调以学习最佳权重。 建立稳健、生产就绪的不确定性估计器。
LongTextUQ 将长答案拆解为个别声明,对每个声明进行评分,并可通过删除低置信度声明来优化答案。 需要声明级可靠性的长篇生成(文章、报告)。
CodeGenUQ 专门用于代码生成;在不执行代码的情况下,使用 Token 概率和功能等价评分器来预测功能正确性。 评估生成代码片段的正确性。

⚙️ 如何使用 (快速示例)

from langchain_openai import ChatOpenAI
from uqlm import BlackBoxUQ

# 1️⃣ 选择任何 LangChain 兼容的 LLM
llm = ChatOpenAI(model="gpt-4o-mini")

# 2️⃣ 创建评分器 – 这里我们要求使用 "semantic_negentropy" 黑盒评分器
bbuq = BlackBoxUQ(llm=llm, scorers=["semantic_negentropy"], use_best=True)

# 3️⃣ 在提示列表上执行(每个提示生成 5 次)并获取类似 pandas 的表格
results = await bbuq.generate_and_score(prompts=["What is the capital of France?"],
                                         num_responses=5)
print(results.to_df())

返回的表格包含生成的文本、置信度分数,以及(如果 use_best=True)不确定性最低的回应。


📊 评分器类型 (底层运作原理)

类别 示例评分器 测量内容
黑盒 (基于一致性) semantic_negentropy, non_contradiction, entailment 多个生成结果彼此的一致程度。
白盒 (基于 Token 概率) min_probability, sequence_probability, top-k_negentropy 来自模型自身概率分布的直接统计置信度。
LLM 作为评委 Categorical, Continuous, Likert, Panel 另一个 LLM 阅读答案并判断其真实性。
集成 上述任何评分器的加权平均 结合优势;可在验证集上进行微调。
长文本 (声明级) entailment, graph-based, LUQ 对每个声明/句子评分;可删除低置信度声明。
代码生成 functional_equivalence_rate 估计生成的代码是否符合预期功能。

📦 安装与入门

pip install uqlm   # 从 PyPI 拉取最新版本

该库需要 Python 3.10+,并适用于任何遵循 LangChain 聊天模型接口的 LLM。


📚 文档与学习资源

  • 完整文档: https://cvs-health.github.io/uqlm/latest/index.html – API 参考、教程与疑难排解。
  • 示例笔记本: GitHub 上的 examples/ 文件夹 – 涵盖每种评分器类型、集成微调与长文本优化。
  • Discord 社区: 用于提问与协作的公开 Discord 服务器。

🏆 何时使用 UQLM?

  • 您需要为下游管线提供自动化的、针对每个回应的置信度分数(例如在向用户显示前过滤 LLM 答案)。
  • 您正在处理高风险领域(医疗保健、金融、法律),其中幻觉是不可接受的。
  • 您想要一个随插即用的解决方案,无需编写自己的不确定性逻辑,即可与任何 LangChain 兼容的 LLM 搭配使用。

📖 引用

如果您在研究中使用 UQLM,请引用 JMLR 软件论文:

@article{JMLR:v27:25-1557,
  author  = {Dylan Bouchard and Mohit Singh Chauhan and David Skarbrev ...},
  title   = {UQLM: Uncertainty Quantification for Language Models},
  journal = {Journal of Machine Learning Research},
  year    = {2024},
  volume  = {27},
  pages   = {1--...},
  url     = {https://www.jmlr.org/papers/v27/25-1557.html}
}

总结

UQLM = 一个现成的工具箱,让您能够使用各种经过验证的技术来测量并处理 LLM 的不确定性,从廉价的一致性检查到复杂的集成与声明级优化。使用 pip 安装,选择符合您延迟/成本限制的评分器类,您就能为每个生成的答案获得 0-1 的置信度分数。

相关

  • Dispatch
  • 项目
  • 项目
  • 项目
  • 项目