详细解释
Logprobs(对数概率,字段名一般是 logprobs / top_logprobs) 是大模型 API 里一个”懂的人特别喜欢,不懂的人永远不会开”的高级参数。默认情况下,API 只返回”模型最后采样出来的那个 Token 序列”——但模型在每一步其实对词表里所有 Token 都算了一个概率,只是默认不告诉你。Logprobs 就是把这些概率(取对数后)暴露给你。
为什么用对数概率而不是概率本身?两个原因:
- 数值稳定:100K 词表里每个词的概率都极小(可能 1e-6 量级),连乘很快下溢到 0;对数把乘法变加法,稳定。
- 和 困惑度 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 能给你冰山一角 |
| 结构化输出的 fallback | JSON 解析失败时,退回第二步次优 Token 重新生成,避免整段重来 | 给你提供了”次优解”的备选池 |
唯元智创 对接入方全量开放 logprobs 与 top_logprobs 字段(只要底层模型支持),并且在兼容层对不原生支持的厂商做了一层近似回填,让你跨厂商使用同一套代码。
数字直觉:logprob 大小对应多大概率?
| logprob(自然对数 ln) | 概率值 ≈ | 体感描述 |
|---|---|---|
| -0.010 | 99.0% | 几乎确定 |
| -0.105 | 90% | 很有把握 |
| -0.693 | 50% | 一半一半 |
| -1.609 | 20% | 不是很确定 |
| -2.996 | 5% | 很没把握 |
| -6.908 | 0.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 异常 + 内容审核模型”三层一起用,召回率能提升不少。