О проекте
Команда: HelpMake-ID
Кейс HackAlem.ai: Спецтрек — Astana Innovations
Стадия: Доведённый продукт
Задача кейса: «Аким на 5 часов»: городской симулятор, распределяющий бюджет по 5 направлениям и 5 районам
Суть
AI-симулятор городских решений «Аким на 5 часов»: выбор пяти инициатив, детерминированная поквартальная симуляция Q0–Q8, Score, grounded AI Advisor, сохранение и сравнение сценариев в PostgreSQL. Есть развёрнутый продукт.
Как устроено
FastAPI-валидатор проверяет сценарий (ровно 5 мер, бюджет 100, несовместимости). Simulation Engine считает эффекты с учётом лагов и синергий по кварталам Q0–Q8 и итоговый Score = 0.7·D_avg + 0.3·min(D_d) − N_crit. AI Advisor работает через OpenAI-совместимый Chat Completions: получает только подготовленные бэкендом факты и объясняет результат, отвечает на вопросы и рекомендует альтернативы, которые заранее прошли валидатор и симуляцию. Сценарии сохраняются в PostgreSQL (SQLAlchemy Core, asyncpg, Alembic) и сравниваются во фронтенде на React/Vite.
Ключевые решения
- deterministic quarterly simulation Q0–Q8
- lag and synergy modeling
- grounded AI advisor
- pre-validated alternative recommendations
- scenario persistence and comparison
- dataset_hash reproducibility
Особенности
Продукт развёрнут (helpmake-id.live, Swagger на api.helpmake-id.live), есть поквартальная динамика Q0–Q8. AI рекомендует только альтернативы, заранее прошедшие симуляцию.
Стек
React 19 · TypeScript · Vite · Python 3.12 · FastAPI · Pydantic · SQLAlchemy Core · asyncpg · PostgreSQL 17 · Alembic · Docker Compose · Nginx · pytest · Ruff
Модели
OpenAI-compatible Chat Completions
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-30af765a-helpmake-id.
README
README.mdAkim AI — «Аким на 5 часов»
AI-симулятор городских управленческих решений для HackAlem AI 2026 · Astana Innovations
100 единиц бюджета · 5 игровых районов · 14 инициатив · только 5 решений
Akim AI помогает увидеть последствия управленческого сценария до его реализации: пользователь распределяет ограниченный бюджет, принимает пять решений, запускает детерминированную симуляцию и получает изменение районных показателей, Astana Quality of Life Score и объяснение основных компромиссов от AI Advisor.
Simulation Engine считает. AI объясняет. Человек принимает решение.
Ссылки
- Рабочий продукт: https://helpmake-id.live/
- API / Swagger: https://api.helpmake-id.live/docs
- Frontend: frontend/README.md
- AI Advisor: docs/AI_ADVISOR.md
- Архитектурные решения: docs/DECISIONS.md
- Исходное ТЗ: docs/task-brief.md
- Описание датасета: docs/district-dataset.md
Проблема
При развитии города приходится одновременно учитывать транспорт, озеленение и экологию, социальную инфраструктуру, безопасность и качество городских сервисов. При ограниченном бюджете отдельное решение может улучшить один район или показатель, но оставить другую проблему нерешённой.
Главная продуктовая задача Akim AI — дать пользователю возможность сравнивать управленческие сценарии и видеть их последствия и компромиссы на одной воспроизводимой модели.
Пользователь и ценность
Основные пользователи в рамках задания:
- городской управленец;
- аналитик;
- пользователь симулятора.
Akim AI не заменяет управленца и не выдаёт AI-мнение за математический прогноз. Он разделяет ответственность:
- человек выбирает стратегию;
- Simulation Engine рассчитывает последствия;
- AI Advisor объясняет рассчитанный результат и помогает исследовать альтернативы.
Как работает продукт
Состояние города
↓
100 единиц бюджета
↓
5 управленческих решений
↓
Validator
↓
Deterministic Simulation Engine
↓
Before / After + Q0–Q8 + Quality of Life Score
↓
AI Advisor
↓
Объяснение / риски / компромиссы / альтернативы
↓
Новый сценарий или сравнение сценариев
Основной demo-flow
- Открыть Situation Center.
- Посмотреть исходное состояние пяти игровых районов.
- Выбрать ровно пять инициатив из M1–M14.
- Следить за бюджетом и пройти backend validation.
- Нажать Simulate.
- Получить Score и изменения районов Before / After.
- Посмотреть динамику Q0–Q8 с учётом lag.
- Получить AI-объяснение рассчитанного результата.
- Изменить стратегию или сохранить сценарии для сравнения.
Соответствие заданию HackAlem
Must Have
| Требование | Реализация |
|---|---|
| Единый виртуальный бюджет | 100 единиц для всех сценариев |
| Решения по пяти направлениям | Транспорт, экология/озеленение, социальная инфраструктура, безопасность, городской сервис |
| Пять управленческих решений | Validator требует ровно 5 инициатив |
| Автоматический контроль бюджета | Backend отклоняет невалидный сценарий |
| AI-анализ решений | /advisor/explain |
| Astana Quality of Life Score | Детерминированный scoring engine |
| Сильные стороны, риски и последствия | Grounded AI Advisor |
| Решения меняют показатели | Effects, lag, synergies и Q0–Q8 |
| Другой набор решений → другой результат | Каждый валидный сценарий пересчитывается Simulation Engine |
Дополнительно реализовано
- визуализация изменений районов;
- поквартальная симуляция Q0–Q8;
- AI-рекомендации по проверенным альтернативам;
- вопросы к сценарию через AI Advisor;
- сохранение сценариев;
- сравнение двух сценариев;
- PostgreSQL persistence;
- воспроизводимый backend demo-flow.
Не реализованные optional-функции — неожиданные городские события и автоматическая генерация презентации — не требуются для основного сценария MVP.
Ключевые возможности
🏙️ Situation Center
Показывает пять игровых районов, их исходные показатели, бюджет и доступные инициативы.
💰 Управление ограниченным бюджетом
Пользователь получает 100 условных единиц и должен принять ровно пять решений.
🧮 Детерминированная симуляция
Все числовые результаты рассчитываются backend-кодом. LLM не рассчитывает официальный Score.
⏱️ Временная динамика
Simulation Engine возвращает Q0–Q8 и учитывает implementation lag каждой инициативы.
🤖 Grounded AI Advisor
AI работает только с подготовленными backend-фактами и проверенными альтернативами. При недоступности AI числовая симуляция продолжает работать.
🔄 Сохранение и сравнение сценариев
Сценарии сохраняются в PostgreSQL и могут сравниваться по Score, бюджету, районам, показателям и критическим парам.
Архитектура
┌────────────────────────────────────┐
│ Frontend — React + TypeScript │
│ Situation Center / Decisions / UI │
└─────────────────┬──────────────────┘
│ REST API
▼
┌────────────────────────────────────┐
│ Backend — FastAPI │
│ Validator / API / Scenario layer │
└───────────┬───────────────┬────────┘
│ │
▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ Simulation Engine│ │ AI Advisor │
│ deterministic │ │ grounded AI │
└────────┬─────────┘ └────────┬─────────┘
│ │
└──────────┬──────────┘
▼
Structured Result
│
┌─────────┴─────────┐
▼ ▼
Frontend UI PostgreSQL
Почему AI отделён от математики
AI не является источником числовой истины. Перед вызовом AI backend проверяет актуальность результата и формирует ограниченный набор фактов. Рекомендации строятся только из кандидатов, которые предварительно прошли Validator и Simulation Engine.
Это делает систему:
- воспроизводимой;
- тестируемой;
- устойчивой к числовым галлюцинациям;
- работоспособной даже при недоступности AI provider.
Подробнее: AI Advisor V1.
Датасет и модель
Проект использует предоставленный для хакатона синтетический датасет, не содержащий персональных или ограниченных данных.
- 5 игровых районов;
- 10 индикаторов;
- 14 инициатив;
- бюджет 100;
- горизонт H = 8 кварталов;
- эффекты, lag, synergies и incompatibilities.
Версия датасета: 1.1.0. Backend также публикует dataset_hash для контроля воспроизводимости.
Astana Quality of Life Score
Для меры с лагом L реализованная доля эффекта в квартале q определяется моделью симуляции. Итоговый Score:
Score = 0.7 × D_avg
+ 0.3 × min(D_d)
- N_crit
где:
D_avg— средневзвешенный районный Score;min(D_d)— Score слабейшего района;N_crit— число пар «район × показатель» со значением строго ниже 40.
Проверенный baseline: 52.56.
Подробное описание: docs/district-dataset.md.
Технологический стек
Frontend
- React 19
- TypeScript
- Vite
Backend
- Python 3.12+
- FastAPI
- Pydantic
- SQLAlchemy Core
- asyncpg
Database
- PostgreSQL 17
- Alembic migrations
AI
- OpenAI-compatible Chat Completions API
- Grounded Advisor contract
QA / Infrastructure
- pytest / pytest-cov
- Ruff
- Docker / Docker Compose
- Nginx
Структура репозитория
/
├── frontend/ # React + TypeScript Situation Center
├── backend/ # FastAPI, Simulation Engine, AI, tests
├── docs/ # ТЗ, dataset, AI contract, architecture
├── design/ # UI/UX design materials
├── deploy/ # Deployment scripts/config examples
├── openapi.json # API schema
└── README.md
Локальный запуск всего проекта
Подробные шаги и проверка запуска: гайд по локальному запуску. В приватном репозитории уже есть backend/.env с настройками для команды; копировать .env.example не нужно.
Требования
- Docker + Docker Compose
- Python 3.12+ для локальной backend-разработки
- Node.js 20.19+ для frontend
1. Backend
cd backend
docker compose up --build -d
Backend: http://127.0.0.1:8000
Swagger: http://127.0.0.1:8000/docs
Для запуска вне Docker необходимо запустить PostgreSQL, задать DATABASE_URL, выполнить make migrate и make dev.
2. Frontend
Во втором терминале:
cd frontend
npm ci
npm run dev
Vite проксирует /api на локальный backend. Для другого backend можно задать AKIM_API_URL; для production build используется VITE_API_BASE_URL.
API v1
| Метод и путь | Назначение |
|---|---|
GET /api/v1/health | Проверка процесса |
GET /api/v1/ready | Проверка датасета и PostgreSQL |
GET /api/v1/data | Районы, индикаторы, меры, правила, map anchors |
POST /api/v1/simulate | Валидация и расчёт Q0–Q8 |
POST /api/v1/advisor/explain | Объяснение результата |
POST /api/v1/advisor/recommend | Проверенные альтернативы |
POST /api/v1/advisor/ask | Ответ на вопрос по фактам сценария |
POST /api/v1/scenarios | Сохранить пересчитанный сценарий |
GET /api/v1/scenarios | Получить список сценариев |
GET /api/v1/scenarios/{id} | Получить сценарий |
DELETE /api/v1/scenarios/{id} | Удалить сценарий |
POST /api/v1/scenarios/compare | Сравнить два сценария |
Полная схема: openapi.json или Swagger работающего API.
Контрольный пример
{
"decisions": [
{"measure_id": "M7", "district_code": "nura"},
{"measure_id": "M8", "district_code": "nura"},
{"measure_id": "M10", "district_code": "nura"},
{"measure_id": "M12"},
{"measure_id": "M5", "district_code": "saryarka"}
]
}
Ожидаемые ключевые поля:
valid = true
spent = 95
remaining_budget = 5
baseline_score = 52.56
score = 56.54
Q0 = 52.56
Q8 = 56.54
Проверка и воспроизводимость
Backend
cd backend
make check
make test
Coverage gate: 90%.
Frontend
cd frontend
npm ci
npm run build
Автоматический backend demo-flow
При запущенном backend:
cd backend
.venv/bin/python scripts/demo_flow.py
Скрипт проверяет /data, /simulate, маршруты Advisor, сохранение двух сценариев, чтение, сравнение и cleanup. Числовой flow работает даже без AI API.
AI и сторонние инструменты
В соответствии с требованиями хакатона команда раскрывает использование AI, сторонних библиотек и предоставленных материалов.
| Инструмент / материал | Использование |
|---|---|
| ChatGPT | Product analysis, архитектура, документация, prompt design, QA |
| Codex | Помощь в разработке и анализе кода |
| OpenAI-compatible API | Runtime AI Advisor |
| React / ReactDOM | Frontend |
| Vite / TypeScript | Frontend build и типизация |
| FastAPI / Pydantic | Backend API и схемы |
| SQLAlchemy Core / asyncpg | Доступ к PostgreSQL |
| PostgreSQL / Alembic | Хранение сценариев и миграции |
| pytest / Ruff | Тестирование и качество кода |
| Docker / Nginx | Сборка и deployment |
| HackAlem synthetic dataset | Источник данных и правил симуляции |
| Smart City materials | Предметный контекст и продуктовый reference |
| Figma | UI/UX design |
AI-assisted разработка не меняет принцип источника истины: числовые результаты продукта определяет только Simulation Engine.
Команда и вклад
| Участник | Роль | Основной вклад |
|---|---|---|
| Ануар | Product / AI Logic / Documentation | Product concept, scope, AI Advisor contract, README, product/AI QA, demo и pitch |
| Дамир | Backend / AI / Infrastructure | Dataset, Validator, Simulation Engine, Score, API, AI integration, PostgreSQL, tests и deployment |
| Дарья | Frontend / UX | Situation Center, React frontend, визуализация, API integration, UI/UX |
Git history репозитория отражает вклад участников отдельными содержательными коммитами.
Потенциал развития
Текущий MVP уже разделяет математическую модель и AI-интерпретацию, поэтому архитектуру можно расширять без передачи LLM ответственности за расчёты.
Следующие возможные уровни:
- более развитое сравнение нескольких стратегий;
- goal-based AI recommendations;
- городские события с детерминированными эффектами;
- более богатая временная визуализация;
- подключение реальных открытых городских данных при наличии валидированного источника;
- GIS/digital-twin integration как отдельный будущий слой.
Эти направления являются roadmap, а не заявлением о текущей функциональности.
Ограничения MVP
- Все городские показатели, стоимость и эффекты в текущем MVP синтетические.
- Результат не является прогнозом реальной городской политики.
- Карта использует условные illustrative anchors, а не официальные GIS-границы.
- Учётных записей и приватных пользовательских сценариев в MVP нет.
- AI может быть недоступен; математическая симуляция при этом продолжает работать.
- Неожиданные городские события и автоматическая генерация презентации пока не реализованы.
Документация
- Исходное ТЗ
- Датасет и правила
- AI Advisor V1
- Архитектурные решения
- Deployment
- Локальный запуск
- Frontend
Disclaimer
Akim AI — хакатонный прототип на синтетических данных. Он демонстрирует подход к scenario-based decision support и не должен интерпретироваться как официальный прогноз, рекомендация или производственная система городского управления.
Авторы коммитов
История коммитов
- 2026-09-23 17:54Add configured local setup for judgesEZDAMIR
- 2026-09-23 17:53Remove GitHub Actions workflows and document manual deploymentEZDAMIR
- 2026-09-23 17:52docs: capture live README media and publish separate PNG and GIF assetsAnuarG
- 2026-09-23 17:51docs: add reproducible capture of real website screenshots and GIFsAnuarG
- 2026-09-23 17:50feat(frontend): integrate advisor recommendations and saved scenariosDariya
- 2026-09-23 17:40Add guided interface and motion interactionsDariya
- 2026-09-23 17:29Deploy frontend to public site via GitHub ActionsDariya
- 2026-09-23 17:28feat(frontend): compare saved simulation scenariosDariya
Все коммиты (28)
- 2026-09-23 17:26docs: finalize Russian hackathon README with live demoAnuarG
- 2026-09-23 17:22Ground advisor explanations in verified simulation factsEZDAMIR
- 2026-09-23 17:08Merge remote-tracking branch 'origin/main'EZDAMIR
- 2026-09-23 17:07Move saved scenarios to PostgreSQL with Alembic migrationsEZDAMIR
- 2026-09-23 17:06Add frontend connected to simulation APIDariya
- 2026-09-23 16:38Merge remote-tracking branch 'origin/main'EZDAMIR
- 2026-09-23 16:38Document AI provider configurationEZDAMIR
- 2026-09-23 16:36Add scenario timeline, advisor routes, and saved scenariosEZDAMIR
- 2026-09-23 16:08docs: record Akim AI architecture decisionsAnuarG
- 2026-09-23 16:07docs: add evidence-based AI advisor specificationAnuarG
- 2026-09-23 16:07docs: update Akim AI Level 1 architecture and statusAnuarG
- 2026-09-23 15:46add docsEZDAMIR
- 2026-09-23 15:46Implement Akim simulation API and deployment pipelineEZDAMIR
- 2026-09-23 15:02Add Akim AI color concept Figma fileDariya
- 2026-09-23 14:34Move all backend files into backend/ directoryEZDAMIR
- 2026-09-23 14:31Collapse backend/src/ into backend/EZDAMIR
- 2026-09-23 14:27Move backend source into backend/ directoryEZDAMIR
- 2026-09-23 14:21Add FastAPI async backend starter kitEZDAMIR
- 2026-09-23 14:21Update .gitignore and untrack IDE filesEZDAMIR
- 2026-09-23 14:06docs: add Akim AI product concept and simulation READMEAnuarG
Структура репозитория (101 файлов)
.gitignore README.md backend/.dockerignore backend/.env backend/.env.example backend/AGENT.md backend/CLAUDE.md backend/Dockerfile backend/Makefile backend/alembic.ini backend/api/AGENT.md backend/api/CLAUDE.md backend/api/__init__.py backend/api/controllers/AGENT.md backend/api/controllers/CLAUDE.md backend/api/controllers/__init__.py backend/api/controllers/advisor.py backend/api/controllers/dataset.py backend/api/controllers/scenario.py backend/api/controllers/scoring.py backend/api/controllers/simulation.py backend/api/controllers/validator.py backend/api/core/__init__.py backend/api/core/postgres.py backend/api/main.py backend/api/models/AGENT.md backend/api/models/CLAUDE.md backend/api/models/__init__.py backend/api/models/scenario.py backend/api/permission.py backend/api/schemas/AGENT.md backend/api/schemas/CLAUDE.md backend/api/schemas/__init__.py backend/api/schemas/scenario.py backend/api/schemas/simulation.py backend/api/services/AGENT.md backend/api/services/CLAUDE.md backend/api/v1/__init__.py backend/api/v1/endpoints/AGENT.md backend/api/v1/endpoints/CLAUDE.md backend/api/v1/endpoints/__init__.py backend/api/v1/endpoints/advisor.py backend/api/v1/endpoints/data.py backend/api/v1/endpoints/scenarios.py backend/api/v1/endpoints/simulation.py backend/api/v1/routers.py backend/api/webhooks/AGENT.md backend/api/webhooks/CLAUDE.md backend/api/webhooks/__init__.py backend/api/webhooks/advisor.py backend/data/__init__.py backend/data/city_data.json backend/data/measures.json backend/data/rules.json backend/docker-compose.yml backend/docs/development-log.md backend/migrations/postgres/AGENT.md backend/migrations/postgres/CLAUDE.md backend/migrations/postgres/env.py backend/migrations/postgres/script.py.mako backend/migrations/postgres/versions/.gitkeep backend/migrations/postgres/versions/20260923_1202_create_saved_scenarios.py backend/pyproject.toml backend/scripts/demo_flow.py backend/tests/__init__.py backend/tests/conftest.py backend/tests/test_advisor.py backend/tests/test_advisor_new.py backend/tests/test_api.py backend/tests/test_scenarios.py backend/tests/test_simulation.py deploy/deploy.sh deploy/env.example design/Akim AI — Цветовая концепция.fig docs/AI_ADVISOR.md docs/DECISIONS.md docs/deployment.md docs/district-dataset.md docs/local-setup.md docs/task-brief.md frontend/.dockerignore frontend/Dockerfile frontend/README.md frontend/index.html frontend/nginx.conf frontend/package-lock.json frontend/package.json frontend/src/ExperienceLayer.tsx frontend/src/RecommendationPanel.tsx frontend/src/ResultEvidence.tsx frontend/src/ScenarioComparison.tsx frontend/src/api.ts frontend/src/comparison.ts frontend/src/experience.css frontend/src/main.tsx frontend/src/styles.css frontend/src/types.ts frontend/tsconfig.json frontend/vite.config.ts openapi.json scripts/capture-readme-media.py
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.