О проекте
Команда: AI-true-seekers
Кейс HackAlem.ai: Спецтрек — Astana Innovations
Стадия: Рабочий MVP
Задача кейса: «Аким на 5 часов»: городской симулятор, распределяющий бюджет по 5 направлениям и 5 районам
Суть
CLI и JSON API симулятора бюджета Астаны. По лимитам на пять сфер или по пяти выбранным мерам рассчитывает Astana Quality of Life Score по пяти районам, находит оптимальный портфель мер и формирует отчёт с рекомендациями нескольких AI-ролей.
Как устроено
Вход (JSON или CLI) проходит Pydantic-валидацию, затем математический движок считает индекс качества жизни по районам с эффектами, лагами и синергиями мер. В режиме allocation полный перебор каталога M1–M14 (694 395 допустимых размещений) выбирает ровно 5 мер в пределах лимитов. В режиме measures проверяются бюджет и несовместимости. Затем роли Urban Expert и Social & Risk параллельно объясняют рассчитанные факты через OpenAI Structured Outputs, а Akim Chief Advisor собирает итоговый отчёт. AI не меняет Score. Есть эндпоинты /score, /simulate и /optimal.
Ключевые решения
- полный перебор портфелей
- индекс качества жизни с лагами и синергиями
- мультиагентные роли
- OpenAI Structured Outputs
- guardrails
Метрики
Пример: Score 56.015 при лимитах 25/15/25/15/20 (расход 85, база 52.558); оптимум полного перебора 57.237 при расходе 98
Особенности
Все числа считает детерминированный движок, LLM-роли только объясняют и не могут изменить Score. Полный перебор гарантирует лучший допустимый портфель. Тесты покрывают guardrails и дисклеймеры о рисках.
Стек
Python · Pydantic · OpenAI SDK · pytest · GitHub Actions
Модели
gpt-4o-mini
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-8dec28f9-ai-true-seekers.
README
README.mdАким на 5 часов — симулятор управления Астаной
1. Что делает проект
Симулятор помогает сравнить бюджетные сценарии для кейса Astana Innovations: задаёт пять лимитов расходов по сферам или пять конкретных мероприятий, рассчитывает изменение качества жизни по пяти районам Астаны и формирует отчёт с рекомендациями. Это учебная модель для обсуждения городских решений, а не прогноз фактического эффекта бюджета.
2. Что реализовано
- Режим
allocation: алгоритм получает лимиты по транспорту, озеленению, соцсфере, безопасности и городским сервисам. Он перебирает каталог M1–M14 и выбирает лучший допустимый набор ровно из пяти мер, не превышая каждый лимит и общий бюджет. - Режим
measures: пользователь сам выбирает пять уникальных мер и районы. Перед оценкой проверяются бюджет, число мер на сферу и несовместимости. - Общая формула Astana Quality of Life Score для обоих режимов.
- Оптимизатор полного перебора, просмотр каталога, интерактивный CLI и машинный JSON-вывод.
- Локальный HTTP JSON API для оценки и симуляции сценариев.
- Четыре роли: Analytics & Math Engine, Astana Urban Expert, Social & Risk Agent и Akim Chief Advisor.
- Offline-отчёт без API-ключа; AI-объяснения через OpenAI Structured Outputs при наличии ключа.
3. Технологии и архитектура
Стек: Python 3.10+, OpenAI Python SDK (openai), Pydantic, python-dotenv; для тестов — pytest. Внешний агентский фреймворк не используется.
JSON / CLI → Pydantic-валидация → математический движок
↓
Analytics & Math Engine
↓
Urban Expert ∥ Social & Risk
↓
Akim Chief Advisor → JSON-отчёт
Python детерминированно проверяет решения, выбирает допустимый портфель и считает все числа. Urban Expert и Social & Risk получают рассчитанные факты и формируют объяснения. Chief Advisor объединяет результаты двух профильных ролей и Analytics в итоговый отчёт. Два профильных AI-вызова выполняются параллельно, затем запускается оркестратор. AI не меняет Score.
Для машинной интеграции предусмотрены POST /score (численная оценка), POST /simulate (отчёт агентов), а также /config, /validate и /optimal. API запускается локально на 127.0.0.1:8000; CORS выключен по умолчанию. При необходимости задайте Bearer-токен AKIM_API_TOKEN. Подробности модели: docs/ADVANCED.md.
4. Установка и запуск
Python 3.10 или новее. В терминале из корня проекта:
python -m venv .venv
source .venv/bin/activate
# Windows PowerShell: .venv\Scripts\Activate.ps1
python -m pip install -r requirements.txt
Примеры локального запуска без API:
python main.py --input example_allocation.json --offline --json
python main.py --input example_measures.json --offline --json
python -m akim_sim --optimize
Для AI-объяснений скопируйте .env.example в .env, укажите OPENAI_API_KEY и уберите --offline. По умолчанию используется модель gpt-4o-mini; её можно переопределить через OPENAI_MODEL или --model. Ключ не добавляется в репозиторий. Без него отчёт строят правила, а численный Score остаётся тем же.
Запуск API: python -m akim_sim --serve. Параметры --host, --port и --api-token позволяют настроить локальный сервер и Bearer-аутентификацию. Не выставляйте API наружу без ограничения доступа.
5. Пример проверки
Запустите пример лимитов:
python main.py --input example_allocation.json --offline --json
В примере лимиты 25 / 15 / 25 / 15 / 20. Проверочные значения из текущего кода:
Astana Quality of Life Score: 56.015 / 100
Фактический расход: 85 условных единиц
Базовый Score: 52.558
Ручной пример из каталога даёт 56.543 при расходе 95. Полный перебор находит лучший допустимый портфель со Score 57.237 при расходе 98. Эти величины — условные игровые единицы, не смета в тенге. Полный перебор учитывает 694 395 допустимых размещений.
Для запуска тестов:
python -m pip install -r requirements-dev.txt
python -m pytest -q tests
example_allocation.json, example_measures.json и example_report.json содержат повторяемые примеры и результат.
6. Данные, внешние сервисы и ограничения
- Используются учебные районные показатели, доли населения, каталог мер, эффекты, лаги и синергии из проекта и переданных материалов кейса. Ссылки организаторов: описание кейса и датасет районов.
- При включённых AI-объяснениях используются OpenAI API и заданная модель; пользователь предоставляет
OPENAI_API_KEY. Живой вызов API без пользовательского ключа не проверялся. Без ключа доступен локальный offline-режим. - Соцсети, обращения жителей, погодные, дорожные и ЖКХ API не подключены. Индексы аварий, заторов и недовольства — модельные прокси, не реальные вероятности или измеренное мнение жителей.
- Данные и эффекты учебные. Анализ чувствительности изменяет веса показателей, а не моделирует реальный буран или паводок. Для решений городской политики нужны проверенные измерения и калибровка.
- В режиме
allocationсуммы являются верхними лимитами, а не прямыми расходами. Неиспользованный лимит сам по себе не повышает Score. Если правила каталога не позволяют выбрать ровно пять мер, расчёт не выдаёт Score. - Не помещайте настоящий
.envили секретный ключ в архив и исходники; используйте.env.exampleкак шаблон.
7. Развёрнутая версия
Публичная развёрнутая версия и веб-интерфейс пока не опубликованы, поэтому ссылки на live-демо нет. Команда --serve запускает локальный JSON API на 127.0.0.1:8000.
Авторы коммитов
История коммитов
- 2026-09-23 17:42ci: show results for every Python versionsyrymovmukhammed
- 2026-09-23 17:40docs: align README with hackathon checklistMadik03
- 2026-09-23 17:33Merge pull request #1: unify Akim simulatorsyrymovmukhammed
- 2026-09-23 17:19feat: unify Akim simulator around official five-measure modelsyrymovmukhammed
- 2026-09-23 14:31feat: add Astana QoL city simulatorMadik03
- 2026-09-23 14:29chore: initialize Python projectMadik03
Структура репозитория (40 файлов)
.env.example .github/workflows/advanced-simulator-tests.yml .gitignore README.md akim_sim/__init__.py akim_sim/__main__.py akim_sim/agents.py akim_sim/api.py akim_sim/cli.py akim_sim/dataset.py akim_sim/engine.py akim_sim/guardrails.py akim_sim/inputs.py akim_sim/llm.py akim_sim/model.py akim_sim/optimizer.py akim_sim/pipeline.py akim_sim/report.py akim_sim/risk.py docs/ADVANCED.md example_allocation.json example_measures.json example_report.json examples/advanced/allocation_example.json examples/advanced/invalid_measures.json examples/advanced/measures_example.json jury_report.md main.py requirements-dev.txt requirements.txt tests/__init__.py tests/conftest.py tests/mock_openai.py tests/test_api.py tests/test_cli.py tests/test_constraints.py tests/test_formula.py tests/test_guardrails.py tests/test_optimizer.py tests/test_risk_disclaimers.py
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.