大语言模型是否逐Token生成输出?实际工作机制解惑
大语言模型的逐Token生成机制解析
你之前的认知偏差
你之前误以为大模型会一次性生成固定长度的序列(内容不足时用0填充),这是对大模型核心逻辑的误解——大模型的本质是自回归生成,和固定长度输出完全不沾边。
实际生成流程
大语言模型的每一个输出Token,都是基于之前所有内容(包括你的提示词+已生成的Token)逐步计算出来的,具体步骤是:
- 模型先处理你输入的提示词,得到对应的上下文语义表示;
- 基于这个上下文,模型预测下一个概率最高的Token;
- 把刚生成的Token加到上下文里,再重复第二步,直到触发停止条件(比如生成了结束标记、达到设定的最大输出长度)。
这就是为什么llama cpp会逐Token打印——每生成一个就立刻输出,而不是等全部做完。CPU高占用也对应这个过程:每生成一个Token都要跑一次模型的前向计算,输出越长,需要重复计算的次数越多,高占用的时间就越久。
关于ChatGPT网页端和API的差异
- 网页端逐Token输出,一是贴合模型真实的生成节奏,二是能减少用户的等待焦虑,提升体验;
- API默认一次性返回完整结果,是出于批量处理场景的需求,方便开发者直接拿到完整响应,但其实大部分API都支持流式输出(逐Token返回),只是默认没开启而已。
内容的提问来源于stack exchange,提问作者Andrzej Gis
相关产品推荐
相关产品推荐

