Skip to content

MaksimSamarin/ai-feedback-analysis

Repository files navigation

AI Feedback Analyzer

Self-hosted приложение для массового анализа клиентских отзывов из Excel через LLM. Загружаете .xlsx, описываете задачу в промпте, настраиваете поля ответа — сервис прогоняет каждую строку через модель и собирает итоговую xlsx-выгрузку с результатами.

Работает с любым OpenAI-совместимым API (OpenAI, Azure OpenAI, локальные инференсы через vLLM/TGI и т. п.) и опционально с Ollama. Модель и провайдер выбираете через .env, в UI ключ можно вводить на каждый прогон.

Что умеет

  • Загрузка xlsx, парсинг листов и колонок, inspect-worker готовит файл в фоне.
  • Визуальный конструктор полей ответа — без ручного JSON, типы (текст/число/дата/список), ограничения, enum.
  • Групповой режим — LLM получает всю группу строк (например, отзывы одной смены) разом, возвращает один агрегат на группу.
  • Потоковая обработка — отчёты на сотни тысяч строк не падают по памяти, xlsx и JSON пишутся на диск по мере поступления.
  • Live-превью — первые результаты появляются сразу, пока остальное ещё крутится.
  • Умный retry — при невалидном ответе модель получает обратную связь от валидатора и исправляется на следующей попытке.
  • LLM-кэш — точный (по хэшу промпта) + семантический (по эмбеддингам), снижает расход токенов при повторных прогонах.
  • Пауза / продолжение / перезапуск упавших отчётов без повторного расхода токенов на готовые строки.
  • Позиция в очереди — видно сколько задач впереди.
  • Два готовых пресета на задачу поиска мошенничества в отзывах сотрудников (построчный и групповой) + демо-файлы в examples/.
  • История отчётов, изоляция по пользователю, ролевая модель user/admin, админка.
  • Темы light/dark.

Стек

  • Backend: FastAPI (Python 3.12), psycopg3 + PostgreSQL 15, Redis 7 (очереди + pubsub + кэш), Argon2, Fernet.
  • Frontend: React 18 + TypeScript + MUI v6, Vite.
  • Инфраструктура: docker compose (backend, worker, inspect-worker, frontend, postgres, redis).

Быстрый старт

Требования

  • Docker + Docker Compose.
  • Доступ к OpenAI-совместимому LLM (свой API-ключ). Если нет — можно поднять локальный Ollama.

Запуск

git clone https://github.com/MaksimSamarin/ai-feedback-analysis.git
cd ai-feedback-analysis
cp .env.example .env
# Откройте .env и задайте:
#   OPENAI_BASE_URL   — ваш эндпоинт
#   OPENAI_API_KEY    — ваш ключ (или оставьте пустым и вводите в UI)
#   OPENAI_MODELS     — список моделей через запятую (первая = дефолтная)
#   APP_SECRET        — любая длинная случайная строка (генерация: openssl rand -hex 32)
#   POSTGRES_PASSWORD — пароль БД
#   BOOTSTRAP_ADMIN_USERNAME / BOOTSTRAP_ADMIN_PASSWORD — первый админ (опционально)

docker compose up -d --build

Интерфейс: http://localhost:8080 Health API: http://localhost:8080/api/health

Первый анализ

  1. Войдите (или зарегистрируйтесь).
  2. Блок «1. Данные и модель» — перетащите .xlsx в зону загрузки или нажмите кнопку «Примеры файлов» справа от неё, выберите демо-файл.
  3. Укажите лист, колонки для анализа, опционально колонки для копирования в итоговый отчёт, опционально группировку.
  4. Блок «2. Шаблон» — выберите готовый пресет или напишите свой промпт и настройте поля ответа. Подсказка «Как это работает» — по кнопке рядом с заголовком.
  5. Блок «3. Обработка» — «Запустить новый анализ».
  6. Блок «4. Результаты» — превью обновляется в процессе, готовый xlsx скачивается после завершения.

Демо-файлы в examples/ — две версии на 1 000 и 100 000 отзывов с русскими колонками (id, магазин, смена, отзыв, оценка, дата) и готовыми пресетами под задачу поиска мошенничества.

Структура проекта

├─ backend/                       # FastAPI + воркеры
│  ├─ app/
│  │  ├─ main.py                  # HTTP API, endpoints, auth
│  │  ├─ db.py                    # PostgreSQL (psycopg3), SQL
│  │  ├─ worker.py                # analysis / inspect worker
│  │  ├─ queue.py                 # Redis queues, dedup, lease
│  │  ├─ services/
│  │  │  ├─ job_manager.py        # оркестрация обработки, LLM-вызовы
│  │  │  └─ excel_service.py      # чтение xlsx, потоковый экспорт
│  │  └─ providers/               # OpenAI-compat, Ollama
│  └─ tests/unit/                 # pytest, 225+ тестов
├─ frontend/                      # React + MUI
├─ ops/postgres/init/             # 001_schema.sql — инициализация БД
├─ examples/                      # демо-xlsx + генератор
├─ branding/                      # логотип (замените на свой)
├─ docs/
│  ├─ ARCHITECTURE.md
│  ├─ QUICK_START_RU.md
│  ├─ RELEASE_NOTES.md
│  └─ TESTING.md
├─ docker-compose.yml
└─ .env.example

Документация

Запуск тестов

Локально в Docker (без CI):

docker compose run --rm --no-deps \
  -v "$(pwd)/backend/tests:/tests" backend \
  bash -lc "pip install -q pytest pytest-asyncio && python -m pytest /tests/unit/ -v"

Лицензия

MIT — см. LICENSE.

Contributing

Issues и PR приветствуются. Для обсуждения крупных изменений сначала заведите issue.

About

Self-hosted batch LLM pipeline for analyzing customer feedback from Excel. Upload xlsx, describe the task, configure output fields — get structured results. Works with any OpenAI-compatible API and Ollama.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors