大模型Tokens与上下文限制解析:contextLength和max_tokens的区别
1. 大模型的 Tokens 是如何统计的1.1 Token 的定义Token 是语言模型处理文本的基本单位通常对应一个词、子词或字符具体取决于模型的分词器Tokenizer。示例英文模型如 GPT使用 BPEByte Pair Encoding分词“hello” 可能拆分为 1 个 token“unhappy” 拆分为 “un” “happy” 两个 token中文模型通常每个汉字 ≈ 1-1.3 个 token1.2 Tokens 消耗的计算方式类型说明示例输入 Tokens(prompt_tokens)用户 Prompt包含指令、上下文、问题等被分词器分词后的总 Token 数prompt 你好世界分词器可能输出 4-6 个 tokens输出 Tokens(completion_tokens)模型生成的回复文本被分词后的 Token 数回复 你好可能 2-3 个 token总消耗 Tokens(total_tokens)输入 Tokens 输出 Tokens上例 6 3 9 tokens2. 为什么区分输入 Tokensprompt_tokens和输出 Tokenscompletion_tokens2.1 技术根源模型推理的计算特性不同阶段计算方式资源消耗特点输入阶段Prompt Encoding前向传播 KV Cache 缓存一次性处理全部输入 tokens消耗显存存储 key/value 矩阵输出阶段Token Decoding自回归生成 缓存复用每生成一个新 token只需向前推理 1 层计算量 每 token 独立处理2.2 资源瓶颈分析输入 Tokens→ 显存瓶颈KV Cache 占用输出 Tokens→ 计算时间瓶颈逐 token 生成服务器需要同时保障显存 计算能力2.3 成本结构差异项目输入成本构成输出成本构成计算资源主要是 Embedding Attention 前向一次每生成 1 token一次 Attention FFN但可复用 KV Cache边际成本低输入后 KV Cache 可复用高每多 1 token 需多一次小推理服务稳定性风险高超长输入可能导致 OOM中可流式中断2.4 定价策略差异输入 Tokens 便宜输入已缓存在 KV Cache边际成本低定价相对较低。输出 Tokens 贵输出是实时推理GPU 利用率高定价相对较高。3. Context Length 与 max_completion_tokens或称 max_tokens 参数3.1 基本概念Context Length prompt_tokens completion_tokensmax_tokens限制的是模型的输出 tokens 数即 completion_tokens3.2 常见场景与错误处理场景 1输入超限条件输入 tokens Context Length结果API 报错prompt is too long场景 2输出超限条件输出超过 max_tokens结果模型主动截断返回finish_reason: length返回内容不完整场景 3总和超限条件输入 tokens max_tokens Context Length结果报错context length 超出限制3.3 实战设计聊天机器人如何避免超限# 1. 先统计 prompt_tokensinput_tokenscount_prompt_tokens(messages)# 2. 预留 output_budget min(max_completion, context_length - prompt_tokens)max_outputmin(16384,128000-input_tokens)# GPT-4o 示例ifmax_output0:raiseValueError(输入已超上下文限制请压缩或截断历史对话)# 3. 动态设置 max_tokensresponseclient.chat.completions.create(...,max_tokensmax_output)3.4 参数影响对比项目主要影响示例说明Context Length显存瓶颈显存不足时模型无法运行128k tokens ≈ 1GB 的 KV Cachemax_tokens输出时间长输出 长时间占用 GPU影响服务质量若不限制用户一句讲个笑话模型可能滔滔不绝讲 1 小时