OpenClaw 中使用 OpenAI 兼容模式調用 Gemini 模型進行圖片識別時經常遇到報錯,是很多開發者在配置多模態 AI 代理時的常見痛點。本文將深入分析 Invalid JSON payload 報錯的根本原因,並提供 3 種經過驗證的解決方案,幫助你快速修復 OpenClaw Gemini 圖片識別失敗問題。
核心價值: 讀完本文,你將理解 OpenAI 兼容模式與 Gemini 原生 API 的關鍵差異,掌握正確的配置方法,徹底解決圖片識別失敗問題。
在 OpenClaw 中配置 Gemini 模型後,嘗試進行圖片識別時,後臺日誌通常會出現以下典型報錯:
GPT plus 代充 只需 145Invalid 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.
tools[0].function_declarations 問題出在工具調用的 JSON Schema
報錯字段
patternProperties、
const Gemini 不支持的 JSON Schema 關鍵字
觸發條件 使用 OpenAI 兼容模式 (
openai-completions) 格式轉換不完整
復現頻率 高頻復現,偶爾重試可成功 Schema 校驗有時被跳過
影響範圍 圖片識別、工具調用均受影響 非圖片本身問題
一個常見的誤區是認爲 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 圖片識別失敗,核心原因是 JSON Schema 兼容性問題。
當 OpenClaw 使用 OpenAI 兼容模式 (openai-completions) 調用 Gemini 時,請求流程如下:
GPT plus 代充 只需 145OpenClaw 構建請求 (OpenAI 格式) ↓ 包含工具定義的 JSON Schema ↓ 發送到 Gemini OpenAI 兼容端點 ↓ Gemini 解析 function_declarations ↓ ❌ 遇到不支持的 Schema 字段 → 400 錯誤
這是問題的核心。Gemini 的 function_declarations 對 JSON Schema 的支持是 受限子集,以下字段會直接導致 400 錯誤:
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" 🟡 中
這進一步印證了根因分析。當在 OpenClaw 中將模型從 Gemini 切換爲 GPT-5.4 時,圖片識別立即恢復正常——因爲 GPT-5.4 的 API 原生支持完整的 JSON Schema 規範,OpenClaw 生成的工具定義 Schema 完全兼容。
📌 關鍵認知: 這不是 Gemini 圖片識別能力的問題,而是 OpenClaw 的 OpenAI 兼容模式發送的工具 Schema 與 Gemini API 的格式要求不匹配。
最徹底的解決方案是在 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 原生格式 — 推薦):
GPT plus 代充 只需 145{ "provider": "google", "model": "gemini-2.5-flash", "baseUrl": "https://generativelanguage.googleapis.com/v1beta", "api": "google-generative-ai", "apiKey": "YOUR_GEMINI_API_KEY" }
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 無衝突
# 方式一: 重新初始化 Gemini 配置 openclaw onboard --auth-choice gemini-api-key # 方式二: 手動編輯配置文件 # 配置文件位置: ~/.openclaw/config.json # 將 api 字段從 "openai-completions" 改爲 "google-generative-ai"
查看完整的 OpenClaw Gemini 原生配置文件示例
GPT plus 代充 只需 145{ "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 差異。
如果你希望在 OpenClaw 中繼續使用 OpenAI 兼容模式調用多種模型(包括 Gemini),可以通過 API 中轉平臺來解決格式兼容性問題。
OpenClaw (OpenAI 格式請求) ↓ API 中轉平臺 (如 API易) ↓ 自動清理不兼容的 JSON Schema 字段 ↓ 自動轉換請求格式 Gemini API (原生格式) ↓ ✅ 正常返回圖片識別結果
GPT plus 代充 只需 145# 通過 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)
在 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 格式。
如果你需要在代碼層面解決兼容性問題,可以在發送請求前手動清理 Gemini 不支持的 JSON Schema 字段。
GPT plus 代充 只需 145def clean_schema_for_gemini(schema: dict) -> dict: """清理 Gemini 不支持的 JSON Schema 字段""" unsupported_keys = { "patternProperties", "const", "additionalProperties", "$schema", "exclusiveMaximum", "exclusiveMinimum", "propertyNames", } if isinstance(schema, dict): return 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 = 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 中轉平臺)。
- 只在 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 獲取更多模型調用指南和免費測試額度
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/240053.html