Все проекты

ТЕХНИЧЕСКИЙ КЕЙС / AI + BACKEND

B2B Product Content Generator

Черновики карточек измерительных приборов: FastAPI, Pydantic, GigaChat

Технический товар нельзя описывать, подменяя характеристики правдоподобным текстом. Нужно получать SEO-черновик и сохранять значения из исходной спецификации.

Тестовое задание для отбора на позицию AI/LLM-разработчика

01 / CONTEXT

Задача и ответственность

Инженерная проблема

Технический товар нельзя описывать, подменяя характеристики правдоподобным текстом. Нужно получать SEO-черновик и сохранять значения из исходной спецификации.

Что реализовал

Разработал HTTP API, контракты входа/выхода, адаптер GigaChat, защиту парсинга JSON, проверки результатов и тесты. Контроль исходных характеристик оставил программному коду, а не модели.

02 / FLOW

Архитектурный путь

Каждый этап объясняет вход, действие и результат — без имитации реального API.

  1. 01

    Входные данные

    POST /generate: название, производитель, specs и необязательное описание. Pydantic проверяет формат и размеры входа.

    Отклонённые некорректные данные не отправляются в LLM.

  2. 02

    Фиксация характеристик

    Сервис копирует specs из входного объекта и исключает технические параметры из генеративного контракта.

    LLM не переписывает словарь specifications.

  3. 03

    Генерация текста

    GigaChat отвечает только за SEO-заголовок, описание, поисковые запросы и коммерческий блок.

    Текстовые поля разбираются из строго проверяемого JSON.

  4. 04

    Проверка

    Pydantic, правила длины/формата и эвристики для отдельных рискованных и числовых утверждений.

    Статусы ready_for_review, requires_revision или insufficient_data с предупреждениями.

  5. 05

    Редакторская передача

    Потребитель API получает диагностический JSON и самостоятельно проверяет текст.

    ready_for_review не означает разрешение публикации.

Диагностический статус

  • ready_for_review — формальные проверки пройдены, решение редактора требуется
  • requires_revision — есть нарушения формата или содержания
  • insufficient_data — характеристик недостаточно для достоверного текста

03 / SOURCE-BACKED EXCERPT

Пример входных данных и ответа

Сокращённая выдержка из публичных демонстрационных файлов (4 из 13 характеристик). Результат получен через офлайн-воспроизведение записанного ответа и grounded fallback, а не в реальном времени на этом сайте. Смысловая проверка человеком обязательна.

Фрагмент входного JSON

{
  "name": "Термометр РОСМА БТ-51.211 (0–100 °C) G1/2.100.1,5",
  "manufacturer": "РОСМА",
  "specs": {
    "диаметр корпуса": "100 мм",
    "диапазон показаний": "0…+100 °C",
    "резьба гильзы": "G1/2",
    "класс точности": "1,5"
  }
}

Фрагмент результата

{
  "status": "ready_for_review",
  "card": {
    "seo_title": "Термометр РОСМА БТ-51.211 (0–100 °C) G1/2.100.1,5 — характеристики",
    "specifications": {
      "диаметр корпуса": "100 мм",
      "диапазон показаний": "0…+100 °C",
      "резьба гильзы": "G1/2",
      "класс точности": "1,5"
    }
  },
  "missing_fields": [],
  "warnings": []
}

Происхождение: offline_replay · gigachat_recorded_response_with_grounded_fallback

04 / ENGINEERING

Почему устроено именно так

Защита от фактических ошибок строится на отделении неизменяемых structured specs от свободного текста модели. Проверка текста намеренно эвристическая и не заменяет сверку с документацией производителя.

Результат и проверки

Доступен локальный HTTP API /generate и /health; карточка возвращается в виде черновика с диагностикой. Интеграции с публичным каталогом или автопубликации нет.

Диагностический статус

По отчёту приёмки v0.1.2: 384 теста, branch coverage 96,73%; 20 из 20 реальных карточек получили ready_for_review. Это результаты отчёта проекта, не повторный независимый замер для сайта.

05 / BOUNDARIES

Известные ограничения

  • На персональном GigaChat при десяти одновременных запросах зафиксированы 9 ответов HTTP 429; после этого добавлен семафор на один LLM-запрос в процессе, без нового live-прогона.
  • Семафор не является распределённым ограничителем для нескольких workers.
  • Проверка свободного текста эвристическая; возможны семантические ошибки и неверные соответствия характеристик.
  • Нет внешней авторизации клиентов, фоновой очереди, редакторского интерфейса и автоматической публикации.

Ограничение публикацииВсе карточки, включая ready_for_review, требуют ручной сверки перед публикацией.

06 / EVIDENCE

Подтверждение в исходниках

Файлы проекта привязаны к неизменяемому SHA. Числа тестирования взяты из отчёта приёмки, без повторного прогона.

← Все проекты