Веб-приложение на FastAPI, которое принимает CSV/XLS/XLSX, очищает данные, отправляет профиль набора данных в LLM, строит 5 графиков через Plotly и формирует PDF-отчёт.
Дополнительно реализованы три механики для аналитиков:
Chat with Data— чат с данными на естественном языкеAnomaly Radar— автоматический поиск аномалий и сильных корреляцийForecast Oracle— быстрые прогнозные сигналы по числовым метрикам
upload_station/— приём файла и защита загрузкиcleaning_department/— очистка, нормализация, типизацияai_brain/— промпты, LLM-адаптеры, парсинг ответаchart_factory/— blueprint, построение графиков, инсайты, галереяreport_studio/— HTML-шаблон и генерация PDFweb_face/— SPA-интерфейс на Alpine.jsshared_kernel/— Pydantic-контракты, настройки, хранилище сессийanalysis_laboratory/— аномалии и прогнозные сигналыchat_operator/— чатовый слой для вопросов к данным
- Создайте
.envна основе.env.example. - Установите зависимости:
pip install -r requirements.txt - Запустите сервер:
uvicorn app:app --reload - Откройте
http://localhost:8000.
docker build -t ai-dashboard-generator .
docker run --rm -p 8000:8000 --env-file .env ai-dashboard-generatorOPENAI_API_KEYOPENAI_MODELYANDEX_API_KEYYANDEX_FOLDER_IDYANDEX_MODEL_URIGENERIC_AI_API_KEYGENERIC_AI_BASE_URLGENERIC_AI_MODELADMIN_API_KEYJWT_SECRET_KEYAI_PROVIDERMAX_FILE_SIZE_MBSESSION_TTL_MINUTESRATE_LIMIT_REQUESTSRATE_LIMIT_WINDOW_SECONDSCHART_ROW_LIMITAI_TIMEOUT_SECONDS
- асинхронный конвейер обработки:
POST /api/upload->job_id,GET /api/job/{job_id}-> статус - облегчённый слой постоянного хранения на SQLite как переходный этап к PostgreSQL
- хранение сессий, job, чатов и каталога отчётов
- JWT RBAC с ролями
analyst,manager,admin - типизированные API-ответы и endpoint проверки состояния:
GET /api/health - rate limiting для upload endpoint
- TTL-очистка слоя в памяти и безопасные имена директорий сессий
- структурированное логирование и время ответа в
X-Process-Time-Ms - fallback-план графиков при ошибке AI
- устойчивое чтение CSV с несколькими кодировками
- ограничение числа строк для charting, чтобы интерфейс не деградировал на больших файлах
- универсальный provider-слой для LLM через
AI_PROVIDER - поддержка OpenAI, Yandex и generic OpenAI-compatible API
- admin endpoints с заголовком
X-Admin-API-Key - provider SDK-контракты для
chart planning,chat answering,insight generation
Если у заказчика есть провайдер с OpenAI-compatible API, достаточно задать:
AI_PROVIDER=generic
GENERIC_AI_API_KEY=...
GENERIC_AI_BASE_URL=https://vendor.example.com/v1
GENERIC_AI_MODEL=vendor-model-name
После этого пайплайн будет работать без переписывания бизнес-логики.
Если у нового провайдера не OpenAI-compatible контракт, добавляется один новый адаптер в папку ai_brain/ и одна ветка в provider_registry.py.
POST /api/auth/demo-login— получить демонстрационный JWTPOST /api/upload— поставить файл в очередьGET /api/job/{job_id}— проверить статус обработкиPOST /api/chat/{session_id}— чат с даннымиGET /api/catalog/session/{session_id}— каталог отчётов по сессииGET /api/admin/session/{session_id}— инспекция полной сессииGET /api/admin/job/{job_id}— инспекция job