339. AgentX:DeepSeek 的 logprobs 到底有什么用?

2026.07.29

·fdeagentx

本文范围:只讲清 logprobs 是什么、有什么用。

先看名字

  • logprobs 可以拆成两部分:
    • log:对数。
    • probsprobabilities,概率。
    • 合起来就是把普通概率换成对数形式来记录
  • 为什么要换一种形式:
    • 模型是个概率服务, 把模型写一句话想成连续经过很多岔路口。
    • 假设前三步选中某个词的概率分别是 80%70%60%,这条完整路线的概率就要计算 0.8 × 0.7 × 0.6
    • 句子越长,需要相乘的数字越多,最后的结果很快就会小到难以计算。
  • log 像换了一本更好算的账本:
    • 连续相乘变成连续相加
    • 概率关系没有变,只是换成更适合计算机累计的写法。

普通 API 结果告诉我模型选了什么;logprobs 还告诉我模型选得有多坚定。

可以联想到以前做可比价时的对数变换:它不改变原来的大小关系,而是把跨度很大的数换成更容易比较和计算的尺度。

一次请求和一次返回

  • 任务:让 DeepSeek 判断一条用户反馈是正面还是负面。
bash
支付按钮点了三次都没反应,钱却扣了。
  • 请求:
    • logprobs: true:返回最终标签的对数概率。
    • top_logprobs: 20:同时返回最可能的候选标签。
json
{
  "model": "deepseek-v4-flash",
  "thinking": {"type": "disabled"},
  "messages": [
    {
      "role": "system",
      "content": "把用户反馈分成 positive 或 negative,只返回标签。"
    },
    {
      "role": "user",
      "content": "支付按钮点了三次都没反应,钱却扣了。"
    }
  ],
  "temperature": 0,
  "logprobs": true,
  "top_logprobs": 20,
  "max_tokens": 3
}
  • 返回(只展示相关字段):
    • message.content:DeepSeek 最终选择的标签。
    • logprobs.content:这个标签及其它候选标签的对数概率。
json
{
  "model": "deepseek-v4-flash",
  "choices": [
    {
      "message": {
        "content": "negative"
      },
      "logprobs": {
        "content": [
          {
            "token": "negative",
            "logprob": -0.083,
            "top_logprobs": [
              {
                "token": "negative",
                "logprob": -0.083
              },
              {
                "token": "positive",
                "logprob": -2.813
              }
            ]
          }
        ]
      }
    }
  ]
}
  • 这一去一回:
    • message.content = negative
      • 告诉我 DeepSeek 最终选了负面
    • negativelogprob = -0.083
      • 转成普通概率大约是 92%
    • positivelogprob = -2.813
      • 转成普通概率大约是 6%
    • logprob 越接近 0,模型越偏向这个候选。
  • 应用怎样使用:
    • 普通返回值只给我 negative
    • 打开 logprobs 后,我还能看到 DeepSeek 明显更偏向 negative,而不是在两个标签之间犹豫。
    • 如果两个标签的分数很接近,就交给人复核。

只记住一个边界

模型选得坚定,不等于模型选得正确。

  • 容易判断错的反馈:
bash
终于能付款了。
  • 为什么仍然可能错:
    • 这句话可能是正面,也可能是在讽刺。
    • 即使 DeepSeek 给出很高的分数,也可能因为缺少上下文而判断错。
  • logprobs 的边界:
    • 可以帮助系统决定自动处理还是人工复核
    • 不能证明一句话客观上一定是正面或负面。

考考你

logprobs 是什么?

它是模型生成 Token 时的对数概率,表示模型对不同候选有多偏向。

为什么要把普通概率换成对数概率?

一句话的概率需要把每个 Token 的概率连续相乘,句子越长,数字越小。取对数后,连续相乘可以变成连续相加,计算机更容易稳定计算。

它和普通返回值有什么区别?

普通返回值告诉我模型选了什么;logprobs 还告诉我模型选得有多坚定。

logprobs 能证明结果正确吗?

不能。它只表示模型更确定,模型仍然可能坚定地判断错。

参考