AI-трекер калорий и макронутриентов (КБЖУ) с анализом еды по фотографиям и текстовым описаниям.
Веб-приложение для персонального учёта питания. Пользователь отправляет фото еды или текстовое описание — AI-агент определяет блюда, разбивает на ингредиенты, находит нутриентный состав в проверенных базах (USDA, Open Food Facts) и рассчитывает итоговые КБЖУ.
- Анализ фото еды (одно блюдо, несколько блюд, этикетки, штрих-коды)
- Текстовый ввод (название продукта, рецепт, описание еды)
- 8 специализированных путей обработки через LangGraph-агент
- Трёхуровневый поиск нутриентов: RAG (USDA/OFF) → Веб-поиск (Gemini Grounding) → Оценка LLM
- Дневник питания с дневными итогами и целями
- SSE-стриминг прогресса анализа в реальном времени
| Компонент | Технология |
|---|---|
| Backend | FastAPI (Python, async) |
| AI-агент | LangGraph (граф из 8 путей обработки) |
| LLM | Gemini API (vision + grounding) |
| Эмбеддинги | OpenAI-совместимый API (настраиваемый) |
| Векторная БД | Qdrant (семантический поиск продуктов) |
| СУБД | PostgreSQL 16 + Alembic (миграции) |
| Хранилище изображений | MinIO (S3-совместимое) |
| Observability | Langfuse + ClickHouse + Redis |
| Frontend | React 19 + TypeScript + Vite |
| Инфраструктура | Docker Compose |
# 1. Клонировать и настроить окружение
cp .env.example .env
# Отредактировать .env: указать GEMINI_KEY, EMBEDDING_API_URL/KEY/MODEL
# 2. Запустить все сервисы
docker compose up -d
# 3. Применить миграции БД
docker compose exec backend bash -c "PYTHONPATH=/app alembic upgrade head"
# 4. Создать пользователя
docker compose --profile scripts run --rm scripts python create_user.py \
--email your@email.com --password your_password
# 5. Загрузить базу продуктов (USDA)
docker compose --profile scripts run --rm scripts python ingest.py \
--data-dir /data --skip-off
# 6. Открыть приложение
# Frontend: http://localhost:3002
# API docs: http://localhost:8002/docsПодробнее о настройке: deployment.md
| Раздел | Описание |
|---|---|
| Архитектура | Схема сервисов, поток данных, фоллбэк-цепочка |
| API | Справочник эндпоинтов, SSE-стриминг, примеры запросов |
| Агентный пайплайн | LangGraph: 8 путей обработки, RAG, sanity check |
| База данных | Схема таблиц, миграции Alembic |
| Развёртывание | Docker Compose, переменные окружения, порты |
| Фронтенд | React-приложение: компоненты, роутинг, стили |
| Загрузка данных | Инжест USDA/OFF в Qdrant |
| Сервис | URL (по умолчанию) |
|---|---|
| Frontend | http://localhost:3002 |
| Swagger API | http://localhost:8002/docs |
| Langfuse | http://localhost:3100 |
| MinIO Console | http://localhost:9012 |