LLM 解码、采样与结构化输出底层图谱
从 logits、temperature、top-p、停止条件到 JSON Schema 和约束解码,理解模型怎样把概率分布变成可用输出
阅读定位: 这一页补 AI 底层理解线里经常被跳过的一层:模型已经算出下一步 token 概率之后,系统如何选择 token、控制随机性、停止生成、保证格式,并把文本变成可解析的结构化结果。解码面对的候选来自
Tokenizer / 词表 定义的 token 边界;如果你想先理解 hidden state 怎样经 LM head 变成 logits、softmax、logprob 和 cross entropy,先看
Logits / Softmax / 概率输出。它不替代推理计算页、推理模型页或 Tool Calling 页,而是连接它们的“输出生成层”。
上下文状态
hidden state
→
Logits
每个 token 的分数
→
Softmax
变成概率分布
→
采样策略
temperature / top-p
→
选中 token
追加进上下文
→
循环生成
直到停止
| 概念 | 它是什么 | 工程直觉 | 常见误解 |
| Logits | 模型对词表里每个 token 给出的原始分数 | 还不是概率,只是下一步候选的相对偏好;禁词、logit bias 和结构约束都受 tokenizer 边界影响,细节见 Logits / Softmax | 以为最高 logit 就是唯一答案 |
| Softmax | 把 logits 转成概率分布 | 让系统能在多个候选 token 中按概率选择 | 以为概率高就代表事实正确 |
| Decode loop | 每次只生成一个 token,再把它放回上下文继续下一步 | LLM 的输出是逐步滚出来的,不是一次性写完整篇 | 以为模型先想好全文再输出 |
| Stopping | 遇到结束 token、长度上限、停词或结构完成时停止 | 停止条件是产品稳定性的一部分 | 只调 Prompt,不管 max tokens 和 stop sequence |
| 策略 | 做法 | 适合什么 | 风险 |
| Greedy | 每一步都选概率最高的 token | 格式严格、确定性强、低风险短输出 | 容易机械、局部最优,开放写作不自然 |
| Temperature | 调平或调尖概率分布 | 控制随机性;低温稳,高温发散 | 高温可能胡说,低温也不能保证正确 |
| Top-k | 只在概率最高的 k 个 token 里采样 | 限制候选范围,减少极低概率乱跳 | k 固定,遇到不同分布时不够自适应 |
| Top-p / Nucleus | 只在累计概率达到 p 的候选集合里采样 | 更自适应,常用于开放对话和写作 | p 太高会放进噪声,太低会变死板 |
| Beam Search | 保留多个高分候选序列继续扩展 | 翻译、摘要等较传统序列任务 | 在开放生成里可能重复、乏味,成本更高 |
事实型任务
优先低温、强约束、证据引用和不可回答策略。随机性不能补事实缺口,事实缺口要靠 RAG、工具或人工校验。
创意型任务
可以适当提高温度或 top-p,让模型探索更多表达;但仍要用主题、风格、长度和禁区约束收住边界。
工具参数任务
优先结构化输出、schema 约束和低随机性。参数错一个字段,后面执行层就可能失败或越权。
关键判断:
Temperature 控制的是概率分布的尖锐程度,不是“聪明程度”。高温可能带来新颖表达,也可能放大低概率错误;低温能提高稳定性,但不等于事实更可靠。
| 现象 | 可能原因 | 治理动作 |
| 同一个问题多次答案不同 | 采样随机性、上下文轻微变化、模型版本变化 | 降低温度、固定 seed、记录模型版本和完整 Prompt |
| 答案越写越偏 | 高温、输出太长、缺少中间约束 | 分段生成、加检查点、限制 max tokens、增加 Eval |
| 格式偶发错误 | 自然语言生成不等于严格解析器 | 用 JSON Schema、约束解码、解析失败重试和回退 |
| 模型重复句子 | 解码陷入局部循环或惩罚参数不合适 | 调整重复惩罚、停止条件、输出长度和提示结构 |
结束 token
模型学会在合适位置产生结束标记,但它不总是可靠。长文、代码块、列表和 JSON 尤其需要额外停止治理。
Max tokens
这是成本和延迟的硬刹车。上限太低会截断答案,上限太高会拖慢 decode 并放大跑题风险。
Stop sequence
适合模板化输出和多段协议,但要避免停词和正文内容冲突,否则会提前截断。
为什么输出长度也是系统设计
Decode 阶段逐 token 生成,输出越长,总耗时和费用越高。面向用户的产品要把“回答多详细”变成明确设计:默认简洁、必要时展开、后台任务才允许长输出。
| 层级 | 做法 | 可靠性 | 适合场景 |
| Prompt 要求格式 | 让模型“请输出 JSON” | 最低,容易多解释、漏字段、引号错误 | 原型验证、低风险内部工具 |
| 解析后修复 | 输出后用解析器校验,失败再让模型修 | 中等,依赖重试和修复质量 | 批处理、非实时任务、可容忍重试 |
| JSON Schema / response format | 声明字段、类型、枚举、必填项 | 较高,能把格式约束显式化 | 业务表单、抽取、分类、工具参数 |
| Constrained decoding | 解码时只允许合法 token 序列 | 最高的格式约束,但表达空间受限 | 严格 JSON、DSL、SQL 片段、协议输出 |
| 工具调用协议 | 让模型选择函数并生成参数 | 格式更稳,但执行风险转到工具层 | Agent、工作流、数据查询、外部动作 |
结构化输出的底线:
能被解析只是第一关。真正生产可用还要校验字段语义、权限、枚举、数值范围、幂等键和审计上下文。
| 手段 | 能做什么 | 不能做什么 | 注意点 |
| Logit bias | 提高或降低某些 token 出现概率 | 不能保证复杂策略,也不能真正理解业务风险 | 适合轻量词形控制,不适合当安全系统主体 |
| 禁词表 | 阻止明确词面输出 | 挡不住同义改写、编码绕过和上下文含义变化 | 容易误伤,需要和语义安全模型配合 |
| 安全重写 | 把危险输出改成安全替代 | 不能替代源头拒答、权限控制和人工升级 | 要保留原始 trace,便于审计和复盘 |
| 后置分类器 | 对输出做风险判断和拦截 | 可能漏判,也可能延迟用户反馈 | 要看漏放率、误拒率和高风险样本召回 |
固定变量
评测模型、Prompt、RAG、采样参数时要分开控制。否则你不知道质量变化来自模型能力,还是温度、输出长度或 schema 变化。
看稳定性
同一输入多跑几次,观察答案一致性、格式合法率、引用稳定性和坏例复发率。一次通过不代表线上稳定。
看代价
采样和结构化输出会影响输出 token、重试次数、解析失败率和端到端延迟。质量收益必须和成本一起看。
| 任务 | 建议默认 | 重点监控 |
| 分类 / 抽取 | 低温、schema、枚举、严格校验 | 字段缺失率、解析失败率、误分类 |
| 客服问答 | 低到中温、引用证据、长度上限 | 幻觉率、不可回答识别、用户追问率 |
| 写作 / 头脑风暴 | 中温、top-p、风格约束 | 重复度、跑题率、用户采纳率 |
| 代码补全 | 低温、短输出、语法和测试验证 | 编译率、测试通过率、补全延迟 |
| Agent 工具调用 | 低温、工具 schema、权限确认 | 工具选择准确率、参数合法率、越权拦截 |
| 决策节点 | 必须记录的字段 | 用来排查什么 |
| 采样配置 | decoder_config_id、temperature、top_p、top_k、seed、max_tokens | 线上输出不稳定、评测不可复现、长度异常或成本漂移 |
| 候选裁剪 | candidate_count_before、candidate_count_after、filtered_by_top_p、filtered_by_schema | 候选 token 是被概率截断、schema 约束、禁词还是安全策略过滤? |
| token 选择 | step_index、selected_token_id、selected_logprob、rank_before_sampling、random_draw | 这一步是确定性选择,还是随机采样刚好选中了低概率路径? |
| 停止与修复 | stop_rule_id、finish_reason、parse_error、repair_attempt、continuation_point | 输出结束、截断、修复、续写和格式漂移分别发生在哪里? |
| 回归连接 | generation_id、output_hash、schema_version、eval_case_id、trace_id | 改采样参数、schema 或模型版本后,坏例能否稳定复现和比较? |
误区:低温就不会幻觉
低温只让输出更确定。若上下文没有事实依据,模型仍可能稳定地给出错误答案。
误区:高温等于更有创造力
高温只是放大低概率候选。创造力还依赖任务框架、素材、评价标准和迭代机制。
误区:输出 JSON 就能直接执行
JSON 合法不代表业务合法。执行前仍要做权限、范围、幂等、风险和人工确认检查。
误区:采样参数只影响文风
它还会影响格式稳定性、引用一致性、工具参数、评测复现性、成本和延迟。
这张图在主干里的位置
推理计算解释 token 是怎样被算出来的,这一页解释 token 是怎样被选出来并组织成稳定输出的;推理模型解释为什么某些任务会在测试时多花计算;Tool Calling则把结构化输出进一步变成可审计、可恢复的动作。