作者注:Nano Banana 2 报错 Image part is missing a thought_signature 怎么办?这是多轮对话时未回传思维签名导致的 400 错误。本文详解原因、修复方案和代码示例。
如果你在使用 Nano Banana 2(gemini-3.1-flash-image-preview)进行图像编辑时收到了这样的报错:
{
"status_code": 400,
"error": {
"message": "Image part is missing a thought_signature in content position 2, part position 1."
}
}
不用慌——这是 Gemini 3 系列模型的一个 多轮对话机制要求,而非内容安全问题或平台故障。简单来说:你在第二轮请求中发送了之前生成的图像,但没有附带该图像的 thought_signature(思维签名)。
核心价值: 读完本文,你将理解 thought_signature 的工作原理,掌握 3 种修复方案,并学会在多轮图像编辑场景中正确处理思维签名。

Nano Banana 2 thought_signature 错误的核心解读
这个报错到底是什么意思
先逐字拆解这条错误消息:
| 字段 | 含义 | 说明 |
|---|---|---|
| status_code: 400 | 请求参数错误 | 不是服务端错误,是客户端传参问题 |
| Image part | 请求中包含的图像数据 | 你在第 2 轮请求中发送了图像 |
| missing a thought_signature | 缺少思维签名 | 这张图是上一轮模型生成的,需要附带签名 |
| content position 2, part position 1 | 在对话历史的第 2 条消息(模型回复),第 1 个 part | 精确定位了缺失签名的位置 |
一句话总结: Gemini API 是无状态的,模型通过 thought_signature(思维签名)在多轮对话间保持推理上下文。当你发起第二轮图像编辑请求时,必须将上一轮模型返回的 thought_signature 原样回传,否则就会收到 400 错误。
为什么 Gemini 3 系列强制要求 thought_signature
| 对比 | Gemini 2.x 系列 | Gemini 3 系列 (含 NB2) |
|---|---|---|
| 思维签名 | 部分场景可选 | 所有 part 类型强制要求 |
| 验证严格度 | 宽松 | 严格(缺失即 400) |
| 适用范围 | 主要用于函数调用 | 文本、图像、函数调用全部适用 |
| 自动处理 | 官方 SDK 自动处理 | 官方 SDK 自动处理 |
Gemini 3 系列模型(包括 Nano Banana 2 所基于的 gemini-3.1-flash)强制要求思维签名,原因是:
- 推理状态恢复: 思维签名是模型内部推理过程的加密表示,让模型在下一轮对话中恢复之前的「思考状态」
- 图像编辑连续性: 对于多轮图像编辑,模型需要理解「这张图是我上一步生成的」才能正确执行编辑指令
- 安全和一致性: 签名机制确保对话历史未被篡改,提升多轮交互的可靠性
🎯 关键认知: 这个 400 错误与内容安全策略(IMAGE_SAFETY)完全无关,也不是 API易平台的问题。这是 Gemini 3 系列模型的正常机制要求,需要在代码层面正确处理。
Nano Banana 2 thought_signature 错误的 3 种修复方案

方案 1: 使用官方 SDK 的 chat 功能(推荐)
如果你使用 Google 的官方 SDK(Python / Node.js / Java),最简单的方式是使用 chat 功能,SDK 会自动管理 thought_signature:
from google import genai
client = genai.Client(api_key="YOUR_API_KEY")
# 使用 chat 功能,SDK 自动处理 thought_signature
chat = client.chats.create(model="gemini-3.1-flash-image-preview")
# 第 1 轮: 生成图像
response1 = chat.send_message("画一只橘猫坐在窗台上")
# 第 2 轮: 编辑图像 (signature 自动回传)
response2 = chat.send_message("给猫戴一顶圣诞帽")
方案 2: 手动提取并回传 thought_signature
如果你使用自定义 HTTP 调用或通过 OpenAI 兼容接口调用,需要手动处理签名。关键逻辑是:从上一轮响应中提取 thought_signature,在下一轮请求的对应 part 中原样附带。
import openai
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://vip.apiyi.com/v1"
)
# 第 1 轮: 生成图像
response1 = client.chat.completions.create(
model="gemini-3.1-flash-image-preview",
messages=[{"role": "user", "content": "画一只橘猫"}]
)
# 关键: 保存完整的 model response
# 包括图像数据和 thought_signature
model_reply = response1.choices[0].message
# 第 2 轮: 编辑图像
# 将上一轮的完整 model response 作为对话历史传入
response2 = client.chat.completions.create(
model="gemini-3.1-flash-image-preview",
messages=[
{"role": "user", "content": "画一只橘猫"},
model_reply, # 完整回传,包含 thought_signature
{"role": "user", "content": "给猫戴一顶帽子"}
]
)
方案 3: 改用单轮请求
如果你的场景不需要多轮对话编辑,可以每次都发送独立的单轮请求,彻底避开 thought_signature 问题:
# 单轮图像编辑: 直接传入原图 + 编辑指令
response = client.chat.completions.create(
model="gemini-3.1-flash-image-preview",
messages=[{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": "data:image/png;base64,/9j/..."}},
{"type": "text", "text": "给这只猫戴一顶圣诞帽"}
]
}]
)
🎯 推荐: 新项目建议使用方案 1(官方 SDK chat 功能),已有项目可根据改动量选择方案 2 或 3。通过 API易 apiyi.com 调用 Nano Banana 2 时,方案 2 和 3 均可正常使用。
Nano Banana 2 thought_signature 常见误区
| 误区 | 事实 |
|---|---|
| 这是内容安全问题 | 不是。400 错误是参数校验失败,与 IMAGE_SAFETY 无关 |
| 这是 API 平台的问题 | 不是。这是 Gemini 3 系列模型的机制要求 |
| 可以自己构造签名 | 不行。签名是加密的,必须原样回传模型返回的值 |
| 只有函数调用才需要 | Gemini 3 系列所有 part 类型都可能需要 |
设置 thinking: off 可以避免 |
不行。即使 thinking 级别设为 minimal,签名仍然会返回且必须回传 |
Nano Banana 2 响应中 thought_signature 的位置
在 Nano Banana 2 的响应数据中,需要注意两种特殊的 part:
临时图像 (thought: true): 模型推理过程中产生的中间图像,标记为 thought: true。这些是临时数据,不需要展示给用户。
最终图像 (含 thought_signature): 最终生成的图像会包含一个 thought_signature 字段。这就是你需要在下一轮请求中回传的签名。
{
"candidates": [{
"content": {
"parts": [
{
"inlineData": {"mimeType": "image/png", "data": "..."},
"thought_signature": "CkYKRAo..."
}
]
}
}]
}
🎯 技术细节:
thought_signature是加密字符串,长度通常在 200-500 字符之间。不要尝试解析、修改或自己构造——收到什么就回传什么。通过 API易 apiyi.com 调用时,响应格式与谷歌原生 API 完全一致。
Nano Banana 2 thought_signature 错误的排查清单

快速排查 4 步:
- 确认是否多轮请求: 如果你的 messages 数组里包含了之前 model 角色的回复(特别是图像数据),那就是多轮请求
- 检查是否保存了完整响应: 上一轮模型返回的 response 中是否包含
thought_signature字段?是否被完整保存? - 检查签名是否被修改: JSON 序列化/反序列化过程中,签名字符串有没有被截断或转义?
- 检查 part 位置对齐: 错误消息中的
content position X, part position Y可以帮你精确定位哪个 part 缺少签名
常见问题
Q1: 单轮图像生成也会遇到这个错误吗?
通常不会。thought_signature 错误几乎只在多轮对话中出现——当你将之前模型返回的图像放入对话历史并发送新请求时才会触发。单轮的文生图或图生图(直接传入原始图片)不涉及对话历史,不需要处理签名。
Q2: 通过 OpenAI 兼容接口调用时如何处理?
通过 API易 apiyi.com 的 OpenAI 兼容接口调用 Nano Banana 2 时,关键是保存上一轮 model 回复的完整对象,在下一轮请求时作为对话历史传入。不要只保存图像数据而丢弃其他字段。如果你的框架(如 Dify、Cherry Studio)自动管理对话历史,确认它是否完整保留了 thought_signature。
Q3: thought: true 的临时图像需要回传吗?
需要。Nano Banana 2 在推理过程中可能返回标记为 thought: true 的临时图像,这些是模型「思考过程」的一部分。在构建对话历史时,所有 model 返回的 part(包括临时图像)都应该完整回传。最安全的做法是直接回传完整的 model response 对象。
总结
Nano Banana 2 thought_signature 400 错误的核心要点:
- 不是内容安全问题: 这是 Gemini 3 系列模型的多轮对话机制要求,与 IMAGE_SAFETY 无关
- 原因明确: 多轮请求时,未将上一轮模型返回的
thought_signature原样回传 - 修复方案: 使用官方 SDK chat 功能(自动处理)、手动提取回传签名、或改用单轮请求
记住核心原则:模型返回的 thought_signature 不要修改、不要丢弃、不要自己构造——收到什么就回传什么。
如需通过第三方平台调用 Nano Banana 2,推荐使用 API易 apiyi.com,响应格式与谷歌原生 API 完全一致,$0.05/次,不限并发。
📚 参考资料
-
Google 官方 Thought Signatures 文档: 思维签名机制详解
- 链接:
ai.google.dev/gemini-api/docs/thought-signatures - 说明: 官方文档,包含工作原理、model 行为和 SDK 处理方式
- 链接:
-
Google Gemini 3 开发者指南: Gemini 3 系列新特性
- 链接:
ai.google.dev/gemini-api/docs/gemini-3 - 说明: Gemini 3 系列的签名强制要求和新功能说明
- 链接:
-
Google 图像生成文档: Nano Banana 图像生成最佳实践
- 链接:
ai.google.dev/gemini-api/docs/image-generation - 说明: 多轮图像编辑中的 thought_signature 使用建议
- 链接:
-
Google Cloud Vertex AI 文档: 企业级思维签名说明
- 链接:
docs.google.com/vertex-ai/generative-ai/docs/thought-signatures - 说明: Vertex AI 环境下的签名处理和配置方法
- 链接:
作者: APIYI 技术团队
技术交流: 欢迎在评论区讨论 Nano Banana 2 多轮编辑的实现心得,更多资料可访问 API易 docs.apiyi.com 文档中心
