HackAlem — от бизнес-проблемы к студенческому проекту
Платформа, где бизнес через AI-конструктор превращает описание проблемы в карточку задачи из 10 полей с рейтингом готовности, а студенческие команды…
О проекте
Команда: Ratisho
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Доведённый продукт
Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд
Суть
Платформа, где бизнес через AI-конструктор превращает описание проблемы в карточку задачи из 10 полей с рейтингом готовности, а студенческие команды находят задачи по навыкам и откликаются; выбор команды остаётся за бизнесом.
Как устроено
Агент 1 извлекает 10 полей из описания без домыслов, Агент 2 исследует компанию через web search и задаёт 3–5 технических вопросов; ответы превращаются в предложенные дополнения, которые бизнес подтверждает вручную. Рейтинг считается детерминированной формулой по подтверждённым полям (0–100, 4 уровня), совместимость команд — взвешенное совпадение навыков. Бэкенд на стандартной библиотеке Python + SQLite, есть резервный режим без LLM, транскрибация аудио и AI-ассистент с командами фильтрации каталога.
Ключевые решения
- структурированное извлечение полей
- web search (OpenAI Responses)
- детерминированная формула рейтинга
- взвешенный skill matching
- Audio Transcriptions
- rule-based fallback
- импорт GitHub-профилей
Особенности
Приложение без внешних зависимостей (только stdlib Python), LLM лишь предлагает дополнения с цитатами, а человек подтверждает; рейтинг отделён от AI-оценки качества; опубликовано на Render.
Стек
Python · SQLite · HTML/CSS/JavaScript · Docker · Render
Модели
gpt-4.1-mini · gpt-4o-mini-transcribe
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-a6c63efe-ratisho.
README
README.mdHackAlem — от бизнес-проблемы к студенческому проекту
HackAlem помогает бизнесу превратить неполное описание проблемы в понятную задачу, а студенческим командам — найти проект по навыкам и предложить решение. Рейтинг отражает готовность задачи, а не известность компании. Исполнителей всегда выбирает бизнес.
1. Что реализовано
- Конструктор с десятью полями, извлечением фактов, оценкой полноты и редактированием.
- Агент 1 структурирует описание без выдумывания пропусков. Агент 2 исследует компанию и после проверки полей задаёт 3–5 технических вопросов.
- Из ответов агент формирует дополнения к карточке: бизнес видит прежний и предлагаемый текст, выбирает изменения и подтверждает их. После применения пересчитывается рейтинг; существующий текст сохраняется.
- Предложения IT-направлений, специалистов и навыков с ручным согласованием.
- Каталог всех опубликованных задач, сортировка по готовности, сочетание фильтров темы, навыков, дат, формата, готовности и совместимости.
- Отклики с идеей, планом, сроком и URL; ручной выбор одной, нескольких или ни одной команды.
- Сдача этапа выбранной командой и начисление +10 после подтверждения бизнесом, без повторного начисления.
- Демо-аккаунты бизнеса и студентов, профили, объяснения совместимости, импорт публичных GitHub-репозиториев и предоставленного текста профилей.
- Постоянный AI-ассистент с историей, контекстом карточек и медиа. Команда «Покажи задачи с готовностью 90+» применяет фильтр каталога.
- Агенты 3–5: демонстрационный анализ навыков, сложности задач и персональная группировка рекомендаций по прозрачным правилам.
2. Как работает решение
Описание бизнеса → извлечение 10 полей → ручные правки и оценка → вопросы → ответы → предложенные дополнения карточки и требования к команде → ручное подтверждение → публикация → отклик студентов → решение бизнеса → подтверждённый результат этапа.
Поля: название, контекст, проблема, пользователи, данные и материалы, ограничения, ожидаемый результат, критерии успеха, контакт, формат взаимодействия. Неизвестные сведения можно оставить пустыми.
3. Технологии
- Python 3.9+, стандартная библиотека: HTTP-сервер, SQLite, JSON, urllib, threading, unittest.
- HTML, CSS, JavaScript ES modules; без frontend-фреймворка и обязательной сборки.
- Node.js нужен только для JavaScript-тестов.
- OpenAI API: Chat Completions для структурированных ответов, Responses с web search для публичного контекста, Audio Transcriptions для аудио. Модель по умолчанию:
gpt-4.1-mini; распознавание:gpt-4o-mini-transcribe. - GitHub API для открытых репозиториев. Docker и Render используются для опубликованного демо.
4. Архитектура
Браузер (static/) → HTTP API (server.py) → SQLite (app/store.py)
├─ app/auth.py: сессии и роли
├─ app/domain.py: рейтинг и валидация
├─ app/brief_workflow.py: карточка, вопросы, источники
├─ app/agents.py: AI-провайдер и резервный режим
├─ app/matching.py + talent_agents.py: подбор
└─ app/assistant.py + profiles.py: помощник и профили
ИИ предлагает текст и требования, сервер проверяет структуру и источники, человек подтверждает изменения. Модель не публикует задачи и не выбирает команды. Промпты и форматы JSON находятся в app/brief_workflow.py, app/intelligence.py, app/profiles.py, app/agents.py.
Рейтинг: контекст 10 + проблема 10 + данные 20 + результат 15 + критерии 15 + ограничения 10 + пользователи 10 + контакт 5 + взаимодействие 5. Баллы начисляются только за содержательные подтверждённые поля. Уровни: 0–39 — черновик, 40–69 — рабочая, 70–89 — готовая, 90–100 — приоритетная. Даже опубликованная задача с низким рейтингом доступна для отклика.
Совместимость = round(100 × вес совпавших навыков / вес подтверждённых требований). Университет, возраст и популярность GitHub не участвуют в расчёте. AI-процент качества описания отделён от рейтинга подтверждённых сведений.
5. Установка и локальный запуск — без деплоя
Облако, Render, Docker и API-ключ для локального запуска не требуются. Нужен Python 3.9 или новее.
- Скачайте исходники через GitHub → Code → Download ZIP и распакуйте либо клонируйте репозиторий, если у вас есть доступ:
git clone https://github.com/BAITC-Hacks/hack-a6c63efe-ratisho.git
cd hack-a6c63efe-ratisho
При скачивании ZIP откройте терминал в распакованной папке, где находится server.py.
- Проверьте Python и запустите приложение:
python3 --version
python3 server.py --port 8001
На Windows:
py --version
py server.py --port 8001
- Откройте http://127.0.0.1:8001. Терминал оставьте открытым. Остановка —
Ctrl+C. Если порт занят, используйте--port 8002и адрес http://127.0.0.1:8002.
pip install и npm install не нужны: у приложения нет обязательных сторонних зависимостей. При первом запуске база SQLite и синтетические данные создаются автоматически. Не удаляйте data/, если нужно сохранить изменения.
Для отдельной чистой базы проверки:
python3 server.py --port 8002 --db data/jury-demo.sqlite3
Необязательное подключение OpenAI
Без ключа конструктор работает по обозначенным локальным правилам. Для реальных ответов модели скопируйте .env.example в .env рядом с server.py:
cp .env.example .env
На Windows: Copy-Item .env.example .env.
Отредактируйте файл:
AI_MODE=auto
AI_API_KEY=ваш_ключ
AI_MODEL=gpt-4.1-mini
AI_BASE_URL=https://api.openai.com/v1
AI_TIMEOUT_SECONDS=30
AI_TRANSCRIBE_MODEL=gpt-4o-mini-transcribe
Перезапустите сервер. Для принудительного режима без API установите AI_MODE=local. Реальный ключ нельзя добавлять в GitHub или frontend; .env исключён из Git. При недоступности модели отображается предупреждение о резервном режиме.
6. Как проверить решение
Общий пароль демо-аккаунтов: hackalem2026.
| Роль | Логин |
|---|---|
| Бизнес | [email protected] |
| Студент / Data Sprout | [email protected] |
- Войдите как бизнес и создайте задачу с описанием: «Название: План закупок кофейни. В кофейне остаётся выпечка после закрытия. Хотим снизить списания».
- Проверьте извлечённые поля. Укажите название, пользователей и доступные материалы; отметьте «Сведения проверены», сохраните и оцените. Покажите рост рейтинга после подтверждения.
- Нажмите «Карточка проверена — получить вопросы». Ответьте по смыслу каждого вопроса. Например, для объёма данных: «CSV продаж содержит 5000 строк за месяц».
- Нажмите «Дополнить карточку и подобрать специалистов». В блоке «Проверьте дополненную карточку» проверьте цитаты, выберите нужные поля и примените их. Сведения попадут в карточку, рейтинг пересчитается.
- Подтвердите нужные навыки и публикацию. Если дополнения не подходят, оставьте карточку без изменений и исправьте поля вручную.
- Выйдите и войдите как студент. Найдите задачу в каталоге, отправьте идею, план, срок и доступную HTTP(S)-ссылку на учебный прототип.
- Войдите как бизнес, откройте предложения и вручную выберите либо отклоните команду. Можно выбрать несколько.
- Для проверки баллов выбранная команда отправляет этап со ссылкой, бизнес подтверждает результат: начисляется +10 один раз.
Сценарий репетиции — docs/DEMO.md. Для короткой защиты заранее подготовьте текст, ответы и ссылку на прототип; обязательно покажите рост рейтинга, публикацию, отклик и ручное решение.
Проверки:
python3 -m unittest discover -s tests -v
node --test tests/catalog.test.js
node --check static/app.js
node --check static/brief-ui.js
7. Данные и интеграции
Начальный набор: 11 черновиков, 29 опубликованных задач, 15 команд, 77 откликов, 21 демо-аккаунт. Это синтетические данные. Есть 6 отраслевых CSV по 300 строк в static/demo-data/.
SQLite хранит карточки, отклики, подтверждённые этапы, профили и историю диалогов. GitHub импортирует публичные данные. LinkedIn используется как ссылка и предоставленный пользователем текст; автоматического обхода закрытых страниц нет. Публичные сведения компании сопровождаются источниками и не подменяют ответы бизнеса. Примеры ссылок example.com в синтетических предложениях иллюстративные.
8. Ограничения
- Демо-аккаунты общие; полноценная регистрация и восстановление пароля не реализованы. Используйте учебные данные.
- Резервный режим работает по правилам и не заменяет свободное рассуждение LLM. Если для подробного описания не удаётся получить три новых безопасных вопроса, продолжение конструктора может потребовать повторного запроса к модели.
- Предложения дополнений состоят из цитат; противоречащие формулировки пользователь должен проверить и отредактировать. Правки основных полей сбрасывают зависимые вопросы и требования, чтобы не использовать устаревшие рекомендации.
- Агенты 3–5 — демонстрационные правила, а не обученные модели и не независимая оценка квалификации. Сложность, опыт и доступность оцениваются ограниченно.
- Команды фильтрации ассистента распознаются по поддержанным фразам; произвольное управление интерфейсом не реализовано.
- Видео анализируется как 6 кадров без звука, а не все кадры. Фото и транскрибация аудио требуют поддерживаемого внешнего API. Исходные медиафайлы не сохраняются в базе.
- Качество и доступность внешних AI/API зависят от провайдера, ключа и лимитов. Проверка цитат не гарантирует идеальную смысловую классификацию.
- Это MVP с одной SQLite-базой; производственная инфраструктура и полный проектный трекер не реализованы.
9. Опубликованная версия
https://hackalem-cloud.onrender.com
Демо работает на Render независимо от компьютера команды. После простоя бесплатный сервер может запускаться около минуты или дольше. На Render Free SQLite размещена на временном диске: введённые записи могут сброситься после перезапуска, исходные примеры и аккаунты восстановятся. Локальная база в data/ сохраняется между обычными перезапусками.
Render развёрнут из отдельного архива исходников в приватном Secret File. Автоматического деплоя после Git push нет. Секрет OpenAI хранится в серверных переменных.
Официальный репозиторий: https://github.com/BAITC-Hacks/hack-a6c63efe-ratisho
Авторы коммитов
История коммитов
- 2026-09-23 17:57Update jury demo with local launch and card generationtomirizz
- 2026-09-23 17:57Review and apply AI-generated card additionstomirizz
- 2026-09-23 17:56Generate grounded task-card additions from interview answerstomirizz
- 2026-09-23 17:56Document local launch and add answer-card APItomirizz
- 2026-09-23 17:33Test evidence validation and missing-data handlingtomirizz
- 2026-09-23 17:32Give assistant real task ratings and document demotomirizz
- 2026-09-23 17:31Add personal feed and assistant-driven filterstomirizz
- 2026-09-23 17:30Add demo specialist, task analysis and recommendation agents 3–5tomirizz
Все коммиты (42)
- 2026-09-23 17:18Delete __init__.pytomirizz
- 2026-09-23 17:17Delete agents.pytomirizz
- 2026-09-23 17:17Delete assistant.pytomirizz
- 2026-09-23 17:17Delete auth.pytomirizz
- 2026-09-23 17:17Delete brief_workflow.pytomirizz
- 2026-09-23 17:17Delete demo.pytomirizz
- 2026-09-23 17:17Delete demo_summaries.jsontomirizz
- 2026-09-23 17:17Delete domain.pytomirizz
- 2026-09-23 17:17Delete intelligence.pytomirizz
- 2026-09-23 17:17Delete matching.pytomirizz
- 2026-09-23 17:16Delete profiles.pytomirizz
- 2026-09-23 17:16Delete seed.pytomirizz
- 2026-09-23 17:15Delete store.pytomirizz
- 2026-09-23 17:14Add files via uploadtomirizz
- 2026-09-23 17:12Publish v4 two-agent workflow and demo interfacetomirizz
- 2026-09-23 17:12Add validated brief extraction, assessment, qualification questions and skill recommendations.tomirizz
- 2026-09-23 17:10Add v4 agents, demo authentication and application modulestomirizz
- 2026-09-23 17:07Deploy v4 server and add judge access instructionstomirizz
- 2026-09-23 16:38Add files via uploadtomirizz
- 2026-09-23 16:37Add files via uploadtomirizz
- 2026-09-23 16:36Add files via uploadtomirizz
- 2026-09-23 15:32Add files via uploadBakdaulet Dagystanov
- 2026-09-23 15:31Add files via uploadBakdaulet Dagystanov
- 2026-09-23 15:30Add files via uploadBakdaulet Dagystanov
- 2026-09-23 14:35Simplify origin validation and command-line argumentsBakdaulet Dagystanov
- 2026-09-23 14:21Add note about standard library dependenciesBakdaulet Dagystanov
- 2026-09-23 14:21Set Python version to 3.12Bakdaulet Dagystanov
- 2026-09-23 14:18Improve cross-origin request handlingBakdaulet Dagystanov
- 2026-09-23 14:17Update server.pyBakdaulet Dagystanov
- 2026-09-23 14:11Add files via uploadBakdaulet Dagystanov
- 2026-09-23 14:10Add files via uploadBakdaulet Dagystanov
- 2026-09-23 14:09Add files via uploadBakdaulet Dagystanov
- 2026-09-23 14:09Create .gitkeepBakdaulet Dagystanov
- 2026-09-23 14:08Create .gitkeepBakdaulet Dagystanov
Структура репозитория (52 файлов)
.dockerignore .env.example .gitignore .python-version CHANGELOG.md DEMO_AGENTS.md Dockerfile README.md UPDATE.md app/.gitkeep app/__init__.py app/agents.py app/assistant.py app/auth.py app/brief_workflow.py app/demo.py app/demo_summaries.json app/domain.py app/intelligence.py app/matching.py app/profiles.py app/seed.py app/store.py app/talent_agents.py data/.gitkeep docs/.gitkeep docs/AI.md docs/CONTRACT.md docs/DEMO.md docs/REQUIREMENTS.md docs/TEST_REPORT.md package.json render.yaml requirements.txt server.py static/.gitkeep static/app.js static/assistant-ui.js static/brief-ui.js static/brief.css static/catalog.js static/favicon.svg static/index.html static/styles.css tests/.gitkeep tests/__init__.py tests/catalog.test.js tests/test_agents.py tests/test_domain.py tests/test_talent_agents.py tests/test_v2.py tests/test_workflow.py
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.