max_tokens 是什么
最大输出长度(max_tokens)是单次生成的硬上限,同时也是成本刹车。设置方法是先看任务输出的 P95 长度,再取约一点五倍:既能避免长尾任务频繁截断,又能抑制无意义的长输出。响应里的结束原因字段会告诉你是否被截断,被截断的结构化输出无法解析,必须按异常路径处理——提高额度重试,或降级返回已解析出的部分结果。上限设得过小会让长尾任务反复失败,设得过大则失去成本保护作用。
基本信息
| 作用 | 限制单次生成长度,控制成本上限 |
|---|---|
| 设置方法 | 任务输出 P95 乘以 1.5,随版本回归校准 |
| 截断信号 | 结束原因为长度类取值 |
| 兜底策略 | 重试提高额度,或降级返回部分结果 |
| 与提示词配合 | 提示词约束格式,接口层设硬上限,双保险 |
| 监控指标 | 输出 token 的 P50 与 P95 分布 |
典型使用场景
- 结构化输出:保证 JSON 不被截断或多余尾巴污染
- 批量任务:用上限把单条成本封顶,便于预算测算
- 流式交互:限制长度同时改善响应时长
- 长文生成:分段生成并用上限控制每段规模
- 成本治理:定位输出过长的功能并逐个收紧
设置上限与检查结果
设置上限与检查结果
# 上限配合提示词约束同时生效
export OPENAI_API_KEY=你的密钥
cat > payload.json <<'EOF'
{"model":"gpt-4o-mini","max_tokens":512,
"messages":[{"role":"user","content":"用三句话总结上文,不要复述原文"}]}
EOF
curl -s https://api.openai.com/v1/chat/completions -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" -d @payload.json -o resp.json
# 返回里必须检查:结束原因是否为截断、usage 输出 token 是否贴近上限结束原因怎么读
| 取值 | 含义 | 处理动作 |
|---|---|---|
| 正常结束 | 模型自然结束输出 | 按正常流程解析结果 |
| 长度截断 | 达到输出上限被迫停止 | 重试提高上限,或改为分段生成 |
| 内容过滤 | 被安全策略拦截 | 走审核与拒答流程,不要重试 |
| 工具调用 | 请求执行工具并等待回包 | 按工具协议继续下一轮 |
被截断的 JSON 无法解析:结构化输出场景必须把长度截断当作异常路径处理,否则会把半截产物当成功结果入库。
上限是单次输出限制,不是总预算:多轮工具调用会累加输出,成本治理要把整轮会话的输出合计看待。