Продавец на маркетплейсе делает фото товара с телефона и нажимает «Опубликовать». Проблема: ручное описание занимает до 30 минут, страдает качество и консистентность. Мы решаем эту задачу с помощью связки Vision API и LLM — система предлагает готовый текст по фотографии и категории товара за 2–4 секунды. Наша команда имеет более 5 лет опыта в мобильной разработке и реализовала 30+ интеграций AI-сервисов. Экономия времени для среднестатистического магазина — до 40% рабочего дня менеджера, а затраты на копирайтинг сокращаются на 70%.
Как AI-генерация описаний товаров работает под капотом?
Визуальный анализ фотографий — первый шаг. Google Cloud Vision API возвращает теги объектов, цвет, бренды на упаковке, текст на этикетке (OCR). Для мобильного приложения удобнее мультимодальный LLM (GPT-4o, Gemini Pro Vision) — один запрос с изображением сразу анализирует и генерирует текст. Точность распознавания объектов достигает 95%.
Структурированные атрибуты из формы — пользователь заполняет минимум: категория, цена, состояние (новое/б/у). Эти данные включаются в prompt как структурированный контекст. Остальное модель выводит из фото.
Реализация на клиенте
Весь flow асинхронный: пользователь выбирает фото, жмёт «Создать описание», видит skeleton loader, через 2–3 секунды получает редактируемый текст.
class DescriptionGeneratorViewModel : ViewModel() {
fun generateDescription(imageUri: Uri, category: String) {
_uiState.value = UiState.Loading
viewModelScope.launch {
try {
val base64Image = imageUri.toBase64(contentResolver)
val response = descriptionApi.generate(
GenerationRequest(
imageBase64 = base64Image,
category = category,
language = Locale.getDefault().language,
maxLength = 300
)
)
_uiState.value = UiState.Success(response.description)
} catch (e: Exception) {
_uiState.value = UiState.Error(e.message)
}
}
}
}
На iOS аналогично через async/await + URLSession:
func generateDescription(image: UIImage, category: String) async throws -> String {
let imageData = image.jpegData(compressionQuality: 0.8)!
let base64 = imageData.base64EncodedString()
let request = DescriptionRequest(imageBase64: base64, category: category, language: Locale.current.languageCode ?? "ru")
let response = try await api.generateDescription(request)
return response.text
}
Изображение сжимается до JPEG quality 0.8 перед отправкой — это снижает размер payload с ~3 МБ (RAW с камеры) до ~300–500 КБ без заметной потери качества для Vision API.
Prompt engineering для качественного результата
def build_prompt(category: str, image_tags: list, language: str) -> str:
return f"""
You are a professional copywriter for an online marketplace.
Write a product description based on the provided image.
Category: {category}
Detected attributes: {', '.join(image_tags)}
Language: {language}
Requirements:
- 2-3 sentences, 50-100 words
- Start with the main product feature, not "This is a..."
- Include detected color, condition, and brand if visible
- Use active voice
- No adjectives like "great", "amazing", "perfect"
"""
Запрет на «great», «amazing» и «perfect» — не формализм. Модели по умолчанию пихают их в каждое второе предложение, и описания становятся неотличимы друг от друга.
Streaming для улучшения perceived performance
Вместо ожидания полного ответа — стриминг через Server-Sent Events. Текст появляется по мере генерации, как в ChatGPT. На Android реализуется через okhttp3.EventSource, на iOS — URLSessionDataTask с didReceive data делегатом. Это особенно важно для длинных описаний (100+ слов), чтобы пользователь не ждал 4–5 секунд в пустоте.
Что делать, если качество описаний низкое?
Внедрите гибридный подход: AI генерирует черновик, человек финализирует. Такой метод, по отзывам клиентов, сокращает ручной труд на 60%. Для автоматизации контроля качества используйте A/B-тестирование двух версий описания — AI против AI+редактор — и отслеживайте конверсию.
Почему стоит выбрать AI-генерацию?
| Тип товара | Длина | Акцент |
|---|---|---|
| Электроника | 100–150 слов | Технические характеристики + состояние |
| Одежда | 60–80 слов | Размер, цвет, материал, состояние |
| Мебель | 80–120 слов | Габариты, материал, стиль |
| Книги | 40–60 слов | Автор, тема, состояние |
| Критерий | Облачное решение | On-device модель |
|---|---|---|
| Скорость | 2–4 сек | 1–2 сек |
| Качество | Высокое (GPT-4o) | Среднее (Core ML) |
| Зависимость от сети | Да | Нет |
| Обновляемость | Автоматически | Ручная замена |
Что входит в результат работы
- Документация по API и интеграции
- Доступ к репозиторию с промптами и конфигами
- Обучение команды редактированию шаблонов
- Поддержка на этапе запуска
- Рекомендации по A/B-тестированию описаний
Как избежать типичных ошибок при интеграции?
- Отправка RAW без сжатия — увеличивает время ответа. Всегда сжимайте до JPEG quality 0.8.
- Игнорирование категории — модель генерирует generic текст. Обязательно передавайте категорию в запрос.
- Отсутствие fallback при ошибке Vision API — пользователь видит пустой экран. Всегда показывайте placeholder или сообщение об ошибке.
Процесс работы
- Анализ: определяем категории товаров и источники изображений.
- Проектирование API: формат запроса, обработка ошибок Vision API.
- Настройка prompt templates по категориям товаров.
- Разработка клиентского UI с skeleton loader и редактором результата.
- Внедрение streaming для улучшения UX при длинных описаниях.
- Тестирование на реальных товарах и A/B-сравнение.
Ориентировочные сроки
Базовая интеграция (фото → описание через GPT-4o / Gemini) — 3–4 дня. С настройкой промптов по категориям и streaming — до 1 недели. Сложные проекты с on-device обработкой — от 2 недель.
Закажите расчёт интеграции уже сегодня — свяжитесь с нами. Получите консультацию по интеграции AI в приложение. Свяжитесь с нами для демо и оценки вашего проекта.







