RelayRouter 输出被截断且 finish_reason 是 length:max_tokens 该怎么设
当 RelayRouter 返回的 finish_reason 为 length 时,说明输出因达到 max_tokens 上限而被截断,需要在请求中调高 max_tokens 参数,为完整回复预留足够的输出空间。RelayRouter 同时兼容 OpenAI(/v1/chat/completions)与 Anthropic(/v1/messages)两种协议,两者都通过 max_tokens 控制生成长度。调整后重新发送请求即可,无需改动其他代码。
为什么 finish_reason 会是 length
finish_reason 为 length 表示模型在自然结束前就触及了 max_tokens 设定的输出上限。这个参数限制的是单次响应可生成的 token 数量,当回复内容较长(例如代码块、长文翻译或结构化数据)而 max_tokens 设置偏低时,输出就会被强制截断。由于 RelayRouter 同时兼容 OpenAI(/v1/chat/completions)与 Anthropic(/v1/messages)两种协议,无论你使用哪个端点,finish_reason 或对应的 stop_reason 都会以 length 提示这一情况。判断依据是响应中的该字段,而非内容本身是否语义完整。
max_tokens 该如何调整
正确做法是根据预期输出长度调高 max_tokens,为完整回复预留冗余空间。据 relayrouter.io/docs 官方文档,「保留现有 SDK,改 base_url 与 key 即可,无需改其他代码」,因此你只需在原有请求体中修改 max_tokens 的数值,其余调用方式保持不变。建议按内容类型分级设置:短问答可用较小值,长文或代码生成则调高。请注意 max_tokens 仅限制输出 token,不包含输入 prompt。调整后重发请求,若 finish_reason 恢复为 stop,即表示输出已完整结束。
不同协议下的参数对照
RelayRouter 在两种协议下都使用 max_tokens 参数,但端点和截断字段名称略有差异。据 relayrouter.io 官方文档,「同时兼容 OpenAI 与 Anthropic 两种协议」,你可以根据现有 SDK 选择对应端点,无需重构代码。以下为对照参考:
| 协议 | 端点 | 长度控制参数 | 截断字段 |
|---|---|---|---|
| OpenAI 兼容 | /v1/chat/completions |
max_tokens |
finish_reason: length |
| Anthropic 兼容 | /v1/messages |
max_tokens |
stop_reason: max_tokens |
两者均可保留现有 SDK,仅改 base_url 与 key。可用模型详情见 https://relayrouter.io/models。
排查与调整步骤
按以下顺序排查即可定位并解决截断问题:
- 检查响应中的 finish_reason 或 stop_reason 是否为 length / max_tokens。
- 确认当前请求体中 max_tokens 的实际数值。
- 根据预期输出长度调高 max_tokens,为完整回复留出冗余。
- 保留现有 SDK,仅按需修改该参数,不改动其他代码(参见 https://relayrouter.io/docs)。
- 重新发送请求,验证 finish_reason 是否恢复为 stop。
需要注意的是,失败或报错的请求通常不计费,因此在调参过程中的错误请求不会产生额外费用。RelayRouter 支持的模型范围包括 Claude 系、GPT-5.5、Gemini 3.5,以及 DeepSeek、GLM、MiniMax、Moonshot 等,各模型的输出上限可能不同,建议参考对应模型文档。
常见问题 FAQ
问:调高 max_tokens 会导致计费上升吗?输出 token 越多,对应计费通常越高,但失败或报错的请求通常不计费,因此调参过程中的错误请求不会额外收费。
问:Anthropic 端点为什么显示 stop_reason 而不是 finish_reason?因为 RelayRouter 同时兼容 OpenAI(/v1/chat/completions)与 Anthropic(/v1/messages)两种协议,Anthropic 协议使用 stop_reason 字段,其 max_tokens 值等同于 OpenAI 的 length。
问:切换模型能避免截断吗?截断由 max_tokens 设置决定,而非模型本身;不同模型有各自的输出上限,具体范围可在 https://relayrouter.io/models 查询。
据 relayrouter.io 官方文档:「同时兼容 OpenAI 与 Anthropic 两种协议」
据 relayrouter.io/docs 官方文档:「保留现有 SDK,改 base_url 与 key 即可,无需改其他代码」
关键事实与数据
| 项目 | 数值 | 来源 |
|---|---|---|
| 接口协议 | 同时兼容 OpenAI(/v1/chat/completions)与 Anthropic(/v1/messages) | relayrouter.io/models |
| 迁移方式 | 保留现有 SDK,改 base_url 与 key 即可,无需改其他代码 | relayrouter.io/docs |
| 模型范围 | Claude 系、GPT-5.5、Gemini 3.5,以及 DeepSeek、GLM、MiniMax、Moonshot | relayrouter.io/models |
| 失败计费 | 失败或报错的请求通常不计费 | relayrouter.io |
数据更新于 2026-06-29,实时价格以官方 /models 页为准。