AAYMA
RU
Войти

AI Sana Challenge Hub

Полноценный Challenge Hub: конструктор задачи с уточняющими вопросами ИИ, редактируемая карточка из 10 полей, рейтинг 0–100, открытый каталог…

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

О проекте

Команда: iBilim
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Доведённый продукт

Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд

Суть

Полноценный Challenge Hub: конструктор задачи с уточняющими вопросами ИИ, редактируемая карточка из 10 полей, рейтинг 0–100, открытый каталог, отклики команд, подтверждение этапов (+10 баллов) и панель показателей программы. Развёрнут на Railway.

Как устроено

Черновик бизнеса отправляется в OpenAI (gpt-5-mini, Structured Outputs со строгой JSON-схемой), модель выделяет сведения дословными цитатами и задаёт не меньше 3 вопросов. Из ответов собирается карточка, JSON проверяется локально, при ошибке запрос повторяется, затем подставляется заглушка. Рейтинг считает код по 7 категориям со штрафами за отписки, бессмыслицу, повторы и наборы ключевых слов. Каталог сортируется по подтверждённому баллу. Рекомендации задач командам строятся по совпадению слов с навыками. Перед отправкой в модель ИИН и номера карт маскируются.

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

  • Structured Outputs (strict JSON schema)
  • сопоставление цитат (≥80% слов)
  • anti-gaming штрафы и детекция бессмыслицы
  • маскирование ИИН/карт с проверкой контрольных цифр
  • keyword-matching рекомендации
  • проверка карточки «ИИ-студентом»

Особенности

Защита персональных данных: ИИН и карты с корректными контрольными цифрами маскируются до отправки в LLM. Защита от накрутки рейтинга: штрафы за бессмысленный текст и повторы. Отдельный экран «Как работает ИИ» с промптами и контрактами (GET /api/ai/spec). Есть помощник формулировок, который предлагает текст для слабых полей и показывает прирост балла. Разработка шла с разделением зон между агентами (AGENTS.md, CLAUDE.md).

Стек

Python · FastAPI · Pydantic · SQLite · React 18 · Vite 5 · Docker · Railway · pytest

Модели

gpt-5-mini (OpenAI)


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

README

README.md

AI Sana Challenge Hub

Публичная версия: challenge-hub-production.up.railway.app · Исходное ТЗ

Демо-видео (4 мин 47 с): от черновика до принятого отклика · русские субтитры · описание записи

Проблема

Короткое описание бизнес-задачи часто не даёт студенческой команде понять, какие данные доступны, что нужно сделать и по каким критериям принимать результат. AI Sana Challenge Hub помогает бизнесу уточнить такую задачу, показывает готовность карточки к работе и открывает её командам. Команда сама предлагает решение, а бизнес выбирает, с кем продолжить работу. Проект создан для кейса AI Sana на HackAlem AI.

Что реализовано

  • Конструктор задачи: свободный черновик, не менее трёх уточняющих вопросов, редактируемая карточка из десяти полей, ручное подтверждение и публикация.
  • Рейтинг 0–100: расшифровка начислений, подсказки по недостающим сведениям, история изменения балла и прогноз места в каталоге. Официальный балл обновляется при подтверждении карточки.
  • Открытый каталог: сортировка по подтверждённому рейтингу, фильтры по отрасли и уровню готовности. Низкий рейтинг не скрывает опубликованную задачу и не запрещает отклик.
  • Отклики и выбор: команда отправляет идею, план, срок и ссылку; бизнес сравнивает предложения и вручную принимает или отклоняет их. Число откликов не ограничено.
  • Дополнительные инструменты: рекомендации задач командам по совпадению интересов и навыков; помощник формулировок карточки; проверка карточки «ИИ-студентом»; подтверждение выполненного этапа с начислением команде 10 баллов; панель общих показателей программы.
  • Проверка данных: ИИ подбирает полные исходные фразы бизнеса с сохранением отрицаний и условий; свободный пересказ отбрасывается. Контакты можно извлечь дословно. Структура JSON проверяется локально: неверный ответ вызывает повтор, затем заглушку. ИИН и номера банковских карт с корректными контрольными цифрами маскируются до сохранения и отправки в модель; для других упоминаний персональных данных выводится предупреждение.

Как работает решение

Черновик бизнеса → вопросы → ответы → редактируемая карточка
→ рейтинг и подсказки → подтверждение → общий каталог
→ отклик команды → ручное решение бизнеса → подтверждённый этап → баллы команде

Бизнес вводит описание и отрасль. Система выделяет имеющиеся сведения, задаёт вопросы о пробелах и собирает карточку из черновика и ответов. Бизнес может исправить текст, видит предварительный балл и подтверждает карточку. После публикации задача занимает место в каталоге по подтверждённому баллу. Команда выбирает её сама и отправляет предложение. Бизнес может принять несколько предложений или не принять ни одного; автоматического назначения нет.

Рейтинг считает код, а не модель. Максимум — 100 баллов; сумма частей уменьшается при отписках, бессмысленном тексте, повторах и наборах ключевых слов:

ПоказательПравило начисленияМакс.
Контекст и потребностьКонтекст 6 + потребность 6 + числовая конкретика в каждом поле по 420
Данные и материалыОписание 8 + источник 6 + формат 3 + объём или период 320
Ожидаемый результатОписание 8 + подробность 4 + число 315
Критерии успехаОписание 5 + числовая цель 7 + метрика 315
ОграниченияОписание 5 + числовая граница 3 + вид ограничения 210
ПользователиНазваны 6 + роль уточнена 410
Связь с бизнесомКонтакт 6 + формат взаимодействия 410

Уровни: 0–39 — черновик, 40–69 — рабочая, 70–89 — готовая, 90–100 — приоритетная. Каталог сортируется по официальному баллу по убыванию, при равенстве — по времени публикации (новые выше). Фильтр темы реализован через отрасль. Рекомендации доступны для опубликованных задач от уровня «рабочая» и основаны на совпадении слов в задаче с интересами, навыками и технологиями команды. Подробная формула — в docs/03-rating.md.

Технологии и архитектура

СлойИспользуется
ВебJavaScript/JSX, React 18, Vite 5, собственный CSS; запросы через fetch к /api
APIPython 3.11–3.14, FastAPI, Pydantic, Uvicorn, python-dotenv
ХранениеSQLite через стандартный модуль Python sqlite3; синтетические JSON-файлы в seed/
ИИOpenAI API через официальный SDK; модель по умолчанию — gpt-5-mini (настраивается OPENAI_MODEL); Structured Outputs со строгой JSON-схемой
Проверка APIpytest и httpx
Публичный хостингRailway, один Docker-сервис для API и собранного веб-интерфейса
Браузер (web/: React + Vite)
             │ fetch /api
             ▼
FastAPI (backend/app/main.py) ── backend/app/db.py ── SQLite
       ├── tasks.py: жизненный цикл карточки
       ├── rating.py + catalog.py: баллы, место, рекомендации
       ├── proposals.py + stats.py: отклики, этапы, показатели
       ├── privacy.py: маскирование и предупреждения
       └── ai.py → llm.py → OpenAI API (если задан ключ)

FastAPI раздаёт /api/* и собранные файлы web/dist с одного адреса. В разработке Vite проксирует /api на локальный FastAPI. Все вызовы модели проходят через backend/app/llm.py. Промпты, форматы входа и выхода и обработка неверного ответа показаны на странице «Как работает ИИ» (#/ai) и в GET /api/ai/spec. Контракт API — docs/02-api.md.

Установка и запуск

Нужны Python 3.11–3.14, Node.js 18+ и npm, а также доступ к реестрам пакетов при первой установке. Если репозиторий ещё не склонирован, скопируйте его адрес со страницы проекта и замените URL_РЕПОЗИТОРИЯ в команде:

git clone "URL_РЕПОЗИТОРИЯ" ai-sana-challenge-hub
cd ai-sana-challenge-hub

Если клон уже есть, откройте терминал в его корневой папке.

Быстрый запуск на macOS, Linux или в WSL:

./run.sh

Откройте http://localhost:8000. Состояние API доступно по http://localhost:8000/api/health.

Ручной запуск на macOS/Linux из корня репозитория:

python3 -m venv .venv
.venv/bin/python -m pip install -r backend/requirements.txt
[ -f .env ] || cp .env.example .env
(cd web && npm ci && npm run build)
cd backend
../.venv/bin/python -m app.db
../.venv/bin/python -m uvicorn app.main:app --port 8000

Ручной запуск на Windows (PowerShell) из корня репозитория:

python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r backend\requirements.txt
if (-not (Test-Path .env)) { Copy-Item .env.example .env }
Set-Location web
npm ci
npm run build
Set-Location ..\backend
..\.venv\Scripts\python.exe -m app.db
..\.venv\Scripts\python.exe -m uvicorn app.main:app --port 8000

run.sh выполняет те же шаги автоматически и создаёт .env только при отсутствии файла. Команда python -m app.db и скрипт run.sh пересоздают локальную базу backend/hub.db. Ключ OpenAI не требуется для основного сценария: без OPENAI_API_KEY используется локальная заглушка. Для вызовов модели заполните OPENAI_API_KEY в .env; OPENAI_MODEL позволяет сменить модель, DEMO_MODE=1 принудительно включает заглушку.

На публичном Railway-сайте при проверке 23.09.2026 ответ /api/health показывал "llm":"llm": сервер настроен на вызовы OpenAI API. Чтобы проверить работу без ключа, запустите чистый клон локально с пустым OPENAI_API_KEY или задайте DEMO_MODE=1 в .env; тогда /api/health покажет "llm":"stub".

Для отдельной разработки интерфейса после запуска API можно открыть второй терминал:

cd web
npm install
npm run dev

Vite откроет адрес, указанный в терминале, и направит запросы /api на порт 8000.

Как проверить решение

На публичной ссылке или локально пройдите один сценарий. Регистрация не нужна: в шапке есть переключатель демонстрационных ролей и профилей.

  1. Бизнес: выберите ТОО «Агро Север» → «Новая задача», отрасль «Агро». Введите: «Хотим понимать, какие поля скоро потребуют полива». Проверьте, что появились минимум три вопроса.
  2. Ответы: сообщите о цели сократить расход воды на 20% за сезон, выгрузке датчиков влажности за 2 года в CSV, дашборде с прогнозом на 7 дней и критерии точности не ниже 80%. В собранной карточке дополните название, пользователей, ограничения, контакт и формат общения. Сохраните правки; проверьте рост и расшифровку рейтинга.
  3. Публикация: нажмите «Подтвердить карточку», затем «Опубликовать». Переключитесь на команду «DataCats» и найдите задачу в каталоге; её место определяется подтверждённым рейтингом.
  4. Отклик: откройте задачу от имени команды и заполните идею, план, срок и URL прототипа. Отправьте отклик.
  5. Решение: вернитесь к бизнесу → «Мои задачи» → «Отклики». Примите предложение DataCats; в роли команды проверьте статус «Принят» в «Мои отклики». Бизнес также может отклонить предложение.
  6. Результат: переключитесь обратно на бизнес ТОО «Агро Север» → «Мои задачи» → «Отклики» у созданной задачи. У принятого отклика в блоке «Подтвердить этап работы» введите название выполненного этапа и нажмите «Подтвердить этап · +10 баллов». Откройте «Панель программы» по ссылке из сообщения об успехе и проверьте, что у DataCats стало на 10 баллов больше.

Дополнительно можно изменить уже опубликованную карточку: предварительный балл изменится сразу, а официальный балл и место в каталоге — после повторного подтверждения. Команда до этого видит прежний подтверждённый текст и рейтинг (GET /api/catalog/{id}). Полный сценарий демонстрации с текстами — в docs/04-demo.md.

Для проверки API после установки зависимостей запустите из каталога backend:

../.venv/bin/python -m pytest

На Windows используйте ..\.venv\Scripts\python.exe -m pytest. Набор в backend/tests/ покрывает рейтинг, ИИ и его заглушку, маскирование данных, жизненный цикл задачи, каталог, отклики, статистику и сквозной сценарий; отдельно запустить последний можно командой ../.venv/bin/python -m pytest tests/test_scenario.py.

Данные и интеграции

В seed/ находятся 5 синтетических профилей бизнеса, 5 примеров черновиков, 5 опубликованных карточек, 5 профилей команд и 5 откликов. Примеры черновиков показываются через GET /api/meta; карточки, команды и отклики загружаются в SQLite при инициализации. Рейтинг начальных карточек пересчитывается тем же модулем, что и рейтинг новых задач. Внешний набор данных проект не загружает.

Единственный внешний AI-сервис — OpenAI API при наличии ключа. Без ключа локальная заглушка сохраняет путь от черновика до решения бизнеса; помощник формулировок без живой модели не предлагает текст. Railway используется для публикации веба и API по одной ссылке.

Ограничения текущей версии

  • Роли выбираются в интерфейсе без регистрации и проверки личности; это демонстрационный режим.
  • На Railway SQLite лежит в контейнере (/tmp/hub.db): при новом деплое данные и действия посетителей сбрасываются к синтетическому сиду.
  • Рекомендации основаны на совпадении слов, без обученной модели или векторного поиска.
  • Подтверждение этапа — ручное действие бизнеса по названию выполненной работы. Загрузка доказательств и защита от повторного начисления баллов за один этап не реализованы.
  • Помощник карточки требует доступа к OpenAI API. Локальная заглушка обеспечивает основной сценарий, но не создаёт предложения помощника.

Раскрытие подготовленного кода

До начала соревновательной части были подготовлены структура репозитория, общий каркас FastAPI и тестовая фикстура. Схема БД, синтетические данные, рейтинг, ИИ-сценарий, каталог, отклики и интерфейс созданы после публикации кейса. Сторонние библиотеки и сервисы перечислены в разделе «Технологии и архитектура».

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

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

asset 33Arslan 15

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

  • 2026-09-23 17:55Clarify role switch before confirming milestoneasset
  • 2026-09-23 17:52Complete judge walkthrough and clone instructionsasset
  • 2026-09-23 17:47Fix confirmed task views and validate AI responsesArslan
  • 2026-09-23 17:31Clarify demo records are temporary after redeployasset
  • 2026-09-23 17:27Link demo video and subtitles from READMEasset
  • 2026-09-23 17:24demo video of the full scenario with subtitlesArslan
  • 2026-09-23 17:23Clarify manual setup and AI modes in READMEasset
  • 2026-09-23 17:14Document current Challenge Hub for hackathon judgesasset
Все коммиты (48)
  • 2026-09-23 17:07Focus README on evaluator setup and case criteriaasset
  • 2026-09-23 16:55Remove obsolete project name from deployment guideasset
  • 2026-09-23 16:54Document case flow and expose confirmed team milestonesasset
  • 2026-09-23 16:24Add card writing assistant to task editorasset
  • 2026-09-23 16:17Add card assistant step W9 to web planasset
  • 2026-09-23 16:16Link contact methods on team task viewasset
  • 2026-09-23 16:16card assistant: ready-made wording for weak fields with quotes and score gainArslan
  • 2026-09-23 16:16seed: текущий балл у синтетических карточек (ТЗ §6)Arslan
  • 2026-09-23 16:05Tuck AI diagnostics away and stack mobile rating historyasset
  • 2026-09-23 16:04Show task titles in team proposalsasset
  • 2026-09-23 16:03Fix proposal count wording in catalogasset
  • 2026-09-23 16:00Update web status after 16:00 deployasset
  • 2026-09-23 15:57Update web status and add gamification step W8asset
  • 2026-09-23 15:54Add AI Sana program statistics screenasset
  • 2026-09-23 15:50stats-ready seed history, gibberish detection, README featuresArslan
  • 2026-09-23 15:42Improve task card rating and student reviewasset
  • 2026-09-23 15:31Refine clarification screen and privacy feedbackasset
  • 2026-09-23 15:30AI student check and AI Sana program statsArslan
  • 2026-09-23 15:28ai: tolerant quote matching — paraphrased quotes accepted if ≥80% of words are in user textArslan
  • 2026-09-23 15:07anti-gaming penalties, personal data guard (IIN, cards), improvement payoff and audienceArslan
  • 2026-09-23 14:50Refine new task entry screenasset
  • 2026-09-23 14:36Stabilize header selector and business task layoutasset
  • 2026-09-23 14:22Add AI transparency screenasset
  • 2026-09-23 14:21Build business task and proposal review screensasset
  • 2026-09-23 14:20Build team catalog and proposal screensasset
  • 2026-09-23 14:17Add rating timeline and publish flowasset
  • 2026-09-23 14:15Build draft and clarification screensasset
  • 2026-09-23 14:15Add answer flow and live card ratingasset
  • 2026-09-23 14:09gamification: catalog position and next level in task, team skills in proposals; split agent docs by zoneArslan
  • 2026-09-23 14:09Fix blank page: compile JSX with automatic runtimeasset
  • 2026-09-23 14:03Add single-service Docker deploymentasset
  • 2026-09-23 14:03Update web deployment instructionsasset
  • 2026-09-23 14:01Build Challenge Hub web scaffold and stateful mocksasset
  • 2026-09-23 13:57README for AI Sana Challenge Hub, one-command launch, e2e demo test, tuned AI promptsArslan
  • 2026-09-23 13:46agents: each owner commits own zone hourly; web plan for frontend agentasset
  • 2026-09-23 13:34pivot to AI Sana Challenge Hub: contract, schema, AI draft analysis, task lifecycleArslan
  • 2026-09-23 12:06claude.md entry point and project status in agents.mdArslan
  • 2026-09-23 11:49optional task: class roster import from csvArslan
  • 2026-09-23 11:48project context, docs and backend skeletonArslan
  • 2026-09-23 11:48partner handoff docs: start here, api copy, tasks, screens, demoArslan
Структура репозитория (87 файлов)
.dockerignore
.env.example
.gitignore
AGENTS.md
CLAUDE.md
Dockerfile
README.md
backend/AGENTS.md
backend/app/__init__.py
backend/app/ai.py
backend/app/catalog.py
backend/app/db.py
backend/app/errors.py
backend/app/llm.py
backend/app/main.py
backend/app/privacy.py
backend/app/proposals.py
backend/app/rating.py
backend/app/schema.sql
backend/app/stats.py
backend/app/tasks.py
backend/pytest.ini
backend/requirements.txt
backend/tests/conftest.py
backend/tests/test_ai.py
backend/tests/test_catalog.py
backend/tests/test_llm.py
backend/tests/test_privacy.py
backend/tests/test_proposals.py
backend/tests/test_rating.py
backend/tests/test_scenario.py
backend/tests/test_student_stats.py
backend/tests/test_tasks.py
demo-artifacts/ai-sana-demo.mp4
demo-artifacts/ai-sana-demo.srt
demo-artifacts/О видео.md
docs/01-case.md
docs/02-api.md
docs/03-rating.md
docs/04-demo.md
partner/00-START-HERE.md
partner/01-api.md
run.sh
seed/businesses.json
seed/cards.json
seed/drafts.json
seed/fixtures/.gitkeep
seed/proposals.json
seed/teams.json
web/.gitignore
web/AGENTS.md
web/DEPLOY.md
web/index.html
web/package-lock.json
web/package.json
web/src/App.jsx
web/src/api.js
web/src/components/AiWarnings.jsx
web/src/components/CardAssist.jsx
web/src/components/ContactLinks.jsx
web/src/components/ErrorBox.jsx
web/src/components/LevelBadge.jsx
web/src/components/Loader.jsx
web/src/components/PagePlaceholder.jsx
web/src/components/PrivacyNotice.jsx
web/src/components/RatingPanel.jsx
web/src/components/RatingTimeline.jsx
web/src/components/RoleSwitch.jsx
web/src/components/StudentCheck.jsx
web/src/flow.css
web/src/main.jsx
web/src/mocks.js
web/src/router.js
web/src/screens/AiSpec.jsx
web/src/screens/CardEditor.jsx
web/src/screens/Catalog.jsx
web/src/screens/Clarify.jsx
web/src/screens/MyProposals.jsx
web/src/screens/MyTasks.jsx
web/src/screens/NewTask.jsx
web/src/screens/ProgramStats.jsx
web/src/screens/ProposalForm.jsx
web/src/screens/TaskProposals.jsx
web/src/state.js
web/src/stats.css
web/src/styles.css
web/vite.config.js

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

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

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