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 计数口径。