[BACK-AI-05] Разработка FastAPI-сервиса ИИ-структурирования текста через модель Qwen
ИИ-компоненты (AI Service)
NoteКраткая карточка задачи
- Репозиторий / Компонент:
ai_voice_text_parser. - Язык: Python 3.10+ (FastAPI, Pydantic, Requests).
- Тип задачи: Backend (ИИ-структурирование).
- Статус: Готово к реализации
Описание задачи
Сырой текст, полученный после расшифровки аудиозаписи (Whisper), представляет собой сплошную неразмеченную строку. Необходимо реализовать микросервис на FastAPI, который передает этот текст в локальную модель qwen2.5:3b через Ollama API для извлечения названий продуктов, их веса, порций и формирования валидной JSON-структуры.
Инструкция по шагам (Python)
- Реализация DTO-модели запроса: Спроектировать Pydantic-модель
PromptRequest, содержащую обязательное строковое полеprompt(куда Go будет передавать сырой текст вместе с системным промптом-инструкцией). Поляmodel="qwen2.5:3b",stream=Falseиformat="json"зафиксировать как дефолтные. - Маршрутизация и обработка: Создать эндпоинт
POST /api/generate. Реализовать отправку запроса в Ollama с таймаутом в25секунд (timeout=25). - Очистка и десериализация: Применять очистку от markdown-тегов ```
jsonчерезre.sub, после чего парсить очищенную строку в честный JSON с помощьюjson.loads. - Обработка сбоев и отправка на модерацию (Fallback):
- При перехвате исключений
json.JSONDecodeErrorили таймаутов, вызывать функциюfallback_response. - Изменить дефолтный контракт: возвращать структуру с параметрами
"status": "invalid","receipt_no": "VOICE-PARSER-FAIL"и текстовой причиной"moderation_reason". Это позволит Go-бэкенду понять, что ИИ не справился, и отправить транзакцию в очередь на ручную проверку.
- При перехвате исключений