火山引擎API返回JSON被截断是因未设max_tokens触发模型默认长度限制,应显式设置合理值、启用续写模式、强制JSON格式并校验完整性。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

火山引擎API返回的JSON响应内容被截断,比如只收到{"users":[{"id":1,"name":"Alice 之后就断了,既不是合法JSON也不是完整对象,导致前端解析报错或后端反序列化失败。
确认是否触发了模型最大输出长度限制
调用火山引擎大模型API时,若未显式设置 max_tokens 参数,系统将按模型默认上限截断输出——例如 SenseVoice-3B 默认为2048 token,而实际JSON结构体中每个引号、逗号、换行都算token,极易提前触顶。这会导致response.content字段在中间强行终止,生成非法JSON。
在请求体中显式添加 "max_tokens": 4096 字段(根据实际结构复杂度上浮50%),并同步检查你使用的模型在控制台文档中标注的最大输出长度,避免盲目设高引发超时或拒绝。
【max_tokens值不能超过模型文档标明的硬上限,否则请求直接返回400】
启用续写模式补全JSON结构
当已知输出必须是完整JSON但单次调用常被截断时,优先采用续写模式(continuation mode)而非增大max_tokens硬扛。该方式利用assistant角色预填内容引导模型延续,天然规避长度截断导致的语法断裂。
方法一:在messages末尾插入assistant消息,内容为JSON开头片段+未闭合结构
例如原始请求要返回用户列表,就在最后加一条:{"role": "assistant", "content": "{\"users\":["}
模型将从此处继续生成数组项,直到自然结束或达到新轮次的max_tokens,且保证JSON语法连贯。
方法二:对已截断响应做轻量修复再续写
若已收到不完整JSON(如 {"data": {"items": [{"id": 1, ),先用简单规则补全最外层括号→判断是否缺 } 或 ] →用字符串拼接补上 →再将补全后的片段作为新assistant消息发起续写请求,传入相同system prompt与上下文。
强制返回合法JSON并校验完整性
第一步:在system prompt中明确指令“只输出严格符合RFC 8259标准的JSON对象,不附加任何解释、换行、前导空格或Markdown代码块包裹”
第二步:启用火山引擎支持的response_format参数(部分模型已兼容OpenAI格式)
在请求体中加入 "response_format": {"type": "json_object"},该参数会触发服务端强制校验输出结构,若模型生成非JSON内容(如带文字说明的混合输出),接口将返回400而非不完整JSON。
第三步:客户端接收后立即执行JSON lint校验
使用 json.loads() 尝试解析;若抛出 JSONDecodeError,则说明服务端未生效或模型绕过了约束,此时必须回退到续写模式处理,【不可跳过校验直接尝试修复截断字符串】,因非法结构可能嵌套多层,手动补全极易引入新错误。


















