Это открытая демонстрация дипломного проекта TensorTalks. Здесь собрана документация (
.md), скриншоты и гифки интерфейса, презентации защиты и финальный текст ВКР. Исходный код, исследования и секреты сюда не входят — они хранятся в приватном репозитории.Смотреть:
- 🎤 Презентация предзащиты —
presentation/TensorTalks-Predefense.html(+ заметки, скрипт речи)- 🎤 Презентация митапа —
presentation/TensorTalks-Meetup.html(+ заметки)- 🎓 Финальная ВКР (PDF) —
РычковПА_ВКР.pdf- 📚 Курс «Agentic AI» — tensor-talks-agentic-ai-course
- 🖼️ Скриншоты и демо-гифки —
imgs/Ссылки на исходный код в документации ниже ведут в приватный репозиторий и здесь не открываются.
AI-симулятор технических ML-интервью для объективной оценки компетенций
TensorTalks — это AI-симулятор технических ML-интервью для объективной оценки компетенций. Платформа моделирует реальные собеседования с AI-интервьюером, анализирует ответы, выявляет слабые стороны и предлагает индивидуальные рекомендации.
TensorTalks помогает ML-специалистам и компаниям объективно оценивать и развивать технические компетенции в области машинного обучения через:
- 🤖 Реалистичные AI-симуляции интервью уровня FAANG и топ-стартапов
- 📊 Персонализированный разбор ответов и ошибок от AI-интервьюера
- 📈 Аналитику сильных и слабых сторон с конкретными рекомендациями
- 🎯 Стандартизацию процесса найма и развития для HR и TechLead
- Современный дизайн с градиентами и анимациями
- Адаптивная верстка для всех устройств
- Интуитивная навигация
- База вопросов — алгоритмы, ML-задачи, практические кейсы по уровням сложности от Junior до Senior
- AI-разбор ошибок — детальная обратная связь с объяснением ошибок и рекомендациями по улучшению
- Стандартизация оценки — единый формат оценки для HR и техлидов с объективными критериями
- Персонализация — индивидуальные планы развития на основе выявленных пробелов
-
Frontend (React микросервис)
Одностраничное приложение на React/TypeScript/Vite, отрисовывающее лендинг, экран аутентификации и пользовательские страницы. Общается только с BFF по HTTP. -
BFF (bff-service)
Backend-for-frontend на Go (Gin), который:- предоставляет REST API для фронтенда (
/api/...); - проксирует запросы аутентификации в
auth-service; - настраивает CORS и служит единственной точкой входа для браузера.
- предоставляет REST API для фронтенда (
-
Admin BFF (admin-bff-service)
Backend-for-frontend для админ-панели на Go:- JWT-аутентификация админа (
/auth/login,/auth/verify,/auth/logout); - проксирует запросы к
knowledge-base-crud,questions-crud,knowledge-producer,results-crud,auth-service,user-crud-service; - агрегирует метрики из Prometheus и
results-crud-serviceдля дашборда/metrics; - служит auth-backend для nginx-ingress
auth-urlвсех админ-поддоменов (Grafana, Prometheus, Alertmanager, Kafdrop, pgAdmin, RedisInsight, Vault UI, Langfuse, Kubernetes Dashboard, ArgoCD).
- JWT-аутентификация админа (
-
Admin Frontend (admin-frontend)
React-SPA админ-панели, общается только сadmin-bff-service. Пробрасывает iframe в наблюдаемые UI (Grafana, Kafdrop, Langfuse и др.) через reverse-proxy на admin-хосте, чтобы избежать cross-site cookie ограничений. -
Auth (auth-service)
Микросервис аутентификации на Go, отвечающий за:- регистрацию и логин по логину/паролю;
- выпуск и валидацию JWT (access/refresh);
- работу только через
user-crud-serviceбез прямого доступа к БД.
-
User Store (user-crud-service)
Микросервис-хранилище пользователей на Go с PostgreSQL:- единственный сервис с прямым доступом к БД логинов/паролей;
- предоставляет CRUD API и отладочный эндпоинт
/debug/users(фильтр+пагинация); - хранит пользователей с внутренним int PK и внешним GUID (external_id).
-
Session Service (session-service)
Микросервис управления сессиями (session-manager):- создаёт сессии с параметрами (topics, level, type, mode ∈ interview|training|study);
- кэширует активные сессии в Redis;
- координирует создание программы через Kafka;
- отдаёт
session_mode,topics,levelвGET /sessions/:id/programдля downstream-сервисов.
-
Session CRUD Service (session-crud-service)
CRUD микросервис для сессий в PostgreSQL:- хранит информацию о сессиях, параметры интервью и программы;
- предоставляет API для работы с сессиями.
-
Chat CRUD Service (chat-crud-service)
CRUD микросервис для чатов и сообщений в PostgreSQL:- хранит все сообщения чатов и дампы завершенных чатов;
- предоставляет API для сохранения и получения истории чатов.
-
Results CRUD Service (results-crud-service)
CRUD микросервис для результатов, пресетов и прогресса в PostgreSQL:- хранит результаты любых сессий (interview/training/study) с
session_kind,report_json,evaluations; - управляет
presets(рекомендованные программы после interview); - управляет
user_topic_progress(прогресс по темам после study).
- хранит результаты любых сессий (interview/training/study) с
-
Interview Builder Service (interview-builder-service)
Python FastAPI сервис для динамического создания программы интервью:- слушает Kafka топик
interview.build.request; - получает параметры интервью (topics, level, type);
- запрашивает вопросы из questions-crud-service по фильтрам;
- запрашивает знания из knowledge-base-crud-service для каждого вопроса;
- собирает программу интервью (5 вопросов по умолчанию);
- упорядочивает вопросы по логике;
- отправляет программу в Kafka топик
interview.build.response.
- слушает Kafka топик
-
Knowledge Base CRUD Service (knowledge-base-crud-service)
Go микросервис для работы с базой знаний в PostgreSQL:- CRUD операции над знаниями;
- поиск знаний по фильтрам (complexity, concept, parent_id, tags);
- хранение структурированных знаний в JSONB формате.
-
Questions CRUD Service (questions-crud-service)
Go микросервис для работы с базой вопросов в PostgreSQL:- CRUD операции над вопросами;
- поиск вопросов по фильтрам (complexity, theory_id, question_type);
- хранение структурированных вопросов в JSONB формате.
-
Knowledge Producer Service (knowledge-producer-service)
Python FastAPI сервис для наполнения баз знаний и вопросов с HITL workflow:- ингест markdown / JSON / PDF / URL и web-search (
arxiv,Semantic Scholar); - 4-шаговый пайплайн
gather_context → structure → check_duplicates → save_draft; - дедупликация черновиков по similarity;
- HITL
draft → review → publish, вknowledge-base-crud-service/questions-crud-serviceуходят только опубликованные сущности.
- ингест markdown / JSON / PDF / URL и web-search (
-
Dialogue Aggregator (dialogue-aggregator)
Go-оркестратор диалога (бывшийmock-model-service):- читает
chat.events.out, общается сinterviewer-agent-serviceчерезmessages.full.data/generated.phrases, отдаёт реплики вchat.events.in; - сам бизнес-решений не принимает (
next/hint/clarify/skip/completeприходят отinterviewer-agent-service); - получает программу + метаданные (
session_mode,topics,level) отsession-service; - публикует
session.completedв Kafka дляanalyst-agent-serviceс реальнымиsession_kind/topics/level.
- читает
-
Interviewer Agent Service (interviewer-agent-service)
Python LangGraph-сервис, ведущий интервью:- принимает контекст из
messages.full.data, прогоняет граф (классификация → оценка → решение); - возвращает реплику и решение (
next/hint/clarify/skip/complete) вgenerated.phrases; - хранит
question_evaluationsв Redis, ходит вsession-crud/chat-crud/knowledge-base-crudза контекстом.
- принимает контекст из
-
Analyst Agent Service (analyst-agent-service)
Python LangGraph-сервис для формирования финального отчёта:- подписан на
session.completed, поsession_kindуходит в одну из веток:interview→ формируетreport_json, обновляетresultsи создаёт запись вpresets;training→ обновляетresultsитоговой оценкой;study→ обновляетuser_topic_progressдля пройденных тем.
- подписан на
-
PostgreSQL
Хранит данные в нескольких базах:user_crud_db— таблицаusersс полямиid,external_id(UUID),login,password_hash;session_crud_db— таблицаsessionsс информацией о сессиях и программах интервью;chat_crud_db— таблицыmessagesиchat_dumpsдля истории чатов;results_crud_db— таблицыresults(сreport_json,evaluations,session_kind,result_format_version),presets,user_topic_progress;knowledge_base_crud_db— таблицаknowledgeдля структурированных знаний;questions_crud_db— таблицаquestionsдля вопросов интервью.
-
Redis
Кэширование активных сессий для быстрого доступа к программам интервью. -
Langfuse v3 (опционально, namespace
langfuse)
Self-hosted observability для LLM-агентов и Prompt Management. Один общий инстанс на оба окружения (tensor-talksиtensor-talks-test), изоляция — через два project-а внутри Langfuse и разные API-ключи. Подключается изinterviewer-agent-service,analyst-agent-service,interview-builder-serviceчерезLANGFUSE_HOST=http://langfuse-web.langfuse.svc.cluster.local:3000. Деплой: отдельный charthelm-langfuse/, ArgoCD applicationlangfuse. -
Kafka
Очереди для асинхронной обработки событий. Развертывается через Strimzi Operator в namespacetensor-talks:tensor-talks-chat.events.out— события от BFF к dialogue-aggregator (старт чата, сообщения пользователя, terminate);tensor-talks-chat.events.in— события от dialogue-aggregator к BFF (вопросы, completed);tensor-talks-messages.full.data— полный контекст диалога (dialogue-aggregator → interviewer-agent-service);tensor-talks-generated.phrases— реплика/решение (interviewer-agent-service → dialogue-aggregator);tensor-talks-interview.build.request— запрос на создание программы интервью (session-service → interview-builder);tensor-talks-interview.build.response— ответ с готовой программой иprogram_meta;tensor-talks-session.completed— событие завершения сессии (dialogue-aggregator → analyst-agent-service) сsession_kind,topics,level;- Kafka UI (Kafdrop) доступен для мониторинга топиков и сообщений.
- Языки: Go (основные сервисы), Python (FastAPI / LangGraph для interview-builder, knowledge-producer, interviewer-agent, analyst-agent)
- HTTP: Gin (Go), FastAPI (Python)
- ORM: GORM (Go), SQLAlchemy / asyncpg (Python)
- Конфигурация: Viper (Go), Pydantic Settings (Python)
- Логирование: Zap (Go), structlog (Python)
- Тестирование: Testify (Go), pytest + pytest-asyncio (Python)
- БД: PostgreSQL 16 (отдельные схемы на сервис, JSONB для гибких полей)
- Очереди: Kafka 4.1 (через Strimzi Operator, KRaft режим без Zookeeper)
- Мониторинг: Prometheus, Grafana, Loki + Promtail, Alertmanager (Telegram), Kafdrop, RedisInsight, pgAdmin, Langfuse v3
- Секреты: HashiCorp Vault (External Secrets Operator + Vault Agent Injector)
- Контейнеризация: Docker,
docker-compose - Оркестрация: Kubernetes, Helm, ArgoCD (GitOps), Istio (только prod)
- Публикация наружу: Cloudflare Tunnel + Cloudflare Access (SSO Google + OTP) для админ-поддоменов
Подробные схемы и описание каждого микросервиса см. в backend/README.md
и в отдельных README.md внутри backend/<service>/, а также в
frontend/README.md и admin-frontend/README.md.
# Клонируйте репозиторий
git clone https://github.com/PaulRychkov/TensorTalks.git
cd TensorTalks
# Запустите все сервисы
docker-compose up -d
# Откройте в браузере
# Frontend: http://localhost:5173
# API: http://localhost:8080
# Grafana: http://localhost:3000 (логин/пароль из Vault: tensor-talks/grafana)См. подробные инструкции:
- docs/INSTALLATION_MANUAL.md — установка и развертывание
- docs/DEVOPS_DEPLOY.md — DevOps архитектура и CI/CD пайплайн
# Клонируйте репозиторий
git clone https://github.com/PaulRychkov/TensorTalks.git
cd TensorTalks/frontend
# Установите зависимости
npm install
# Запустите dev сервер
npm run devОткройте http://localhost:5173 в браузере.
- Frontend: React, TypeScript, Vite, Tailwind CSS, React Router.
- Backend: Go (Gin, GORM, Viper, Testify), Python (FastAPI, LangChain, LangGraph), PostgreSQL.
- Очереди: Kafka (KRaft, через Strimzi Operator) для асинхронной обработки событий.
- Мониторинг: Prometheus (метрики), Grafana (визуализация), Loki (логи), Kafdrop (Kafka UI).
- Инфраструктура: Docker, docker-compose, Nginx (для фронтенда в контейнере).
frontend/
├── src/
│ ├── components/ # Компоненты
│ ├── pages/ # Страницы (лендинг, дашборд, чат, результаты)
│ ├── App.tsx # Главная страница (лендинг)
│ └── main.tsx # Точка входа
└── package.json # Зависимости
Текущий этап: MVP готов, interviewer-agent-service реализован, идет пилотная апробация
- Пользовательский интерфейс и навигация
- Адаптивный дизайн с современными градиентами
- Backend API и аутентификация (регистрация, логин, JWT)
- MVP логика чатов (создание сессий, отправка сообщений)
- Интеграция с Kafka для асинхронной обработки событий
- AI-агент для проведения интервью (interviewer-agent-service на LangGraph)
- Мониторинг (Prometheus, Grafana, Kafdrop) - развертывается в namespace
- Собственный Kafka кластер через Strimzi Operator
- Интеграция с Vault для управления секретами
- Логирование и метрики во всех микросервисах
- Хранение истории чатов и сессий (CRUD сервисы для чатов, результатов и сессий)
- Управление сессиями с Redis кэшированием
- Система создания программы интервью через Kafka
- Просмотр истории завершенных интервью и результатов
- Динамическая генерация программ интервью на основе уровня и темы
- База знаний и вопросов с CRUD сервисами
- Автоматическое заполнение баз при старте
- Фильтрация вопросов по сложности и темам
- WebSocket интеграция для real-time обновлений
- Расширенная база вопросов уровня FAANG
- Интеграции с HR-системами
- Голосовой интерфейс (ASR/TTS)
- Расширенная агентная система (course/agents-extension-plan.md)
Текущий статус: MVP 2025, пилотная апробация 2026
- docs/INSTALLATION_MANUAL.md — установка и развертывание
- docs/DEVOPS_DEPLOY.md — DevOps архитектура и CI/CD
- docs/UI_ENDPOINTS.md — все UI эндпоинты (Grafana, Prometheus, Kafdrop, pgAdmin, ArgoCD, Vault, Langfuse)
- helm/README.md — Helm chart
- helm/LANGFUSE.md — Langfuse v3 (наблюдаемость LLM-агентов)
- argocd/README.md — GitOps через ArgoCD
- backend/README.md — Backend архитектура
- backend/WORKFLOW.md — Workflow платформы
- backend/KAFKA.md — Kafka топики и форматы событий
- backend/METRICS.md — Prometheus метрики
- backend/common/logger/python/README.md — общий logger для Python-сервисов
Проект является выпускной квалификационной работой. В рамках курса по агентам делается PoC - агентная система поверх существующего функционала.
- Агент-планировщик собирает программу интервью под заданные параметры.
- Агент-интервьюер проводит интервью из 5 вопросов с уточнениями и подсказками, сам выбирает действия на основе контекста и инструментов (оценка ответа, поиск теории в KB, web search).
- Агент-аналитик формирует структурированный отчёт: оценка, ошибки по темам, подобранные материалы, план подготовки.
- Production-инфраструктура для evals
- Интеграции в HR-системы (ATS, SSO)
- WebSocket (работаем через polling)
- MCP-интеграции (Google Scholar, arxiv)
Документы курса в course/.
- Сайт: tensor-talks.ru
- Email: contact@tensor-talks.ru
- Объективная оценка своего уровня
- Практика в условиях реального интервью
- Структурированная обратная связь
- Понять требования к ML-интервью
- Получить структурированный план подготовки
- Наставничество и гайды
- Стандартизация процесса оценки
- Экономия времени интервьюеров
- Объективные критерии отбора
- Системная диагностика навыков
- Отслеживание прогресса команды
- Целенаправленное развитие
Сделано с ❤️ для ML-сообщества