AI Sana
Платформа Challenge Hub: компании создают и публикуют карточки задач с рейтингом полноты, студенческие команды откликаются, компания вручную…
О проекте
Команда: The best
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Рабочий MVP
Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд
Суть
Платформа Challenge Hub: компании создают и публикуют карточки задач с рейтингом полноты, студенческие команды откликаются, компания вручную выбирает исполнителя. Опциональный AI-помощник редактирует только уже заполненный текст.
Как устроено
Backend на FastAPI с SQLAlchemy 2 и PostgreSQL 17, роли «Компания» и «Студент» через JWT, команды с кодами приглашения. Карточка задачи получает балл готовности с перечнем недостающих полей и подсказками. Каталог поддерживает поиск, фильтры по отраслям и сортировку по готовности. При наличии OPENAI_API_KEY AI-помощник предлагает правки заполненных полей, пустые не заполняет. Три карточки импортированы из Astana Hub. Интерфейс на Streamlit, запуск через Docker Compose.
Ключевые решения
- рейтинг полноты карточки
- ролевой доступ JWT
- LLM-редактура текста без добавления фактов
Особенности
AI сознательно ограничен: он редактирует только заполненные поля, чтобы не выдумывать факты в карточке. В каталог импортированы реальные публичные задачи Astana Hub со ссылкой на источник.
Стек
Python · FastAPI · SQLAlchemy · PostgreSQL · Streamlit · Docker Compose · Pydantic
Модели
OpenAI (модель через OPENAI_MODEL)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-6cf54719-the-best.
README
README.mdAI Sana
Платформа, где компании публикуют реальные учебные задачи, а студенческие команды предлагают решения и прототипы. Компания просматривает отклики и сама выбирает исполнителя.
Каталог включает три карточки, перенесённые из публичного раздела технологических задач Astana Hub, и задачи, которые компании публикуют сами. Внешние карточки снабжены ссылкой на источник и пометкой о локальных откликах.
Основной сценарий
- Компания регистрируется, создаёт карточку задачи и при необходимости сохраняет её как черновик.
- Компания уточняет описание, указывает аудиторию, доступные данные или ресурсы, критерии успеха и срок, затем публикует задачу.
- Студенты создают команду или вступают в неё по коду приглашения.
- Команда отправляет отклик с описанием своего подхода и необязательной ссылкой на прототип.
- Компания рассматривает отклики, отклоняет неподходящие и вручную выбирает исполнителя. После выбора задача закрывается.
Для трёх импортированных карточек отклики и решения доступны только внутри AI Sana на локальном аккаунте куратора. Они не отправляются iDerek, Xena Soft или PROMAT-SYSTEMS, и эти компании не выбирают исполнителя в AI Sana. Чтобы запустить настоящий цикл с компанией-партнёром, она должна зарегистрировать свой аккаунт и разместить/подтвердить собственную задачу.
AI-помощник может отредактировать заполненный текст. Он не заполняет пустые поля; компания проверяет и вручную применяет каждое предложение. Без API-ключа AI выключен, остальные функции доступны.
Стек
- Backend: Python 3.12, FastAPI, SQLAlchemy 2, Pydantic.
- База данных: PostgreSQL 17.
- Интерфейс MVP: Streamlit.
- Запуск: Docker Compose.
- Документация API: OpenAPI/Swagger через FastAPI.
Запуск на Windows
Нужен установленный и запущенный Docker Desktop.
-
В PowerShell из корня репозитория создайте локальный файл настроек:
Copy-Item .env.example .env -
Запустите приложение и базу данных:
docker compose up --build -
Откройте интерфейс и документацию API:
- Сайт: http://localhost:8502 (значение по умолчанию; если порт свободен, установите
FRONTEND_PORT=8501в.env) - Swagger API: http://localhost:8000/docs
- Проверка API и PostgreSQL: http://localhost:8000/health
- Сайт: http://localhost:8502 (значение по умолчанию; если порт свободен, установите
Остановить сервисы можно сочетанием Ctrl+C в терминале. PostgreSQL хранит данные в Docker volume, поэтому они сохраняются после обычной остановки.
AI-помощник
AI — необязательная функция. Чтобы включить её, добавьте свой OPENAI_API_KEY в .env и перезапустите Compose. Ключ хранится только на backend и не передаётся интерфейсу. Модель можно указать в OPENAI_MODEL. Помощник редактирует только уже заполненные поля; пустые поля остаются пустыми, чтобы AI не дополнял карточку выдуманными фактами.
Локальный запуск без Docker
Если PostgreSQL уже установлен и доступен, создайте виртуальное окружение и установите зависимости в двух терминалах PowerShell:
py -m venv .venv
.venv\Scripts\Activate.ps1
py -m pip install -r backend/requirements.txt
py -m pip install -r frontend/requirements.txt
Задайте DATABASE_URL для своей PostgreSQL и JWT_SECRET_KEY, затем запустите API из корня:
py -m uvicorn main:app --app-dir backend --host 127.0.0.1 --port 8000
Во втором терминале запустите Streamlit:
py -m streamlit run frontend/app.py
При локальном запуске сайт откроется по адресу http://localhost:8501.
Основные возможности
- Регистрация, вход и серверная проверка ролей «Компания» и «Студент».
- Команды студентов: создание, код приглашения и вступление.
- Черновики задач, публикация и рейтинг полноты карточки с перечнем недостающих полей.
- Пояснение баллов готовности по каждому полю и подсказки по уточнению карточки; редактирование опубликованных задач.
- Открытый каталог с поиском, отраслевыми фильтрами и сортировкой по готовности.
- Отклики команд с сообщением и ссылкой на прототип.
- Кабинет компании: просмотр откликов, перевод на рассмотрение, отклонение и ручной выбор исполнителя.
- Права доступа на сервере: компании управляют только своими задачами и откликами, студенты откликаются только от своих команд.
Импортированные карточки Astana Hub
При первом запуске backend добавляет три снимка публичных карточек в локальный каталог. Источник каждой карточки открыт из её подробного описания. Внешние данные не синхронизируются автоматически: перед демонстрацией проверьте исходную страницу и сроки. Даты в импортированных карточках — сроки принятия решений, указанные на Astana Hub, а не обещанный срок выполнения проекта.
Локальный кураторский аккаунт для просмотра и выбора внутренних откликов:
- Email:
[email protected] - Пароль:
local-demo-change-me
Эти учётные данные нужны только для локальной демонстрации. Задайте собственные ASTANAHUB_REVIEW_EMAIL и ASTANAHUB_REVIEW_PASSWORD в .env перед запуском и не публикуйте приложение с локальным паролем.
Исходные публикации: iDerek: OCR на хостинге, Xena Soft: AI-агент для E2E-тестов, PROMAT-SYSTEMS: ночное распознавание госномеров.
Статус и ограничения MVP
Приложение рассчитано на локальную демонстрацию и проверку основного сценария. Таблицы базы создаются при первом запуске; для развития production-схемы следует добавить управляемые миграции. Регистрация не подтверждает юридическую принадлежность к компании. Учетные записи не используют подтверждение email или восстановление пароля. Перед публичным развёртыванием замените локальные значения пароля PostgreSQL и JWT_SECRET_KEY, настройте HTTPS и добавьте проверку компаний.
После объединения веток
Выбрана версия feature/Branch-raiymbek с ролями company и student и командами. Она использует отдельный том postgres_teams_data. Старый postgres_data сохранён; его пользователи и задачи автоматически не переносятся. Роль admin в выбранной версии не реализована. Старые backend/auth.py, create_admin.py, init_db.py и test_api.py относятся к предыдущему API и не используются новым сервером.
Авторы коммитов
История коммитов
- 2026-09-23 17:37final updateAlimhan
- 2026-09-23 16:41Configure PostgreSQL Docker services and document role-based APIAlimhan
- 2026-09-23 16:38Branch mainRaiymbek
- 2026-09-23 16:27Merge branch 'main' of github.com:BAITC-Hacks/hack-6cf54719-the-bestRaiymbek
- 2026-09-23 16:16Update projectRaiymbek
- 2026-09-23 15:46backend global updateAlimhan
- 2026-09-23 15:09frontend updateAnxiWork
- 2026-09-23 15:03main.pyAlimhan
Все коммиты (14)
- 2026-09-23 14:09Merge branch 'main' of github.com:BAITC-Hacks/hack-6cf54719-the-bestRaiymbek
- 2026-09-23 14:08update frontendAnxiWork
- 2026-09-23 14:00agentic.mdRaiymbek
- 2026-09-23 13:57readme fileRaiymbek
- 2026-09-23 12:22Merge branch 'main' of github.com:BAITC-Hacks/hack-6cf54719-the-bestAnxiWork
- 2026-09-23 12:12feat: initial clean project structureRaiymbek
Структура репозитория (26 файлов)
.dockerignore .env.example .gitignore README.md agentic.md backend/Dockerfile backend/agent.py backend/auth.py backend/create_admin.py backend/database.py backend/init_db.py backend/main.py backend/models.py backend/requirements-dev.txt backend/requirements.txt backend/schemas.py backend/security.py backend/test_api.py docker-compose.yml frontend/.streamlit/config.toml frontend/Dockerfile frontend/api.py frontend/app.py frontend/index.html frontend/requirements.txt frontend/style.css
Ветки (2)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.