[BACK-AI-01] Разработка FastAPI-шлюза для распознавания чеков через Llama Vision

ИИ-компоненты (AI Service)

Published

October 14, 2026

NoteКраткая карточка задачи
  • Репозиторий / Компонент: ai_receipt_vision_gateway.
  • Язык: Python 3.10+ (FastAPI, Pydantic, Requests).
  • Тип задачи: Backend (ИИ-интеграция).
  • Статус: Готово к реализации

Описание задачи

Необходимо реализовать легковесный шлюз на базе FastAPI, который принимает от основного Go-бэкенда изображения чеков в формате Base64, транслирует их в локальный сервер Ollama с развернутой мультимодальной моделью llama3.2-vision:11b и возвращает строго структурированный JSON-ответ.

Инструкция по шагам (Python)

  1. Создание моделей данных (Pydantic): Описать схему входного запроса PromptRequest. Поле images должно принимать массив строк, куда Go-сервис будет инжектировать одну картинку чека, закодированную в Base64. Параметры stream=False и format="json" зафиксировать по умолчанию.
  2. Проксирование запросов в Ollama: Реализовать POST-обработчик /api/generate. Метод должен отправлять синхронный JSON-запрос в Ollama API (/api/generate) по адресу, заданному в переменной окружения OLLAMA_HOST.
  3. Парсинг и очистка markdown-тегов: Поскольку LLM часто оборачивает JSON в markdown-разметку, применить регулярное выражение re.sub(r"```json\s*|```", "", raw_text) для очистки текста ответа перед десериализацией через json.loads.
  4. Реализация CPU-отказоустойчивости (Fallback):
    • Выставить строгий тайм-аут на запрос к Ollama в 40 секунд (timeout=40), так как инференс Vision-моделей на CPU требует больших вычислительных ресурсов.
    • При перехвате json.JSONDecodeError, requests.exceptions.RequestException или получении статус-кода не равного 200, логировать ошибку перегрузки CPU и вызывать хелпер fallback_response.
    • Хелпер должен возвращать клиенту фиксированный жестко заданный список продуктов (Куриное филе, Картофель) со структурой чека, чтобы предотвратить обрыв конвейера обработки на бэкенде.