AAYMA
RU
Войти

Аким на 5 часов

CLI и JSON API симулятора бюджета Астаны.

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

О проекте

Команда: 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.

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

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

syrymovmukhammed 3Madik03 3

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

  • 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
Ветки (3)

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

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

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