快速结论:当使用 Ollama 调用 deepseek-r1:1.5b(或其它 DeepSeek-R1 量化模型)并请求 JSON 输出时,如果模型陷入重复生成、无法输出 EOS,会触发 token repeat limit,Ollama 就不会回填 usage 字段,于是出现 usage 全为 0。优先排查模型是否在输出大量重复换行或重复 JSON,并尝试去掉 response_format 中的 json_object。
适用环境:Issue 中可确认的工具为 Ollama;模型涉及 deepseek-r1:1.5b、deepseek-r1-14b-q8:latest。发起请求的客户端代码使用 Python。Issue 未提供操作系统、Python 版本、CUDA、显卡、Ollama 版本等具体信息。
最快修复方案:Issue 讨论中给出的处理办法是:去掉请求中的 "response_format": {"type": "json_object"},改为在 prompt 中明确要求模型输出 JSON。多位参与者反馈该参数是导致 DeepSeek 在 Ollama 上异常的原因。
注意事项:去掉 json_object 后,模型不会在服务端被强制约束为 JSON 输出,需要在 prompt 里写清 JSON 格式要求,并自行解析和校验返回内容。该方案在 Issue 中由评论者提出,原提问者未回帖确认最终结果;同时有用户反馈即使不加该参数,DeepSeek-R1 14B-Q8 仍可能重复输出,因此该修复并非对所有模型/量化版本都有效。
问题场景
用户通过 Python 代码调用 Ollama 的 chat completion 接口,使用 deepseek-r1:1.5b 模型,并通过 prompt 和 "response_format": {"type": "json_object"} 要求模型返回 JSON。返回内容中可以看到大量 \n 和空格,随后发现响应中的 usage 字段里 completion_tokens、prompt_tokens、total_tokens 全部为 0。
后续还有用户报告:部署 deepseek-r1-14b-q8:latest 时,返回内容同样变成连续的 \n\n\n\n\n,即使把 max_tokens 提高到 4096 也没有改善。
报错原文
when using deepseek-r1:1.5b cannot get token usage
'usage': {'completion_tokens': 0, 'prompt_tokens': 0, 'total_tokens': 0, 'completion_tokens_details': None, 'prompt_tokens_details': None}
'token repeat limit reached'
原因分析
根据 Issue 讨论,最可能的原因不是 usage 统计本身出错,而是模型在生成过程中失去连贯性,开始反复输出 \n、空格或重复 JSON,最终触发 Ollama 内部的 token repeat limit。由于这次生成被判定为错误,Ollama 不会填充 token usage,因此客户端看到的是全 0。
评论者指出,用户给出的返回内容中 \n\n\n\n\n\n \n \n\n \n \n \n 这种序列就是模型“跑飞”的迹象。触发重复限制后,token 统计自然为空。
另一个被点名的诱因是 "response_format": {"type": "json_object"}。评论者认为这个参数在 Ollama 上配合 DeepSeek 模型时会导致问题,建议去掉后重试。也有用户反馈,切换到 DeepSeek 官方 API 或其它模型时同样的 JSON 请求可以正常工作,因此问题可能与具体模型、量化版本和 Ollama 的 JSON 约束组合有关。
环境排查
- 确认 Ollama 版本,Issue 中未提供具体版本号,但 token repeat limit 相关代码位于 Ollama 服务端。
- 确认使用的模型及量化版本,例如
deepseek-r1:1.5b、deepseek-r1-14b-q8:latest。 - 确认请求体是否包含
"response_format": {"type": "json_object"}。 - 确认 prompt 中是否明确要求 JSON 输出,以及是否给出足够清晰的 JSON 结构约束。
- 确认返回内容是否出现大量重复换行、空格或重复 JSON 片段。
- 确认客户端是否依赖 usage 字段做计费或统计;如果是,需要知道该字段在生成失败时可能为空。
解决步骤
- 先检查模型是否真的陷入了重复生成。查看返回的
message.content,如果里面出现大量\n、空格或重复的 JSON 片段,基本可以确认是模型重复导致生成失败。 - 可优先尝试去掉请求体中的
"response_format": {"type": "json_object"}。Issue 评论明确指出该参数是 DeepSeek 在 Ollama 上出问题的诱因,建议改为在 prompt 中明确要求“只返回 JSON”,而不是靠服务端强制 JSON 模式。 - 如果去掉 json_object 后仍然重复,可尝试调整 prompt,给出更明确的输出边界,例如要求模型在 JSON 结束后停止,或减少对长思考过程的请求。
- 可尝试调整采样参数,评论中提到了
repeat_penalty,但未给出具体推荐值,需要自行测试。 - 如果上述调整都不稳定,评论建议换用其它模型,因为这种重复行为很可能与模型本身有关。
- 对于依赖 token usage 的调用方,需要把 usage 为 0 视为“本次生成可能失败”的信号,而不是当作正常 0 token 计费。
验证方法
重新发起请求后,检查两点:一是返回的 message.content 是否不再出现连续重复换行或重复 JSON;二是返回的 usage 字段中 completion_tokens、prompt_tokens、total_tokens 是否恢复为非零值。如果 JSON 内容完整且 usage 正常回填,说明问题已解决。如果 JSON 完整但 usage 仍为 0,需要确认生成是否仍触发了 repeat limit 或其它服务端错误。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


