Skip to content
0

LLM 运行机制:Token、上下文窗口与采样参数怎么影响输出

原文:JavaGuide - LLM 运行机制 作者:Guide 字数:约 6173 字


一、核心主线

本文围绕 LLM 底层运行机制展开,解决两个核心问题:

  1. Token 与上下文窗口 → 决定成本与效果的上限
  2. 采样参数 → 决定输出稳定性与多样性的调节手段

底层逻辑:自回归生成(Autoregressive Generation) —— 每次只预测下一个 Token,将其加入上下文,循环往复。


二、Token:模型的"阅读单位"

2.1 Token 的本质

对比维度人类阅读LLM 处理
中文逐字阅读子词碎片(不固定字数)
英文逐词阅读子词碎片(可能拆词)

Tokenizer 采用折中方案:高频词保留整体,低频词拆成片段(BPE、Unigram 等子词切分算法)

类比:Token 如同乐高积木,常用词是大块,生僻词用小零件拼

2.2 中英文 Token 消耗差异(关键成本因素)

语言经验估算DeepSeek 官方数据
英文1 Token ≈ 3~4 字符1 字符 ≈ 0.3 Token → 1 Token ≈ 3.3 字符
中文1 Token ≈ 1~2 汉字1 字符 ≈ 0.6 Token → 1 Token ≈ 1.7 字符

成本趋势:新模型词表扩大,中文压缩率提升

  • GPT-4o(o200k_base,~20万词表)
  • Qwen2.5(~15万词表)
  • 但"趋近 1 字 1 Token"仅适用于高频词,不可作为成本估算基准

2.3 实际 Token 化示例

原文:你好,我是 Guide。
切分:[你好] [,] [我是] [Guide] [。]
统计:12 字符 → 5 Token → 压缩比 2.4x

2.4 特殊 Token(隐藏开销)

特殊 Token用途示例
BOS序列开始标记<s>
EOS序列结束标记</s>
PAD批处理填充<pad>
工具调用标记Function Calling 边界<tool_call/>

⚠️ 这些对用户不可见,但计入上下文窗口和计费


三、多模态输入的 Token 开销

图片并非"零成本",会被转换为 Token 矩阵:

模型计算方式1024×1024 图片估算
GPT-4o分辨率 + 细节模式低细节 ~85 tokens / 高细节 ~1105~765 tokens
Claude 3.5缩略图 ~5 / 全图 ~85取决于模式
Gemini按分辨率计算~258 tokens(标准)

工程启示

  • 多模态 RAG 必须纳入图片 Token 预算
  • 仅需 OCR 时,先用专用服务提取文本更经济

四、上下文窗口:极其稀缺的"工作记忆"

4.1 基本概念

  • 标称上限:128K / 200K / 1M 指的是输入+输出的总 Token 上限
  • 实际有效内容远小于标称值(存在大量隐形成本)

4.2 上下文窗口的"隐形占用"

占用项说明
System Prompt调节模型行为的隐藏指令
User Prompt业务数据与指令
多轮对话历史过往消息记录
RAG 检索片段外部知识库补充
工具调用 Schema函数定义与参数结构
格式开销特殊字符、换行、Markdown
模型输出 Token输出也占用窗口!

典型分配示例(16K 结构化输出场景):System 38% | User 31% | 历史 13% | 安全边距 9% | 输出预留 9%

4.3 关键区分

概念含义
上下文窗口(Context Window)输入+输出的总容量
最大生成长度单次输出上限(通常远小于窗口)
  • GPT-4o: max_tokens 最大 16K
  • DeepSeek V3: 最大输出 8K
  • o1 系列: 支持 max_completion_tokens

4.4 思维链模型的特殊处理

DeepSeek-R1 等模型的 reasoning_content(思考过程)默认不进入下一轮上下文,仅 content(最终回答)参与后续对话。

影响说明
✅ 节省窗口无需为思考过程额外占用
⚠️ 需手动处理若后续需参考推理过程,要手动拼接
📋 SDK 差异部分供应商自动处理,需查文档

4.5 长上下文的技术瓶颈

自注意力机制的 O(N²) 复杂度

  • 序列长度翻倍 → 计算需求变为 4 倍
  • TTFT(首字延迟)显著增加
  • 攻击面扩大

优化技术:FlashAttention、GQA/MQA、Sliding Window Attention、Ring Attention(降低开销但未改变理论复杂度)

4.6 上下文溢出的真实表现

现象原因
忽略早期约束System Prompt 距离生成点太远,注意力衰减
"中间丢失"对开头结尾敏感,中间信息召回率低
回答漂移前半段切题,后半段跑题
RAG 失效检索文档过多,关键信息稀释或证据链断裂
成本延迟激增1M 上下文导致 TTFT 和费用大幅上升

五、计费机制与成本优化

5.1 输入/输出 Token 计费差异

输出价格通常是输入的 2~4 倍

模型输入 /1M输出 /1M输出/输入比
GPT-4o$2.50$10.004x
Claude 3.5 Sonnet$3.00$15.005x
DeepSeek V3¥0.5¥2.04x
DeepSeek-R1¥4.0¥16.04x

思维链模型的 reasoning tokens 按输出价格计费,成本更高

5.2 Prompt Caching:降低重复成本

原理:缓存可复用的前缀部分,下次请求相同前缀时按"缓存读取"计费(10%~50% 正常价格)

供应商功能名缓存时长折扣
OpenAIPrompt Caching5~10 分钟~50%
AnthropicPrompt Caching5 分钟~10%
DeepSeekContext Caching10~30 分钟~25%

工程建议

  1. 不变内容放前(System Prompt、工具定义、RAG Context)
  2. 变化内容放后(User Prompt)
  3. 监控 cache_read_tokenscache_creation_tokens

5.3 Token 预算公式

基础公式

window ≥ input_tokens + max_output_tokens

思维链模型调整

window ≥ input_tokens + reasoning_tokens + max_output_tokens

reasoning_tokens 建议按 max_output_tokens 的 2~3 倍预留

反向预算策略(更实用):

  1. 先定 max_output_tokens(结构化输出通常较短)
  2. 输入预留 10%~20% 安全边距
  3. 超预算时"减输入"而非赌模型自我约束:
    • 减少 RAG Top-K 或片段去重
    • 长字段摘要/截断
    • 多段任务拆多次调用

六、采样参数:从 logits 到输出

6.1 核心流程

模型打分(logits)→ softmax 变概率 → 按概率分布采样 → 输出 Token
     ↑___________________________________________|
                    解码参数在此干预

6.2 Temperature:控制"冒险程度"

公式p(t) = softmax(z_t / T)

T 值效果场景
T → 0趋近贪婪解码,最高分概率→100%结构化输出
T < 1分布更尖锐,倾向高概率 Token分析、评审
T = 1保持原始分布默认
T > 1分布更平坦,低概率 Token 易入选创意写作

工程经验值

场景推荐温度备注
结构化提取 / JSON0 ~ 0.3配合 strict schema + 重试
评估 / 分析 / 代码评审0.4 ~ 0.8平衡确定性与多样性
创作类(文案、头脑风暴)0.8 ~ 1.2+承担格式一致性风险

追求确定性的完整配置

  • Temperature=0 + seed 参数(OpenAI/DeepSeek 支持)
  • ⚠️ 但仍可能不一致:模型版本更新、跨区域调用、Top-p < 1

6.3 Top-p vs Top-k:缩小"抽签池"

参数机制特点
Top-k固定保留概率最高的 k 个死板,不随分布自适应
Top-p保留累计概率达 p 的最小集合更常用,自适应调整

示例("今天天气真__"):

候选概率累计
62%62%
不错20%82%
10%92%
糟糕5%97%
  • Top-k=3:保留"好、不错、棒"(固定 3 个)
  • Top-p=0.9:保留"好、不错、棒"(累计 92% ≥ 90%,自动 3 个)
  • 若头部更集中(如"好"占 95%),Top-p 自动只保留 1 个

常见组合

组合效果场景
T=0贪婪解码,完全确定结构化输出、可复现
低温 + Top-p=0.9相对稳定,允许措辞变化分析报告、摘要
中高温 + Top-p=0.95多样性较高,排除极端离谱创意写作、对话

⚠️ 贪婪解码最稳定,但可能更容易陷入重复循环

6.4 停止条件与截断风险

机制性质风险
Max Tokens硬上限强制截断,JSON 缺括号、句子写一半
Stop Sequences软切断设计不当可能提前截断关键字段

思维链模型的特殊注意

  • max_tokens 包含 reasoning + 最终回答
  • 例:max_tokens=8192,思考用 5000,最终回答仅剩 3192

6.5 Penalty 参数:对抗复读

参数机制通俗理解
Repetition Penalty降低所有已出现 Token 概率"说过的词,再说扣分"
Presence Penalty出现过就扣分(不计次数)"鼓励聊新话题"
Frequency Penalty出现次数越多扣分越重"同词说三遍,重罚"

工程陷阱

  • ❌ 结构化输出别加 Penalty:会惩罚必须重复的字段名(如 "name""score"
  • ❌ RAG 问答别加 Presence Penalty:降低对检索内容的忠实度,增加幻觉
  • ✅ 保守建议:不确定时保持默认,用低温+强 Prompt+短输出换稳定性

6.6 思维链模型的参数限制

DeepSeek-R1 / OpenAI o1 等模型

  • ❌ 忽略 temperaturetop_p
  • ❌ 忽略 presence_penaltyfrequency_penalty
  • 原因:设计目标为"自由思考",采用内部固定采样策略

工程建议:通过 Prompt 约束 而非采样参数控制输出格式

6.7 流式输出与首字延迟(TTFT)

维度说明
核心价值改善用户体验,降低 TTFT
常见误解①"更快" → 总耗时不一定下降
常见误解②"更省钱" → Token 计费不变
结构化注意需处理"半成品 JSON"的前端/网关层

6.8 Logprobs:置信度排查

定义:每个生成 Token 的对数概率,越接近 0 越确信

应用场景说明
置信度评估logprob 低的提取结果需人工复核
异常检测监控平均 logprob 突降,提示 Prompt 漂移或数据异常
多候选对比Top-N 候选用于纠错或二次排序

注意:增加响应体积,非所有供应商支持


七、采样参数配置速查表

场景TemperatureTop-pPenalty其他建议
JSON / 结构化输出0 ~ 0.31.0默认Strict Mode + 重试策略
代码评审 / 技术分析0.4 ~ 0.70.9默认结合 CoT Prompt
多轮对话0.6 ~ 0.80.9适度开启控制历史消息长度
创意写作 / 头脑风暴0.8 ~ 1.20.95按需开启接受多样性,做好后处理
思维链模型—(不支持)通过 Prompt 控制

八、核心总结:三个维度的工程权衡

维度核心认知行动要点
Token成本与性能的物理标尺按 Token 算账,非按字数;容量规划用经验估算,精确计费用 API 返回的 usage
上下文窗口极其稀缺的资源严格预算分配:Prompt + RAG + 历史 + 输出预留;超预算时"减输入"
采样参数业务场景的调音台根据容错率定制:JSON 压低温,创意放高温;不迷信默认参数

高阶架构的本质:更好地调度底层 Token,更精准地管理上下文窗口


九、关键工具链接

最近更新