title: "Решение ошибки Invalid JSON payload при использовании Gemini в OpenClaw"
description: "Разбираемся, почему возникает ошибка Invalid JSON payload при работе с Gemini в OpenClaw, и предлагаем 3 проверенных способа исправления."
Использование режима совместимости с OpenAI в OpenClaw для вызова моделей Gemini часто приводит к ошибкам при распознавании изображений — это одна из самых частых проблем, с которой сталкиваются разработчики при настройке мультимодальных AI-агентов. В этой статье мы подробно разберем первопричину ошибки Invalid JSON payload и предложим 3 проверенных решения, которые помогут вам быстро исправить сбои при распознавании изображений в OpenClaw.
Ключевая ценность: Прочитав эту статью, вы поймете ключевые различия между режимом совместимости OpenAI и нативным API Gemini, освоите правильные методы настройки и навсегда решите проблему сбоев при распознавании изображений.

Симптомы ошибки распознавания изображений Gemini в OpenClaw
После настройки модели Gemini в OpenClaw при попытке распознать изображение в логах бэкенда обычно появляются следующие типичные ошибки:
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.
Ключевые характеристики ошибки распознавания изображений Gemini в OpenClaw
| Характеристика | Описание | Значение для диагностики |
|---|---|---|
| Место ошибки | tools[0].function_declarations |
Проблема в JSON Schema вызова инструментов |
| Поля ошибки | patternProperties, const |
Ключевые слова JSON Schema, не поддерживаемые Gemini |
| Условие возникновения | Использование режима совместимости OpenAI (openai-completions) |
Неполное преобразование формата |
| Частота появления | Высокая, иногда повторный запрос проходит | Валидация схемы иногда пропускается |
| Область влияния | Затрагивает распознавание изображений и вызов инструментов | Проблема не в самом изображении |
Быстрая диагностика сбоев распознавания изображений Gemini в OpenClaw
Распространенное заблуждение — считать, что проблема в возможностях Gemini по распознаванию изображений. На самом деле, если протестировать API напрямую через официальное демо Gemini, функция распознавания работает идеально. Проблема кроется в несовместимости форматов при пересылке запроса через режим совместимости OpenAI в OpenClaw.
Метод проверки очень прост:
# Прямой вызов API Gemini для тестирования распознавания изображений — работает отлично
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) # ✅ Корректный вывод описания изображения
🎯 Совет по диагностике: Если вы столкнулись с проблемой распознавания изображений Gemini в OpenClaw, сначала проверьте API-ключ и саму модель описанным выше способом. Вы также можете быстро протестировать возможности визуального понимания Gemini через платформу APIYI (apiyi.com), которая автоматически обрабатывает вопросы совместимости форматов.
Анализ первопричины сбоев при распознавании изображений в OpenClaw Gemini
Чтобы выбрать оптимальное решение, нужно сначала разобраться в сути проблемы. Сбои при распознавании изображений через Gemini в OpenClaw вызваны проблемами совместимости JSON Schema.
Различия в JSON Schema при вызове инструментов OpenAI и Gemini
Когда OpenClaw использует режим совместимости с OpenAI (openai-completions) для вызова Gemini, процесс запроса выглядит следующим образом:
OpenClaw формирует запрос (формат OpenAI)
↓
Включает JSON Schema с описанием инструментов
↓
Отправляет на эндпоинт Gemini, совместимый с OpenAI
↓
Gemini анализирует function_declarations
↓
❌ Встречает неподдерживаемое поле Schema → ошибка 400

Список полей JSON Schema, не поддерживаемых API Gemini
Это и есть корень проблемы. Поддержка JSON Schema в function_declarations у Gemini ограничена подмножеством стандарта, и следующие поля вызывают ошибку 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, распознавание изображений сразу начинает работать корректно, так как API GPT-5.4 нативно поддерживает полную спецификацию JSON Schema, и сгенерированные OpenClaw определения инструментов полностью совместимы.
📌 Важный вывод: Проблема не в способностях Gemini распознавать изображения, а в том, что формат Schema, отправляемый OpenClaw в режиме совместимости с OpenAI, не соответствует требованиям API Gemini.
Решение 1: Переход на нативный формат Gemini (рекомендуется)
Самый надежный способ — переключить тип API-интерфейса Gemini в OpenClaw с openai-completions на нативный формат google-generative-ai.
Шаги по настройке
До изменений (режим совместимости с OpenAI — могут возникнуть проблемы):
{
"provider": "google",
"model": "gemini-2.5-flash",
"baseUrl": "https://generativelanguage.googleapis.com/v1beta/openai",
"api": "openai-completions",
"apiKey": "ВАШ_API_КЛЮЧ_GEMINI"
}
После изменений (нативный формат Gemini — рекомендуется):
{
"provider": "google",
"model": "gemini-2.5-flash",
"baseUrl": "https://generativelanguage.googleapis.com/v1beta",
"api": "google-generative-ai",
"apiKey": "ВАШ_API_КЛЮЧ_GEMINI"
}
Основные отличия в нативной конфигурации
| Параметр | Режим совместимости OpenAI | Нативный формат Gemini | Примечание |
|---|---|---|---|
baseUrl |
.../v1beta/openai |
.../v1beta |
Убираем путь /openai |
api |
openai-completions |
google-generative-ai |
Меняем тип интерфейса |
| Формат изображений | base64 inline | base64 / File API | Нативная поддержка разных способов |
| Вызов инструментов | OpenAI function calling | Gemini function declarations | Полная совместимость схем |
| Параметр thinking | могут отправляться несовместимые данные | нативный thinkingBudget | Нет конфликтов |
Быстрое переключение через CLI OpenClaw
# Способ 1: Повторная инициализация конфигурации Gemini
openclaw onboard --auth-choice gemini-api-key
# Способ 2: Ручное редактирование файла конфигурации
# Путь к файлу: ~/.openclaw/config.json
# Измените поле api с "openai-completions" на "google-generative-ai"
Посмотреть полный пример нативного файла конфигурации Gemini для OpenClaw
{
"providers": {
"google": {
"apiKey": "ВАШ_API_КЛЮЧ_GEMINI",
"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
}
}
}
}
}
🚀 Быстрый старт: Если вы не хотите вручную разбираться с совместимостью конфигураций, рекомендуем использовать единый интерфейс платформы APIYI (apiyi.com). Платформа автоматически преобразует запросы в формате OpenAI в нативный формат Gemini, поэтому разработчикам не нужно беспокоиться о различиях в схемах.
Решение 2: Автоматическая обработка совместимости через сервис-прокси API
Если вы хотите продолжать использовать режим совместимости с OpenAI в OpenClaw для вызова различных моделей (включая Gemini), вы можете решить проблему несовместимости форматов с помощью сервиса-прокси API.
Как работает сервис-прокси
OpenClaw (запрос в формате OpenAI)
↓
Сервис-прокси API (например, APIYI)
↓ Автоматическая очистка несовместимых полей JSON Schema
↓ Автоматическое преобразование формата запроса
Gemini API (нативный формат)
↓
✅ Успешный результат распознавания изображения
Пример конфигурации
# Вызов распознавания изображений Gemini через сервис-прокси APIYI
import openai
import base64
client = openai.OpenAI(
api_key="ВАШ_API_КЛЮЧ",
base_url="https://api.apiyi.com/v1" # Единый интерфейс APIYI
)
# Чтение и кодирование изображения
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 сервис-прокси APIYI
| Критерий | Прямое подключение к Gemini API | Через сервис-прокси APIYI |
|---|---|---|
| Совместимость JSON Schema | ❌ Требует ручной настройки | ✅ Автоматическая очистка |
| Совместимость с OpenAI SDK | ⚠️ Частичная | ✅ Полная |
| Переключение моделей | Нужно менять конфиг | Достаточно сменить параметр model |
| Формат изображений | base64 inline | base64 inline |
| Вызов инструментов | Ограниченная схема | Автоматическое преобразование |
| Дополнительные расходы | Нет | Комиссия платформы |
Настройка сервиса-прокси APIYI в OpenClaw:
{
"provider": "apiyi",
"model": "gemini-2.5-flash",
"baseUrl": "https://api.apiyi.com/v1",
"api": "openai-completions",
"apiKey": "ВАШ_API_КЛЮЧ_APIYI"
}
💡 Совет: Если вы используете в OpenClaw сразу несколько моделей (GPT-5.4, Claude, Gemini и т.д.), централизованное управление вызовами через APIYI (apiyi.com) будет более эффективным решением, позволяющим избежать настройки отдельных форматов API для каждой модели.
Решение №3: Ручная очистка несовместимых полей JSON Schema
Если вам нужно решить проблемы совместимости на уровне кода, вы можете вручную очищать поля JSON Schema, которые не поддерживаются Gemini, перед отправкой запроса.
Функция для очистки JSON Schema
def clean_schema_for_gemini(schema: dict) -> dict:
"""Очистка полей JSON Schema, не поддерживаемых Gemini"""
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):
"""Рекурсивная очистка полей JSON Schema, не поддерживаемых Gemini"""
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):
"""Очистка всех схем в списке инструментов"""
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
)
⚠️ Примечание: Метод ручной очистки схемы требует обработки определений параметров для каждого инструмента, что влечет за собой высокие затраты на поддержку. Если инструментов много или они часто меняются, рекомендуем отдать предпочтение варианту №1 (нативный формат) или варианту №2 (сервис-прокси API).
Сравнение 3 решений и рекомендации по выбору

| Сравнение | Вариант №1: Нативный формат | Вариант №2: API-прокси | Вариант №3: Ручная очистка |
|---|---|---|---|
| Сложность настройки | ⭐⭐ Просто | ⭐ Самый простой | ⭐⭐⭐ Сложно |
| Затраты на поддержку | Низкие | Минимальные | Высокие |
| Совместимость | Только Gemini | Универсально для моделей | Требует адаптации |
| Распознавание изображений | ✅ Полная поддержка | ✅ Полная поддержка | ✅ Поддерживается |
| Вызов инструментов | ✅ Нативная поддержка | ✅ Автоматическая конвертация | ⚠️ Требует обновлений |
| Переключение моделей | Требует изменения настроек | Достаточно сменить параметры | Требует разной логики очистки |
| Рекомендуемые сценарии | Только Gemini | Смешанное использование | Собственные системы |
Дерево принятия решений
- Используете Gemini только в OpenClaw → Вариант №1 (нативный формат), самый стабильный.
- Используете несколько моделей в OpenClaw → Вариант №2 (APIYI), самый удобный.
- Самостоятельная разработка AI-приложения с тонкой настройкой → Вариант №3 (ручная очистка), самый гибкий.
- Не уверены в выборе → Попробуйте вариант №2, быстро проверьте через APIYI (apiyi.com).
Часто задаваемые вопросы
Q1: Почему Gemini не поддерживает полную спецификацию JSON Schema?
В function_declarations модели Gemini используется ограниченное подмножество спецификации OpenAPI 3.0, а не полная версия JSON Schema Draft 7+. При разработке Google выбрала более строгую стратегию проверки, поэтому такие продвинутые поля, как patternProperties, const и additionalProperties, не поддерживаются. Это отличается от реализации OpenAI, где поддержка JSON Schema гораздо более гибкая. Использование таких сервисов-прокси API, как APIYI (apiyi.com), позволяет автоматически обрабатывать эти различия, избавляя разработчиков от необходимости ручной адаптации.
Q2: Повлияет ли переключение на нативный формат на другие функции OpenClaw?
Нет. После переключения на google-generative-ai текстовые диалоги, вызовы инструментов, генерация кода и другие функции OpenClaw продолжат работать в штатном режиме, а распознавание изображений и мультимодальные возможности станут даже стабильнее. Единственное, на что стоит обратить внимание — это изменение формата параметра thinking: в нативном режиме используется thinkingBudget вместо reasoning_effort.
Q3: Почему иногда запрос проходит успешно после повторной попытки?
Это происходит потому, что проверка схемы в OpenAI-совместимой конечной точке Gemini не всегда выполняется строго. В некоторых запросах, если они не включают сложные вызовы инструментов (то есть в запросе нет несовместимых полей схемы), всё проходит нормально. Но как только дело доходит до вызова инструментов, а схема содержит несовместимые поля, система выдает ошибку 400.
Q4: Увеличивает ли задержку использование сервиса-прокси API?
Да, задержка немного возрастает, обычно на 50–150 мс. Для задач вроде распознавания изображений, которые сами по себе занимают 1–3 секунды, эта задержка практически незаметна. Платформа APIYI (apiyi.com) оптимизирует маршрутизацию для популярных моделей, поэтому на реальном пользовательском опыте это почти не сказывается.
Q5: Есть ли эта проблема у других инструментов, помимо OpenClaw?
Да. LiteLLM, LangChain, Qwen Code и другие инструменты при вызове Gemini через OpenAI-совместимый режим сообщают о похожих проблемах совместимости JSON Schema (GitHub issues: BerriAI/litellm#14330, langchain-ai/langchainjs#8584). Это общее ограничение API Gemini, а не специфическая проблема OpenClaw.
Итог
Основная причина сбоев при распознавании изображений через OpenClaw в Gemini заключается в несовместимости полей JSON Schema в OpenAI-совместимом режиме, а не в проблемах с визуальными способностями самой модели. Вот 3 решения для разных сценариев:
- Нативный формат (
google-generative-ai): самое надежное решение, рекомендуется, если вы используете только Gemini. - Сервис-прокси API: самый простой вариант, рекомендуется при использовании нескольких моделей одновременно.
- Ручная очистка схемы: самый гибкий вариант, рекомендуется для собственных систем.
Рекомендуем использовать APIYI (apiyi.com) для быстрой проверки возможностей распознавания изображений в Gemini. Платформа поддерживает унифицированный вызов популярных моделей, таких как Gemini, GPT и Claude, автоматически обрабатывая различия в форматах API.
Справочные материалы
-
Официальная документация Gemini — Распознавание изображений: Описание возможностей визуального восприятия Gemini
- Ссылка:
ai.google.dev/gemini-api/docs/image-understanding
- Ссылка:
-
Официальная документация Gemini — Совместимость с OpenAI: Инструкция по вызову Gemini через SDK OpenAI
- Ссылка:
ai.google.dev/gemini-api/docs/openai
- Ссылка:
-
OpenClaw GitHub Issue #21172: Ошибка 400 в Gemini API из-за patternProperties
- Ссылка:
github.com/openclaw/openclaw/issues/21172
- Ссылка:
-
OpenClaw GitHub Issue #14456: Ошибка 400 в режиме совместимости с OpenAI для Gemini 2.5 Flash
- Ссылка:
github.com/openclaw/openclaw/issues/14456
- Ссылка:
-
Документация по конфигурации моделей OpenClaw: Руководство по настройке провайдеров моделей
- Ссылка:
docs.openclaw.ai/concepts/model-providers
- Ссылка:
📝 Автор статьи: Команда APIYI — специализируемся на интеграции API больших языковых моделей и техническом анализе
🔗 Больше руководств: Посетите APIYI на apiyi.com, чтобы получить дополнительные инструкции по вызову моделей и бесплатные тестовые лимиты
