Технологии

Под капотом платформы

Семь слоёв платформы — от банка ИИ-агентов до контура честности. Каждый раздел написан дважды: простыми словами — для руководителя, технически — для специалиста.

01

Банк ИИ-агентов

Просто говоря

Платформа генерирует ИИ-агентов, отражающих демографию города, — до 50 000 под город и район: возраст, доход, занятость, машина или транспорт, привычные маршруты. Для каждого вопроса из банка выбирается базовая панель в 46 агентов — всегда одна и та же при тех же условиях, поэтому прогон можно повторить и проверить; по кнопке панель воспроизводимо уточняется до 200.

Важно: профили стабильны. Новости и обращения не меняют агенту возраст или доход — меняется только контекст вокруг него. Так варианты решений сравниваются на одной и той же панели.

Технически
  • ResidentBank — версионированный банк агентов, генерация до 50 000 профилей; активная версия населения — v3 (PopulationModelSnapshot с content-addressed ID и source-as-of датами источников)
  • модель населения именуется честно: маргинальные распределения, без кросс-таблиц — пока их не передал заказчик
  • детерминированная выборка панели: draw(46) ⊆ draw(200) — уточнение расширяет панель, не пересобирая её, и наследует версию населения и снимок контекста
  • взвешивание: районы × две взрослые возрастные полосы; признаки мобильности: carAccess, destinationDistrict
  • panelComposition-гейт: состав панели проверяется до прогона
  • RunManifest фиксирует версию банка, seed и параметры — прогон воспроизводим
02

Контекст города

Просто говоря

Обращения жителей и публикации из открытых источников — это карта того, что в городе болит: по каждому району видно её собственную «температуру». Но платформа принципиально не считает их голосованием — пишут не все и не обо всём.

Поэтому контекст прикладывается к прогону отдельным слоем: агент панели «знает» о проблемах своего района, но его ответ на новую меру — его собственный.

Технически
  • PostgreSQL: обращения + сигналы соцмедиа, дедупликация, GIN full-text (russian)
  • corpusForMeasure — корпус текстов, релевантных конкретной мере, собирается под прогон
  • гео-обогащение по словарю улиц: у обращений без явного адреса район восстанавливается из текста
  • снимок контекста фиксируется на момент прогона — сравнение вариантов идёт на одном снимке
  • обезличивание: персональные данные вычищаются на входе
03

Три движка симуляции

Просто говоря

Быстрый движок — «опрос» панели: каждый ИИ-агент отвечает на меру, из ответов складывается картина принятия. Это минуты.

Два глубоких движка отвечают на другой вопрос — не «что думают», а «что будет с обсуждением»: агентная лента показывает, какие аргументы разгоняются; графовая симуляция — разгорится тема или затухнет. Они запускаются по кнопке поверх готового отчёта.

Технически
  • Fast — одноходовой опрос LLM-персон в основном процессе: независимые сэмплы на персону, bootstrap-интервал, светофор-вердикт
  • oasis-sim — отдельный Python-сервис (движок OASIS / camel-ai, Apache-2.0) за HTTP: Reddit-подобная среда, 2–3 раунда чтения ленты и реакций
  • MiroFish — независимый форк за HTTP: граф знаний (Zep) + до 36 раундов эмерджентной динамики; AGPL-3.0 намеренно изолирован сервисной границей
  • гейт качества прогонов динамики (v6) отбраковывает вырожденные раунды
  • синтез-слой возвращает выводы динамики в план меры — с бейджем «динамика», не подменяя числа Fast
Численное принятие — всегда из Fast; глубокие движки дают качественные сигналы, не проценты.
Глубокая симуляция · MiroFish

Обсуждение живёт в графе знаний.

MiroFish моделирует, как тема пойдёт по сообществам: агенты раунд за раундом читают граф и дописывают его. Судьба темы видна по связям — плотнеют они или угасают.

Одна тема — два сценарияузлы: агенты и сообщества · рёбра: связи и упоминания
вердикт: разгорится — вмешаться до объявления
вердикт: затухнет — ресурс можно не тратить
Мераcast агентов — из Fast-прогона
Граф знанийZep: сущности, связи, даты
Раунды 1…36агенты читают и дописывают граф
Гейт v6отбраковка вырожденных прогонов
Вердиктразгорится · тлеет · затухнет
В плансинтез с бейджем «динамика»
Память — это граф

Сущности и связи с датами: кто, о чём и когда. Каждый раунд агенты читают срез графа и дописывают его — так у симуляции появляется история.

Рост связей = рост темы

Плотнеют связи вокруг темы — она разгорается. Граф не растёт — затухает. Промежуточное состояние — «тлеет»: искры есть, разгона нет.

Числа остаются за Fast

Глубокая симуляция даёт качественные сигналы динамики. Проценты принятия она не трогает — это принцип разделения контуров.

Изолированный сервис

MiroFish работает за HTTP-границей отдельным сервисом (AGPL-3.0 не смешивается с кодовой базой) — долгий фоновый расчёт не мешает платформе.

04

Контур честности

Просто говоря

Главный риск любой LLM-системы — красиво рассказанная неправда. «Пульс города» построен так, чтобы текст отчёта физически не мог разойтись с расчётом: числа и вердикты идут из детерминированного кода, язык — только вокруг них.

А чтобы не обманывать себя, платформа ведёт журнал: каждый прогноз позже сопоставляется с фактом — и результаты сверки публикуются как есть, включая ошибочные.

Технически
  • контрактный реестр фактов: каждое число в тексте отчёта обязано ссылаться на расчётный факт
  • гард Fast сверяет отчёт с репрезентативным сэмплом сырых ответов панели
  • panelPrecision: точность доли ≈ 98/√ESS п.п.; порог различимости вариантов — лидер внутри шума не объявляется
  • паспорт расчёта: панель, ESS, ±п.п., дисклеймер «симуляция, не опрос» — в каждом отчёте
  • постфлайт-аудит с guard'ом чисел и вердиктов; журнал прогнозов и ретро-бэктест с вердиктами confirmed / partial / refuted
  • слепой бенчмарк против one-shot LLM по внешней рубрике (нормативка РФ), без атрибуции стилей
05

Исследователь и инструменты

Просто говоря

Внутри платформы работает исследовательский агент: проверяет меру на соответствие нормативке, ищет пропущенные шаги, дополняет план — вплоть до рекомендации личного выезда на место. Но у него нет права трогать числа: найти пропуск он может, «подправить» прогноз — нет.

Технически
  • research-агент работает только по нормативной базе РФ
  • MCP-инструменты: submit_action_supplement (дополнение плана мерами), IncidentBrief (структурная сводка инцидента — без права давать поручения)
  • evidence-bound коммуникация: каждый тезис черновика объявления привязан к свидетельству
  • жёсткая граница: внешний research не может изменить cast, веса, проценты или вердикт
06

Инциденты и мониторинг

Просто говоря

Сигналы города — всплески обращений, публикации в соцсетях, происшествия — собираются в реальном времени во входящие инциденты со статусами и историей. Ранние признаки недовольства видны до эскалации; по инциденту в один шаг запускается прогон панели — «как жители отреагируют, если мы сделаем X» — прямо из карточки события.

Технически
  • incident inbox в PostgreSQL: статусы, журнал, поколения инцидента
  • дедупликация сигналов и мониторинг здоровья источников (sourceHealth)
  • war room группирует прогоны по источнику: инцидент → меры → сравнение вариантов
  • из инцидента — «Исследовать» (сводка) или «Предложить меры» (прогон панели)
07

Стек и развёртывание

Просто говоря

Обычная серверная инсталляция без экзотики: платформа целиком работает в контуре заказчика на одном сервере. Тяжёлые симуляции вынесены в отдельные сервисы — основной интерфейс остаётся быстрым.

Технически
  • приложение: Next.js (Node.js); данные: PostgreSQL; очереди и кэш: Redis
  • развёртывание: Docker Compose; симуляция динамики — отдельные HTTP-сервисы (Python)
  • LLM-провайдеры за абстракцией; режимы «Быстрая» / «Дольше, но лучше»
  • графовая память глубокой симуляции: Zep
  • интерфейс — полностью на русском

Посмотрите вживую.

Лучший способ понять «Пульс города» — пройти путь от текста меры до отчёта на реальных данных пилота.