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
- 项目
- 项目
- 项目
- 项目