快速结论:当 Ollama 的推理因“超过最大 token 重复限制”被强制终止时,OpenAI 兼容接口返回的 JSON 里 finish_reason 为 null,而不是正常的 stop,导致 OpenAI .NET 等客户端抛出 Unknown ChatFinishReason value.。优先排查提示词与 response_format(尤其 JSON 模式)是否匹配。
适用环境:Ollama 0.3.14(用户后续在 0.4.1 上复现同样行为);Windows;CPU Intel、GPU Intel;使用 OpenAI .NET 库通过 Ollama 的 OpenAI 兼容接口调用 llama3.2 模型。
最快修复方案:暂无确认的一步修复方案。Issue 中维护者与提问者的结论是:该场景由服务端生成被中止引起,客户端库需要自行处理 finish_reason 为 null 的不完整响应;同时可从修正提示词与 response_format 的匹配入手规避。
注意事项:这不是 TCP 超时,而是生成长度/重复触发的终止逻辑。Ollama 侧“是否应改为返回合法枚举值”在 Issue 中并未被确认修复,也没有给出官方补丁;下面的规避手段属于可优先尝试,不代表已由维护者验证。
问题场景
用户用 OpenAI .NET 库连接 Ollama,走 OpenAI 兼容的 /v1/chat/completions 接口,模型为默认的 llama3.2。正常返回时能正确解析,但在“请求超时/耗时较长的任务”中失败,报出 Unknown ChatFinishReason value.。后续讨论澄清:并非真正的网络超时,而是生成跑飞后被最大 token 重复限制终止。
报错原文
System.ArgumentOutOfRangeException: Unknown ChatFinishReason value.
Parameter name: value
at OpenAI.Chat.ChatFinishReasonExtensions.ToChatFinishReason(String value)
at OpenAI.Chat.InternalCreateChatCompletionResponseChoice.DeserializeInternalCreateChatCompletionResponseChoice(JsonElement element, ModelReaderWriterOptions options)
at OpenAI.Chat.ChatCompletion.DeserializeChatCompletion(JsonElement element, ModelReaderWriterOptions options)
at OpenAI.Chat.ChatCompletion.FromResponse(PipelineResponse response)
at OpenAI.Chat.ChatClient.<CompleteChatAsync>d__8.MoveNext()
异常对应服务端返回中的关键片段:
"finish_reason": null
原因分析
根据 Issue 讨论,正常响应返回 "finish_reason": "stop";异常响应返回 "finish_reason": null,且 usage 中 token 计数全为 0。维护者判断这是生成“跑飞”后触发了最大 token 重复限制、生成被中止,因此无法给出正常结束原因。
随后用 curl 直接调用可稳定复现:当提示词与 response_format(例如 {"type":"json_object"})不匹配时,模型持续输出空白/重复内容直至被终止,接口于是返回 finish_reason 为 null。
可能的责任划分:Ollama 侧在生成被中止时输出了 null;而 OpenAI .NET 库未对不完整响应做兜底处理,直接在 ToChatFinishReason 中解析该值并抛错。Issue 中维护者认为“处理服务端异常情况(含超时/中止)是客户端库的责任”。
环境排查
- Ollama 版本:用户初始为 0.3.14,升级到 0.4.1 后行为相同,说明升级不一定能解决。
- 模型:
llama3.2/llama3.2:3b、llama3.2:latest。 - 调用方式:OpenAI .NET 库,或直接
curl调/v1/chat/completions。 - 请求参数:是否设置了
response_format(如json_object),以及提示词是否与 JSON 输出要求一致。 - 是否设置
stream: false,以及返回体中的finish_reason与usage数值。 - Issue 未提供 Python、CUDA、PyTorch 信息,本问题与这些环境无关,无需排查。
解决步骤
- 先用
curl脱离 .NET 库直接验证是否为服务端返回本身的问题,观察finish_reason与 token 计数。Issue 中给出的复现请求形如:{"model":"llama3.2:3b","messages":[{"role":"user","content":"why is the sky blue?"}],"stream":false,"response_format":{"type":"json_object"},"seed":0,"temperature":0}。 - 检查提示词与
response_format是否匹配。若请求 JSON 输出,提示词中应明确要求返回 JSON,避免模型在 JSON 模式下持续输出空白或重复内容触发中止。 - 调整或移除
response_format(如{"type":"json_object"})后重试同一提示词,确认finish_reason是否恢复为stop。 - 在客户端侧做防御:对返回中出现
finish_reason为null、usage全为 0 的不完整响应,不要直接交给ToChatFinishReason解析,先判定为失败/重试。 - 可优先尝试升级 Ollama 到较新版本以缩小排查面,但 Issue 中已证明用户升到 0.4.1 仍未改变该行为,不要把它当作确定修复。
验证方法
用同一提示词重发请求,检查返回 JSON 中 choices[0].finish_reason 是否为 "stop",同时 usage 的 prompt_tokens/completion_tokens/total_tokens 是否为非 0。若 .NET 客户端不再抛 Unknown ChatFinishReason value. 且能正常解析,即视为该调用路径已规避此问题。注意:这只是规避,Issue 中 Ollama 侧并未确认提供修复。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


![[Bug] KSampler preview error when using --preview-method auto with live preview enabled](https://www.chat-gpts.plus/wp-content/uploads/2026/09/714-ede00b8e-768x403.jpg)