Skip to content

Repository files navigation

🥗 КБЖУ Бот

AI-помощник для учёта калорий в Telegram

Python Aiogram Mistral SQLite Docker


💡 О проекте

Telegram-бот с AI-нутрициологом на базе Mistral AI. Просто напишите боту что вы ели — он найдёт продукт, рассчитает КБЖУ и запишет в дневник питания.

Возможности

Функция Описание
🤖 AI-агент Интеллектуальный нутрициолог на Mistral (tool calling)
🔍 Поиск продуктов База YAZIO с тысячами продуктов на русском
📊 Учёт КБЖУ Автоматический расчёт калорий, белков, жиров, углеводов
🎯 Персональные нормы Расчёт по формуле Миффлина-Сан Жеора
💬 Контекст диалога Бот помнит контекст разговора
📋 Inline-клавиатуры Удобная навигация без команд

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

Требования

Установка

git clone <repo-url> && cd hhBotAI
cp .env.example .env

Заполните .env:

BOT_TOKEN=your_telegram_bot_token
MISTRAL_API_KEY=your_mistral_api_key

Запуск

uv sync
uv run python main.py

Docker

docker compose up --build -d

🏗 Архитектура

app/
├── config.py                  # Конфигурация (pydantic-settings)
├── database/
│   ├── models.py              # Pydantic-модели, расчёт КБЖУ
│   ├── connection.py          # Менеджер SQLite
│   └── repository.py          # CRUD-операции
├── services/
│   ├── mistral_client.py      # Прямые HTTP-запросы к Mistral API
│   ├── yazio_client.py        # Поиск продуктов (YAZIO)
│   └── agent.py               # AI-агент с tool calling
└── bot/
    ├── states.py              # FSM-состояния
    ├── keyboards.py           # Inline-клавиатуры
    ├── middlewares.py         # Database middleware
    └── handlers/
        ├── start.py           # Онбординг (7 шагов)
        ├── chat.py            # Текст → AI-агент
        └── callbacks.py       # Меню и действия

Как работает агент

Пользователь: "Съел 200г гречки"
       │
       ▼
  ┌─────────────┐
  │  Mistral AI  │──► search_food("гречка")
  └─────────────┘         │
       ▲                  ▼
       │           ┌──────────────┐
       │           │   YAZIO API   │
       │           └──────────────┘
       │                  │
       │                  ▼
  ┌─────────────┐   Результаты поиска
  │  Mistral AI  │◄────────┘
  └─────────────┘
       │
       ▼
  log_meal(гречка, 200г, ...)
       │
       ▼
  ✅ Записано: Гречка — 200г
  📊 264 ккал | Б: 25г | Ж: 7г | У: 51г

⚙️ Стек

Технология Назначение
aiogram 3 Telegram Bot Framework
aiohttp HTTP-клиент для API
aiosqlite Асинхронный SQLite
pydantic-settings Конфигурация и валидация
Mistral AI LLM с function calling
YAZIO API База продуктов питания
Docker Контейнеризация

📝 Лицензия

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages