首页/AI/大模型部署与运维速查/max_tokens:限制生成长度
推理参数与优化50 条

max_tokens:限制生成长度

限制单次响应生成的 token 数:太小会把回答截断,太大在高并发下拉长占用;它与输入长度共同受上下文窗口约束(输入+输出不超过窗口上限)。

max_tokens 的作用

max_tokens 限制单次响应生成的 token 数,也就是「最多写多长」。设得太小,回答会在句子中间被截断;设得太大,在高并发下每个请求占用计算资源的时间变长,排队与显存压力都会上升。它还有一个硬边界:输入长度加 max_tokens 不能超过模型的上下文窗口。

基本信息

适用平台OpenAI 兼容接口的请求体字段,vLLM 离线调用的构造参数
类型非负整数,单位为 token 而不是字符
硬约束输入长度加输出上限不能超过上下文窗口
相关字段返回体里的结束原因说明是否被长度限制截断
不设的后果由服务端默认值决定,可能远小于业务需要

两种写法

两种写法
# OpenAI 兼容请求体:与 messages 同级
curl http://127.0.0.1:8000/v1/chat/completions -H 'Content-Type: application/json' -d '{
  "model": "<模型名>",
  "messages": [{"role": "user", "content": "总结这篇文档"}],
  "max_tokens": 512
}'
# 离线推理:在采样参数里声明
python -c "from vllm import SamplingParams; print(SamplingParams(max_tokens=512))"

返回体怎么读

字段或现象含义
finish_reason=length达到长度上限被截断,回答不完整
finish_reason=stop模型自然结束,或命中停止词
usage 输出 token 数接近上限说明下一次很可能被截断
响应时间随上限上升长输出占用更多解码步数,影响并发下的排队

典型使用场景

  • 摘要与翻译:按目标长度设定上限,避免模型自由发挥出超长内容
  • 结构化输出:上限设小一些,配合格式约束减少无关文本
  • 流式对话:上限影响首个回答的最长时长,要结合客户端超时一起定
  • 容量规划:统计被截断比例与输出长度的分位,作为调参与扩容依据
  • 排查截断问题:先核对上限与窗口,再看返回的结束原因
判断是不是被截断看返回的结束原因字段:这比肉眼判断句子是否完整可靠,线上按比例统计还能提前发现上限设置不合理。
输入加输出超出上下文窗口时的行为随框架而异:有的直接拒绝请求,有的截断输入,报错文案也不同,排查时先核对窗口上限与 token 计数口径。

易错点

  • 把字符数当 token 数估长度:中文与英文的换算比例不同,估算偏差可达一倍以上
  • 上限设得远超业务需要:每个请求占用解码时间过长,高并发下整体吞吐下降
  • 不检查结束原因:截断的输出看起来像模型能力不足,实际是被参数限制
  • 跨框架照搬默认值:各家默认上限不同,迁移后长回答会突然被截
  • 长输出与客户端超时不同步:服务端允许生成很久,客户端早已断开,白跑算力

数据来源与参考

  • OpenAI API 参考:max_tokens(platform.openai.com/docs)
  • vLLM 官方文档:SamplingParams(docs.vllm.ai)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌