Вопрос или проблема
Я пытаюсь передать изображение в формате base64 в gpt-4o, но получаю ошибку 400: неверный base64 image_url.
Я использую следующий код:
const openairesponse = await openai.chat.completions.create({
model: "gpt-4o",
messages: [
{ role: 'system', content: "Преобразуйте изображение в текст" },
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
//Закодированное изображение в формате base64
"url": "data:image/jpeg;base64,"+base64Image
}
}
]
}
],
});
base64Image – это строка, начинающаяся с ‘/9j/’, и она должна быть действительной. Но openai возвращает недопустимый URL изображения.
Какие идеи, как это исправить?
Ответ или решение
Вы столкнулись с проблемой передачи изображения в формате base64 через API OpenAI, что приводит к ошибке "400 Invalid base64 image_url". Давайте разберемся с возможными причинами и путями решения этой проблемы.
-
Проверка формата base64: Убедитесь, что ваша строка base64 действительно корректна. Строка должна начинаться с соответствующего префикса (‘data:image/jpeg;base64,’) и содержать только допустимые символы. Если вы видите символы, отличные от латинских букв, цифр и некоторых специальных символов (например, ‘+’, ‘/’, ‘=’), это может быть причиной ошибки.
-
Правильный конструкция запроса: В вашем коде есть некоторые моменты, которые стоит обратить внимание. Описание сообщения с изображением в iвидео, осуществляется с помощью массива, тогда как обычно ожидается объект. Вот исправленный пример вашего кода:
const openairesponse = await openai.chat.completions.create({
model: "gpt-4o",
messages: [
{ role: 'system', content: "Convert the image to text" },
{
role: "user",
content: {
type: "image_url",
image_url: {
url: "data:image/jpeg;base64," + base64Image
}
}
}
],
});
Обратите внимание, что content
теперь представляет собой объект, а не массив.
-
Проверка длины строки: Некоторые API имеют ограничения на длину строки. Убедитесь, что ваш код не превышает допустимые пределы. Если ваше изображение очень большое, возможно, стоит уменьшить его размер перед кодированием в base64.
-
Отладка: Попробуйте распечатать итоговую строку URL перед отправкой запроса, чтобы убедиться, что она корректна:
console.log("Prepared image URL: ", "data:image/jpeg;base64," + base64Image);
- Альтернативные подходы: В некоторых случаях бывает полезно сохранить изображение временно на сервере и передать его URL-адрес вместо использования base64. Это может упростить процесс и устранить потенциальные проблемы с форматированием.
Если все перечисленное выше не помогло, возможно, стоит обратиться в службу поддержки OpenAI с просьбой о более подробной информации. Они могут предоставить более точные указания или уведомить вас о любых текущих ограничениях на использование изображений в вашем конкретном случае.
Надеюсь, эти рекомендации помогут вам решить вашу проблему и успешно передать изображение для обработки.