MirPrognoz — система прогнозного моделирования общественного мнения, основанная на технологиях GraphRAG и мультиагентной симуляции.
Система решает задачу: «Как отреагирует общество на событие X до того, как оно произойдёт?»
Из исходных документов (аналитические отчёты, новостные материалы, описания ситуаций) система автоматически строит граф знаний, извлекая именованные сущности (организации, социальные группы, публичные персоны), факты, позиции сторон и причинно-следственные связи. На основе графа генерируется популяция автономных AI-агентов — каждый с индивидуальным когнитивным профилем, набором убеждений, долговременной памятью (ZEP) и социальными связями.
Агенты помещаются в симулированную социальную среду, где взаимодействуют как реальные пользователи: публикуют посты, комментируют, голосуют, делают ретвиты и формируют кластеры мнений. Система фиксирует динамику распространения информации, выявляет лидеров влияния, точки поляризации и прогнозирует реакцию аудитории.
Вход: загрузите документы с контекстом ситуации и опишите триггерное событие (сценарий) на естественном языке.
Выход: структурированный аналитический отчёт с выявленными трендами, кластерами мнений, лидерами влияния — и интерактивная среда для верификации результатов (интервью с агентами, пакетные опросы).
Система работает как конвейер из пяти последовательных этапов:
Загруженные документы (PDF, Markdown, TXT) анализируются NLP-движком Zep Cloud. Документ разбивается на эпизоды, из которых извлекаются:
- Именованные сущности — организации (
Минфин,Профсоюзы), социальные группы (IT-специалисты,Молодёжь), публичные персоны, СМИ, государственные органы. Каждая сущность — это будущий AI-агент - Факты — конкретные утверждения с привязкой к источнику: «67% работающих граждан поддерживают идею», «производительность выросла на 39,9%»
- Связи между сущностями — кто поддерживает кого (
Профсоюзы → за реформу), кто выступает против (Минфин → против), кто сотрудничает (Минтруд ↔ Эксперты ВШЭ) - Онтология — система генерирует набор типов сущностей, специфичный для конкретной темы. Для темы «четырёхдневная неделя» это могут быть:
GovernmentAgency,TradeUnion,SocialGroup,ExpertCommunity,MediaOutlet
Параллельно бэкенд вызывает LLM (Qwen 3.5 122B) для генерации онтологии: система анализирует текст и определяет, какие типы сущностей релевантны для данной темы, какие примеры сущностей должны быть, какие типы связей между ними существуют.
Результат: граф знаний в Zep Cloud — узлы (сущности с типами, описаниями, атрибутами) и рёбра (факты-связи между ними).
Каждая сущность из графа превращается в полноценного AI-агента. Процесс генерации многоступенчатый:
-
Нормализация имён — LLM приводит все имена к именительному падежу и корректному написанию.
«депутатов Государственной Думы»→«Депутаты Государственной Думы»,«профсоюзы»→«Профсоюзы» -
Обогащение контекста — для каждой сущности выполняется гибридный поиск по графу Zep: извлекаются все связанные факты, рёбра, соседние узлы. Это даёт агенту «память» о своих связях и позициях
-
Генерация профиля через LLM — на основе имени, типа, описания и контекста LLM генерирует детальный профиль:
- Демография: возраст, пол, страна, профессия
- Психотип: MBTI-тип (INTJ, ENFP и т.д.), влияющий на стиль коммуникации
- Bio: краткое описание для профиля в соцсети (до 200 символов)
- Persona: развёрнутое описание характера, мотиваций, стиля общения, отношения к теме (до 1000 символов)
- Интересы: список тем, которые интересуют агента
- Социальные метрики: количество подписчиков, друзей, постов, карма
-
Параллельная генерация — профили создаются в 5 параллельных потоках. Каждый профиль сохраняется в реальном времени, прогресс транслируется на фронтенд через SSE
Результат: JSON-файл с профилями агентов (формат Reddit) и/или CSV (формат Twitter), готовые для загрузки в OASIS.
Агенты загружаются в движок OASIS и помещаются в две параллельные социальные среды:
| Платформа | Формат контента | Взаимодействия | Стиль агентов |
|---|---|---|---|
| Короткие посты (до 280 символов) | Ретвиты, лайки, ответы, подписки | Лаконичные высказывания, хештеги, эмоции | |
| Длинные посты в тематических сабреддитах | Комментарии, голосования (upvote/downvote), треды | Развёрнутые аргументы, ссылки на данные, дебаты |
Симуляция проходит в раундах (по умолчанию 20–40). В каждом раунде каждый агент:
- Читает ленту — просматривает новые посты и комментарии других агентов
- Принимает решение — на основе своего профиля, убеждений и контекста решает: проигнорировать, лайкнуть, прокомментировать, сделать ретвит или написать собственный пост
- Генерирует контент — LLM создаёт текст поста/комментария от имени агента, учитывая его persona, стиль платформы и текущий контекст дискуссии
- Взаимодействует — публикует контент, подписывается на интересных агентов, голосует за/против постов
Триггерный пост (из промпта пользователя) публикуется в начале симуляции и запускает волну реакций.
Результат: полная хронология взаимодействий на обеих платформах — посты, комментарии, голоса, подписки, ретвиты.
По завершении симуляции специализированный агент-аналитик (ReportAgent) обрабатывает весь массив сгенерированного контента и формирует структурированный отчёт:
- Основные тренды — какие нарративы доминировали, как менялась повестка от раунда к раунду
- Кластеры мнений — какие группы агентов объединились в позиции «за» и «против», какие промежуточные позиции сформировались
- Лидеры влияния — какие агенты формировали повестку, чьи посты получали максимум взаимодействий, кто менял мнения других
- Точки бифуркации — моменты, когда дискуссия резко меняла направление (например, когда агент-эксперт опубликовал статистику, изменившую тон обсуждения)
- Линии поляризации — по каким осям разделились мнения (возрастная, профессиональная, идеологическая)
- Прогноз реакции — обобщённая оценка того, как реальная аудитория может отреагировать на аналогичное событие
Интерактивный режим для проверки и углубления анализа. После завершения симуляции агенты «остаются на связи» — вы можете:
- Интервью с агентом — выберите конкретного агента и задайте ему вопросы. Он отвечает «в образе», опираясь на свой профиль, убеждения и опыт симуляции. Например: «Почему вы поддержали реформу?» или «Что изменило ваше мнение?»
- Пакетные опросы — задайте вопрос всем агентам одновременно и получите распределение ответов. Например: «Поддерживаете ли вы переход на 4-дневную неделю?» — и увидите процентное распределение по группам
- Анализ мотивации — исследуйте, почему конкретный агент принял определённую позицию, какие факты повлияли, чьи посты изменили его мнение
| Инструмент | Версия | Проверка |
|---|---|---|
| Node.js | 18+ | node -v |
| Python | 3.11–3.12 | python --version |
| uv | Последняя | uv --version |
cp .env.example .envОбязательные переменные:
# Flask
FLASK_DEBUG=false
# Сгенерировать: python3 -c "import secrets; print(secrets.token_hex(32))"
SECRET_KEY=replace_with_64_hex_chars
# LLM API (OpenAI-совместимый формат)
# Можно использовать OpenRouter, DashScope, OpenAI или любой совместимый провайдер
LLM_API_KEY=your_api_key
LLM_BASE_URL=https://openrouter.ai/api/v1
LLM_MODEL_NAME=qwen/qwen3.5-122b-a10b
# Быстрая модель (вспомогательные задачи: нормализация имён, лёгкая генерация)
LLM_BOOST_API_KEY=your_api_key
LLM_BOOST_BASE_URL=https://openrouter.ai/api/v1
LLM_BOOST_MODEL_NAME=qwen/qwen3.5-27b
# ZEP Cloud — сервис памяти агентов и графа знаний
# Бесплатный тариф: https://app.getzep.com/
ZEP_API_KEY=your_zep_api_keyВ продакшне помимо переменных окружения поднимите перед Docker-сервисом nginx с HTTPS и Basic Auth (или OAuth-proxy). В
docker-compose.ymlпорты3000/5001уже забинжены на127.0.0.1— приложение доступно только через reverse-proxy, прямой доступ из интернета закрыт.
# Все зависимости одной командой
npm run setup:allИли пошагово:
npm run setup # Node-зависимости (корень + фронтенд)
npm run setup:backend # Python-зависимости (бэкенд)npm run dev- Фронтенд:
http://localhost:3000 - API бэкенда:
http://localhost:5001
cp .env.example .env
# Отредактируйте .env, заполнив API-ключи
docker compose up -dКонтейнер автоматически установит все зависимости, соберёт фронтенд и запустит оба сервера.
Для быстрого старта используйте готовые тестовые данные:
| Файл | Описание |
|---|---|
| test-document.md | Документ о переходе на четырёхдневную рабочую неделю в России |
| test-prompt.txt | Сценарий симуляции: реакция социальных групп на реформу |
Как использовать:
- Загрузите
test-document.mdв поле «Исходные данные» - Скопируйте содержимое
test-prompt.txtв поле «Сценарий симуляции» - Нажмите «Запустить симуляцию»
Что произойдёт: система построит граф знаний из документа, извлечёт сущности (Профсоюзы, Депутаты Государственной Думы, Минфин, Минтруд, IT-специалисты, Молодёжь, Пенсионеры, Промышленные рабочие и др.), сгенерирует AI-агентов с уникальными профилями и запустит параллельную симуляцию на Twitter и Reddit. По завершении — аналитический отчёт с трендами, кластерами мнений и лидерами влияния.
Документ — это основа для построения графа знаний. От его качества напрямую зависит точность и глубина симуляции. Система принимает форматы PDF, Markdown (.md) и текстовый файл (.txt).
Что должен содержать документ:
- Участники / стороны — конкретные лица, организации, социальные группы, государственные органы, СМИ. Каждый участник станет отдельным AI-агентом в симуляции. Чем больше участников с разными позициями — тем богаче и реалистичнее моделирование
- Факты и данные — статистика, цифры, результаты исследований, опросов, экспериментов. Агенты используют их как аргументы в дискуссиях: публикуют в постах, ссылаются в комментариях, спорят о трактовке
- Позиции сторон — кто за, кто против, кто нейтрален, какие аргументы у каждой стороны. Это формирует когнитивные профили агентов — их убеждения, мотивации и стиль аргументации
- Контекст — экономическая ситуация, исторические предпосылки, международный опыт, правовые рамки. Контекст обогащает дискуссию и позволяет агентам приводить более глубокие аргументы
- Отношения между участниками — кто поддерживает кого, кто конфликтует, кто сотрудничает. Система извлечёт эти связи и отразит в социальном графе агентов
Рекомендации по составлению:
- Называйте участников в именительном падеже (кто? что?): «Профсоюзы», «Депутаты Государственной Думы», а не «профсоюзов», «депутатов». Система автоматически нормализует падежи, но правильные формы в исходнике дают лучший результат
- Указывайте конкретные организации и группы, а не абстрактные понятия: «Минфин» вместо «финансовые круги», «Эксперты ВШЭ» вместо «учёные»
- Не используйте страны как участников — вместо «Исландия» пишите «Правительство Исландии» или описывайте «Исландский эксперимент с четырёхдневной неделей»
- Добавляйте числовые данные: проценты поддержки, экономические показатели, результаты опросов — агенты будут оперировать ими в дискуссиях
- Оптимальный объём: 1–5 страниц. Слишком короткий документ (< 500 слов) даст мало сущностей и поверхностную симуляцию. Слишком длинный (> 10 страниц) замедлит обработку без значительного прироста качества
- Структурируйте документ по разделам: текущая ситуация → позиции сторон → контекст → возможные сценарии. Это помогает NLP-движку точнее извлекать связи
Промпт задаёт триггерное событие — новость, решение или ситуацию, на которую будут реагировать агенты. Это «стартовый пост», который запускает дискуссию.
Хороший промпт содержит:
- Конкретное событие — что именно произошло? Объявление, решение, утечка, публикация. Чем конкретнее — тем реалистичнее реакции
- Детали события — кто объявил, когда, какие условия, какие ограничения. Детали дают агентам материал для обсуждения
- Вопросы для моделирования — какие реакции ожидаются? какие линии конфликта? какие аргументы будут доминировать? Вопросы фокусируют симуляцию
- Упоминание целевых групп — какие именно социальные группы должны участвовать. Это помогает системе расставить приоритеты при генерации агентов
Пример хорошего промпта:
Правительство России объявило о запуске пилотного проекта по переходу на четырёхдневную рабочую неделю в пяти регионах. Участие добровольное, зарплаты сохраняются. Как отреагируют различные социальные группы — молодёжь, промышленные рабочие, IT-специалисты, пенсионеры? Какие аргументы будут доминировать в публичной дискуссии? Возникнет ли поляризация мнений и по каким линиям?
Пример плохого промпта:
Расскажи про четырёхдневную рабочую неделю.
(Нет события, нет вопросов, нет целевых групп — агентам не на что реагировать)
Симуляция одновременно моделирует две социальные платформы:
| Платформа | Формат контента | Взаимодействия | Стиль агентов |
|---|---|---|---|
| Короткие посты (до 280 символов) | Ретвиты, лайки, ответы, подписки | Лаконичные высказывания, хештеги, эмоции | |
| Длинные посты в тематических сабреддитах | Комментарии, голосования (upvote/downvote), треды | Развёрнутые аргументы, ссылки на данные, дебаты |
Каждый агент публикует в обеих платформах, адаптируя стиль. Это позволяет сравнить динамику распространения мнений в разных средах и выявить, как формат платформы влияет на характер дискуссии.
Средняя стоимость одной симуляции — около $5 на API-вызовах (LLM + Zep). Основные расходы:
| Этап | Стоимость |
|---|---|
| Генерация онтологии и профилей агентов | ~$1–2 |
| Симуляция (20–40 раундов на двух платформах) | ~$2–3 |
| Аналитический отчёт | ~$0.5–1 |
Для начала рекомендуется ограничить количество раундов до 20–40 и количество агентов до 10–15.
Полная история изменений — в файле CHANGELOG.md.
Движок симуляции работает на базе OASIS (Open Agent Social Interaction Simulations). Благодарим команду CAMEL-AI за вклад в открытый код.