惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
About on SuperTechFans
MongoDB | Blog
MongoDB | Blog
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
aimingoo的专栏
aimingoo的专栏
B
Blog
博客园 - 聂微东
博客园_首页
D
DataBreaches.Net
F
Fortinet All Blogs
小众软件
小众软件
M
MIT News - Artificial intelligence
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
The GitHub Blog
The GitHub Blog
大猫的无限游戏
大猫的无限游戏
Apple Machine Learning Research
Apple Machine Learning Research
Microsoft Azure Blog
Microsoft Azure Blog
I
InfoQ
F
Full Disclosure
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
腾讯CDC
Y
Y Combinator Blog
Google DeepMind News
Google DeepMind News
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园 - 【当耐特】
Simon Willison's Weblog
Simon Willison's Weblog
云风的 BLOG
云风的 BLOG
A
Arctic Wolf
C
Cyber Attacks, Cyber Crime and Cyber Security
G
Google Developers Blog
B
Blog RSS Feed
Attack and Defense Labs
Attack and Defense Labs
W
WeLiveSecurity
N
News | PayPal Newsroom
Recent Announcements
Recent Announcements
AI
AI
人人都是产品经理
人人都是产品经理
J
Java Code Geeks
V2EX - 技术
V2EX - 技术
TaoSecurity Blog
TaoSecurity Blog
S
Security Affairs
Martin Fowler
Martin Fowler
Webroot Blog
Webroot Blog
P
Palo Alto Networks Blog
S
Schneier on Security
Latest news
Latest news

博客园_首页

Plist 二进制格式 Milvus 和 PGVector,哪个更好? OpenClaw 已过时?在 VS Code 中运行 Hermes Agent! 第30篇文章:一个大三计科生的自白 Manim如何在数学公式中完美显示中文? Docker 部署 RocketMQ 5 并发编程核心概念辨析 C#事务处理最佳实践:别再让“主表存了、明细丢了”的破事发生 CLI 是什么?为什么大厂突然集体卷命令行? 【从0到1构建一个ClaudeAgent】协作-自主Agent UIImageView 设置图片不生效的原因排查 最小二乘问题详解20:无先验约束下的增量式SFM自由网平差 痞子衡嵌入式:大话双核i.MXRT1180之XIP应用里借助MU实现可靠Flash IAP的方法 AI Chat 封装, SemanticKerne.AiProvider.Unified 已发布 Windows下右键编辑js文件无法打开记事本——在注册表中使用环境变量 在后台服务中使用 Scoped 服务,为什么总是报错? H200 安装驱动并使用sglang启动模型 wireshark 抓包Trap上报告警内容 我用 AI 辅助开发了一系列小工具(2):图片压缩工具 [A Primer On MC and CC] 2.1 Memory Consistency 1 - 指令重排序和 SC 模型 Oracle数据库SCN推进技术详解与实践指南 玩转控件:封装个带图片的Label控件 Claude Code 4.7 真正该升级的不是模型,而是你的工作流 前端小白一句话,AI 帮我做了个颜值拉满的桌面媒体播放器。当代码不再是门槛,一句话编程就是现实。 5. WorkBuddy: 小龙虾的灵魂三件套,让你的小龙虾不只是工具 SQLite 分片方案实战:三种分片策略的深度对比 告别简陋 UI!一款基于 Fluent Design 和基于 WinUI 的开源免费、现代化的 Avalonia UI 控件库 关于二进制排列组合枚举的总结 AI开发-python-LangGraph框架(3-27-LangGraph从零实现大模型智能决策工作流) ElasticSearch主分片和副本分片概念详解 【002】HTTPS 粗解:证书、TLS 握手与对后端配置的影响 Hermes Agent 一周暴涨五万 Star,但我劝你别急着追 明明连接的是Redis的DB0,为什么能查到DB3的数据? 【从0到1构建一个ClaudeAgent】协作-Agent团队 熟悉电子元器件之后,电子小白下一步该怎么走? MAF快速入门(23)通过C#类定义Skills .NET 高级开发 | 手写一个对象映射框架 FastAPI数据库ORM怎么选?我肝了三个Demo后,终于不再纠结了 mysqldump 参数拾遗:在遗忘与铭记之间 C# .NET 周刊|2026年3月5期 Claude code入门 - 陈彦斌 一文学习入门 ThingsBoard 开源物联网平台 GitHub 热门项目 | 2026年04月16日 如何为GIT设置全局勾子,为每次提交追加信息 Number.isFinite和isFinite与isNaN()和Number.isNaN的区别 PortSwigger SQL注入LAB2 推荐一个测试人必备的Skills,从功能到性能全搞定(附详细实操和安装下载方式) 筑基期:掌握Odoo基础核心知识点02(Odoo XML 开发方式详解) GLM模型这么火,咱们用vllm也咧一个呗! 深入理解 AbortController:从底层原理到跨语言设计哲学 字符串学习笔记 多租户系统框架的基础模块设计和分析设计 Apache SeaTunnel Zeta 为什么能做到“又快又稳”? AI开发-python-LangGraph框架(3-26-LangGraph基本概念及第一个简单样例) Vue 3 组件通信,别只会用 Props 和 Emits 了,这几个狠活儿你得看看 ElasticSearch7.X版本配置密码 用Manim实现动态交点计算--从一个动点问题说起 团结引擎+Addressable+Instant Game打包抖音小游戏 function call 实战:让 LLM 自动判断 pod 异常、调用日志工具并完成故障分析 bubseek —— 让 Agent 的足迹,变成团队的洞察 通过 C# 读取并导出 PDF 书签 如何用 GitHub Actions 实现 Steam 自动化发布 【从0到1构建一个ClaudeAgent】并发-后台任务 .NET 高级开发 | 定制 ASP.NET Core 框架 电子小白:什么是运算放大器(运放) zero2Agent:面向大厂面试的 Agent 工程教程,从概念到生产的完整学习路线 堆上的ORW HC32F460 USB CDC通信异常:非对齐访问异常排查 20260413-Hyperbridge 攻击事件:发生在默克尔山上的验证绕过 那些喊着AI 要淘汰你的人,正在靠你的焦虑赚大钱! 深度学习进阶(八)Swin Transformer 最小二乘问题详解19:带先验约束的增量式SFM优化与实现 SnapTranslate 3.0 正式发布:全局划词翻译 + 完整英语学习闭环,一站式搞定查词、记词、复习 工作的意义、工作的困难认知再思考 .NET + AI 进阶实战:基于类的技能开发 - 打造可治理的 Agent 能力模块 【从0到1构建一个ClaudeAgent】规划与协调-技能 上周热点回顾(4.6-4.12) 电子小白的工具三件套:面包板、杜邦线、万能板 单表五亿数据的查询优化 | Mysql、StarRocks 2. WorkBuddy:从“我是谁”到“帮我干活” C# 如何减少代码运行时间:7 个实战技巧 基于HelixToolkit.SharpDX 渲染3D模型 - 笺上知微 从零开始的双臂具身VLA起源及现阶段发展综述 - SkyXZ 记对 xonsh shell 的使用, 脚本编写, 迁移及调优 - pluvium27 受够了Vibe Coding的失控?换个起点,让AI事半功倍 从开始配置漏洞环境到漏洞复现流程 - 難しい 关于10年工作经验的程序员对OpenClaw的实战经验分享以及看法 - 虚无境 Any metadata 的内存布局 C# .NET 周刊|2026年3月2期 - InCerry 我帮你测过了,测试圈排名第二的 Skill 依然很牛逼 Skill Discovery | 无监督技能发现的经典工作总结 - MoonOut 上下文工程是什么?过时了么?一文讲明白! - 一枫说码 开了 TUN 模式还是直连?90% 的人都踩过这个坑 AScript扩展多种脚本语言 - rockey627 AI 学习笔记:Agent 的记忆机制 你能被装进一个文件里吗?——7 万人把同事"蒸馏"成了 AI - 我没有三颗心脏 Claude Code 通关手册(七):给 AI 装上技能包——Skills 完全指南 - 暮色之狐 在浏览器中快速编辑代码:VSCode Web 集成实践 - Newbe36524 蒸馏自己 skill?基于 Deepseek 的蒸馏器,丐版蒸馏方式,简单便捷 - To_Carpe_Diem Spring AI Aliababa和AgentScope,哪个更好? - 苏三说技术
LLM核心参数配置指南:原理篇
AI-Frontiers · 2026-04-20 · via 博客园_首页

原文:https://mp.weixin.qq.com/s/C46jhKFNAhiIuri9d8_MsA
欢迎关注公zh: AI-Frontiers

3年,从0到全球领跑:万字长文拆解DeepSeek大模型技术演进

从ResNet到mHC:DeepSeek重构残差连接,额外开销仅6.7%,附复现代码

收藏!LLM开发全链路:5大步骤+15大框架,从数据治理到RLHF一文通关

收藏!LLM-RL训练框架:3大流派+6大框架,一文搞定

万字长文解读Qwen进化史:27篇论文深度复盘Qwen模型家族

在上一篇,我们以烹饪火候为类比,从感性的角度系统讲解了LLM API核心参数的的作用、场景化调优方法,强调了参数是控制输出精准度、创造性、多样性与成本的关键旋钮。

比如文中通过智能客服、内容创作、数据分析三类典型场景说明不同参数组合的适配逻辑,逐一拆解temperature、top_p、frequency_penalty、presence_penalty、max_tokens等核心参数的取值范围与效果,并结合代码示例与常见问题,给出实用建议,但并未给出底层原理,即参数调整为什么会带来不同的效果。

本篇将针对上一篇中的核心参数,从数学公式的角度为大家解释,参数的配置对模型到底意味着什么。

一、核心背景:Next Token Prediction

0

LLM 的强大能力相信已家喻户晓:写代码、吟诗作对、做PPT、写报告,无所不能。当剥开 LLM 的技术外壳,你会发现核心逻辑很简单:玩一场永无止境的「词语接龙」游戏。

如上面的架构图所示,LLM 的本质就是 Next Token Prediction(下一个词预测)。它并不理解文字背后的深意,而是通过海量数据的「喂养」,掌握了人类语言的概率分布。当输入一句话,LLM 会像一个超级输入法,根据已经给出的词,在后台疯狂计算成千上万个备选词出现的几率,筛选那个最「顺理成章」的接下去。

实现该过程的精确控制,需要归功于图中顶部的那个数学魔法「Softmax 函数」。

\[\begin{align} \sigma(\mathbf{z})_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}} \end{align} \]

该公式把模型输出的一堆数字,转换成「所有候选词的概率分布」,我们来拆成下公式(1)的计算过程:

  • \({z}_i\) :也叫 Logits,即上图中 「Linear Layer」的输出分值,「Linear Layer」通过矩阵运算,得到每个词的原始得分\({z}_i\)\({z}_i\)可以是任何实数,数值越大,代表模型认为这个词出现的可能性越高。

  • \(e^{z_i}\) : 这个式子会放大高分词与低分词的差距,让模型更倾向于选 「更合理的词」。我们来举例说明,比如两个词 \(z_i=10, z_j=1\),经过exp后, \(e^{z_i}=e^{10}=6374.31, e^{z_j}=e^{1}=2.72\),两者从原来的10倍差距放大到2343.49。

  • \({\sum_{j=1}^{K} e^{z_j}}\): 所有词的分数之和,其作用是让所有词的概率加起来刚好等于 1,就像我们说「这几个词里,句号有 70% 的概率,逗号有 20%,其他词加起来只有 10%」。

以上图中中输入「LLMs are cool」为例,模型经过「Linear Layer、Softmax 函数」运算后,映射为一组总和为 1 的概率分布:接「.」的概率可能是 80%,接「!」的概率是 15%,其他符号的概率为5%。通过这种方式,原本枯燥的数字转化成了模型对下一个词的「信心指数」。每预测出一个词,LLM 就会把这个词加入到输入序列里,再次循环上述过程。

二、核心参数讲解

2.1 temperature(温度)

该参数值越小,输出结果越确定;值越高,生成内容越随机、多样且富有创造性,取值范围 0~2,默认值为 1。

这是最核心的参数,直接作用于模型最后一层 Softmax 函数

4

Linear Layer 输出的是逻辑得分(Logits),通过 Softmax 函数 转化为概率分布。加入Temperature ( \(T\) ) 后的候选词的概率分布

\[\begin{align} \sigma(\mathbf{z})_i = \frac{e^{{z_i} / T} }{\sum_{j=1}^{K} e^{{z_j}/T}} \end{align} \]

假设 Linear Layer 输出三个词的原始 logits ,即\({z}_i\)为:[10, 2, 1]

  • \(T < 1\) :拉大高分和低分之间的差距。概率分布变得尖锐,模型会非常保守地选择那个概率最高的词。以取\(T=0.1\)为例, \({{z_i} / T}\) 分别为 [100, 20, 10],差距被急剧放大,经过公式(2) Softmax 函数后,\(\sigma(\mathbf{z}) \approx [1, 0, 0]\),概率分布变得极度尖锐,输出稳定、确定、忠于事实。

  • \(T > 1\) :缩小差距。概率分布变得平滑,原本概率较低的词也有了翻身的机会,模型变得「有创意」或「胡言乱语」。以取\(T=10\)为例, \({{z_i} / T}\) 分别为 [1, 0.2, 0.1],经过公式(2) Softmax 函数后,\(\sigma(\mathbf{z}) \approx [0.539, 0.242, 0.219]\),概率被拉平,三个词都有明显机会被选中,输出更随机、更多样。

2.2 frequency_penalty(频率惩罚)

frequency penalty 会按 token 在提示与回复中已出现的次数,对下一个待生成 token 施加比例惩罚;数值越高,重复出现的 token 概率越低,从而减少回复中的词汇重复。数值范围 -2.0~2.0,默认 0

5

在原始 Logit 值上减去一个偏移量

\[\begin{align} Logit_{new} = Logit_{old} - (count \times frequency_penalty ) \end{align} \]

其中,\(count\) 为候选词已出现次数,出现次数越多 → 扣得越多 → 概率越低 → 越不容易重复。

假设现在要生成下一个词,候选词是:

  • 我:已出现 3 次

  • 今天:已出现 1 次

  • 开心:已出现 0 次

假设 Linear Layer 输出三个词的原始 logits ,即\({z}_i\)为:[5, 4, 3],我们分三类情况来讨论 frequency_penalty 的大小对候选词的概率分布的影响

  • frequency_penalty=0\({z_i}\) 分别为 [5, 4, 3],经过公式(2) Softmax 函数后,\(\sigma(\mathbf{z}) \approx [0.665, 0.245, 0.024]\),模型很容易选择之前重复的词「

  • frequency_penalty=0.5\({z_i}\) 分别为 [5−0.5×3, 4−0.5×1, 3−0]=[3.5, 3.5, 3],经过公式(2) Softmax 函数后,\(\sigma(\mathbf{z}) \approx [0.38, 0.38, 0.24]\),候选词「」被明显打压,不再一家独大。

  • frequency_penalty=1.0\({z_i}\) 分别为[5−1×3, 4−1×1, 3]=[2, 3, 3],经过公式(2) Softmax 函数后,\(\sigma(\mathbf{z}) \approx [0.15, 0.42, 0.43]\),候选词「」概率变得很低,几乎不会再重复。

需要注意:

  • temperature:缩放所有 logit,抹平 / 放大差距

  • frequency_penalty:只针对出现过的词做减法,专门防重复

2.3 presence_penalty(存在惩罚)

presence penalty 同样对重复词施加惩罚,但与 frequency penalty 不同,其惩罚力度固定,同一 词无论出现 2 次还是 10 次,惩罚均相同,可避免模型过度重复用词。高值利于生成多样创意文本,低值则让内容更聚焦。数值范围 -2.0~2.0,默认 0。

6

与 frequency_penalty 类似,也是在原始 Logit 值上减去一个偏移量

\[\begin{align} Logit_{new} = Logit_{old} - (mask\times presence\_penalty ) \end{align} \]

其中,\(mask\) 是一个布尔开关。如果候选词在之前出现过至少一次,则 \(mask=1\) ;否则,\(mask=0\)

假设现在要生成下一个词,候选词是:

  • 我:已出现 3 次

  • 开心:已出现 0 次

假设两个词的原始 logits ,即\({z}_i\)为:[5, 5],我们分三类情况来讨论 presence_penalty 的大小对候选词的概率分布的影响

  • presence_penalty =0(无惩罚)\({z_i}\) 分别为 [5, 5],经过公式(2) Softmax 函数后,\(\sigma(\mathbf{z}) \approx [0.5,0.5]\),对候选词的选择没有影响

  • presence_penalty =0.8(调高)\({z_i}\) 分别为 [5−0.8,5]=[4.2,5],经过公式(2) Softmax 函数后,\(\sigma(\mathbf{z}) \approx [0.31,0.69]\),新词明显更可能被选。

  • presence_penalty =-0.5(调低 / 奖励)\({z_i}\) 分别为 [5+0.5,5]=[5.5,5],经过公式(2) Softmax 函数后,\(\sigma(\mathbf{z}) \approx [0.62,0.38]\),就候选词「」被鼓励重复。

与 frequency_penalty 类似,presence_penalty 只针对出现过的词做减法,专门防重复。

7

2.4 top_p(概率截断)

top_p(与 temperature 同属核采样)可控制模型输出的确定性:需准确、事实性答案时调低参数,追求多样化响应则调高参数。取值 0~1,默认值为 1。

8

top_p 是动态的。它将词项按概率降序排列,只在累加概率达到 \(p\) 的最小集合中采样。

假设候选词排序后概率为:0.5, 0.25, 0.15, 0.06, 0.04(总和 = 1),讨论不同取值的影响:

  • top_p=0.5(调低):累加为0.5 → 刚好达标,只保留[0.5]→ 输出完全确定

  • top_p=0.8(中等):累加为 0.5+0.25+0.15=0.9 ≥0.8, 保留前 3 个词→ 输出自然、多样适中。

  • top_p=0.95(调高):累加几乎到全部保留,几乎所有词→ 输出更随机、创意更强。

2.5 max_tokens(最大生成长度)

通过调整 max length 控制 LLM 生成的 token 数量,设置该值能避免冗长无关回复,同时控制成本。

max_tokens(max length)是控制大语言模型生成长度的核心参数,其数学本质:设定模型生成 token 的最大步数 N,当生成过程达到第 N 个 token 时强制终止,不改变每一步的概率分布与采样逻辑。调低 max_tokens 会缩小最大步数 N,使输出更简短克制,但易出现内容截断不完整;调高 max_tokens 则扩大 N,允许输出更完整、详细、篇幅更长的内容,同时会增加 token 消耗与调用成本。

max_length(max_tokens)在大语言模型底层以自回归生成循环的步数上限实现。模型每生成一个 token 即完成一次前向推理与采样,同时计数器加 1;当计数器达到 max_length 时,生成循环被强制终止,不再进行后续推理。该机制属于生成过程的控制逻辑,不改变模型的概率分布、logit 计算或采样策略,仅通过限制生成步数控制输出长度,调低会提前截断输出,调高则允许生成更长内容并消耗更多资源。

2.6 stop(停止标志)

stop 可为字符串或字符串列表,模型遇到指定标志时会立即停止生成。例如设置 stop=\["\n\nHuman:"\],可在对话模型准备生成下一轮用户提示时强制停止。合理设置能避免跑题与多余输出,默认无强制停止符,模型会按内置停止符或 max_tokens 耗尽结束生成。

9

Stop(停止标志)在 LLM 自回归生成过程中,以实时文本后缀匹配的方式实现。模型每生成一个 token 并解码为文本后,会检查当前输出文本末尾是否包含预设的停止字符串;若命中任一停止序列,生成循环立即强制终止。该机制属于生成过程的控制逻辑,不改变模型推理、概率分布与采样策略,仅通过字符串匹配触发提前停止;设置更多停止序列会让输出更易提前结束、更克制,减少冗余与跑题。

模型依然是一步生成 1 个 token,流程如下:

  1. 初始化

    1. 输出 tokens = []

    2. 输出文本 = ""

    3. step = 0

    4. stop_sequences = ["\n", "###", "结束", "用户:"]

  2. 进入生成循环

① 模型推理 → 采样 → 得到下一个 token t

② 将 t 加入输出 tokens

将 tokens 解码为完整文本

④ step + 1

判断当前输出文本的末尾是否包含任意 stop sequence

1) 如果 **包含** → **立即 break,停止生成**


2) 如果 **不包含** → 继续循环

⑥ 同时判断:是否达到 max_length → 达到停止生成

⑦ 同时判断:是否生成结束符 → 停止生成

  1. 最后一步:

    截断停止后,把命中的 stop sequence 从输出中删掉(可选)返回干净文本。

和 max_length 一样,stop属于生成控制逻辑,不是数学采样参数。

2.7 n(返回结果数量)

n 就是让模型并行执行 n 次独立的自回归生成流程,最终返回 n 份彼此无关的完整结果。默认 1。

10

n(返回结果数量)在大语言模型底层通过并行批量执行多次独立自回归生成实现。模型接收参数 n 后,会创建 n 组相互独立的生成状态,共享输入提示词的编码与推理,并行执行采样、长度控制、停止序列检查等流程;所有路径生成完成后,返回 n 份彼此独立的文本结果。n 仅控制生成的副本数量,不改变模型推理逻辑、概率分布与采样策略,调高 n 会线性增加输出 token 消耗与计算成本。

从计算流来看,当 n > 1 时,推理引擎并不是串行地运行 n 次生成任务,而是将单个用户请求在批处理维度上进行了逻辑扩展。

  • Prompt Sharing(前缀共享):在 Pre-fill(预填充) 阶段,模型仅对输入 Prompt 进行一次特征提取。但在 Decoding(解码) 阶段,引擎会克隆出 n 个独立的隐向量副本。

  • 并行采样(Parallel Sampling):在每一轮自回归迭代中,GPU 实际上是在处理一个 Batch Size = n 的批次。对于每一个副本,采样器会根据当前的Temperature、Top-p等参数独立进行随机抽样,产生 n 条独立的生成路径。

和 best_of 参数的区别

12

定义与输出目标

  • n返回全部n条结果,即你要求模型生成 n 个结果,模型就实实在在地返回 n 个结果给用户。适用于多样性场景,比如写诗时想要 5 个不同的版本供你挑选。

  • best_of优中选优。模型在后台生成 best_of 个结果,但返回其中得分最高的那几个(通常由 n 决定返回数量,且要求 best_of >= n)。适用于需要最准确的答案(如代码或逻辑推理),但希望模型多试几次,挑个最靠谱的。

背后的计算

  • n:只负责采样,不负责评价。每条路径是平权的,引擎不关心哪条更好。

  • best_of:引入了评价函数。对于生成的每一条序列,引擎会计算其累积对数概率,系统会根据这个分数对 best_of 条路径进行排序,剔除掉那些概率较低(可能是胡言乱语)的序列,只保留前 n 个高分结果。

累积对数概率的数学公式可简单理解

\[\begin{align} total\_{score} = score_{old} + log \sigma(\mathbf{z})_i \end{align} \]

即对于生成序列中的每个新 Token,就将新的对数概率加进去,其中 \(\sigma(\mathbf{z})_i\)为公式(1)计算的概率。

在实际工程(如 best_of)中,直接使用累积和会导致一个问题:长文本的得分总是比短文本低(每多生成一个 Token,就是在总分里加上一个值为负的对数概率)。为了公平竞争,推理引擎通常会对总分进行长度归一化处理:

\[\begin{align} \text{Final\_Score} = \frac{\sum \log(P_i)}{L^\alpha} \end{align} \]

其中,\(L\) 是序列长度,\(\alpha\) 是惩罚因子(通常在 0.6 到 1.0 之间)。

对于best_of的进一步解释,可参考下面的例子

11

候选序列 生成路径 累积对数概率 解释
路径 A \["I", "am", "fine"\] -1.2 + (-0.5) + (-0.1) = -1.8 最高分 (最符合统计学逻辑)
路径 B \["I", "is", "good"\] -1.2 + (-2.8) + (-0.9) = -4.9 中得分
路径 C \["I", "be", "well"\] -1.2 + (-4.5) + (-1.5) = -7.2 低得分 (语法概率极低)

2.8 stream(流式输出)

13

stream(流式输出)是大语言模型的传输层控制机制,不改变自回归生成的推理、采样与概率分布逻辑。底层实现为:模型每生成一个 token,立即通过长连接以数据块(chunk)形式实时推送给客户端,而非等待全部生成完成后一次性返回。开启 stream 可降低首包响应延迟,提升交互体验,但生成步数、token 消耗、计算成本与非流式模式完全一致。

三、总结

本篇从底层原理出发,以 Next Token Prediction 为核心,拆解了 LLM API 核心参数的作用:从 Linear Layer、 Softmax 函数出发,系统解析了 temperature、top_p、frequency_penalty、presence_penalty 对概率分布的调控逻辑,以及 max_tokens、stop、n、best_of、stream 对生成流程与输出形式的控制机制,揭示了各参数如何通过精准干预模型计算节点,实现对输出确定性、多样性、长度与成本的灵活调节。

14