AAYMA
RU
Войти

Career Quest

Локальное веб-приложение: HR загружает данные о сотрудниках, навыках и мероприятиях.

Доведённый продукт
Команда «JassAI» 18💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: JassAI
Кейс HackAlem.ai: Менеджмент — Halyk Bank · кейс 1
Стадия: Доведённый продукт

Задача кейса: «Career Quest»: AI-навигатор, связывающий навыки сотрудника с шагами развития

Суть

Локальное веб-приложение: HR загружает данные о сотрудниках, навыках и мероприятиях. Сотрудник выбирает карьерную цель, видит дефициты навыков, получает 1–3 объяснимых шага от AI и проходит активности. Прогресс оформлен как игра (XP, квесты, гардероб) с 3D-спутником, снежным барсом.

Как устроено

Сервер на FastAPI с SQLite считает уровни навыков и покрытие цели по оценке и завершённым активностям. OpenAI Responses API выбирает 1–3 допустимых шага и приводит не меньше трёх факторов объяснения. Обязательные и недоступные мероприятия исключены, ответ проверяется сервером и данных не меняет. Потоковый чат-коуч работает через OpenAI или NVIDIA. Фронтенд написан на vanilla JS и Three.js с GLB-моделью барса. Windows-launcher ставит закреплённые uv и Python и хранит ключ через DPAPI.

Ключевые решения

  • расчёт покрытия навыков цели
  • валидация AI-рекомендаций сервером
  • streaming chat
  • геймификация XP/квесты
  • Three.js GLB-анимации
  • Windows DPAPI

Метрики

225 Python-тестов и 93 JS-теста пройдены; демо: навык 2→4, покрытие цели 55,6%→77,8%, +40 XP

Особенности

Приложение запускается одним launcher.cmd на Windows без предустановленного Python. Стартовый набор: 200 сотрудников, 60 навыков, 40 мероприятий. Награды приватные и выключены по умолчанию; простые объяснения генерируются локально, и их не выдают за ответ LLM.

Стек

Python · FastAPI · Pydantic · SQLite · uv · JavaScript · Three.js · Blender · pytest · node:test

Модели

OpenAI (Responses API) · NVIDIA (опционально)


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-9be09345-jassai.

README

README.md

Career Quest — ИИ-навигатор развития сотрудника

Кейс 1 Halyk Bank, HackAlem AI · команда JassAI.

Локальное веб-приложение: HR загружает данные и создаёт доступ; сотрудник выбирает карьерную цель, получает рекомендации, проходит активности и видит прогресс. 3D-спутник — снежный барс — связывает навыки с личными квестами и заработанными предметами.

Устройство и технологии

Браузер: интерфейс + Three.js → FastAPI → правила развития → SQLite
                                      → AI-провайдер → проверка ответа
launcher.cmd → uv + Python → scripts/launcher.py → локальный сервер
ЧастьСодержимое
app/Python 3.12.14, FastAPI, Pydantic, Uvicorn; авторизация HR/employee, импорт, расчёты навыков и активности
app/ai/, app/companion_chat.pyOpenAI Responses API через httpx; рекомендации и потоковый чат. Чат также поддерживает NVIDIA при ручной настройке сервера
app/gamification.py, app/companion.pyXP, квесты, гардероб и древо навыков; состояние сохраняется в SQLite
frontend/HTML/CSS, JavaScript ES modules, Three.js 0.170.0; без сборки Node.js и CDN
assets/snow_leopard/GLB, Blender-исходник и две циклические анимации: дыхание 5 секунд и оглядывание 8 секунд
scripts/, tests/, uv.lockLauncher, проверки, pytest и Node test runner, закреплённые Python-зависимости

Навыки рассчитывает сервер по оценке и завершённым активностям. AI выбирает 1–3 допустимых шага и минимум три разных фактора объяснения; обязательные и недоступные мероприятия исключены. Ответ проверяется сервером и не изменяет данные. Простые объяснения спутника формируются локально и не выдаются за LLM.

Запуск

Windows 10/11 x64, браузер и интернет для первой установки. Python, Git, Node.js, Blender и права администратора для обычного запуска не нужны. Для 3D требуется WebGL; при его отсутствии текстовые функции доступны.

  1. На GitHub выбрать main → Code → Download ZIP и полностью распаковать архив. Перед запуском новой копии остановить старую через Ctrl+C в её launcher.
  2. Дважды нажать launcher.cmd. Он загрузит закреплённые uv/Python, проверит SHA-256 uv, установит зависимости и откроет приложение на 127.0.0.1 со свободным портом.
  3. Подключение OpenAI можно пропустить. Для облачных рекомендаций и свободного чата настройка выполняется в launcher; ключ хранится через Windows DPAPI. Без настройки работают каталог, прогнозы, локальные ответы и награды.
  4. Создать первый аккаунт HR с собственным логином и паролем от 10 символов. Одноразовый токен launcher передаёт автоматически.
  5. На пустой базе автоматически загрузится starter-data/: 200 сотрудников, 60 навыков, 32 профиля роли/грейда, 40 мероприятий и 2 743 записи истории. Все люди и компании вымышлены. Существующие данные не перезаписываются.
  6. В «Сотрудники» → «Создать доступ» выбрать E0001, задать логин и пароль. Выйти из HR и войти этим логином; раздел «Спутник» доступен сотруднику. ID профиля не является логином.

Окно launcher оставить открытым; Ctrl+C останавливает сервер. Закрытие вкладки его не останавливает. При повторном запуске аккаунты, прогресс и экипировка сохраняются.

Данные и логи: %LOCALAPPDATA%\CareerQuest\instances\hack-9be09345-jassai\. SQLite находится в careerquest.sqlite3, диагностика — в logs/launcher.log и logs/server.stderr.log. При ошибке установки проверить доступ к GitHub/PyPI и повторить запуск.

Параметры: launcher.cmd /configure-ai — настройка OpenAI после остановки сервера; /disable-ai — удаление AI-настроек; /help — справка. Переменные ручного запуска описаны в .env.example; .env автоматически не читается. NVIDIA через launcher не подключается.

Основной сценарий

  1. HR видит частые дефициты навыков, сотрудников без следующего шага и участие в активностях; создаёт доступ сотруднику. Дополнительные данные загружаются через «Импорт данных» → «Проверить файлы» → «Применить изменения»; проверка сама по себе ничего не записывает.
  2. Сотрудник открывает «Мой путь», выбирает цель, изучает дефициты навыков и прогноз активности. При настроенном OpenAI запрашивает объяснимую рекомендацию.
  3. В «Спутник» смотрит древо навыков, задаёт вопрос и по желанию нажимает «Включить награды», затем выбирает личный квест.
  4. В «Активности» начинает доступное мероприятие; в «История» нажимает «Отметить выполнение». Навыки, покрытие цели и награды пересчитываются.
  5. В «Гардероб» примеряет и явно надевает открытый предмет. Обновление страницы и перезапуск сохраняют результат. Кнопки «Оглянуться» и «Пауза» управляют анимацией барса.

Награды выключены по умолчанию и видны только сотруднику. Импорт, обязательные активности и повторное завершение XP не дают. Закрытую вещь можно примерить, но нельзя надеть. Покрытие требований не означает повышение грейда; завершение в прототипе подтверждает сотрудник, внешняя LMS не подключена.

Воспроизведение результата

Для точного сценария на малом наборе остановить приложение и выполнить в PowerShell из корня проекта:

$env:CAREERQUEST_DATA_DIR = Join-Path $env:LOCALAPPDATA ('CareerQuest\demo-check-' + [guid]::NewGuid().ToString('N'))
$env:CAREERQUEST_SEED_DATA_DIR = 'off'
.\launcher.cmd

Это отдельная пустая база. Создать HR, импортировать из demo/ employees.json, events.json, skills.json, activity_history.csv и создать доступ для DEMO_E001. Войти его логином. Дата расчётов — 2026-10-01 из данных, независимо от часов компьютера.

  1. Проверить цель Инженер → Senior: «Проектирование сервисов» — уровень 2, покрытие 55,6%.
  2. В «Спутник» → «Включить награды» выбрать личный квест «Практика проектирования сервисов (демо)», DEMO_EV_DESIGN, и нажать «Выбрать».
  3. Начать эту активность и отметить выполнение. Результат: навык 2 → 4, покрытие 55,6% → 77,8% (API: 55,56% → 77,78%), +40 XP, завершённый квест.
  4. Проверить три новых предмета: кепка первого шага, блокнот открытий, шапка личного квеста. Надеть предмет, обновить страницу и проверить сохранение.

Для проверки перезапуска повторить только .\launcher.cmd в том же окне: повтор всего блока создаст ещё одну пустую базу. После завершения закрыть это окно PowerShell; обычный запуск продолжит использовать основной каталог данных.

Автоматические проверки

.\launcher.cmd /check

/check проверяет установку, готовность сервера, выдачу HTML/JavaScript и ресурса GLB, затем останавливает созданный проверочный сервер. Это не проверка всего пользовательского интерфейса; браузер и AI-запросы не запускаются.

Для полного набора нужны uv в PATH и Node.js. Из корня проекта:

uv sync --locked
uv run pytest -q
node --test tests/*.test.mjs
uv run python scripts/check_dataset.py starter-data
uv run python scripts/check_dataset.py demo

Результат: 225 Python-тестов и 93 теста JavaScript прошли. Проверяются импорт и сохранение данных, роли/CSRF, расчёты, повторные завершения, приватность наград, экипировка и контракты AI. AI-транспорт в автоматических тестах заменён синтетическими ответами; платные API не вызываются. check_dataset.py использует временную БД и проверяет импорт, дополнительный профиль, завершение, права и перезапуск.

На Windows проверены запуск из ZIP, стартовый набор, повторный /check с UV_OFFLINE=1; в браузере — сценарий +40 XP, сохранение одежды, обе анимации и экран 390 px. Это проверка на рабочем ПК, не отдельной чистой виртуальной машине. Автоматические тесты не оценивают качество и задержку живых моделей; без облачного подключения свободный AI-диалог недоступен, локальные объяснения остаются.

Звёзды
⭐ 0
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
32
Авторы
4
Файлы
107
Ветки
9

Авторы коммитов

Aliaskar 15Lucky-271 8nariman0812q-lab 7Aliaskar 2

История коммитов

  • 2026-09-23 17:58docs: explain HR setup, four-file import and Irbis featuresLucky-271
  • 2026-09-23 17:48docs: simplify jury README and define friendly Irbis instructionsAliaskar
  • 2026-09-23 17:46chore(B): upload unchanged cloud AI source snapshotnariman0812q-lab
  • 2026-09-23 17:31merge: preserve latest C branch history in integrated deliveryAliaskar
  • 2026-09-23 17:30docs: consolidate seeded startup and reproducible jury checksAliaskar
  • 2026-09-23 17:26merge: include latest seeded dataset and additive HR importsAliaskar
  • 2026-09-23 17:26feat: finish Irbis companion integration and harden offline launcherAliaskar
  • 2026-09-23 17:25Merge pull request #4 from BAITC-Hacks/mainAliaskar
Все коммиты (32)
  • 2026-09-23 17:21Merge pull request #3 from BAITC-Hacks/codex/companion-gamificationAliaskar
  • 2026-09-23 17:17feat(data): preload organizer dataset and support additive HR importsLucky-271
  • 2026-09-23 17:14merge: integrate companion UI and career coach with A B C deliveryAliaskar
  • 2026-09-23 17:14feat: add rigged snow leopard with two verified idle animationsAliaskar
  • 2026-09-23 16:54feat: add skill-tree companion, earned wardrobe and streaming career coachLucky-271
  • 2026-09-23 16:35feat: ship Windows jury launcher, demo data and consolidated READMEAliaskar
  • 2026-09-23 16:12fix(ui): align forecast rounding and history order with backendAliaskar
  • 2026-09-23 16:01merge: preserve latest AI launcher integration in Halyk redesignLucky-271
  • 2026-09-23 15:55feat(ui): implement Halyk redesign with forecasts and preserve personal questsLucky-271
  • 2026-09-23 15:53fix: integrate AI launcher and UI with verified Windows startupAliaskar
  • 2026-09-23 15:42Merge remote-tracking branch 'origin/feat/b-ai-launcher' into codex/gamificationAliaskar
  • 2026-09-23 15:42feat: add opt-in personal quests XP and private achievementsAliaskar
  • 2026-09-23 15:39docs(b): document launcher, AI contract and verification limitsnariman0812q-lab
  • 2026-09-23 15:38test(b): cover AI validation, privacy, deadline and launcher contractnariman0812q-lab
  • 2026-09-23 15:37feat(b): add bounded fact-based AI recommendation providernariman0812q-lab
  • 2026-09-23 15:37feat(b): create AI provider packagenariman0812q-lab
  • 2026-09-23 15:33feat(b): add protected AI setup and pinned Windows launchernariman0812q-lab
  • 2026-09-23 15:32feat(b): add Windows launcher entrypointnariman0812q-lab
  • 2026-09-23 14:40fix(ui): show completion result immediately and distinguish empty trajectoryLucky-271
  • 2026-09-23 14:38feat(ui): integrate backend A workflows and verify real browser importsLucky-271
  • 2026-09-23 14:21feat: implement backend data import progress and role-based accessAliaskar
  • 2026-09-23 14:20feat(ui): add employee and HR workflows with dual-provider settingsLucky-271
  • 2026-09-23 13:50docs: focus README on architecture setup and verificationAliaskar
  • 2026-09-23 13:45docs: define Career Quest scope architecture and delivery planAliaskar
Структура репозитория (107 файлов)
.env.example
.gitignore
.python-version
README.md
app/__init__.py
app/__main__.py
app/activities.py
app/ai/__init__.py
app/ai/provider.py
app/auth.py
app/companion.py
app/companion_chat.py
app/config.py
app/db.py
app/domain.py
app/gamification.py
app/imports.py
app/main.py
app/models.py
app/seed.py
assets/snow_leopard/Irbis_SnowLeopard.blend
assets/snow_leopard/Irbis_SnowLeopard.glb
assets/snow_leopard/Open_Model.cmd
assets/snow_leopard/model_info.json
assets/snow_leopard/previews/Idle_Breathe.gif
assets/snow_leopard/previews/Idle_Breathe.mp4
assets/snow_leopard/previews/Idle_LookAround.gif
assets/snow_leopard/previews/Idle_LookAround.mp4
assets/snow_leopard/previews/Irbis_back.png
assets/snow_leopard/previews/Irbis_front.png
assets/snow_leopard/previews/Irbis_portrait.png
assets/snow_leopard/previews/Irbis_side.png
assets/snow_leopard/previews/clips.json
assets/snow_leopard/source/animation.py
assets/snow_leopard/source/build_character.py
assets/snow_leopard/source/export_character.py
assets/snow_leopard/source/materials.py
assets/snow_leopard/source/render_previews.py
assets/snow_leopard/textures/materials_preview.png
assets/snow_leopard/textures/snow_leopard_coat_basecolor.png
assets/snow_leopard/textures/snow_leopard_fur_basecolor.png
assets/snow_leopard/textures/snow_leopard_muzzle_basecolor.png
assets/snow_leopard/textures/snow_leopard_sweater_basecolor.png
assets/snow_leopard/textures/snow_leopard_trim_basecolor.png
assets/snow_leopard/textures/snow_leopard_trousers_basecolor.png
assets/snow_leopard/validation.json
demo/activity_history.csv
demo/employees.json
demo/events.json
demo/skills.json
docs/IRBIS_SYSTEM_PROMPT.md
frontend/api.js
frontend/app.js
frontend/assets/MANROPE_LICENSE.txt
frontend/assets/login-team.jpg
frontend/assets/manrope.ttf
frontend/backend.js
frontend/companion-chat.css
frontend/companion-chat.js
frontend/companion-preview.js
frontend/companion.css
frontend/companion.js
frontend/domain.js
frontend/gamification.js
frontend/icons.js
frontend/index.html
frontend/mascot-assets.json
frontend/mascot-renderer.js
frontend/package.json
frontend/preview.js
frontend/styles.css
frontend/tokens.css
frontend/ui.js
frontend/views-hr.js
frontend/views.js
launcher.cmd
pyproject.toml
scripts/check_dataset.py
scripts/launcher.py
scripts/preview_ui.py
scripts/uv-manifest.json
starter-data/activity_history.csv
starter-data/employees.json
starter-data/events.json
starter-data/skills.json
tests/__init__.py
tests/ai-integration-ui.test.mjs
tests/companion-preview.test.mjs
tests/companion-stream.test.mjs
tests/companion-ui.test.mjs
tests/conftest.py
tests/domain.test.mjs
tests/frontend-import.test.mjs
tests/frontend-redesign.test.mjs
tests/frontend.test.mjs
tests/gamification-ui.test.mjs
tests/mascot-renderer.test.mjs
tests/test_b_integration.py
tests/test_b_provider.py
tests/test_backend.py
tests/test_companion.py
tests/test_companion_chat.py
tests/test_demo_dataset.py
tests/test_gamification.py
tests/test_launcher_windows.py
tests/test_seed.py
uv.lock
Ветки (9)

Обсуждение 0 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.