LLM核心技术解析:Token、上下文长度与最大输出长度详解
LLM核心技术解析:Token、上下文长度与最大输出长度详解
在使用大语言模型(LLM)时,你是否遇到过输入或输出被限制的情况?这背后涉及三个核心概念:Token、上下文长度(Context Length)和最大输出长度(Max Output Tokens)。本文将通过类比和实例,深入浅出地解释这些技术细节,帮助你更好地理解和使用LLM。
1. Token —— 大模型的“货币”
是什么?Token 是大模型处理文字的最小单位,可以简单理解为“字”或“词”。
怎么算?
中文:1个汉字 ≈1个token(比如“你好”≈2 tokens)。
英文:1个单词 ≈1个token(比如“hello”≈1 token,“chatGPT”可能拆成2 tokens)。
符号/数字:标点、空格也算token(比如“!”或“2024”≈1 token)。
为什么重要?
大模型按token收费(比如API调用)。
输入+输出的总token数不能超过模型的“内存上限”(上下文窗口)。
2. 最大输出长度(Max Output Tokens)—— 模型的“回答字数限制”
是什么?模型单次回复的最大字数。
比如DeepSeek-V3最多输出8K tokens(约8000字)。
可以看到在 DeepSeek 中,无论是推理模型 R1 还是对话模型 V3 他们的最大输出长度均为 8K 。
我们已经知道一个汉字近似的等于一个 token ,那么这 8K 的意思就可以约等于说:一次输出最多不超过 8000 个字
最大输出长度这个概念非常清晰,很好理解,反正就是模型每次给你的输出最多 8000 个字,多了你就别想了,超限制了,人家做不到~~
影响场景:
让模型写长篇小说,如果超过8000字,回答会中途截断。
解决方法:分多次生成(比如先写大纲,再分章节扩写)。
类比:
- 像微信的“语音消息最长60秒”,超了就得分段发。
3. 上下文长度(Context Window)—— 模型的“记忆力”
是什么?模型一次能处理的总字数上限(包括你的输入+它的输出)。
比如DeepSeek-V3支持64K tokens(约6万字)。
看看DeepSeek的官网:https://api-docs.deepseek.com/zh-cn/quick_start/pricing
可以看到无论是推理模型还是对话模型 Context Window 都是 64K
LLM 的 Context Window 指模型在单次推理过程中可处理的全部 token 序列的最大长度,包括:
输入部分(用户提供的提示词、历史对话内容、附加文档等)
输出部分(模型当前正在生成的响应内容)
比如当你打开一个 DeepSeek 的会话窗口,开启一个新的会话,然后你输入内容,接着模型给你输出内容。这就是一个 单次推理 过程。在这简单的一来一回的过程中,所有内容(输入+输出)的文字(tokens)总和不能超过 64K(约 6 万多字)
怎么用?
你输入5万字,模型最多只能输出1万字(因为5万+1万=6万,不能超)。
多轮对话发起时,服务端不记录用户请求的上下文,用户在每次请求时,需将之前所有对话历史拼接好后,传递给对话 AP
上下文截断
多轮对话:每次聊天都会累积token,超过64K时,最早的对话会被“遗忘”(截断)。
类比:
像手机的“运行内存”,开太多APP(长对话)会卡,系统自动关掉最早打开的APP(截断旧内容)。
这是一个非常好的问题!你观察到的现象其实涉及大模型在实际应用中的智能截断机制和工程优化策略。下面我用最直白的语言解释为什么"多轮对话不会立即耗尽64K限制":
1. 真相:模型其实在"边聊边忘"
想象你在和一位记忆力有限的学霸聊天:
他的大脑只能记住最近6万字的对话(64K tokens)
每次新提问时,他会自动丢弃最早期的聊天记录,优先保留最新内容
因此无论聊多久,他始终用"最近的6万字记忆"回答你,而不是累积所有历史
这就是为什么你感觉能无限聊下去——实际上模型在不断遗忘早期内容,只保留最后64K tokens的上下文。
2. 具体如何截断?(3种常见策略)
① 滑动窗口法(最常见)
像手机屏幕只能显示部分聊天记录:
新消息到来时,最早的消息被推出屏幕外
始终只保留最后64K tokens(如下图)
[对话历史] → [超过64K时] → 保留最后64K
┌─────────────┐ ┌─────────────┐
│ 最早的消息 │ │ (被丢弃) │
├─────────────┤ ├─────────────┤
│ ... │ → 截断 → │ 最新64K │
└─────────────┘ └─────────────┘
② 关键记忆提取
高级模型会尝试:
总结早期对话的要点(如"我们之前讨论了登山装备")
丢弃原始长文本,保留摘要
用更少的tokens保留核心信息
③ 分段缓存技术
把超长对话分成多个"段落"
只动态加载最近几个段落到内存
类似阅读长文章时"只看当前页"
3. 为什么用户无感知?
因为这一切发生在服务端:
你看到的聊天界面是完整的
但实际传给模型的只是最后64K tokens
就像视频网站自动降低画质,但用户看到的一直是流畅播放
4. 如何验证这个机制?
你可以做一个实验:
先发送10万字的背景资料(远超64K)
然后问:“我的资料第3页第2行写了什么?”
结果:模型无法准确回答(因为早期内容已被截断)
5. 这对使用者意味着什么?
✅ 正确做法
重要信息要在最近几轮重复强调
超长文档应该先分段处理
主动用"请总结之前的讨论要点"帮助模型记忆
❌ 错误做法
假设模型记得三天前的所有细节
一次性发送超长文本并期待完整理解
上下文窗口(如 64K)是模型处理单次请求的硬限制,输入+输出总和不可突破;
服务端通过上下文截断历史 tokens,允许用户在多轮对话中突破 Context Window限制,但牺牲长期记忆
上下文窗口限制是服务端为控制成本或风险设置的策略,与模型能力无关
典型场景与应对策略
场景类型 配置示例 关键规则 风险与解决方案
短输入+长输出 输入1K tokens设置max_tokens=63K 输入 + 输出 ≤ 64K(1K + 63K = 64K) 风险:输出可能因重复/敏感词提前终止方案:分段生成或降低max_tokens
长输入+短输出 输入60K tokens设置max_tokens=4K 输入 + 输出 ≤ 64K(60K + 4K = 64K) 风险:输出可能不足方案:压缩输入(提取关键段落/摘要)
多轮对话管理 累计历史 ≤ 64K(超出部分截断) 第1轮:10K输入 + 10K输出 → 累计20K第2轮:30K输入 + 14K输出 → 累计64K第3轮:新输入5K → 丢弃最早5K,保留59K历史+5K新输入=64K 风险:早期对话被遗忘方案:重要信息重复或主动清理历史
短输入+长输出:适合生成内容(如文章、代码),但需注意输出质量控制。
长输入+短输出:适合文档分析,需优先压缩输入内容。
多轮对话:动态截断机制保证对话持续,但需主动管理关键信息。
总结:三者的关系
Token= 字/词,是计费单位。
上下文长度= 模型单次处理的“总内存”(输入+输出≤64K)。
最大输出= 模型单次回复的“字数上限”(≤8K)。
举个栗子🌰:
你输入5万字(50K tokens),模型最多只能输出1.4万字(14K tokens),因为50K + 14K = 64K(不能超)。
如果让它输出2万字?不行!因为单次回复上限是8K(约8000字)。
实际建议
✅长文本处理:先压缩(比如摘要关键部分),再让模型分析。
✅多轮对话:重要信息放最后(避免被截断)。
✅生成长内容:分段请求(比如先大纲,再逐段写)。