范围:解释 LLM 输出的 logits 是什么、它如何被 Jev(TypeSafe AI)及浏览器 Agent 生态(Browser-Use 的 jev-ultrafast、APUS fast-browser-use)用作直接决策数据,以及为什么"一次前向 + logits 比较"能替代自回归生成。
一、一句话结论
logits 是大模型最后一层输出的原始分数向量——模型对"下一个 token 该是谁"这件事,给词表里每个候选打的分数。它不是概率(有正有负、不归一),但和概率单调对应:比大小关系完全一致,softmax 只是把同一组分数压成 0~1 且总和为 1。
Jev 类架构(以及 jev-ultrafast、fast-browser-use 等复刻实现)的核心动作,就是把这组本来只是生成过程副产品的内部数值,提升为最终答案:把合法候选映射到单个 token,一次前向,直接比较候选 token 的 logits——答案、概率、置信度全都在这一次前向里拿齐。
二、LLM 的输出链条:logits 在哪一环
输入 token 序列 → Transformer 前向计算(prefill / decode) → 输出一个 logits 向量(长度 = 词表大小,Qwen 约 15 万维) → 对 logits 做 softmax(归一化) → 得到"下一个 token 是词表里每个词"的概率分布 → 采样选一个 token,接回输入,再算下一轮(自回归生成循环)要点:
| 概念 | 说明 |
|---|---|
| logits | 最后一层线性投影的原始未归一化分数,一个输出位置一个向量 |
| softmax(logits) | 把分数变成概率分布:非负、总和 1 |
| logprob | log(softmax),OpenAI/vLLM API 里logprobs参数返回的就是它 |
| 自回归 | 每生成 1 个 token 都要再跑一次前向;N 个 token 的回复 = N 次解码 |
关键洞察:模型"想说什么"的信息,在生成第一个 token 之前就已经完整编码在 logits 里了。普通聊天里我们只关心采样结果;但如果是封闭选择题,这一步就足以出答案。
三、为什么 logits 能直接当决策数据
前提是候选答案有限且全部在词表里(“点 A 还是点 B?”“是/否?”“1~5 打几分?”)。此时可以三步走:
- 掩码(mask):把词表 ~15 万维 logits 中不属于合法候选的维度全部砍掉,只留候选对应的几十维;
- 局部 softmax:只在候选集合上归一化,得到概率分布
P(A)=0.12, P(B)=0.85, P(C)=0.03; - 直接比较:argmax 即答案;分布本身(经校准后)即置信度。
这就是 Jev 的Choice基元的底层实现,也是其"零 token 输出、输出免费"卖点的来源——没有生成,就没有输出 token 计费。
Jev 调研里记的"末位 logits 掩码投影到候选槽位 + 局部 Softmax"一句话,完整展开就是这套流程。
四、浏览器 Agent 里的具体做法(jev-ultrafast / fast-browser-use)
浏览器 Agent 的经典痛点:每次决定"点哪个元素",让 LLM 生成一段文本(如{"action":"click","element":"#submit-btn"}),要连续解码几十个 token,慢且 JSON 格式容易出错、需要重试修复。
复刻 Jev 的路线:
- 预处理:解析页面得到所有可交互元素(合法候选集),每个元素映射到词表里的一个特定 token(如给元素 i 复用/新增特殊 token
<elem_i>); - 单次前向:页面文本 + 任务指令喂给模型,只跑一次 prefill;
- 读 logits:在输出位置比较各候选元素 token 的 logits——最高分即目标元素,softmax 后的分布即置信度。
| 收益 | 原因 |
|---|---|
| 快一个数量级 | 省掉整个解码循环,延迟从 O(生成 token 数) 降到 O(1) 次前向 |
| 格式永远正确 | 掩码后非法元素 ID 在数学上概率为 0,不可能输出非法动作,无需修复/重试 |
| 自带置信度 | 候选间 logits 差距大 = 模型确定;差距小 = 犹豫 → 可升级到大模型(System 2)或暂停人工接管,这正是 Jev “confidence-gated routing” 的底层数据 |
| 多问题并行 | 一次前向的 logits 可同时投影到多组候选(“该点哪里?”+“是弹窗吗?”),共享同一次前向计算 |
五、30 秒自测:亲眼看到 logits
用本地 vLLM 端点(http://vllm:38081/v1,OpenAI 兼容 API)即可:请求体加"logprobs": true,响应里每个 token 带logprob(= log-softmax 值)和 top-k 候选的 logprob。那组数字就是模型每一步真实"考虑过哪些词、有多犹豫"的完整记录。
Jev 做的事情,本质就是把这个只用于观察/采样的内部量,直接当作产品输出。
六、边界与注意点
- 只对封闭候选有效:开放式生成题无法掩码投影,仍需自回归解码;
- 候选必须可离散化:每个选项要能对应词表 token(或新增特殊 token),连续值/自由文本不行;
- 校准是另一回事:logits 比较给出的是相对倾向,"概率 0.85 到底可不可信"取决于训练时的校准(Jev 用 RLCD 优化 ECE,开源侧 NanoJev/Laya 各有做法);
- 温度/解码参数影响分布形态:比较相对大小时 softmax 前的 logits 已足够,但要输出"校准概率"需按训练口径固定参数。