[BACK-AI-05] Разработка FastAPI-сервиса ИИ-структурирования текста через модель Qwen

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

Published

October 14, 2026

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

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

Сырой текст, полученный после расшифровки аудиозаписи (Whisper), представляет собой сплошную неразмеченную строку. Необходимо реализовать микросервис на FastAPI, который передает этот текст в локальную модель qwen2.5:3b через Ollama API для извлечения названий продуктов, их веса, порций и формирования валидной JSON-структуры.

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

  1. Реализация DTO-модели запроса: Спроектировать Pydantic-модель PromptRequest, содержащую обязательное строковое поле prompt (куда Go будет передавать сырой текст вместе с системным промптом-инструкцией). Поля model="qwen2.5:3b", stream=False и format="json" зафиксировать как дефолтные.
  2. Маршрутизация и обработка: Создать эндпоинт POST /api/generate. Реализовать отправку запроса в Ollama с таймаутом в 25 секунд (timeout=25).
  3. Очистка и десериализация: Применять очистку от markdown-тегов ```json через re.sub, после чего парсить очищенную строку в честный JSON с помощью json.loads.
  4. Обработка сбоев и отправка на модерацию (Fallback):
    • При перехвате исключений json.JSONDecodeError или таймаутов, вызывать функцию fallback_response.
    • Изменить дефолтный контракт: возвращать структуру с параметрами "status": "invalid", "receipt_no": "VOICE-PARSER-FAIL" и текстовой причиной "moderation_reason". Это позволит Go-бэкенду понять, что ИИ не справился, и отправить транзакцию в очередь на ручную проверку.