MentorMatch — платформа для управления программой наставничества с интеграцией Telegram и Google Sheets. Проект объединяет несколько FastAPI‑сервисов, административную панель, Telegram‑бота и модуль интеллектуального матчинга на базе LLM и эмбеддингов.
Google Sheets --> google_data service --> Postgres (pgvector)
|
Telegram Bot <--> bot service --+
|
server API <--> matching service --> LLM API (proxy)
|
admin UI (FastAPI + Jinja)
docker-compose.yml поднимает все компоненты и общие тома для данных (pgdata, pgadmin_data, media_data).
| Сервис | Назначение | Порт |
|---|---|---|
server | Основной REST API: анкеты, уведомления, очередь эмбеддингов, webhooks | 8000 |
admin | Административная панель (шаблоны HTML + API) | 8100 |
matching | Сервис эмбеддингов и LLM‑матчинга, хранение векторов в Postgres | 8300 |
google_data | Импорт/экспорт Google Sheets, запуск воркфлоу синхронизации | 8200 |
bot | Telegram‑бот (Aiogram) для коммуникации со студентами и наставниками | 5000 |
postgres | PostgreSQL с расширением pgvector, загрузка схемы из schema.sql | 5432 |
pgadmin | Веб‑интерфейс для PostgreSQL (опционально) | 8080 |
cp env.example .env
Минимально необходимы:
POSTGRES_PASSWORDPROXY_API_KEY (ключ к прокси OpenAI API)TELEGRAM_BOT_TOKENSPREADSHEET_IDSERVICE_ACCOUNT_FILE (обычно service-account.json)google_data/service-account.json и выдайте ему доступ к нужным Google Sheets.docker compose up -d --build
BOT_API_URL (по умолчанию http://bot:5000)postgres / 5432 / mentormatch / secret)Контейнер postgres автоматически применит schema.sql. Для полного пересоздания БД используйте docker compose down -v.
| Переменная | Описание | По умолчанию |
|---|---|---|
POSTGRES_USER | Пользователь БД | mentormatch |
POSTGRES_PASSWORD | Пароль БД | secret |
POSTGRES_DB | Имя базы данных | mentormatch |
POSTGRES_HOST | Хост PostgreSQL (для контейнеров) | postgres |
POSTGRES_PORT | Порт PostgreSQL | 5432 |
DATABASE_URL | Полный DSN, если требуется override | — |
LOG_LEVEL | Уровень логирования сервисов | INFO |
PROXY_API_KEY | Ключ к прокси OpenAI API | — |
PROXY_BASE_URL | Базовый URL прокси | https://api.proxyapi.ru/openai/v1 |
PROXY_MODEL | Модель для LLM‑матчинга | gpt-4o-mini |
MATCHING_LLM_TEMPERATURE | Температура LLM | 0.2 |
SPREADSHEET_ID | ID основной Google Sheets | — |
PAIRS_SPREADSHEET_ID | ID таблицы с финальными парами (опция) | — |
SERVICE_ACCOUNT_FILE | Путь к JSON сервисного аккаунта внутри контейнера | service-account.json |
BOT_API_URL | HTTP API Telegram‑бота для уведомлений | http://bot:5000 |
SERVER_URL | Базовый URL сервера для бота | http://localhost:8000 |
TELEGRAM_BOT_TOKEN | Токен Telegram‑бота | — |
TEST_IMPORT | Импорт тестовых данных при старте (true/false) | false |
Дополнительно доступны настройки прокси Telegram (TELEGRAM_*), файлового логирования (LOG_FILE) и параметры модели.
POST /api/import/students (google_data) — студенты и их предпочтения.POST /api/import/supervisors (google_data) — наставники и роли.POST /api/import-sheet (server) — универсальный импорт листа по имени.POST /api/export/pairs (google_data) — выгрузка утвержденных пар./api/sheets-status и /api/sheets-config (server).GET /media/{id}; ссылки формируются при импорте.server/embedding_queue.py).matching пересчитывает эмбеддинги (Sentence Transformers) и сохраняет векторы в Postgres (pgvector)./api/match/* и /api/embeddings/* обрабатываются сервисом matching: выполняется поиск ближайших векторов, затем LLM ранжирует кандидатов.bot/run_bot.py.POST /notify, /api/messages/*, /api/bind-telegram).server/admins.txt (поддерживаются Telegram ID, @username, https://t.me/...).TELEGRAM_CONNECT_TIMEOUT, TELEGRAM_PROXY_URL и т. п.MentorMatch/
├─ admin/ # Административная панель (FastAPI + Jinja2 шаблоны)
├─ bot/ # Telegram-бот (Aiogram)
├─ google_data/ # Интеграция с Google Sheets и воркфлоу импорта
├─ matching/ # Эмбеддинги, LLM, матчинговый движок
├─ server/ # Основной REST API, медиахранилище, очереди
├─ docs/ # Дополнительная документация по контейнерам
├─ schema.sql # Схема PostgreSQL (pgvector)
├─ schema.md # Описание таблиц
├─ docker-compose.yml
└─ env.example
docker compose up postgres).pip install -r server/requirements.txt
uvicorn server.main:app --reload --port 8000
Для остальных сервисов: matching/requirements.txt, admin/requirements.txt, bot/requirements.txt..env.schema.sql для инициализации базы.docker compose downdocker compose down -vdocker compose logs -f server (или другой сервис)docker compose build <service>Подробные заметки по каждому контейнеру находятся в docs/containers/*.md.
88 commits
Python
88.3%
HTML
9.2%
PLpgSQL
2.0%
MentorMatch — платформа для управления программой наставничества с интеграцией Telegram и Google Sheets. Проект объединяет несколько FastAPI‑сервисов, административную панель, Telegram‑бота и модуль интеллектуального матчинга на базе LLM и эмбеддингов.
Google Sheets --> google_data service --> Postgres (pgvector)
|
Telegram Bot <--> bot service --+
|
server API <--> matching service --> LLM API (proxy)
|
admin UI (FastAPI + Jinja)
docker-compose.yml поднимает все компоненты и общие тома для данных (pgdata, pgadmin_data, media_data).
| Сервис | Назначение | Порт |
|---|---|---|
server | Основной REST API: анкеты, уведомления, очередь эмбеддингов, webhooks | 8000 |
admin | Административная панель (шаблоны HTML + API) | 8100 |
matching | Сервис эмбеддингов и LLM‑матчинга, хранение векторов в Postgres | 8300 |
google_data | Импорт/экспорт Google Sheets, запуск воркфлоу синхронизации | 8200 |
bot | Telegram‑бот (Aiogram) для коммуникации со студентами и наставниками | 5000 |
postgres | PostgreSQL с расширением pgvector, загрузка схемы из schema.sql | 5432 |
pgadmin | Веб‑интерфейс для PostgreSQL (опционально) | 8080 |
cp env.example .env
Минимально необходимы:
POSTGRES_PASSWORDPROXY_API_KEY (ключ к прокси OpenAI API)TELEGRAM_BOT_TOKENSPREADSHEET_IDSERVICE_ACCOUNT_FILE (обычно service-account.json)google_data/service-account.json и выдайте ему доступ к нужным Google Sheets.docker compose up -d --build
BOT_API_URL (по умолчанию http://bot:5000)postgres / 5432 / mentormatch / secret)Контейнер postgres автоматически применит schema.sql. Для полного пересоздания БД используйте docker compose down -v.
| Переменная | Описание | По умолчанию |
|---|---|---|
POSTGRES_USER | Пользователь БД | mentormatch |
POSTGRES_PASSWORD | Пароль БД | secret |
POSTGRES_DB | Имя базы данных | mentormatch |
POSTGRES_HOST | Хост PostgreSQL (для контейнеров) | postgres |
POSTGRES_PORT | Порт PostgreSQL | 5432 |
DATABASE_URL | Полный DSN, если требуется override | — |
LOG_LEVEL | Уровень логирования сервисов | INFO |
PROXY_API_KEY | Ключ к прокси OpenAI API | — |
PROXY_BASE_URL | Базовый URL прокси | https://api.proxyapi.ru/openai/v1 |
PROXY_MODEL | Модель для LLM‑матчинга | gpt-4o-mini |
MATCHING_LLM_TEMPERATURE | Температура LLM | 0.2 |
SPREADSHEET_ID | ID основной Google Sheets | — |
PAIRS_SPREADSHEET_ID | ID таблицы с финальными парами (опция) | — |
SERVICE_ACCOUNT_FILE | Путь к JSON сервисного аккаунта внутри контейнера | service-account.json |
BOT_API_URL | HTTP API Telegram‑бота для уведомлений | http://bot:5000 |
SERVER_URL | Базовый URL сервера для бота | http://localhost:8000 |
TELEGRAM_BOT_TOKEN | Токен Telegram‑бота | — |
TEST_IMPORT | Импорт тестовых данных при старте (true/false) | false |
Дополнительно доступны настройки прокси Telegram (TELEGRAM_*), файлового логирования (LOG_FILE) и параметры модели.
POST /api/import/students (google_data) — студенты и их предпочтения.POST /api/import/supervisors (google_data) — наставники и роли.POST /api/import-sheet (server) — универсальный импорт листа по имени.POST /api/export/pairs (google_data) — выгрузка утвержденных пар./api/sheets-status и /api/sheets-config (server).GET /media/{id}; ссылки формируются при импорте.server/embedding_queue.py).matching пересчитывает эмбеддинги (Sentence Transformers) и сохраняет векторы в Postgres (pgvector)./api/match/* и /api/embeddings/* обрабатываются сервисом matching: выполняется поиск ближайших векторов, затем LLM ранжирует кандидатов.bot/run_bot.py.POST /notify, /api/messages/*, /api/bind-telegram).server/admins.txt (поддерживаются Telegram ID, @username, https://t.me/...).TELEGRAM_CONNECT_TIMEOUT, TELEGRAM_PROXY_URL и т. п.MentorMatch/
├─ admin/ # Административная панель (FastAPI + Jinja2 шаблоны)
├─ bot/ # Telegram-бот (Aiogram)
├─ google_data/ # Интеграция с Google Sheets и воркфлоу импорта
├─ matching/ # Эмбеддинги, LLM, матчинговый движок
├─ server/ # Основной REST API, медиахранилище, очереди
├─ docs/ # Дополнительная документация по контейнерам
├─ schema.sql # Схема PostgreSQL (pgvector)
├─ schema.md # Описание таблиц
├─ docker-compose.yml
└─ env.example
docker compose up postgres).pip install -r server/requirements.txt
uvicorn server.main:app --reload --port 8000
Для остальных сервисов: matching/requirements.txt, admin/requirements.txt, bot/requirements.txt..env.schema.sql для инициализации базы.docker compose downdocker compose down -vdocker compose logs -f server (или другой сервис)docker compose build <service>Подробные заметки по каждому контейнеру находятся в docs/containers/*.md.
88 commits
Python
88.3%
HTML
9.2%
PLpgSQL
2.0%