[BACK-AI-01] Разработка FastAPI-шлюза для распознавания чеков через Llama Vision
ИИ-компоненты (AI Service)
NoteКраткая карточка задачи
- Репозиторий / Компонент:
ai_receipt_vision_gateway. - Язык: Python 3.10+ (FastAPI, Pydantic, Requests).
- Тип задачи: Backend (ИИ-интеграция).
- Статус: Готово к реализации
Описание задачи
Необходимо реализовать легковесный шлюз на базе FastAPI, который принимает от основного Go-бэкенда изображения чеков в формате Base64, транслирует их в локальный сервер Ollama с развернутой мультимодальной моделью llama3.2-vision:11b и возвращает строго структурированный JSON-ответ.
Инструкция по шагам (Python)
- Создание моделей данных (Pydantic): Описать схему входного запроса
PromptRequest. Полеimagesдолжно принимать массив строк, куда Go-сервис будет инжектировать одну картинку чека, закодированную в Base64. Параметрыstream=Falseиformat="json"зафиксировать по умолчанию. - Проксирование запросов в Ollama: Реализовать POST-обработчик
/api/generate. Метод должен отправлять синхронный JSON-запрос в Ollama API (/api/generate) по адресу, заданному в переменной окруженияOLLAMA_HOST. - Парсинг и очистка markdown-тегов: Поскольку LLM часто оборачивает JSON в markdown-разметку, применить регулярное выражение
re.sub(r"```json\s*|```", "", raw_text)для очистки текста ответа перед десериализацией черезjson.loads. - Реализация CPU-отказоустойчивости (Fallback):
- Выставить строгий тайм-аут на запрос к Ollama в
40секунд (timeout=40), так как инференс Vision-моделей на CPU требует больших вычислительных ресурсов. - При перехвате
json.JSONDecodeError,requests.exceptions.RequestExceptionили получении статус-кода не равного 200, логировать ошибку перегрузки CPU и вызывать хелперfallback_response. - Хелпер должен возвращать клиенту фиксированный жестко заданный список продуктов (Куриное филе, Картофель) со структурой чека, чтобы предотвратить обрыв конвейера обработки на бэкенде.
- Выставить строгий тайм-аут на запрос к Ollama в