云计算百科
云计算领域专业知识百科平台

思考模型避坑指南:为什么你的 API 返回了空内容,以及如何修复

本文首发于个人技术博客,转载请保留出处。适用平台:盈算智服(OpenAI 兼容 LLM 网关)。

一、你遇到的现象

请求返回了 HTTP 200,没有报错,但 choices[0].message.content 是空的:

{
"choices": [
{
"message": { "role": "assistant", "content": "" },
"finish_reason": "stop"
}
],
"usage": { "completion_tokens": 100, "reasoning_tokens": 95 }
}

一眼看过去像是 API 坏了。其实不是——是思考模型把你的输出额度吃光了。

二、根因:默认开「深度思考」,max_tokens 被推理过程吃掉

新一代模型(DeepSeek V4 系列、智谱 GLM-5.2)默认开启深度思考(reasoning)。一次回复由两部分组成:

  • 推理 token(reasoning_tokens):模型在「内心思考」时消耗的 token
  • 内容 token(content):真正返回给你的文字

如果你在请求里传了较小的 max_tokens(比如 100、200),而思考过程本身就用了 95 个 token,留给真正内容的就只剩 5 个甚至 0 个 → 于是你拿到空 content。

我们在真实调用中复现过:max_tokens:100 时 reasoning_tokens:95,content 为空;调到 1024 后正常返回内容。

三、哪些模型有这个坑

模型默认思考?安全建议
deepseek-v4-flash 默认开 max_tokens ≥ 1024;或显式关闭思考
deepseek-v4-pro 默认开 max_tokens ≥ 1024;或显式关闭思考
glm-5.2 默认开 max_tokens ≥ 1024
Kimi K3 关,但有最低门槛 max_tokens 必须 ≥ 16000,否则返回空
glm-4-flash / Qwen 等轻量模型 默认关 一般无需特别处理

四、修复方法(三选一)

方案 A:给 max_tokens 一个安全值(最简单,推荐)

把 max_tokens 调大到 1024 以上即可。下面以 deepseek-v4-flash 为例:

curl 版:

curl https://yingsuan.top/v1/chat/completions \\
-H "Authorization: Bearer 你的KEY" \\
-H "Content-Type: application/json" \\
-d '{
"model": "deepseek-v4-flash",
"messages": [{"role": "user", "content": "用一句话解释量子纠缠"}],
"max_tokens": 2000
}'

Python(OpenAI SDK)版:

from openai import OpenAI
# 把下行的 base_url 换成你的网关地址(即盈算智服分配给你的接口地址)
client = OpenAI(api_key="你的KEY", base_url="你的网关地址/v1")
resp = client.chat.completions.create(
model="deepseek-v4-flash",
messages=[{"role": "user", "content": "用一句话解释量子纠缠"}],
max_tokens=2000
)
print(resp.choices[0].message.content)

Node.js 版:

import OpenAI from "openai";
// 把下行的 baseURL 换成你的网关地址(即盈算智服分配给你的接口地址)
const client = new OpenAI({ apiKey: "你的KEY", baseURL: "你的网关地址/v1" });
const resp = await client.chat.completions.create({
model: "deepseek-v4-flash",
messages: [{ role: "user", content: "用一句话解释量子纠缠" }],
max_tokens: 2000,
});
console.log(resp.choices[0].message.content);

方案 B:直接关掉思考(要速度 / 省钱时用)

如果你做的是简单分类、抽取、翻译,不需要推理,关掉思考既快又省:

DeepSeek V4 系列:

{ "model": "deepseek-v4-flash", "messages": [], "reasoning_effort": "none" }

或(Anthropic 风格字段):

{ "model": "deepseek-v4-flash", "messages": [], "thinking": { "type": "disabled" } }

智谱 GLM-5.2:

{ "model": "glm-5.2", "messages": [], "thinking": { "type": "disabled" } }

注意:传 “thinking”: false 会报 400,正确值是 “type”: “disabled”。

方案 C:Kimi K3 专用

K3 不吃小 max_tokens,必须 ≥ 16000,否则直接空:

{ "model": "kimi-k3", "messages": [], "max_tokens": 16000 }

五、网关层已经帮你做的防护

为防止你踩坑,盈算智服在网关层加了自动护栏:

  • 对思考模型(deepseek-v4-flash / v4-pro / glm-5.2),如果你传的 max_tokens 小于 1024,网关会自动提到 1024(只上调、绝不下调你的显式大值)。
  • 对其他模型,如果你没传 max_tokens,网关默认给 2048。

但你如果显式传了很小的 max_tokens(比如抄了别人的 100),网关尊重你的选择、不会覆盖——所以请按上面的方案 A 调大。

六、开始免费试用

  • 免费套餐:100 次请求,含 DeepSeek V4-Flash(1M 上下文)、GLM-4-Flash、Qwen2.5-7B
  • 限时推广:V4-Flash 额外 20 次免费(Promo)
  • 获取 Key 与文档入口见盈算智服官网(Wise 银行转账,无需信用卡)

遇到任何返回异常,把请求体和报错发给官方邮箱,24 小时内回复。

赞(0)
未经允许不得转载:网硕互联帮助中心 » 思考模型避坑指南:为什么你的 API 返回了空内容,以及如何修复
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!