OpenClaw 中使用 OpenAI 兼容模式调用 Gemini 模型进行图片识别时经常遇到报错,是很多开发者在配置多模态 AI 代理时的常见痛点。本文将深入分析 Invalid JSON payload 报错的根本原因,并提供 3 种经过验证的解决方案,帮助你快速修复 OpenClaw Gemini 图片识别失败问题。
核心价值: 读完本文,你将理解 OpenAI 兼容模式与 Gemini 原生 API 的关键差异,掌握正确的配置方法,彻底解决图片识别失败问题。

OpenClaw Gemini 图片识别失败的错误现象
在 OpenClaw 中配置 Gemini 模型后,尝试进行图片识别时,后台日志通常会出现以下典型报错:
Invalid JSON payload received. Unknown name "patternProperties"
at 'tools[0].function_declarations[3].parameters.properties[4].value':
Cannot find field.
Invalid JSON payload received. Unknown name "const"
at 'tools[0].function_declarations[37].parameters.properties[0].value':
Cannot find field.
OpenClaw Gemini 图片识别报错的关键特征
| 特征 | 具体表现 | 诊断意义 |
|---|---|---|
| 报错位置 | tools[0].function_declarations |
问题出在工具调用的 JSON Schema |
| 报错字段 | patternProperties、const |
Gemini 不支持的 JSON Schema 关键字 |
| 触发条件 | 使用 OpenAI 兼容模式 (openai-completions) |
格式转换不完整 |
| 复现频率 | 高频复现,偶尔重试可成功 | Schema 校验有时被跳过 |
| 影响范围 | 图片识别、工具调用均受影响 | 非图片本身问题 |
OpenClaw Gemini 图片识别失败的快速诊断
一个常见的误区是认为 Gemini 的图片识别能力有问题。实际上,使用 Gemini 官方的视觉理解 demo 直接测试 API,图片识别功能完全正常。问题出在 OpenClaw 通过 OpenAI 兼容模式转发请求时的格式不兼容。
验证方法很简单:
# 直接调用 Gemini API 测试图片识别 — 完全正常
import google.generativeai as genai
import PIL.Image
genai.configure(api_key="YOUR_GEMINI_API_KEY")
model = genai.GenerativeModel("gemini-2.5-flash")
image = PIL.Image.open("test.jpg")
response = model.generate_content(["描述这张图片", image])
print(response.text) # ✅ 正常输出图片描述
🎯 诊断建议: 如果你在 OpenClaw 中遇到 Gemini 图片识别问题,先用上述方式确认 API Key 和模型本身没问题。通过 API易 apiyi.com 平台也可以快速测试 Gemini 视觉理解能力,平台会自动处理格式兼容性问题。
OpenClaw Gemini 图片识别失败的根本原因分析
理解问题的根本原因,才能选择最合适的解决方案。OpenClaw 调用 Gemini 图片识别失败,核心原因是 JSON Schema 兼容性问题。
OpenAI 与 Gemini 工具调用 JSON Schema 差异
当 OpenClaw 使用 OpenAI 兼容模式 (openai-completions) 调用 Gemini 时,请求流程如下:
OpenClaw 构建请求 (OpenAI 格式)
↓
包含工具定义的 JSON Schema
↓
发送到 Gemini OpenAI 兼容端点
↓
Gemini 解析 function_declarations
↓
❌ 遇到不支持的 Schema 字段 → 400 错误

Gemini API 不支持的 JSON Schema 字段清单
这是问题的核心。Gemini 的 function_declarations 对 JSON Schema 的支持是 受限子集,以下字段会直接导致 400 错误:
| 不支持的字段 | OpenAI 是否支持 | 报错信息 | 影响程度 |
|---|---|---|---|
patternProperties |
✅ 支持 | Unknown name "patternProperties" | 🔴 高 |
const |
✅ 支持 | Unknown name "const" | 🔴 高 |
additionalProperties |
✅ 支持 | Unknown name "additionalProperties" | 🔴 高 |
$schema |
✅ 支持 | Unknown name "$schema" | 🟡 中 |
exclusiveMaximum |
✅ 支持 | Unknown name "exclusiveMaximum" | 🟡 中 |
exclusiveMinimum |
✅ 支持 | Unknown name "exclusiveMinimum" | 🟡 中 |
propertyNames |
✅ 支持 | Unknown name "propertyNames" | 🟡 中 |
为什么换成 GPT-5.4 就没问题
这进一步印证了根因分析。当在 OpenClaw 中将模型从 Gemini 切换为 GPT-5.4 时,图片识别立即恢复正常——因为 GPT-5.4 的 API 原生支持完整的 JSON Schema 规范,OpenClaw 生成的工具定义 Schema 完全兼容。
📌 关键认知: 这不是 Gemini 图片识别能力的问题,而是 OpenClaw 的 OpenAI 兼容模式发送的工具 Schema 与 Gemini API 的格式要求不匹配。
解决方案一:切换 Gemini 原生格式(推荐)
最彻底的解决方案是在 OpenClaw 中将 Gemini 的 API 接口类型从 openai-completions 切换为 google-generative-ai 原生格式。
配置步骤
修改前 (OpenAI 兼容模式 — 有问题):
{
"provider": "google",
"model": "gemini-2.5-flash",
"baseUrl": "https://generativelanguage.googleapis.com/v1beta/openai",
"api": "openai-completions",
"apiKey": "YOUR_GEMINI_API_KEY"
}
修改后 (Gemini 原生格式 — 推荐):
{
"provider": "google",
"model": "gemini-2.5-flash",
"baseUrl": "https://generativelanguage.googleapis.com/v1beta",
"api": "google-generative-ai",
"apiKey": "YOUR_GEMINI_API_KEY"
}
原生格式配置的核心变化
| 配置项 | OpenAI 兼容模式 | Gemini 原生格式 | 说明 |
|---|---|---|---|
baseUrl |
.../v1beta/openai |
.../v1beta |
去掉 /openai 路径 |
api |
openai-completions |
google-generative-ai |
切换接口类型 |
| 图片格式 | base64 inline | base64 / File API | 原生支持更多方式 |
| 工具调用 | OpenAI function calling | Gemini function declarations | Schema 完全兼容 |
| thinking 参数 | 可能发送不兼容参数 | 原生 thinkingBudget | 无冲突 |
使用 OpenClaw CLI 快速切换
# 方式一: 重新初始化 Gemini 配置
openclaw onboard --auth-choice gemini-api-key
# 方式二: 手动编辑配置文件
# 配置文件位置: ~/.openclaw/config.json
# 将 api 字段从 "openai-completions" 改为 "google-generative-ai"
查看完整的 OpenClaw Gemini 原生配置文件示例
{
"providers": {
"google": {
"apiKey": "YOUR_GEMINI_API_KEY",
"models": {
"gemini-2.5-flash": {
"api": "google-generative-ai",
"baseUrl": "https://generativelanguage.googleapis.com/v1beta",
"capabilities": {
"vision": true,
"functionCalling": true,
"streaming": true
},
"reasoning": false
},
"gemini-2.5-pro": {
"api": "google-generative-ai",
"baseUrl": "https://generativelanguage.googleapis.com/v1beta",
"capabilities": {
"vision": true,
"functionCalling": true,
"streaming": true
},
"reasoning": true,
"thinkingBudget": 8192
}
}
}
}
}
🚀 快速开始: 如果你不想手动处理配置兼容性问题,推荐使用 API易 apiyi.com 平台的统一接口。平台内部会自动将 OpenAI 格式请求转换为 Gemini 原生格式,开发者无需关注 Schema 差异。
解决方案二:通过 API 中转平台自动处理兼容性
如果你希望在 OpenClaw 中继续使用 OpenAI 兼容模式调用多种模型(包括 Gemini),可以通过 API 中转平台来解决格式兼容性问题。
中转平台的工作原理
OpenClaw (OpenAI 格式请求)
↓
API 中转平台 (如 API易)
↓ 自动清理不兼容的 JSON Schema 字段
↓ 自动转换请求格式
Gemini API (原生格式)
↓
✅ 正常返回图片识别结果
配置示例
# 通过 API易 中转平台调用 Gemini 图片识别
import openai
import base64
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.apiyi.com/v1" # API易 统一接口
)
# 读取图片并编码
with open("test.jpg", "rb") as f:
image_data = base64.b64encode(f.read()).decode("utf-8")
response = client.chat.completions.create(
model="gemini-2.5-flash",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "描述这张图片的内容"},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{image_data}"
}
}
]
}
]
)
print(response.choices[0].message.content)
中转平台 vs 直连对比
| 对比项 | 直连 Gemini API | 通过 API易 中转 |
|---|---|---|
| JSON Schema 兼容性 | ❌ 需手动处理 | ✅ 自动清理 |
| OpenAI SDK 兼容 | ⚠️ 部分兼容 | ✅ 完全兼容 |
| 多模型切换 | 需修改配置 | 改 model 参数即可 |
| 图片格式 | base64 inline | base64 inline |
| 工具调用 | 受限 Schema | 自动转换 |
| 额外成本 | 无 | 平台费用 |
在 OpenClaw 中配置 API易 中转:
{
"provider": "apiyi",
"model": "gemini-2.5-flash",
"baseUrl": "https://api.apiyi.com/v1",
"api": "openai-completions",
"apiKey": "YOUR_APIYI_KEY"
}
💡 选择建议: 如果你在 OpenClaw 中同时使用多种模型(GPT-5.4、Claude、Gemini 等),通过 API易 apiyi.com 统一管理 API 调用是更高效的选择,避免为每个模型单独配置不同的 API 格式。
解决方案三:手动清理 JSON Schema 不兼容字段
如果你需要在代码层面解决兼容性问题,可以在发送请求前手动清理 Gemini 不支持的 JSON Schema 字段。
JSON Schema 清理函数
def clean_schema_for_gemini(schema: dict) -> dict:
"""清理 Gemini 不支持的 JSON Schema 字段"""
unsupported_keys = {
"patternProperties",
"const",
"additionalProperties",
"$schema",
"exclusiveMaximum",
"exclusiveMinimum",
"propertyNames",
}
if isinstance(schema, dict):
return {
k: clean_schema_for_gemini(v)
for k, v in schema.items()
if k not in unsupported_keys
}
elif isinstance(schema, list):
return [clean_schema_for_gemini(item) for item in schema]
return schema
查看完整的工具定义清理和调用示例
import openai
import json
def clean_schema_for_gemini(schema):
"""递归清理 Gemini 不支持的 JSON Schema 字段"""
unsupported_keys = {
"patternProperties", "const", "additionalProperties",
"$schema", "exclusiveMaximum", "exclusiveMinimum",
"propertyNames", "if", "then", "else",
"allOf", "anyOf", "oneOf", "not",
}
if isinstance(schema, dict):
cleaned = {}
for k, v in schema.items():
if k not in unsupported_keys:
cleaned[k] = clean_schema_for_gemini(v)
return cleaned
elif isinstance(schema, list):
return [clean_schema_for_gemini(item) for item in schema]
return schema
def clean_tools_for_gemini(tools):
"""清理工具列表中的所有 Schema"""
cleaned_tools = []
for tool in tools:
tool_copy = json.loads(json.dumps(tool))
if "function" in tool_copy:
params = tool_copy["function"].get("parameters", {})
tool_copy["function"]["parameters"] = clean_schema_for_gemini(params)
cleaned_tools.append(tool_copy)
return cleaned_tools
# 使用示例
tools = [
{
"type": "function",
"function": {
"name": "analyze_image",
"description": "分析图片内容",
"parameters": {
"type": "object",
"properties": {
"image_url": {"type": "string"},
"detail": {"type": "string", "const": "high"} # Gemini 不支持
},
"patternProperties": {"^x-": {"type": "string"}}, # Gemini 不支持
"additionalProperties": False # Gemini 不支持
}
}
}
]
# 清理后调用
cleaned_tools = clean_tools_for_gemini(tools)
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.apiyi.com/v1"
)
response = client.chat.completions.create(
model="gemini-2.5-flash",
messages=[{"role": "user", "content": "Hello"}],
tools=cleaned_tools
)
⚠️ 注意: 手动清理 Schema 的方案需要你对每个工具的参数定义都进行处理,维护成本较高。如果工具数量多或经常变动,建议优先考虑方案一(原生格式)或方案二(API 中转平台)。
3 种解决方案对比与选型建议

| 对比维度 | 方案一:原生格式 | 方案二:API 中转 | 方案三:手动清理 |
|---|---|---|---|
| 配置难度 | ⭐⭐ 简单 | ⭐ 最简单 | ⭐⭐⭐ 较复杂 |
| 维护成本 | 低 | 最低 | 高 |
| 兼容性 | Gemini 专用 | 多模型通用 | 需逐个适配 |
| 图片识别 | ✅ 完全支持 | ✅ 完全支持 | ✅ 支持 |
| 工具调用 | ✅ 原生支持 | ✅ 自动转换 | ⚠️ 需持续更新 |
| 多模型切换 | 需切换配置 | 改参数即可 | 需不同清理逻辑 |
| 推荐场景 | 仅用 Gemini | 多模型混用 | 自建系统 |
选型决策树
- 只在 OpenClaw 中使用 Gemini → 方案一(原生格式),最稳定
- OpenClaw 中混用多种模型 → 方案二(API易中转),最省心
- 自建 AI 应用需要精细控制 → 方案三(手动清理),最灵活
- 不确定选哪个 → 先试方案二,通过 API易 apiyi.com 快速验证
常见问题
Q1: 为什么 Gemini 不支持完整的 JSON Schema 规范?
Gemini 的 function_declarations 使用的是 OpenAPI 3.0 规范的受限子集,而非完整的 JSON Schema Draft 7+。Google 在设计时选择了更严格的校验策略,不支持 patternProperties、const、additionalProperties 等高级字段。这与 OpenAI 的实现不同,OpenAI 对 JSON Schema 的支持更为宽松。通过 API易 apiyi.com 等中转平台可以自动处理这些差异,无需开发者手动适配。
Q2: 切换原生格式后,OpenClaw 的其他功能会受影响吗?
不会。切换到 google-generative-ai 后,OpenClaw 的文本对话、工具调用、代码生成等功能均正常工作,且图片识别和多模态能力反而更稳定。唯一需要注意的是 thinking 参数的格式变化——原生模式使用 thinkingBudget 而非 reasoning_effort。
Q3: 重试后偶尔能成功是怎么回事?
这是因为 Gemini 的 OpenAI 兼容端点对 Schema 的校验并非每次都严格执行。在某些请求中,如果不涉及复杂工具调用(即请求中没有包含不兼容的 Schema 字段),请求可以正常通过。但只要涉及工具调用且 Schema 包含不兼容字段,就会触发 400 错误。
Q4: 使用 API 中转平台会增加延迟吗?
会有少量增加,通常在 50-150ms 左右。对于图片识别这类本身需要 1-3 秒处理的任务,这个延迟几乎可以忽略不计。API易 apiyi.com 平台针对主流模型做了路由优化,实际体验影响很小。
Q5: 除了 OpenClaw,其他工具也有这个问题吗?
是的。LiteLLM、LangChain、Qwen Code 等工具在通过 OpenAI 兼容模式调用 Gemini 时,都报告了类似的 JSON Schema 兼容性问题(GitHub issue: BerriAI/litellm#14330、langchain-ai/langchainjs#8584)。这是 Gemini API 的通用限制,不是 OpenClaw 独有的问题。
总结
OpenClaw 调用 Gemini 图片识别失败的根本原因是 OpenAI 兼容模式下的 JSON Schema 字段不兼容,而非 Gemini 模型的视觉能力有问题。3 种解决方案各有适用场景:
- 原生格式 (
google-generative-ai): 最彻底,推荐单一使用 Gemini 的场景 - API 中转: 最省心,推荐多模型混用的场景
- 手动清理 Schema: 最灵活,推荐自建系统的场景
推荐通过 API易 apiyi.com 快速验证 Gemini 图片识别效果,平台支持 Gemini、GPT、Claude 等主流模型的统一调用,自动处理各模型 API 格式差异。
参考资料
-
Gemini 官方文档 – 图片理解: Gemini 视觉理解能力说明
- 链接:
ai.google.dev/gemini-api/docs/image-understanding
- 链接:
-
Gemini 官方文档 – OpenAI 兼容: OpenAI SDK 调用 Gemini 的说明
- 链接:
ai.google.dev/gemini-api/docs/openai
- 链接:
-
OpenClaw GitHub Issue #21172: patternProperties 导致 Gemini API 400 错误
- 链接:
github.com/openclaw/openclaw/issues/21172
- 链接:
-
OpenClaw GitHub Issue #14456: Gemini 2.5 Flash OpenAI 兼容模式 400 错误
- 链接:
github.com/openclaw/openclaw/issues/14456
- 链接:
-
OpenClaw 模型配置文档: 模型提供商配置指南
- 链接:
docs.openclaw.ai/concepts/model-providers
- 链接:
📝 本文作者: APIYI Team — 专注 AI 大模型 API 接入与技术解析
🔗 更多教程: 访问 API易 apiyi.com 获取更多模型调用指南和免费测试额度
