快速结论:当 glm-ocr 或其它 OCR/文本补全模型输出的内容里含有大量连续重复 token(例如书籍习题里成排的句点“.”)时,Ollama 的“token repeat limit”循环检测会被误触发,提前中止生成并返回 "done": false。优先排查模型输出中是否存在这类重复串,而不是先怀疑图像尺寸、显存或上下文长度。
适用环境:Ollama 0.15.5,Windows(最新),GPU 为 RTX 6000 Pro Max-Q 96GB VRAM;调用方式为 POST /api/chat 与 CLI ollama run glm-ocr;模型 glm-ocr:latest。Issue 中未确认 Python、CUDA、PyTorch 版本。
最快修复方案:暂无确认的一步修复方案。Issue 中仅确认了误触发循环检测这一原因,维护者正在准备补丁,使该检测可配置,并修复不正确的 "done" 返回。
注意事项:调低 OLLAMA_NUM_PARALLEL、去掉 OLLAMA_FLASH_ATTENTION/OLLAMA_NEW_ENGINE/OLLAMA_NEW_ESTIMATES、加大上下文、改图像比例或改写 prompt 均已被报告为无效。把重复 token 阈值盲目调大只是缓解手段,无法区分“真正卡在循环”和“输出里恰好有重复 token”的模型,Issue 作者也认为需要更准确的循环判定方法。
问题场景
用户在 Ollama 0.15.5(Windows)上使用 glm-ocr:latest 做图像 OCR。图片本身只有 1180×721,尺寸并不算大,其它图片都能正常识别;但其中一张包含大量填空句点的习题图会在输出到“……”一带时停止,只返回了部分文本,后续内容丢失。通过 POST /api/chat(stream: false,num_ctx: 8196)与 CLI ollama run glm-ocr Text Recognition: ./image.png 得到相同结果。
报错原文
{
"model": "glm-ocr:latest",
"created_at": "2026-02-06T10:01:23.4538287Z",
"message": {
"role": "assistant",
"content": "IV. Podane w nawiasie przymiotniki proszę przekształcić na stopień najwyższy.\nPrzyklad: Ta ulica jest (szeroka) najszersza w naszym mieście.\n1. To jest (elegancki) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ."
},
"done": false
}
time=2026-02-06T11:04:04.085+01:00 level=DEBUG source=server.go:1661 msg="prediction aborted, token repeat limit reached"
原因分析
Ollama server 中有一段用于检测“模型失去连贯性、卡在循环里”的代码,它通过检查输出中是否出现重复 token 来判定。Issue 中维护者给出的判断是:最后一行里那串长长的句点(. . . . . . . . . . .)正好触发了这段逻辑,导致预测被中止。
也就是说,这属于误判:模型输出的是正确答案(书籍/习题里常用成排句点做填空线),但由于这些 token 完全相同,被循环检测当成“卡死”。其它评论也指出,这段本意是防止模型陷入循环的条件被触发了,而实际上需要有一种逻辑来区分“真正卡住的响应”和“恰好包含重复 token 的正确响应”。
环境排查
- 确认 Ollama 版本:Issue 为 0.15.5,
done: false与prediction aborted, token repeat limit reached是该问题的主要特征。 - 确认操作系统:Windows(最新)。
- 确认显卡与显存:RTX 6000 Pro Max-Q 96GB VRAM。
- 确认调用方式:
POST /api/chat与 CLIollama run,两者结果一致,说明与客户端无关。 - 确认日志级别:需开启
OLLAMA_DEBUG:DEBUG才能看到server.go:1661的 aborted 日志。 - 确认模型输出内容:检查被截断处是否恰好是一长串相同字符(本 Issue 为连续的
.)。 - Issue 未提供 Python、CUDA、PyTorch 版本信息,这些暂不作为排查项。
解决步骤
- 先确认现象是否匹配:在
OLLAMA_DEBUG=DEBUG下复现,查看日志中是否出现prediction aborted, token repeat limit reached,并确认被截断的位置是否紧跟在连续重复字符之后。 - 核对返回体:
"done": false表示生成被提前中止,而非模型真正输出完毕。 - 排除用户侧变量:按 Issue 记录,调低
OLLAMA_NUM_PARALLEL、移除OLLAMA_FLASH_ATTENTION/OLLAMA_NEW_ENGINE/OLLAMA_NEW_ESTIMATES、增大上下文(最高约 40k)、调整图像比例、改写 prompt 都无法解决,因此不必在这些方向上反复尝试。 - 等待或跟进上游补丁:维护者正在编写补丁,目标是让该循环检测可配置,并修复不正确的
"done"返回;同时指出该检测机制应被更准确的“模型是否在循环”的方法替代,建议把阈值从约 300 tokens 考虑(仅作为讨论方向,非已发布配置项)。 - 临时规避思路(可优先尝试):如果业务允许,改用不依赖成排句点作为输出的 prompt 或后处理方式,减少连续重复 token 的出现;或换用其它 OCR 模型验证是否为该检测逻辑特有问题。
验证方法
在应用上游修复或绕过方案后,用同一张 1180×721 的图片、同样的 POST /api/chat 请求(stream: false)重新调用 glm-ocr:latest。若返回体中的 "done" 为 true,且输出包含句点之后本应继续的文本内容,同时 DEBUG 日志中不再出现 prediction aborted, token repeat limit reached,即可认为问题已解决。若仍被截断,说明命中的仍是同一循环检测路径,需继续跟进上游补丁。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


