对数概率

Logprobs (Log Probabilities)

Logprobs 是大模型对每个候选 Token 分配的概率的对数值(通常以 e 或 2 为底);API 暴露 logprobs 字段允许你拿到模型对「最可能的 Top-K 个 Token」各自打分,用于备选答案、置信度估计、困惑度计算、红队检测。

详细解释

Logprobs(对数概率,字段名一般是 logprobs / top_logprobs 是大模型 API 里一个”懂的人特别喜欢,不懂的人永远不会开”的高级参数。默认情况下,API 只返回”模型最后采样出来的那个 Token 序列”——但模型在每一步其实对词表里所有 Token 都算了一个概率,只是默认不告诉你。Logprobs 就是把这些概率(取对数后)暴露给你。

为什么用对数概率而不是概率本身?两个原因:

  1. 数值稳定:100K 词表里每个词的概率都极小(可能 1e-6 量级),连乘很快下溢到 0;对数把乘法变加法,稳定。
  2. 困惑度 PPL 直接挂钩:PPL 本质就是”平均负 log 概率的指数”——你拿到 logprobs 就能自己算出这段文本在当前模型下的 PPL。

典型 OpenAI 兼容请求写法:

resp = client.chat.completions.create(
    model="gpt-4o-mini", messages=msgs,
    logprobs=True,          # ✅ 返回每个被选中 Token 的 logprob
    top_logprobs=5          # ✅ 同时返回每步前 5 名候选的 logprob(可选 0~20)
)

响应字段大致形如(每一步):

{
  "token": "北京",
  "logprob": -0.182,        // 选"北京"的对数概率 ≈ e^-0.182 ≈ 83.3%
  "top_logprobs": [
    {"token": "北京", "logprob": -0.182},
    {"token": "上海", "logprob": -2.104},   // ≈ 12.2%
    {"token": "广州", "logprob": -3.980},   // ≈ 1.86%
    ...
  ]
}

5 个典型应用场景

场景做法为什么需要 logprobs
置信度 / 幻觉检测如果一步的最高 logprob 特别低(比如 < -3.0,即概率 < 5%),说明模型”没把握”,这一步可能在胡编模型采样出来的词并不代表它有把握,低 logprob + 高熵 = 大概率幻觉
多候选 N-best 生成从 top_logprobs 展开前 5 条路径,最后选一条综合分最高的回答比纯 beam search 便宜,又比单次采样质量高
自定义 PPL 计算(在你自己的测试集上)对真实文本逐位取它的 logprob,求平均再取指数不需要拿开源模型重跑,直接用闭源 API 的 logprobs 就能测 PPL
红队/越狱检测如果生成的某些敏感词 logprob 特别高但没被采样出来,说明模型”差点说出来”——可以作为风险信号前置拦截纯看输出你看不到”它在想什么”,logprobs 能给你冰山一角
结构化输出的 fallbackJSON 解析失败时,退回第二步次优 Token 重新生成,避免整段重来给你提供了”次优解”的备选池

唯元智创 对接入方全量开放 logprobstop_logprobs 字段(只要底层模型支持),并且在兼容层对不原生支持的厂商做了一层近似回填,让你跨厂商使用同一套代码。

数字直觉:logprob 大小对应多大概率?

logprob(自然对数 ln)概率值 ≈体感描述
-0.01099.0%几乎确定
-0.10590%很有把握
-0.69350%一半一半
-1.60920%不是很确定
-2.9965%很没把握
-6.9080.1%基本瞎蒙

经验线:如果你生成的长文本中超过 20% 的 Token logprob < -2.0(概率 < 13.5%),这一段大概率质量不行——要么语句不通,要么事实性错误。可以用这个规则在输出侧自动拦截。

常见问题

开了 logprobs 会更贵 / 更慢吗?
价格(每百万 Token)不变。性能上多一次”把 logprob 从 GPU 搬到 CPU 并序列化”的开销,非流式大约慢 5%–10%;流式 + top_logprobs>5 传输体积会明显变大,建议生产场景 top_logprobs 设 1–3 就够用。
所有模型都支持 logprobs 吗?
不是。Claude 原生不对外暴露 logprobs;部分开源推理框架关闭了 logprobs 以省显存;Gemini 部分版本需要单独申请权限。唯元智创 的兼容层对不支持原生 logprobs 的厂商,会用一个”近似打分”策略返回估算值(用于置信度阈值判断够用,但不要拿它做精确 PPL 计算)。
logprob 能用来检测 Prompt 注入/越狱吗?
可以做辅助信号,但不是单独银弹。常见做法:把”正常回答模式”的 logprob 分布做基线,如果某一步某个”敏感/违规词”在 top_logprobs 里且概率异常高(比如 >1%),就触发二次审核。组合”输入侧关键词 + 输出侧 logprob 异常 + 内容审核模型”三层一起用,召回率能提升不少。