AI Sana Challenge Hub — Ontogyz
Сервис превращает короткое описание бизнес-проблемы в редактируемую карточку задачи с AI-уточнениями, прозрачным рейтингом готовности, каталогом…
О проекте
Команда: Ontogyz team
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Доведённый продукт
Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд
Суть
Сервис превращает короткое описание бизнес-проблемы в редактируемую карточку задачи с AI-уточнениями, прозрачным рейтингом готовности, каталогом, откликами команд и начислением баллов за этапы.
Как устроено
Один процесс FastAPI отдаёт статический фронтенд и JSON API, SQLite хранит карточки, команды, отклики и этапы. OpenAI генерирует уточняющие вопросы и карточку, заполняемую только подтверждёнными фактами пользователя; рейтинг считается сервером по весам 9 подтверждённых полей (100/100 = полнота). Бизнес вручную выбирает одну или несколько команд, подтверждённый этап даёт +10 баллов однократно с защитой от повторных запросов.
Ключевые решения
- weighted readiness scoring
- grounding/anti-fabrication checks
- AI eval harness
- idempotent milestone awards
Особенности
Отдельный набор eval-файлов для AI (fabrication, question grounding, conversation eval) и 58 регрессионных AI-тестов; итерации промпта против выдуманных фактов. Скриншоты UI до/после на ширинах 375–1366 px, роли команды и статус-отчёты каждого участника.
Стек
Python · FastAPI · Uvicorn · SQLite · JavaScript · HTML/CSS · OpenAI SDK
Модели
GPT-4.1-mini (gpt-4.1-mini-2025-04-14)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-69d13496-ontogyz-team.
README
README.mdAI Sana Challenge Hub — Ontogyz
Сервис помогает бизнесу превратить короткое описание проблемы в понятную задачу для команд. AI задаёт уточняющие вопросы и собирает редактируемую карточку; бизнес подтверждает сведения, получает прозрачный рейтинг готовности и публикует задачу.
Команды видят каталог и предлагают решения. Бизнес вручную выбирает одну, несколько или ни одной команды. Подтверждённый этап выбранного отклика даёт команде 10 баллов однократно.
Запуск из свежего клона: Windows PowerShell
Проверенная среда: Windows, Python 3.12.14. Нужны Git и доступ к приватному репозиторию. Выберите свободную папку; команды ниже создают новую копию ontogyz-review.
git clone --branch main https://github.com/BAITC-Hacks/hack-69d13496-ontogyz-team.git ontogyz-review
cd ontogyz-review
git log -1 --oneline
py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
.\.venv\Scripts\python.exe -m pip check
if (-not (Test-Path -LiteralPath .env)) {
Copy-Item -LiteralPath .env.example -Destination .env
}
Если py отсутствует, проверьте python --version и используйте python -m venv .venv. Можно указать полный путь к установленному Python. Активировать окружение не требуется: команды используют его интерпретатор напрямую.
Для живого AI откройте локальный .env текстовым редактором и заполните OPENAI_API_KEY своим ключом. OPENAI_MODEL по образцу — gpt-4.1-mini-2025-04-14. Эта модель отвечала в аккаунте команды 23.09.2026; доступ другого аккаунта проверяется отдельно. .env исключён из Git, ключ команды в клоне отсутствует. Используется именно .env, не env.env. Переменные окружения AI имеют приоритет над файлом.
.\.venv\Scripts\python.exe -m uvicorn app.main:app --port 8000
После сообщения Uvicorn running оставьте терминал открытым и откройте приложение в браузере. Проверка сервера должна вернуть {"status":"ok"}. Остановка — Ctrl+C. После изменения настроек перезапустите сервер. Если порт уже занят, используйте --port 8001 и тот же порт в браузере.
Проверки
Из корня проекта, во втором окне PowerShell:
.\.venv\Scripts\python.exe -m unittest discover -s tests -v
.\.venv\Scripts\python.exe -W error::RuntimeWarning -m unittest app.ai.test_service app.ai.test_review_regressions -v
AI-тесты подменяют внешние ответы: они не подтверждают доступ аккаунта к OpenAI или качество живой модели. Изолированные проверки интерфейса доступны при работающем сервере на /static/tests/ui.html; они также используют искусственные ответы.
Что можно проверить без ключа
Каталог, фильтры, просмотр задач, отклики, ручной выбор нескольких команд и начисление баллов работают без AI. В новой базе:
- Откройте раздел «Команда», выберите уровень «Начальная 0–39» и задачу с 30 баллами.
- Отправьте два отклика от разных команд: идея и план — от 10 символов, срок — 1–365 дней, ссылка — HTTP(S) URL.
https://example.org/допустим как явно обозначенная тестовая ссылка, а не действующий прототип. - В разделе «Отклики» выберите эту задачу и вручную выберите обе команды.
- Подтвердите этап одного выбранного отклика: баллы его команды увеличатся на 10. Повторная кнопка недоступна; повторный HTTP-запрос также не начисляет баллы.
- Перезапустите сервер с тем же путём БД: записи и баллы должны сохраниться.
Без ключа обращение к AI возвращает 503 AI_NOT_CONFIGURED с читаемым сообщением. Статический ответ не подставляется. Для самостоятельной проверки живого AI эксперт настраивает собственный ключ на компьютере сервера; предоставление ключа организатором здесь не подтверждается.
Архитектура и правила
Один процесс FastAPI отдаёт HTML/CSS/JavaScript и JSON API. SQLite хранит карточки, команды, отклики и этапы между запусками. AI вызывается только сервером. Публичные схемы и ошибки — в CONTRACTS.
| Подтверждённое поле | Баллы |
|---|---|
| Контекст | 10 |
| Потребность | 10 |
| Данные и материалы | 20 |
| Ожидаемый результат | 15 |
| Критерии успеха | 15 |
| Ограничения | 10 |
| Пользователи | 10 |
| Контакт бизнеса | 5 |
| Взаимодействие бизнеса с командой | 5 |
Сервер начисляет вес только за содержательное заполненное поле из confirmed_fields. «Не знаю» и «Нет данных» не повышают рейтинг. Название в сумму не входит. 100/100 означает полноту подтверждённых сведений, а не их независимую достоверность или готовность решения.
Уровни готовности в интерфейсе: 0–39 — начальная, 40–69 — рабочая, 70–89 — готовая, 90–100 — приоритетная. Статус публикации задаётся отдельно: черновик или опубликовано. Публикация требует названия, но не минимального рейтинга. Каталог показывает все опубликованные задачи, сортирует по рейтингу по убыванию, затем по ID. Количество откликов не ограничено; выбор каждого предложения независим. Этап разрешён только выбранному предложению и приносит +10 однократно.
Данные и отдельная репетиция
Новая БД автоматически получает 5 синтетических черновиков, 5 карточек с баллами 30/50/65/75/90, 5 профилей команд и 5 откликов. Набор организаторов не использовался. Происхождение и небольшой CSV для репетиции — в data/README.md.
По умолчанию база — data/hackalem.db; она исключена из Git. Путь задаётся переменной окружения PowerShell DATABASE_PATH (для БД значение из .env автоматически не читается). Для отдельной репетиции в новом терминале из корня проекта:
$env:DATABASE_PATH = "data/rehearsal-01.db"
.\.venv\Scripts\python.exe -m uvicorn app.main:app --port 8001
Откройте http://127.0.0.1:8001/. Для новой чистой репетиции выберите ещё не существующее имя БД; повторный запуск с тем же именем продолжает сохранённую работу. Рабочую базу удалять не требуется.
Проверенное состояние и ограничения
Последняя проверка приложения 052b7f2, 23.09.2026, 17:35–17:39: повторно пройдены 19 UI-тестов и настоящий браузерный сценарий на отдельной SQLite-базе. Два живых AI-запроса дали пять вопросов и редактируемую карточку; проверены 0→30→публикация, два отклика, отклонение и выбор обеих команд, этапы по +10, затем рост до 50 и открытие того же ID после перезагрузки страницы. Повторные HTTP-запросы подтверждения не увеличили баллы. Неработающих кнопок в проверенном сценарии не обнаружено. Замечание по AI: описание синтетических записей повторилось в ограничениях; текст удалён вручную, исправление сохранилось. Код AI в этом прогоне не менялся.
Общая проверенная основа — e31a47c (23.09.2026): объединены AI Тимура 535ccba и UI Дастана 6afbe99. Независимо прошли 9 серверных, 58 AI-регрессий, 19 изолированных UI-проверок и 19 дополнительных HTTP-проверок. Свежий официальный клон основы 630efc0 с новой .venv Python 3.12.14 установлен и запущен на Windows; pip check, главная, health, ошибка без ключа и повторный запуск проверены. Последующее оформление рабочего экрана и каталога выполнено по поручению Али поверх 039150b: повторены 19 UI- и 9 серверных проверок, просмотрены первый экран 1280×720, узкие области 390/375 px, каталог и сохранение 100→90→100 на настоящем сервере. Подробности и ограничения — начало EVAL.
С настоящим AI выполнен браузерный сценарий: слабый черновик, 5 вопросов, 10 редактируемых полей, рейтинг 0→30→50→100, публикация при 30, два отклика, независимый выбор двух команд, этапы по +10 однократно и сохранение после перезапуска. Семь независимых реальных AI-вызовов и ограничения подробно описаны в проверке по критериям и EVAL. Следующие коммиты оформления требуют отдельной проверки.
- AI может неверно распределять или пропускать сведения; человек проверяет, редактирует и подтверждает карточку. Проверенные примеры не гарантируют отсутствие ошибок на любом вводе.
- Переключатель ролей не является авторизацией. Доступ общий; защиты записей от изменения другим посетителем и производственного развёртывания нет.
- Данные учебные, экономический эффект и интерес реальных клиентов не измерялись.
- Полный показ с секундомером на итоговой версии, доступ аккаунта экспертов и фактическая подача пока не подтверждены.
Показ и подача
Сценарий до пяти минут содержит подготовленные факты и два отклика. Материалы для подачи — название, описание и список действий капитана. Сценарий — план; его длительность ещё предстоит измерить.
Документ трека и инструкция участников. Дедлайн, подтверждённый Али: 23 сентября 2026, 18:00 Астана. Push в GitHub и подача через платформу — отдельные действия.
Команда и внешние компоненты
Али — сервер, SQLite, рейтинг, интеграция и документация; Тимур — AI и его оценка; Дастан — интерфейс и браузерные проверки. При разработке использовался Codex; история Git и отчёты участников отражают сделанные изменения.
Зависимости: FastAPI, Uvicorn, OpenAI Python SDK; диапазоны версий — в requirements.txt. Внешняя модель — OpenAI; ключ хранится только на сервере.
Авторы коммитов
История коммитов
- 2026-09-23 17:46Clarify readiness labels and document final live checkgitaliuer
- 2026-09-23 17:17Polish business workspace and opportunity cataloggitaliuer
- 2026-09-23 17:03Document verification of published maingitaliuer
- 2026-09-23 17:01Record acceptance of final UI polish and remaining rehearsal gategitaliuer
- 2026-09-23 16:58Integrate final task readiness and form layout polishgitaliuer
- 2026-09-23 16:58Record independent criteria audit and verified live integrationgitaliuer
- 2026-09-23 16:51Clarify task readiness and compact final UIjqut
- 2026-09-23 16:49Integrate reviewed task workspace with grounded AI improvementsgitaliuer
Все коммиты (49)
- 2026-09-23 16:44Fix reviewed AI data availability and card field semanticsflick1233
- 2026-09-23 16:35Merge remote-tracking branch 'origin/main' into timur/aiflick1233
- 2026-09-23 16:32Record independent AI review and targeted quality follow-upgitaliuer
- 2026-09-23 16:26Redesign business workspace and responsive task viewsjqut
- 2026-09-23 16:17Clarify setup and prepare rehearsal and submission materialsgitaliuer
- 2026-09-23 16:14Remove invented conditions from AI clarification questionsflick1233
- 2026-09-23 15:58Improve AI clarification and business feedback cardsflick1233
- 2026-09-23 15:55Polish task stages and catalog cardsjqut
- 2026-09-23 15:49Resume editing saved business tasksjqut
- 2026-09-23 15:36Add saved business task listing and next-stage contractsgitaliuer
- 2026-09-23 15:33Merge reviewed field confirmation feedbackgitaliuer
- 2026-09-23 15:33Merge reviewed AI fabrication guardsgitaliuer
- 2026-09-23 15:29Improve input validation, readiness scoring and demo coveragegitaliuer
- 2026-09-23 15:25Exclude fabricated facts while preserving synthetic test dataflick1233
- 2026-09-23 15:23Correct main base SHA in UI reportjqut
- 2026-09-23 15:22Keep confirmations aligned with card editsjqut
- 2026-09-23 15:15Record team review and next AI and UI checksgitaliuer
- 2026-09-23 15:14Merge reviewed UI action and proposal fixesgitaliuer
- 2026-09-23 15:08Prevent duplicate UI actions and stale proposal resultsjqut
- 2026-09-23 15:06Preserve semantic AI card fields and omitted instructionsflick1233
- 2026-09-23 14:59Fix AI card result groundingflick1233
- 2026-09-23 14:51Record live server AI connectivity checkgitaliuer
- 2026-09-23 14:49Record AI integration review and next team milestonesgitaliuer
- 2026-09-23 14:46Merge reviewed AI grounding and timeout fixesgitaliuer
- 2026-09-23 14:42Fix grounded card fields and API timeoutsflick1233
- 2026-09-23 14:36Record judging access requirement and AI branch blockergitaliuer
- 2026-09-23 14:34Document independent judging path and access gapgitaliuer
- 2026-09-23 14:29Merge origin/main into timur/aiflick1233
- 2026-09-23 14:25Ground AI cards in user-provided factsflick1233
- 2026-09-23 14:22Record real AI browser checks and remaining submission gapsgitaliuer
- 2026-09-23 14:20Merge reviewed UI action feedback fixesgitaliuer
- 2026-09-23 14:17Verify two-team demo and preserve action feedbackjqut
- 2026-09-23 14:12Merge reviewed UI fixes from dastan/uigitaliuer
- 2026-09-23 14:11Merge remote-tracking branch 'origin/main' into dastan/uijqut
- 2026-09-23 14:07Build business and team UIjqut
- 2026-09-23 14:07Document reviewed integration and remaining AI checksgitaliuer
- 2026-09-23 14:05Merge reviewed AI validation fixes from timur/aigitaliuer
- 2026-09-23 13:58Prevent duplicate milestone awards during concurrent requestsgitaliuer
- 2026-09-23 13:54Add AI task clarification and card generationflick1233
- 2026-09-23 13:46Record verified integration statusgitaliuer
- 2026-09-23 13:44Integrate AI Sana MVP and verify server flowgitaliuer
Структура репозитория (108 файлов)
.env.example .gitignore AGENTS.md README.md app/__init__.py app/ai/__init__.py app/ai/conversation_eval.py app/ai/eval-conversations-answers-2026-09-23.json app/ai/eval-conversations-final-2026-09-23.json app/ai/eval-conversations-initial-cards-2026-09-23.json app/ai/eval-conversations-questions-2026-09-23.json app/ai/eval-fabrication-2026-09-23.json app/ai/eval-question-grounding-final-2026-09-23.json app/ai/eval-question-grounding-initial-2026-09-23.json app/ai/eval-review-1630-initial-2026-09-23.json app/ai/eval-review-1630-questions-final-2026-09-23.json app/ai/eval-review-1630-questions-intermediate-2026-09-23.json app/ai/live_eval.py app/ai/review_eval.py app/ai/service.py app/ai/test_review_regressions.py app/ai/test_service.py app/db.py app/main.py app/routes/__init__.py app/routes/api.py app/schemas.py app/scoring.py data/README.md data/ai-review-2557a5b.json data/criteria-ai-535ccba.json data/criteria-http-630efc0.json data/live-ai-eval-2026-09-23.json data/rehearsal-writeoffs.csv docs/CONTRACTS.md docs/CRITERIA_REVIEW.md docs/DEMO_SCRIPT.md docs/EVAL.md docs/PLAN.md docs/PRODUCT_AUDIT.md docs/SUBMISSION.md docs/status-ali.md docs/status-dastan.md docs/status-timur.md prompts/ALI.md prompts/DASTAN.md prompts/TIMUR.md requirements.txt tests/test_business_tasks.py tests/test_flow.py tests/test_input_quality.py tests/test_milestones.py web/app.js web/index.html web/style.css web/tests/capture.cjs web/tests/check.cjs web/tests/flow.cjs web/tests/screenshots/README.md web/tests/screenshots/after/desktop-catalog.png web/tests/screenshots/after/desktop-create.png web/tests/screenshots/after/desktop-editor.png web/tests/screenshots/after/desktop-proposals.png web/tests/screenshots/after/mobile-create.png web/tests/screenshots/after/mobile-saved.png web/tests/screenshots/before/desktop-catalog.png web/tests/screenshots/before/desktop-create.png web/tests/screenshots/before/desktop-editor.png web/tests/screenshots/before/desktop-proposals.png web/tests/screenshots/before/mobile-saved.png web/tests/screenshots/final/desktop-catalog.png web/tests/screenshots/final/desktop-create.png web/tests/screenshots/final/desktop-editor.png web/tests/screenshots/final/desktop-proposals.png web/tests/screenshots/final/mobile-create.png web/tests/screenshots/final/mobile-saved.png web/tests/screenshots/flow-final/1280-catalog.png web/tests/screenshots/flow-final/1280-new-editor.png web/tests/screenshots/flow-final/1280-published-editor.png web/tests/screenshots/flow-final/1280-questions.png web/tests/screenshots/flow-final/1280-selected-teams.png web/tests/screenshots/flow-final/1366-catalog.png web/tests/screenshots/flow-final/1366-new-editor.png web/tests/screenshots/flow-final/1366-published-editor.png web/tests/screenshots/flow-final/1366-questions.png web/tests/screenshots/flow-final/1366-selected-teams.png web/tests/screenshots/flow-final/375-catalog.png web/tests/screenshots/flow-final/375-new-editor.png web/tests/screenshots/flow-final/375-published-editor.png web/tests/screenshots/flow-final/375-questions.png web/tests/screenshots/flow-final/375-selected-teams.png web/tests/screenshots/flow-final/390-catalog.png web/tests/screenshots/flow-final/390-new-editor.png web/tests/screenshots/flow-final/390-published-editor.png web/tests/screenshots/flow-final/390-questions.png web/tests/screenshots/flow-final/390-selected-teams.png web/tests/screenshots/flow/1366-catalog.png web/tests/screenshots/flow/1366-new-editor.png web/tests/screenshots/flow/1366-published-editor.png web/tests/screenshots/flow/1366-questions.png web/tests/screenshots/flow/1366-selected-teams.png web/tests/screenshots/flow/390-catalog.png web/tests/screenshots/flow/390-new-editor.png web/tests/screenshots/flow/390-published-editor.png web/tests/screenshots/flow/390-questions.png web/tests/screenshots/flow/390-selected-teams.png web/tests/ui.html web/tests/ui.js
Ветки (4)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.