Gemini CLI 读取图片时报 "Requests ending with a model turn are not supported":如何解决
返回博客
文章gemini clitroubleshootingagente de programaçãodev tools

Gemini CLI 读取图片时报 "Requests ending with a model turn are not supported":如何解决

Mafra2026年11月4日阅读约 4 分钟

你让 Gemini CLI 查看一张图片,ReadFile 成功读取了 .png,结果下一轮就返回 400 INVALID_ARGUMENT,消息是 Requests ending with a model turn are not supported.。此后同一会话中的每次调用都以同样方式失败。在 0.66.0 版本(截至 2026 年 11 月 4 日 npm 上的 latest)中,已确认的原因是一处模型名称判断无法识别带点号的 ID,例如 gemini-3.8-flash。先用 /clear 离开当前会话,再从下面三种绕过方法中选一种。

"Requests ending with a model turn are not supported" 错误长什么样?

读取图片之后,会按顺序出现三行。issue google-gemini/gemini-cli #30074 中的报告正是如此:

✓ ReadFile Screenshot (209).png → Read image file: Screenshot (209).png
[System: You successfully executed a tool but returned an empty response. Please analyze the tool output and explain your progress or final answer.]
✕ [API Error: [{
  "error": {
    "code": 400,
    "message": "Requests ending with a model turn are not supported.",
    ...
    "status": "INVALID_ARGUMENT"
  }
}]]

中间那行以 [System: You successfully executed a tool but returned an empty response 开头,说明模型在读取后返回了空响应。如果它出现在 400 之前,就是本文说的情况。

为什么 Gemini CLI 读取图片会出错?

因为在 0.66.0 中,图片没有放在工具响应里送达模型。packages/core/src/config/models.ts 中的 supportsMultimodalFunctionResponse 函数用 model.startsWith('gemini-3-') 来判断。带点号的 ID 通不过这个判断,于是图片作为独立的兄弟 part 放在 functionResponse 旁边,而不是嵌套在其中。修复它的 PR #29982 的说明解释了这一机制。

拿不到图片,模型返回空响应,CLI 插入空响应提示,发给 API 的历史以模型轮次结尾。API 以 400 拒绝这种格式。最后这段因果链是 issue #30074 中贡献者的分析,不是 Google 的官方说法。

会话中的模型 ID能通过 startsWith('gemini-3-')?0.66.0 是否受影响
gemini-3-pro-preview是否
gemini-3-flash-preview是否
gemini-3.1-pro-preview否是
gemini-3.1-flash-lite否是
gemini-3.5-flash否是
gemini-3.5-flash-lite否是
gemini-3.8-flash否是
流程图:识别 Requests ending with a model turn 错误,用 /clear 离开会话,在 settings.json 中开启 dynamicModelConfiguration 或用 @路径 发送图片;如需修复,安装 Gemini CLI nightly
从错误到绕过方法。来源:google-gemini/gemini-cli 源码(v0.66.0 与 PR #29982)及 issue #30074。

如何离开卡住的会话?

运行 /clear。根据命令参考,它会清除对话上下文并开始新会话。在同一会话中重试没有用:历史已经以错误的轮次结尾,每次新调用都会重复 400。

/clear

再次请求读取图片之前,先应用下面的某种绕过方法。否则下一次读取图片会以同样方式卡住新会话。

如何让 read_file 在 0.66.0 中正常读取图片?

开启动态模型配置。开启后,同一个函数会跳过前缀判断,改为读取模型定义;在 0.66.0 的 defaultModelConfigs.ts 中,上表所有 Gemini 3 模型都带有 multimodalToolUse: true。编辑 ~/.gemini/settings.json:

{
  "experimental": {
    "dynamicModelConfiguration": true
  }
}

配置文档将此键标注为 Requires restart: Yes,所以要关闭并重新打开 CLI。这是一个实验性选项,也会改变模型定义和解析的读取方式。如果 /model 中出现异常,请改回 false。

能不能绕开工具直接发送图片?

可以,在提示词里用 @。@路径 在内部使用 read_many_files,把内容插入你的消息,而不是工具响应,因此不会触发 functionResponse 的问题。

@docs/login-screen.png 登录按钮错位了,CSS 改了什么?

有两点要注意,都来自 0.66.0 的代码。只有写明文件名或扩展名,图片才会被读取:只写 @docs/ 时,图片会被跳过,原因是 asset file (image/pdf/audio) was not explicitly requested by name or extension。另外,路径中的空格要用反斜杠转义,例如 @screen\ captures/login.png。

哪个 Gemini CLI 版本已经包含修复?

目前只有 nightly。PR #29982 于 2026 年 10 月 28 日合入 main,比 0.66.0 晚一天。我们逐个检查了 npm 各渠道中的这个文件:

npm 渠道(2026-11-04)版本是否包含修复
latest0.66.0否
preview0.67.0-preview.0否
nightly0.67.0-nightly.20261104是(自 10 月 30 日的 nightly 起)
npm install -g @google/gemini-cli@nightly

nightly 是每日构建,可能带来其他问题。要回到稳定版,运行 npm install -g @google/gemini-cli@latest。issue #30074 仍未关闭:一位贡献者指出了第二处问题,即 geminiChat.ts 中 ensureTerminalUserTurn() 与 stripToolCallIdPrefixes() 的执行顺序,仍可能让历史以模型轮次结尾。如果在 nightly 上错误再次出现,@路径 仍是最稳妥的绕过方法。

如果你想在终端里使用编程代理,又不想每次重试都计算 token,Verboo Code 提供无限 token。

喜欢这篇文章吗?
把知识分享给你的朋友。
// 继续阅读

相关文章