AAYMA
RU
Войти

AI Sana

Платформа Challenge Hub. Бизнес описывает задачу, получает 3–5 уточняющих вопросов и заполняет карточку с рейтингом готовности 0–100, затем…

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

О проекте

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

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

Суть

Платформа Challenge Hub. Бизнес описывает задачу, получает 3–5 уточняющих вопросов и заполняет карточку с рейтингом готовности 0–100, затем публикует её. Студенческие команды находят задачу в каталоге с рекомендациями и откликаются, а бизнес вручную выбирает команды и подтверждает этапы (10 баллов прогресса за этап).

Как устроено

FastAPI с SQLAlchemy и PostgreSQL хранит карточки, отклики, решения и прогресс. Помощник запрашивает уточняющие вопросы у OpenAI Chat Completions (gpt-4o-mini), а без ключа работает локальный алгоритм. Подсказки для карточки — только фрагменты исходного текста с указанием источника, и принимает их человек. Рейтинг готовности считается фиксированными правилами по 8 аспектам. Рекомендации задач строятся на совпадении слов, профиле команды и истории кликов. Перед отправкой в LLM из текста удаляются email и телефоны.

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

  • rule-based readiness scoring
  • grounded suggestions with source fragments
  • keyword/profile/click-history recommendations
  • PII scrubbing before LLM
  • local fallback questions
  • TDD (RED/GREEN)

Особенности

Разработка шла двумя параллельными «агентами» (A — API, B — UI) по TDD: коммиты RED/GREEN, 36 тестов на старте. LLM не ставит баллы и ничего не публикует, его предложения опираются на цитаты из ввода. Есть развёрнутая демо-версия.

Стек

Python · FastAPI · Pydantic · SQLAlchemy · PostgreSQL · psycopg · Docker Compose · React · TypeScript · Vite · pytest · Ruff

Модели

gpt-4o-mini


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

README

README.md

AI Sana — практические задачи для бизнеса и студенческих команд

Краткое описание

AI Sana помогает представителю бизнеса превратить первоначальную идею в понятную практическую задачу, а студенческой команде — найти её и предложить решение. Бизнес видит, какой информации не хватает в карточке, дополняет её и сам решает, с какими командами работать. Это локально запускаемый демонстрационный проект HackAlem.

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

  • Два демо-сценария: вход от имени представителя бизнеса или одной из подготовленных студенческих команд, с возможностью переключаться между ними.
  • Конструктор задачи: описание своими словами, 3–5 уточняющих вопросов, редактируемая карточка, сохранение черновика, подтверждение и публикация. Если ключ OpenAI не задан или запрос не удался, вопросы формируются локально.
  • Подсказки по карточке: помощник предлагает фрагменты из исходного описания с указанием текста-источника. Пользователь может изменить, принять или отклонить предложение; оно не записывается в карточку автоматически.
  • Рейтинг готовности 0–100: сервер начисляет баллы за наличие содержательной информации о контексте, потребности, данных, результате, критериях успеха, ограничениях, пользователях и взаимодействии с бизнесом. Показаны разбивка и незаполненные пункты. Рейтинг обновляется после подтверждения карточки и не запрещает публикацию задачи с низким баллом.
  • Каталог и отклики команд: опубликованные задачи доступны всем демо-командам; есть поиск, фильтры, сохранённые задачи и объяснимые рекомендации по профилю команды и её действиям. Команда отправляет идею, план, срок и HTTP(S)-ссылку на прототип. Черновик отклика сохраняется в этом браузере.
  • Решение бизнеса и прогресс: бизнес вручную выбирает, отклоняет или оставляет отклики без решения; можно выбрать несколько команд. Подтверждение одного завершённого этапа выбранной команды начисляет ей 10 баллов прогресса один раз. Команда видит свои отклики, их статусы и ранг, вычисленный в интерфейсе из накопленных баллов.

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

  1. Представитель бизнеса вводит описание задачи. API запрашивает уточняющие вопросы у OpenAI при наличии ключа или использует локальный алгоритм. Сведения, явно содержащиеся в описании, могут появиться как предложения с проверяемым фрагментом-источником.
  2. Человек отвечает на вопросы и редактирует карточку. Черновик можно сохранить заранее; после подтверждения сервер фиксирует текущую версию и рассчитывает рейтинг по фиксированным правилам. Модель не выставляет баллы и не публикует задачу.
  3. После публикации карточка появляется в открытом каталоге. Команда изучает условия и отправляет отклик. Рекомендации помогают упорядочить задачи, но не закрывают доступ к остальному каталогу.
  4. Бизнес просматривает отклики и принимает решение сам. Если выбранная команда завершила этап, бизнес подтверждает результат, а баллы прогресса сохраняются в PostgreSQL. Интерфейс пересчитывает видимый ранг команды по этим баллам.

Технологии

ЧастьИспользуется
ИнтерфейсTypeScript, React 19, Vite 8, CSS
APIPython 3.11+, FastAPI, Pydantic, SQLAlchemy
База данныхPostgreSQL 17 через Docker Compose, драйвер psycopg
AIOpenAI Chat Completions API; модель по умолчанию — gpt-4o-mini. При отсутствии ключа работает локальный сценарий уточнений
ПроверкиPytest, Ruff; сборка TypeScript/Vite и тесты логики интерфейса на Node.js

Рекомендации задач и рейтинг готовности рассчитываются правилами проекта, без обученной модели рекомендаций.

Архитектура

Браузер: React + Vite
  ├─ интерфейс бизнеса и команды
  ├─ localStorage: выбранный демо-участник и черновики откликов
  └─ запросы /api
        ↓
FastAPI
  ├─ карточки, отклики, решения и подтверждённый прогресс
  ├─ расчёт рейтинга и рекомендаций
  ├─ помощник задач → OpenAI API (необязательно; есть локальный fallback)
  └─ SQLAlchemy → PostgreSQL

Код интерфейса находится в web/, API и логика — в api/app/, запуск базы — в compose.yaml. Контракт API доступен в api/openapi.json; дополнительные решения и результаты проверок — в docs/.

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

Команды ниже рассчитаны на macOS/Linux. Нужны Docker с Compose, Python 3.11+ и Node.js 20.19+ или 22.12+ с npm.

  1. Получите репозиторий и создайте локальную конфигурацию:

    git clone https://github.com/BAITC-Hacks/hack-4349459c-kemeldenai.git
    cd hack-4349459c-kemeldenai
    cp .env.example .env
    

    В .env замените учебный POSTGRES_PASSWORD и укажите такой же пароль в DATABASE_URL. Не добавляйте .env и API-ключи в Git. OPENAI_API_KEY можно оставить пустым: демонстрация продолжит работать с локальными вопросами. При необходимости измените OPENAI_MODEL.

  2. Запустите PostgreSQL:

    docker compose up -d db
    docker compose ps
    

    Дождитесь состояния healthy у контейнера базы. Если порт 5432 занят, поменяйте POSTGRES_PORT в .env и порт в DATABASE_URL на одно и то же свободное значение.

  3. Установите зависимости API, создайте демонстрационные записи и запустите сервер из корня репозитория:

    python3 -m venv api/.venv
    api/.venv/bin/python -m pip install -r api/requirements.txt
    api/.venv/bin/python -m api.app.seed
    api/.venv/bin/python -m uvicorn api.app.main:app --host 127.0.0.1 --port 8000
    

    API будет доступен на http://127.0.0.1:8000, интерактивная схема — на http://127.0.0.1:8000/docs. Перезапустите API после изменения .env.

  4. В другом терминале запустите интерфейс:

    cd web
    npm ci
    npm run dev
    

    Откройте адрес, напечатанный Vite (обычно http://127.0.0.1:5173/). В режиме разработки запросы /api направляются на локальный сервер FastAPI.

Для проверки кода из корня репозитория можно выполнить api/.venv/bin/python -m pytest api/tests, api/.venv/bin/ruff check api, а из web/ — npm run build. Тесты логики интерфейса запускаются командой npm test на версии Node.js с поддержкой встроенной обработки TypeScript; в проекте они проверялись на Node.js 25.6.

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

  1. На экране «Демо-вход» выберите «Войти как бизнес». Введите, например: «Менеджеры вручную обрабатывают 100 заявок в день; нужен общий список заказов».
  2. Нажмите «Получить вопросы». Убедитесь, что показаны 3–5 вопросов. Без OPENAI_API_KEY интерфейс прямо обозначит локальный вариант. Ответьте на вопросы и при желании обновите их: введённые ответы должны сохраниться.
  3. Перенесите ответы в карточку. Проверьте предложенные фрагменты исходного описания: до нажатия «Добавить в карточку» соответствующее поле остаётся пустым. Укажите название задачи, подтвердите карточку и посмотрите рейтинг и разбивку.
  4. Заполните ещё несколько недостающих полей, например данные и измеримый критерий успеха, затем подтвердите изменения. Рейтинг подтверждённой версии должен измениться. Опубликуйте задачу.
  5. Нажмите «Сменить участника», войдите как демо-команда Data Nomads и найдите опубликованную задачу в каталоге. Отправьте отклик с идеей, планом, сроком и HTTP(S)-ссылкой на прототип. Для проверки только формы можно использовать тестовый адрес https://example.com/prototype; это не действующий прототип.
  6. Вернитесь в бизнес-сценарий, откройте «Отклики команд» и вручную выберите полученный отклик. Подтвердите описанный завершённый этап. После переключения обратно на команду в «Мои отклики» будут видны решение и 10 начисленных баллов прогресса. Повторное подтверждение того же этапа баллы не удваивает.

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

  • При первом запуске создаются синтетические данные: пять опубликованных задач с разной готовностью, пять черновиков, пять команд и пять откликов. Повторный запуск заполнения не должен дублировать записи или перезаписывать изменения пользователя.
  • Карточки, команды, отклики, решения, подтверждённый прогресс, сохранённые задачи и сигналы рекомендаций хранятся в локальном PostgreSQL. Выбранный демо-участник и черновики откликов сохраняются в браузере; черновики не синхронизируются между устройствами.
  • Единственный внешний AI-сервис во время работы — OpenAI API, если серверу передан ключ. Ключ остаётся на сервере. При недоступности API используются локальные вопросы и ограниченный набор предложений из текста пользователя. Реальные бизнес-датасеты для запуска не требуются.

Ограничения

  • Демо-вход не является авторизацией. Нет регистрации, паролей, разграничения прав на сервере и личных аккаунтов команд; выбранные демо-профили общие.
  • Рейтинг задачи показывает полноту заполнения карточки, а не истинность фактов, качество идеи или вероятность успеха. Ранг команды отражает записанные баллы за подтверждённые этапы, а не независимую оценку её квалификации. Рекомендации основаны на совпадении слов, профиле команды и её действиях; они не понимают все синонимы и не являются обученной моделью.
  • Предложения помощника ограничены проверяемыми фрагментами текста. Удаление типичных email-адресов и телефонов перед вызовом OpenAI не является полной анонимизацией. Человек должен проверить AI-ответы перед подтверждением.
  • Черновики откликов хранятся только в текущем браузере. Нет синхронизации между устройствами, уведомлений о новых решениях и полноценного трекера выполнения проекта.
  • Docker Compose запускает только базу данных; API и интерфейс стартуют отдельно. Текущая инициализация создаёт недостающие таблицы, но не выполняет миграции существующих столбцов для промышленного обновления схемы.

Развёрнутая версия

Открыть развёрнутую версию AI Sana.

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

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

Abylay Kali 31akzholtech 15

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

  • 2026-09-23 17:48fix(ui): distinguish catalog list and selected task panesAbylay Kali
  • 2026-09-23 17:38merge: include latest main documentation before releaseAbylay Kali
  • 2026-09-23 17:38feat(ui): apply graphite and cobalt portal redesignAbylay Kali
  • 2026-09-23 17:31docs: add deployed demo linkAbylay Kali
  • 2026-09-23 17:27Merge branch 'main' of https://github.com/BAITC-Hacks/hack-4349459c-kemeldenai into codex/portal-flow-auditAbylay Kali
  • 2026-09-23 17:26Merge remote-tracking branch 'origin/main'akzholtech
  • 2026-09-23 17:26Streamline student catalog and proposal experienceakzholtech
  • 2026-09-23 17:24docs: record portal audit and visual directionAbylay Kali
Все коммиты (46)
  • 2026-09-23 17:23merge: verify portal fixes with current mainAbylay Kali
  • 2026-09-23 17:22fix: preserve portal recovery and normalize demo flowsAbylay Kali
  • 2026-09-23 17:16docs: write Russian jury READMEAbylay Kali
  • 2026-09-23 17:12merge: integrate remote updates with frontend team ranksakzholtech
  • 2026-09-23 17:11feat: show frontend team ranks from confirmed progress pointsakzholtech
  • 2026-09-23 17:05merge: integrate verified demo fixes with grounded task assistantAbylay Kali
  • 2026-09-23 16:54docs: record completed AI task roundAbylay Kali
  • 2026-09-23 16:51feat: ground task assistant questions and card suggestionsAbylay Kali
  • 2026-09-23 16:51fix: stabilize clarification, readiness scoring, and demo navigationAbylay Kali
  • 2026-09-23 16:42test(ui): cover repeat clarification transfer before helper implementationAbylay Kali
  • 2026-09-23 16:36feat: add guided proposal writing with selective draft transferakzholtech
  • 2026-09-23 16:24feat: add task summaries, saved proposal drafts, and recommendation controlsakzholtech
  • 2026-09-23 16:13merge: integrate remote milestone implementation with student applicationsakzholtech
  • 2026-09-23 16:12feat: add team bookmarks and application history with confirmed progressakzholtech
  • 2026-09-23 16:09docs: assign future work by taskAbylay Kali
  • 2026-09-23 16:02feat(api): persist confirmed milestones and progress pointsAbylay Kali
  • 2026-09-23 15:56feat(ui): polish save and publication completion flowsAbylay Kali
  • 2026-09-23 15:54feat: confirm selected-team milestones onceAbylay Kali
  • 2026-09-23 15:52feat: recommend tasks using team focus and click historyakzholtech
  • 2026-09-23 15:32setupakzholtech
  • 2026-09-23 15:28docs: record live OpenAI evaluation findingsAbylay Kali
  • 2026-09-23 15:27Merge main into UI polish and preserve demo participant flowsAbylay Kali
  • 2026-09-23 15:23feat(ui): guide task creation and polish motion feedbackAbylay Kali
  • 2026-09-23 15:14docs: assess AI requirements and plan grounded assistantAbylay Kali
  • 2026-09-23 15:08feat(api): switch clarification provider to OpenAIAbylay Kali
  • 2026-09-23 15:02feat(ui): add demo personas and progress flowAbylay Kali
  • 2026-09-23 14:46docs: define next demo role and progress roundAbylay Kali
  • 2026-09-23 14:32fix: align proposal flow and document integrated MVPAbylay Kali
  • 2026-09-23 14:04merge: agent B frontend implementationAbylay Kali
  • 2026-09-23 14:04merge: agent A API and PostgreSQL implementationAbylay Kali
  • 2026-09-23 14:01fix(ui): handle nullable scores on unconfirmed draftsAbylay Kali
  • 2026-09-23 13:54feat(ui): build task and proposal flowsAbylay Kali
  • 2026-09-23 13:53feat: implement Agent A backend (GREEN: 36 tests, PostgreSQL flow)akzholtech
  • 2026-09-23 13:49test: reproduce missing Cyrillic topic matches and verify safe database errorsakzholtech
  • 2026-09-23 13:46test: specify Russian seeds across readiness bands (RED: uniform English seeds)akzholtech
  • 2026-09-23 13:44test: cover partial drafts and API boundaries (RED: missing routes)akzholtech
  • 2026-09-23 13:40test: specify Agent A API and clarification behavior (RED: missing backend)akzholtech
  • 2026-09-23 13:30docs: define two-agent MVP plan and Postgres setupAbylay Kali
Структура репозитория (89 файлов)
.env.example
.gitignore
AGENTS.md
README.md
api/.gitignore
api/HANDOFF.md
api/IMPLEMENTATION.md
api/app/__init__.py
api/app/ai.py
api/app/applications.py
api/app/database.py
api/app/main.py
api/app/models.py
api/app/recommendations.py
api/app/scoring.py
api/app/seed.py
api/examples.json
api/openapi.json
api/pyproject.toml
api/requirements.txt
api/tests/conftest.py
api/tests/test_ai.py
api/tests/test_ai_quality.py
api/tests/test_applications.py
api/tests/test_backend_audit.py
api/tests/test_contract.py
api/tests/test_core.py
api/tests/test_milestones.py
api/tests/test_recommendations.py
api/tests/test_scoring_quality.py
api/tests/test_seeds.py
api/verify_postgres.py
compose.yaml
docs/AI_REQUIREMENTS.md
docs/DEMO_VERIFICATION.md
docs/MAIN_TASK.md
docs/NEXT_TASK.md
docs/PORTAL_AUDIT.md
docs/RECOMMENDATIONS.md
docs/STUDENT_APPLICATIONS.md
docs/TEAM_RANKS.md
docs/VISUAL_SYSTEM.md
web/.gitignore
web/HANDOFF.md
web/README.md
web/index.html
web/package-lock.json
web/package.json
web/public/favicon.svg
web/screenshots/demo-entry-desktop.png
web/screenshots/demo-entry-mobile.png
web/screenshots/milestone-desktop.png
web/screenshots/student-catalog-desktop.png
web/screenshots/student-catalog-mobile.png
web/src/App.tsx
web/src/CompletionDialog.tsx
web/src/DemoEntry.tsx
web/src/MilestonePanel.tsx
web/src/MyApplications.tsx
web/src/ProposalAssistant.tsx
web/src/Recommendations.tsx
web/src/TaskSummary.tsx
web/src/TeamRank.tsx
web/src/api.ts
web/src/bookmarks.ts
web/src/catalogTopics.ts
web/src/clarificationAnswers.ts
web/src/demoSession.ts
web/src/main.tsx
web/src/motion.ts
web/src/proposalAssistance.ts
web/src/proposalDraftStorage.ts
web/src/scoreReceipt.ts
web/src/styles.css
web/src/taskRestore.ts
web/src/taskSuggestions.ts
web/src/teamRanks.ts
web/src/types.ts
web/src/useProposalDrafts.ts
web/tests/catalogTopics.test.mjs
web/tests/clarificationAnswers.test.mjs
web/tests/proposalAssistance.test.mjs
web/tests/proposalDraftStorage.test.mjs
web/tests/scoreReceipt.test.mjs
web/tests/taskRestore.test.mjs
web/tests/taskSuggestions.test.mjs
web/tests/teamRanks.test.mjs
web/tsconfig.json
web/vite.config.ts
Ветки (3)

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

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

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