AAYMA
RU
Войти

AI Sana MVP

Streamlit-MVP Challenge Hub: бизнес с помощью ИИ превращает описание проблемы в карточку задачи с рейтингом полноты, студенческие команды…

Рабочий MVP
Команда «QyzCode» 3💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: QyzCode
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Рабочий MVP

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

Суть

Streamlit-MVP Challenge Hub: бизнес с помощью ИИ превращает описание проблемы в карточку задачи с рейтингом полноты, студенческие команды откликаются, бизнес вручную выбирает команды и подтверждает этапы.

Как устроено

Бизнес вводит проблему, OpenAI Responses API задаёт минимум три уточняющих вопроса (с валидацией схемы и резервными отраслевыми вопросами без ключа), ответы переносятся в поля карточки без генерации фактов. Детерминированный рейтинг полноты (контекст+потребность 20, данные 20, результат 15, критерии 15, ограничения 10, пользователи 10, контакт 10) определяет уровень готовности, каталог сортируется по рейтингу. SQLite хранит задачи, профили, отклики и подтверждённые этапы (+10 баллов команде, повторное начисление заблокировано).

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

  • LLM-уточняющие вопросы со строгой схемой
  • резервные шаблонные вопросы
  • детерминированный рейтинг полноты
  • ручное подтверждение карточки

Особенности

Сценарий защиты расписан поминутно на 5 минут; интеграция трёх веток (backend, AI, frontend) с миграцией схем БД; Streamlit AppTest проходит полный путь через формы.

Стек

Python · Streamlit · SQLite · unittest

Модели

OpenAI Responses API


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

README

README.md

AI Sana — единый MVP

Бизнес описывает проблему, уточняет сведения, подтверждает карточку и публикует её. Студенты выбирают задачи и отправляют предложения. Бизнес вручную выбирает команды.

Стек: Python 3.10+, Streamlit, SQLite. Тёмно-синий интерфейс с голубыми акцентами.

Запуск на Windows

Откройте папку общего проекта в VS Code. Один раз выполните:

py -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt

Для запуска:

.\.venv\Scripts\python.exe -m streamlit run app.py

Активация окружения не нужна. Откройте адрес, который напечатает Streamlit. SQLite-файл ai_sana.db создаётся автоматически рядом с кодом; его не нужно добавлять в Git. Если старое окружение осталось в родительской папке, используйте соответствующий путь ..\.venv\Scripts\python.exe, но только если тот Python запускается.

Как показать MVP за 5 минут

  1. 0:00–0:40. «Бизнес» → «Создать задачу». Введите: «У магазина много списаний». Нажмите «Уточнить с ИИ». Покажите минимум три вопроса и текущий режим ИИ.
  2. 0:40–1:30. Ответьте на вопросы, перенесите ответы в карточку. Проверьте, что ответы появились в правильных полях. Введите название, контекст и потребность. При пустых остальных полях подтвердите карточку — 20 баллов.
  3. 1:30–2:10. Добавьте пользователей — 30 баллов; данные — 50. Остальные поля доведут карточку до 100. Каждый раз подтвердите и сохраните: номер задачи не меняется.
  4. 2:10–2:40. Опубликуйте сохранённую карточку. Перейдите в каталог, покажите сортировку по рейтингу и фильтры. Даже задача с 20 баллами доступна для отклика.
  5. 2:40–3:40. Переключите режим на «Команда». Добавьте профиль, выберите задачу, введите идею, план, срок, ссылку на прототип и отправьте предложение.
  6. 3:40–4:30. «Бизнес» → «Кабинет бизнеса». Сравните отклики, вручную выберите одну или несколько команд либо отклоните все. Автоматического назначения нет.
  7. 4:30–5:00. Для выбранной команды опишите проверенный результат этапа и поставьте галочку подтверждения. Покажите начисление 10 баллов за этап, а не за сам отклик.

Для наполнения каталога есть кнопка «Данные для защиты → Загрузить демопримеры» в боковом меню. Она добавляет по пять синтетических задач, команд и предложений. Записи отмечены [Демо], существующие задачи сохраняются, повторное нажатие не создаёт дубликаты. Ссылки example.com являются демонстрационными, не настоящими прототипами. Полный набор для организаторов: examples/demo_data.json (включая пять черновиков). Альтернатива кнопке: python seed_demo.py.

Архитектура и интеграция команды

ФайлОтветственность
app.pyИнтерфейс Streamlit, вопросы, подтверждение, каталог, отклики и решения
backend.pyФормула рейтинга, get_catalog(topic, level)
database.pySQLite: задачи, профили, предложения, подтверждённые этапы
integration.pyСогласование полей бэкенда и AI, перенос ответов без генерации фактов
task_ai/Модуль AI-участника: Responses API, валидация, резервные вопросы
styles.css, .streamlit/config.tomlОбщая тема интерфейса
seed_demo.pyЯвная загрузка синтетического набора без удаления пользовательских данных
tests/Изолированные тесты AI, БД, интеграции и интерфейса

Интегрированы исходные изменения коллег:

  • backend на коммите 16a0f49c7dbaa65600f7f3980bcd830f3b2ff27b;
  • ai/task-clarification на коммите ff23d692a96ce22f2bf1a9238b4af1e370e8fb22;
  • frontend на коммите 91478634a7c3a2ac710b481d97a0b84876b526b4.

Общая версия находится в main. Merge-коммит сохраняет историю всех трёх веток. HTTP-сервер API отдельно не требуется: Streamlit вызывает Python-функции напрямую.

При первом запуске init_db() автоматически дополняет старую базу из любой ветки. Сохраняются задачи, отклики, команды и баллы. Статус выбора команды унифицирован как accepted; старый selected преобразуется автоматически. API бэкенда create_proposal, set_proposal_status, confirm_stage, confirm_task сохранены; функции интерфейса используют ту же базу и правила. Баллы считаются по completed_stages. Скрипты check_*.py из backend также включены; запускайте их только на тестовой базе, поскольку они создают примеры. Автоматические тесты ниже используют временные базы.

Единые поля: title, topic, context, need, users, data, constraints, result, success_criteria, contact, interaction, description, confirmed. Старые industry и success поддерживаются адаптером. AI получает только поля task_ai.FIELDS и исходное описание — без id, статуса, темы или готового рейтинга. Ответы пользователя добавляются к существующим сведениям, а подтверждение сбрасывается. Тему при необходимости указывайте также словами в исходном описании для ИИ.

Рейтинг и правила каталога

РазделБаллы
Контекст и потребность (оба поля)20
Данные и материалы20
Ожидаемый результат15
Критерии успеха15
Ограничения10
Пользователи10
Контакт и формат взаимодействия (оба поля)10

Баллы группы начисляются только при заполнении всех её полей и ручном подтверждении. Рейтинг измеряет полноту, не достоверность текста. Достоверность проверяет человек. Уровни: 0–39 — черновик; 40–69 — рабочая; 70–89 — готовая; 90–100 — приоритетная. Статус публикации и уровень готовности — разные вещи: опубликованная задача уровня «Черновик» видна всем и принимает неограниченное число откликов. Каталог сортируется по убыванию рейтинга; фильтры добровольны.

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

Решение по одному отклику не меняет другие. За отклик или выбор баллы не начисляются. Бизнес может один раз подтвердить этап выбранного предложения: +10 баллов команде. Повторное начисление блокируется в БД. Уже заработанные баллы сохраняются при последующем изменении решения бизнеса.

ИИ и ключ API

Без ключа приложение работает с явно обозначенной локальной заглушкой. Она задаёт отраслевые шаблонные вопросы, а не выполняет полноценный семантический анализ. Для настоящего API скопируйте .env.example в .env и настройте ключ локально. Streamlit читает только OPENAI_API_KEY, OPENAI_MODEL, OPENAI_TIMEOUT_SECONDS; окружение процесса имеет приоритет. Не отправляйте .env и ключи на GitHub.

Снимите галочку «Использовать резервные вопросы без API», чтобы запросить модель. API вызывается только кнопкой, а не при перерисовке страницы. Ошибка API приводит к резервным вопросам с пояснением. ИИ не подтверждает карточку и не выбирает команду. Промпт и схема находятся в task_ai/prompts.py и task_ai/schema.py. Полный контракт: docs/AI_INTEGRATION.md.

Проверки

.\.venv\Scripts\python.exe -m unittest discover -s tests -v

Тесты используют временные базы и подменённый HTTP-транспорт. Они проверяют: вопросы и ошибки AI, отсутствие выдуманных полей, перенос ответов, ручное подтверждение, рост рейтинга, сортировку и старые темы, публикацию и редактирование без дубликатов, отклик на задачу с низким рейтингом, несколько выбранных команд, отклонение, этап и блокировку повторного начисления. Streamlit AppTest проходит весь путь через формы. Демоданные проверяются на повторную загрузку без потери существующих задач. Проверяется перенос обеих схем базы (из backend и frontend): номера задач и откликов, выбранные команды и ранее начисленные баллы сохраняются, повторное начисление запрещено.

Проверка настоящего API с вашим ключом выполняется отдельно; успешные тесты с подменой не доказывают доступность модели или квоты. Для интеграционных проверок платные запросы не выполнялись.

Ограничения MVP

Нет регистрации и разграничения доступа: переключатель «Бизнес / Команда» служит демонстрации, все бизнес-задачи доступны в кабинете. Для общего публичного размещения нужна авторизация. До этого используйте приложение локально с синтетическими данными. Один этап на предложение; чата, уведомлений и загрузки файлов нет. Перед сменой раздела сохраните форму. Несохранённые правки при навигации могут потеряться. SQLite хранит сохранённые задачи между перезапусками приложения.

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

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

AruzhanSeitkhan 9Ayaulym 8aluwoee 4

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

  • 2026-09-23 16:45docs: document full AI Sana setup architecture and demoaluwoee
  • 2026-09-23 16:41Объединить backend, AI и frontend в единый MVP AI SanaAruzhanSeitkhan
  • 2026-09-23 16:25Добавить демоданные и инструкцию запуска AI SanaAruzhanSeitkhan
  • 2026-09-23 16:14Проверен сквозной сценарий: 24 теста, закрытие SQLite и защита повторного начисленияAruzhanSeitkhan
  • 2026-09-23 16:13docs(ai): explain setup architecture rating and demo checksaluwoee
  • 2026-09-23 16:12Добавлен тёмно-синий интерфейс: вопросы ИИ, каталог, отклики и кабинет бизнесаAruzhanSeitkhan
  • 2026-09-23 16:10Добавить профили команд и баллы за подтвержденный этапAyaulym
  • 2026-09-23 16:07Соединены бэкенд и AI-уточнения, добавлены хранение откликов и обновление задачAruzhanSeitkhan
Все коммиты (21)
  • 2026-09-23 16:05Добавить редактирование и повторное подтверждение задачAyaulym
  • 2026-09-23 15:59Добавить ручной выбор и отклонение командAyaulym
  • 2026-09-23 15:50Добавить создание и просмотр откликов командAyaulym
  • 2026-09-23 15:40test(ai): verify API failures and document backend integrationaluwoee
  • 2026-09-23 15:39Подключены рейтинг задачи и сохранение в SQLiteAruzhanSeitkhan
  • 2026-09-23 15:37Добавить фильтры каталога по теме и готовностиAyaulym
  • 2026-09-23 15:33Подключены рейтинг задачи и сохранение в SQLiteAruzhanSeitkhan
  • 2026-09-23 15:27Добавить публикацию задач и каталог по рейтингуAyaulym
  • 2026-09-23 15:13Добавлена форма карточки задачи с подтверждениемAruzhanSeitkhan
  • 2026-09-23 15:08Добавить сохранение и чтение задач в SQLiteAyaulym
  • 2026-09-23 15:06feat(ai): add OpenAI task clarification with validated fallbackaluwoee
  • 2026-09-23 14:54Добавлена первая форма AI SanaAruzhanSeitkhan
  • 2026-09-23 14:42Добавить карточку задачи и расчет рейтингаAyaulym
Структура репозитория (33 файлов)
.env.example
.gitignore
.streamlit/config.toml
README.md
app.py
backend.py
check_catalog.py
check_edit.py
check_filters.py
check_progress.py
check_proposals.py
check_selection.py
database.py
docs/AI_INTEGRATION.md
docs/AI_MODULE.md
examples/ai_input.json
examples/ai_output_offline.json
examples/demo_data.json
integration.py
requirements.txt
seed_demo.py
styles.css
task_ai/__init__.py
task_ai/__main__.py
task_ai/fallback.py
task_ai/prompts.py
task_ai/schema.py
task_ai/service.py
tests/test_app.py
tests/test_demo.py
tests/test_integration.py
tests/test_merge_compatibility.py
tests/test_task_ai.py
Ветки (5)

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

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

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