О проекте
Команда: Lambda Studio
Кейс HackAlem.ai: Финансы — Freedom
Стадия: Доведённый продукт
Задача кейса: «Граф денег»: восстановить структуру организованной группы по сети транзакций (AML)
Суть
AML-профилировщик сети переводов: определяет роли 2248 узлов, кластеры, приоритет проверки и жадный план блокировки. Next.js-дашборд с пятью вкладками и ИИ-справкой, сверенной с данными.
Как устроено
Шесть шагов на Python: загрузка parquet в pandas, направленный граф в NetworkX, кластеры Louvain, роли по cashflow-правилам с проверкой устойчивости на 50 вариантах порогов, приоритет по betweenness и зависимому трафику, экспорт JSON-снимков. Отдельные модули считают temporal, sankey («лестница денег» по коленам), resilience и greedy blocking plan. ИИ-аналитик через function calling (tools.py) читает граф и пишет справку. verify.py сверяет каждый GID и каждое число с pandas и помечает расхождения «⚠ не сверено»; вопросы о виновности обрабатываются правилом без модели.
Ключевые решения
- Louvain
- betweenness centrality
- rule-based roles
- threshold robustness (50 variants)
- greedy blocking plan
- Sankey
- function calling
- hallucination verification
Метрики
Блокировка N=10: план −33.7% потока курьеров vs топ по обороту −30.6%, топ проверки −11.3%, случайные −0.9%; эталонные вопросы к ИИ 3/3; 42 проверки validate
Особенности
Помимо приоритета проверки, симулируется влияние блокировки узлов на поток (drop_reach_pct) со сравнением против baseline-стратегий. Фаервол от галлюцинаций сверяет каждое число и GID в ответе ИИ. Есть смысловые тесты с независимым пересчётом из parquet. Раскладка графа «грибница сверху вниз» по коленам.
Стек
Python · pandas · NetworkX · FastAPI · Uvicorn · Next.js · React · Tailwind CSS · react-force-graph · Docker Compose
Модели
OpenAI API (OPENAI_MODEL)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-1ba45f00-lambda-studio.
README
README.mdГрибница (Mycelium) — детерминированный профилировщик AML-сетей
1. Описание решения и его назначения
«Грибница» — это высокоточный инструмент AML-аналитика для автоматического выявления центров сбора и распределения денег (координаторов, точек сбора и транзитных узлов) на основе выгрузки переводов от известных курьеров (дропов).
Назначение: Преобразование запутанного клубка сырых транзакций (hairball) в строгую иерархию, вычисление роли для каждого участника цепочки и формирование топ-листа «кого проверять первым» с обоснованием на числах.
Почему название «Грибница» (Mycelium)? Метафора нашего проекта проста: правоохранительные органы и банк обычно видят только «грибы» на поверхности — тех самых известных курьеров-дропов, которых легко поймать. Мы же визуализируем саму грибницу — скрытую подземную сеть связей, корней и финансовых потоков. Мы показываем узлы с признаками координаторов и точек сбора — те, на которых держится сеть, а не один мелкий гриб, на месте которого завтра вырастет новый.
В отличие от «черных ящиков» (Black-box AI / Нейронных сетей), наше решение построено на методах Explainable AI (XAI) и детерминированном графовом анализе. Каждый вывод системы математически прозрачен, предсказуем для проверяющей системы и объясним для службы безопасности до конкретной транзакции. Наша графовая математика доказала: некоторые изначально заявленные организаторами «мелкие курьеры» по факту имеют признаки координаторов сети.
2. Описание архитектуры
Архитектура разделена на конвейер данных (Data Pipeline) и презентационный слой (Frontend).
Backend (Конвейер данных и ИИ-аналитик)
Бэкенд архитектурно разделен на два слоя: математическое ядро и нейронную сеть. Математическое ядро выполняет тяжелые вычисления по теории графов (без «черных ящиков»), а нейронка (ИИ) используется по сути как переводчик. Задача нейронки — проанализировать сухие математические расчеты и максимально простым человеческим языком объяснить нетехническим специалистам (руководителям, следователям), какие узлы похожи на центры сбора и распределения, а какие — на периферию.
Само математическое ядро выполняет 6 детерминированных шагов расчета:
- Load (Загрузка): Быстрый парсинг сырых транзакций из
.parquetфайлов. Очистка данных и подготовка датафреймов вpandas. - Features (Построение графа): Превращение плоских таблиц в топологическую направленную сеть с помощью
networkx. Система вычисляет "колени" (глубину) — как далеко деньги ушли от изначального курьера. - Clusters (Кластеризация): Применение алгоритма Louvain. Граф разбивается на изолированные сообщества (группы), чтобы аналитик мог разбирать группы независимо друг от друга.
- Roles (Профилирование Ролей): Самый важный этап AML-логики. Назначает каждому из 2248 узлов жесткую роль на основе Cashflow-метрик:
- Координатор: собирает с множества (≥ 8) и раздает множеству (≥ 20).
- Распределитель: раздаёт ≥ 20 получателям.
- Точка сбора: собирает от ≥ 6 плательщиков.
- Транзит: отдал дальше ≥ 80 % полученного, медиана удержания ≤ 3 дней.
- Конечный получатель: деньги оседают (≥ 200 тыс. ₸, исходящих нет, узел раскрыт обходом).
- Периферия: признаков ролей нет.
Правила и пороги — в
ROLES.md; устойчивость каждой роли проверена 50 вариантами порогов.
- Priority (Приоритизация): Рассчитывает скоринг. Насколько узел важен для перевода денег? Система считает "betweenness centrality" (графовое посредничество) и выводит ранг «кого проверять первым»; отдельно считается жадный план блокировки.
- Export (Кэширование): Подготовка JSON-снимков графа. Благодаря этому API отвечает мгновенно, так как вся тяжелая математика уже предрасчитана.
Frontend (Визуальный слой аналитика)
Интерактивный дашборд (Next.js + React), распределенный на 5 ключевых страниц (вкладок), каждая из которых решает конкретную задачу AML-офицера:
-
Вкладка «Анализ сети» (Визуальная графовая аналитика):
- Обзор путей: главный вид для демо. Сверху известные курьеры («грибы»), ниже реальные цепочки переводов шаг за шагом, внизу пять узлов с наивысшим приоритетом проверки; толщина нити зависит от суммы. Курьер, который сам получил роль (например, координатор), окрашен в цвет роли.
- Топ-30 + соседи / Весь граф: Рабочий 2D-полигон аналитика на базе физического движка
react-force-graph. Гравитационная модель притягивает связанные узлы друг к другу, обнажая скрытые кластеры. Позволяет вручную распутывать «схемы» в режиме реального времени. - Карточка узла (Боковая панель): Вызывается кликом на любой узел. Выполняет функцию Explainable AI (XAI) — не просто выдает диагноз, а математически доказывает его. Демонстрирует: строгие признаки роли (почему это Координатор, а не Транзит), устойчивость алгоритма (насколько уверен скоринг), точные суммы Входа/Выхода, а также полный реестр контрагентов.
-
Вкладка «Кого проверять» (список для проверки):
- Готовый «план расследований на день» для службы безопасности (СБ).
- Сводная таблица топ-30 узлов с наивысшим приоритетом проверки (у курьеров множитель 0,5: они уже известны).
- Сортировка базируется на
priority_score— композитной метрике, учитывающей графовое посредничество (betweenness centrality) и объем «зависимого» трафика.
-
Вкладка «Лестница денег» (Топологический срез):
- Структурная аналитика, разбивающая хаос переводов на строгие слои («колени» графа от 0-го слоя курьеров до 4-го колена).
- Позволяет отследить, какой объём средств проходит через каждое колено; сноска показывает, какая доля (23 %) ходит по кругу или вбок.
- Выявляет скрытые петли (внутренний оборот) и тупики, куда утекает капитал.
-
Вкладка «Блокировка» (Моделирование ROI и KPI):
- Симулятор бизнес-импакта. Демонстрирует последствия от блокировки конкретных счетов по принципу жадной оптимизации (Greedy Blocking Plan).
- Метрика
drop_reach_pctпоказывает, на какой процент упадёт поток денег курьеров, если заблокировать выбранную группу узлов (N = 10: план блокировки −33,7 %, топ по обороту −30,6 %, топ проверки −11,3 %, случайные −0,9 %). Проверять и блокировать — разные задачи. - Позволяет банку измерять эффективность AML-отдела не попытками «заблокировать всех», а точечными (снайперскими) ударами, максимизирующими остановку оттока капитала.
-
Вкладка «Справка ИИ» (Авто-Отчет для ОВД):
- Справка по делу для руководителя подразделения и подготовки запроса в правоохранительные органы; поле для вопросов аналитика.
- Использует технологию Function Calling (
mycelium/ai/tools.py), чтобы робот "щупал" граф и самостоятельно переводил математику с языка цифр на простой язык. - Содержит встроенный Firewall от ИИ-галлюцинаций: специальный модуль
verify.pyжестко сверяет каждое сгенерированное слово, цифру и GID с базой данныхpandas, а расхождения честно показывает значком «⚠ не сверено». Вопросы о виновности модель не получает — ответ фиксированный и собирается из данных.
3. Используемые технологии
- Backend / Data Science: Python 3.9+, Pandas, NetworkX, FastAPI, Uvicorn.
- Frontend: Node.js, React 19, Next.js (Static Export), Tailwind CSS.
- Инфраструктура: Docker, Docker Compose (для гарантии консистентного развертывания экспертами).
4. Инструкции по установке
Рекомендуемый способ — Docker и Docker Compose (варианты без Docker — в разделе 5). Данное решение содержит всё необходимое внутри образа, включая предварительно сгенерированные статические данные в директории web/dist/.
- Склонируйте или загрузите репозиторий.
- Откройте терминал (CMD / PowerShell / Bash) и перейдите в корневую папку репозитория:
cd путь/к/папке/репозитория - Убедитесь, что Docker Desktop (или сервис Docker) запущен на вашей машине. Никаких дополнительных ручных скачиваний (Node.js или Python) не требуется — контейнер полностью самодостаточен.
5. Инструкции по запуску
Для быстрого развертывания одной кнопкой используйте Docker Compose.
Обычный запуск (Production режим):
docker compose up --build
Остановка контейнера:
docker compose down
После выполнения команды up, сервер поднимется в течение нескольких секунд.
Откройте браузер по адресу: http://localhost:8000
Если порт 8000 занят: PORT=8001 docker compose up --build → http://localhost:8001 (PowerShell: $env:PORT=8001; docker compose up --build).
Без Docker — скрипт в один клик (нужен Python ≥ 3.9)
- macOS / Linux:
./run.sh(или./run.sh 8001) — сам создаёт.venv, ставит зависимости, считает выходы и берёт свободный порт. - Windows: двойной клик по
run.bat(илиrun.bat 8001).
Без Docker — вручную
python3 -m venv .venv && source .venv/bin/activate # Windows: py -m venv .venv && .venv\Scripts\activate
python -m pip install -r requirements.txt
python -m mycelium.pipeline # ~10 с: out/*.csv, out/web/*.json, out/facts.json
python -m mycelium.serve # http://localhost:8000 (занят порт: --port 8001)
Node.js не нужен ни в одном варианте: собранный интерфейс лежит в web/dist/, его раздаёт Python-сервер.
6. Необходимые зависимости
Все зависимости автоматически разрешаются внутри Docker. Вне среды Docker (для самостоятельной локальной отладки) потребуются:
- Python ≥ 3.9
- Пакеты из
requirements.txt(устанавливаются черезpython -m pip install -r requirements.txt). Никаких графических ускорителей (GPU) не требуется.
7. Параметры окружения
Базовый функционал графовой и AML аналитики не требует переменных окружения и будет работать полностью автономно без подключения к интернету.
Зависимости окружения нужны только для активации функции ИИ-суфлера (интерактивного помощника). Для этого скопируйте .env.example в .env:
cp .env.example .env
Заполните обязательные поля:
OPENAI_API_KEY: Ключ API (Sk-...)OPENAI_MODEL: Предпочитаемая модель (в.env.example—gpt-4.1-mini)
Примечание: При отсутствии ключа, ИИ-справка всё равно покажет последнюю успешно сверенную и закоммиченную версию (cached data).
8. Порядок проверки основного сценария работы
После того как вы открыли http://localhost:8000, проведите проверку работоспособности и бизнес-логики по следующим шагам:
- Режимы визуализации: На левой панели переключите режим графа с «Обзор путей» на «Топ-30 + соседи». Убедитесь, что отрисовывается динамический гравитационный граф.
- Проверка Топ-листа: В левом нижнем углу изучите список «Рекомендуем проверить». Нажмите на узел
#1(Координатор). - Верификация логики (Explainability): Справа откроется карточка узла. Проверьте блок «ПРИЗНАКИ РОЛИ». Убедитесь, что показатели обоснованы математикой (например, Координатор имеет
>= 8доказанных плательщиков и>= 20получателей). - Блокировка: откройте вкладку «Блокировка» и нажмите «Смоделировать на графе» у «План блокировки». На графе появится баннер: поток денег курьеров −33,7 %, фрагментов сети 72.
- Проверка API (опционально): Перейдите по адресу
http://localhost:8000/docs, чтобы убедиться, что Swagger UI успешно документирует эндпоинты бэкенда (/api/health,/api/blockи т.д.).
9. Автоматическая проверка
| Команда | Что должно получиться |
|---|---|
python -m mycelium.validate | «Всё в порядке: проверок 42, предупреждений 0» — контракты выходов, роли совпадают с эталоном explore.py |
python -m pytest -q | «53 passed, 7 skipped» — форма API = docs/mock, смысловые тесты с независимым пересчётом из data/*.parquet (7 живых вопросов к ИИ пропускаются без ключа) |
python -m mycelium.explain <gid> | разбор любого узла в терминале: роль, правила ✓/✗, метрики, связи |
python -m mycelium.ai.brief --check | «✓ out/brief.md сверена с графом» |
Сценарий демо с вопросами к ИИ — docs/demo.md, схема архитектуры — docs/architecture.md.
10. Методология
Метрики узла. Число плательщиков и получателей, суммы входа и выхода, число переводов, доля пропуска (сколько от полученного ушло дальше), медиана удержания (через сколько дней деньги уходят дальше), охват курьеров (деньги скольких курьеров доходят до узла), посредничество (betweenness), размер кольца (сильно связной компоненты), синхронный сбор (максимум плательщиков в один день), зависимый поток (сколько денег курьеров перестанет двигаться, если заблокировать только этот узел).
Роли. Первое сработавшее правило с порогом: координатор → распределитель → точка сбора → транзит →
конечный получатель → периферия. Правила, пороги и почему они такие — в ROLES.md.
Устойчивость роли. Разметки нет, поэтому роли пересчитываются 50 раз со сдвигом каждого порога на
±20 %. role_score — доля прогонов, где роль совпала с базовой: «роль устойчива в 49 из 50 вариантов
порогов».
Кластеры. Louvain на ненаправленной проекции графа с весом log(1 + сумма). Направление переводов
при кластеризации теряется — это сознательное упрощение: кластеры отвечают на вопрос «кто с кем
связан», а роли считаются по направленному графу. Гипотеза кластера строится по шаблону.
Приоритет проверки. Взвешенная сумма перцентильных рангов: вес роли 0,25, зависимый поток 0,30, посредничество 0,15, число плательщиков 0,15, оборот 0,10, устойчивость 0,05. У курьеров множитель 0,5: они уже известны правоохранителям, ценность — в тех, кого не знают.
Проверять и блокировать — разные задачи. Мы сравнили, сколько денег курьеров перестаёт двигаться, если заблокировать N не-курьеров:
| N = 10 | весь поток | до 3–4 колена |
|---|---|---|
| 10 случайных узлов | −0,9 % | −1,1 % |
| наш топ проверки | −11,3 % | −14,7 % |
| топ по обороту | −30,6 % | −43,0 % |
| жадный план блокировки | −33,7 % | −44,9 % |
При N = 20 план даёт −48,2 % / −63,5 %. Топ проверки ищет центры сбора и распределения (координаторы и точки сбора), а план блокировки — узлы, через которые идут самые большие потоки. Поэтому мы выдаём оба списка и не выдаём топ проверки за лучшую стратегию блокировки.
ИИ-аналитик со сверкой. Роли и цифры считает код, ИИ только пересказывает. Модель отвечает через
10 инструментов над посчитанными выходами (mycelium/ai/tools.py): карточка узла, соседи, какие курьеры
питают узел, «кто собирает деньги с этих узлов», путь денег между двумя узлами, топ, кластер, эффект
блокировки, план блокировки. После ответа код проверяет (mycelium/ai/verify.py): каждый [gid:…] есть
в графе и встречался в результатах инструментов; каждое число («3,2 млн», «33,7 %», «19») совпадает с
числом из результатов с учётом округления; нет запрещённых формулировок. Итог — значок «сверено с графом»
или честный список расхождений. Справка по делу (python -m mycelium.ai.brief) проходит ту же сверку; без
ключа она собирается кодом из out/facts.json, поэтому экран всегда показывает проверенный текст.
11. Что на выходе (out/)
| Файл | Содержимое |
|---|---|
nodes_roles.csv | 2 248 строк: gid, role, role_score, cluster_id, priority_score, evidence + метрики узла |
clusters.csv | кластер: cluster_id, n_nodes, n_seed, sum_kzt_internal, top_gids, hypothesis |
top_nodes.csv | 30 узлов для проверки: rank, gid, role, priority_score, why |
blocking_plan.csv | 20 шагов жадного плана блокировки: сколько ₸ отсёк каждый шаг |
next_requests.csv | что запросить дальше: исходящие у узлов границы выборки, входящие у узлов с притоком вне выборки |
web/*.json | данные для экрана и API (форма — docs/mock/) |
facts.json | все посчитанные факты для ИИ-аналитика |
brief.md, brief_check.json | справка по делу и результат её сверки с графом (source: template — без модели, openai — моделью) |
Финальные версии выходов закоммичены: результат виден и без запуска.
12. Как мы обработали ловушки данных
| Ловушка | Обработка |
|---|---|
| Обрыв на 4-м колене: 444 узла без исходящих | флаг truncated; такой узел никогда не транзит, не конечный получатель, не распределитель и не координатор; попадает в «Следующий запрос» |
| Настоящий сток или обрыв | узлы колен 0–3 обход раскрыл, поэтому «нет исходящих» у них — факт «деньги остались»; на 4-м колене — неизвестность |
| У курьеров занижены входящие | доля пропуска для курьеров не считается и не используется в правилах; курьер не бывает транзитом |
| 302 узла отдают больше, чем получили | флаг inflow_outside_sample: такой узел может быть транзитом, в обосновании — «приток вне выборки», он попадает в запрос входящих |
| Сумма и количество — разные сигналы | в обоснованиях и суммы, и число связей |
| Граф направленный | все метрики ролей направленные; Louvain — на ненаправленной проекции, это оговорено |
| 19 курьеров без рёбер | все в nodes_roles.csv: периферия, кластер 0 |
| Порог 5 000 ₸ | дробление ниже порога невидимо — указано в ограничениях |
| Нет разметки | вместо точности — устойчивость роли к сдвигу порогов |
13. Ограничения подхода
- Видны только исходящие переводы от 81 курьера на 4 колена, только внутри банка, только ≥ 5 000 ₸ и только за июль 2026. Межбанковские переводы, наличные и дробление ниже порога не видны.
- Роли — пороговые правила: узлы у границы порога менее устойчивы (это видно по
role_score). - Кластеры не учитывают направление переводов.
- Результат — гипотезы и приоритеты для проверки человеком, а не вывод о виновности. Продукт не блокирует счета и не обогащает данные внешними источниками.
14. Масштабирование до ~1 млн узлов
- Графовые вычисления — на igraph или graph-tool вместо networkx.
- Leiden вместо Louvain: быстрее и даёт связные сообщества.
- Приближённый betweenness по выборке опорных узлов.
- Охват курьеров — параллельные BFS с ограничением глубины.
- Пересчёт по компонентам и инкрементально по новым транзакциям, а не весь граф заново.
- Хранение в графовой или колоночной БД.
- Экран — агрегированный вид по кластерам и подгрузка окрестности узла по запросу вместо всего графа.
15. Раскрытие стороннего
Полный список — DISCLOSURE.md. Кратко:
| Что | Лицензия | Для чего |
|---|---|---|
Датасет и стартовый код организаторов (data/, starter/) | — | без изменений; на основе starter.py написан mycelium/load.py |
| pandas, numpy, pyarrow | BSD-3 / BSD-3 / Apache-2.0 | таблицы, вычисления, чтение parquet |
| networkx | BSD-3 | граф, betweenness, кольца, Louvain |
| fastapi, uvicorn | MIT / BSD-3 | API и сервер |
| openai, python-dotenv | Apache-2.0 / BSD-3 | необязательный ИИ-аналитик |
| pytest, httpx | MIT / BSD-3 | тесты |
| Next.js, React, react-force-graph-2d, Tailwind CSS, TypeScript | MIT / Apache-2.0 | интерфейс |
OpenAI API (модель из .env, по умолчанию gpt-4.1-mini) | — | пересказ посчитанных фактов; ответы сверяются с графом |
| Claude Code (Anthropic) и другие AI-инструменты разработки | — | помощь в написании кода и документации |
Авторы коммитов
История коммитов
- 2026-09-23 17:53Merge branch 'daniil': dockerignoreMayntu
- 2026-09-23 17:53fix(docker): .pytest_cache и другие кэши в .dockerignore (сборка падала с Access denied)Mayntu
- 2026-09-23 17:50Merge branch 'daniil': финальный READMEMayntu
- 2026-09-23 17:50docs(readme): README на основе README_new + запуск скриптом/вручную, занятый порт, автопроверка, методология, выходы, ловушки, ограничения, масштабирование, раскрытие библиотекMayntu
- 2026-09-23 17:47Merge branch 'daniil': README — интерфейсMayntu
- 2026-09-23 17:47docs(readme): раздел «Интерфейс: пять вкладок» (из README_new, в языке гипотез и без фактических ошибок)Mayntu
- 2026-09-23 17:45Принудительно оставлен локальный READMEbondarev
- 2026-09-23 17:42Merge branch 'daniil': фиксы вкладки ИИMayntu
Все коммиты (68)
- 2026-09-23 17:42fix(ai): Enter отправляет вопрос (Shift+Enter — перенос); сверка понимает «3,848,436 ₸» (английские разделители тысяч)Mayntu
- 2026-09-23 17:41Добавлен Readmebondarev
- 2026-09-23 17:29Merge branch 'daniil'Mayntu
- 2026-09-23 17:29chore(docker): убран дубль ENV, комментарийMayntu
- 2026-09-23 17:28Merge branch 'daniil': docker log fixMayntu
- 2026-09-23 17:28fix(docker): вывод без буфера — строка с адресом видна сразу после запуска контейнераMayntu
- 2026-09-23 17:22Merge branch 'daniil': Docker и запуск в один кликMayntu
- 2026-09-23 17:22feat: запуск одной командой — Docker (первый вариант), run.sh / run.bat, READMEMayntu
- 2026-09-23 17:17Merge branch 'daniil': обзор путей — 5 узловMayntu
- 2026-09-23 17:17feat(web): «Обзор путей» — 5 главных узлов топа (по 2 цепочки от курьеров), счётчик в заголовке динамическийMayntu
- 2026-09-23 17:15Merge branch 'daniil': цвет курьеров по ролиMayntu
- 2026-09-23 17:15feat(web): курьер с ролью — шляпка/ромб в цвет роли (координатор — красный), обычные курьеры серыеMayntu
- 2026-09-23 17:12Merge branch 'daniil': фиксы по прогону интерфейсаMayntu
- 2026-09-23 17:12fix(web): «Обзор путей» — цепочка к главному узлу не идёт через другой главный узел (стрелки только вниз); подпись вертикали по-русскиMayntu
- 2026-09-23 17:02Merge branch 'daniil': колена и порядок цепочки на схемеMayntu
- 2026-09-23 17:02fix(web): колена — убраны ложные линии «КОЛЕНО N» поверх силовой раскладки; «Обзор путей» по шагам цепочкиMayntu
- 2026-09-23 17:00Merge branch 'daniil': топ-30 просторнееMayntu
- 2026-09-23 17:00feat(web): «Топ-30 + соседи» просторнее — мелкие узлы, слабое свечение, сильнее отталкивание, подписи топаMayntu
- 2026-09-23 16:58Merge branch 'daniil': граф вместо слоёв, топ-30 компактнееMayntu
- 2026-09-23 16:58fix(web): вернули обычный граф; «Топ-30 + соседи» раскладывается собственной симуляциейMayntu
- 2026-09-23 16:55Merge branch 'daniil': топ-30 без клубкаMayntu
- 2026-09-23 16:55feat(web): «Топ-30 + соседи» — до 5 крупнейших по сумме соседей у каждого узла топа (596 → 128 узлов)Mayntu
- 2026-09-23 16:53Merge branch 'daniil': раскладка сверху внизMayntu
- 2026-09-23 16:53feat(layout): раскладка «грибница сверху вниз» — ряды по коленам, порядок по барицентру плательщиковMayntu
- 2026-09-23 16:42Merge branch 'daniil': фронтенд в main, сборка web/distMayntu
- 2026-09-23 16:42build(web): пересборка фронта — снимок данных синхронизирован с текущим out/Mayntu
- 2026-09-23 16:41Merge feature/frontend: интерфейс (Next.js, статическая сборка в web/dist)Mayntu
- 2026-09-23 16:40Merge branch 'daniil': смысловые тесты, эталонные вопросы к ИИ, сценарий демоMayntu
- 2026-09-23 16:40test: смысловые тесты с независимым пересчётом из parquet + эталонные вопросы к ИИ (3/3); вопросы о виновности — правилом без моделиMayntu
- 2026-09-23 16:39Merge remote-tracking branch 'origin/main' into feature/frontendUNUEX
- 2026-09-23 16:32feat(frontend): integrate live API and ship Python-served static appUNUEX
- 2026-09-23 16:21Merge branch 'daniil': точные поля facts, brief --checkMayntu
- 2026-09-23 16:21fix(ai): однозначные поля facts.json (кольца, стратегии блокировки), next_requests по сумме входа, brief --checkMayntu
- 2026-09-23 16:15Merge branch 'daniil': сверка курьеров и ролей в справке ИИMayntu
- 2026-09-23 16:15fix(ai): курьеры и роли без путаницы — подписи в facts.json, промпт, точечная сверка числа рядом с «курьер»/рольюMayntu
- 2026-09-23 16:15frontend: доработкаUNUEX
- 2026-09-23 16:12Merge remote-tracking branch 'origin/main' into feature/frontendUNUEX
- 2026-09-23 16:11Merge branch 'daniil': ИИ-справка от модели, фикс base_urlMayntu
- 2026-09-23 16:11fix(ai): пустой OPENAI_BASE_URL из .env ломал адрес API; справка по делу от модели + смысловая сверкаMayntu
- 2026-09-23 15:57Merge branch 'daniil': ИИ-аналитик, DISCLOSURE, READMEMayntu
- 2026-09-23 15:57docs: DISCLOSURE.md; README — ИИ-аналитик со сверкой, переменные окружения, шаги проверки 10–11Mayntu
- 2026-09-23 15:56feat(ai): ИИ-аналитик — tools, analyst (цикл function calling), verify (сверка gid/чисел/языка), brief, routes /api/brief и /api/askMayntu
- 2026-09-23 15:52Merge branch 'daniil': ROLES.md, README v1, architectureMayntu
- 2026-09-23 15:52docs: README v1 по §15 (macOS/Linux/Windows, занятый порт, проверка за 5 минут), docs/architecture.md, .env.exampleMayntu
- 2026-09-23 15:50docs: ROLES.md — правила ролей, пороги и обоснование, ловушки данных, устойчивость, кластерыMayntu
- 2026-09-23 15:47Merge branch 'daniil': explain, validate, testsMayntu
- 2026-09-23 15:47feat(validate): python -m mycelium.validate (42 проверки §16) + tests: test_outputs, test_api (форма = моки)Mayntu
- 2026-09-23 15:45feat(explain): python -m mycelium.explain <gid|часть> — роль, правила ✓/✗, метрики, связиMayntu
- 2026-09-23 15:44Merge branch 'daniil': API и web JSONMayntu
- 2026-09-23 15:44feat(api): out/web/*.json в форме моков + serve.py (health, meta, graph, node, ego, search, top, block, clusters, sankey, resilience, next-requests)Mayntu
- 2026-09-23 15:41Merge branch 'daniil': ядро пайплайна, модули сетиMayntu
- 2026-09-23 15:40refactor: весь бэкенд у A — temporal, clusters, resilience вместо _fallback; §17 обновлёнMayntu
- 2026-09-23 15:33Merge remote-tracking branch 'origin/main' into feature/frontend # Please enter a commit message to explain why this merge is necessary, # especially if it merges an updated upstream into a topic branUNUEX
- 2026-09-23 15:32feat(core): config, load, features, roles (rule_trace + устойчивость), evidence, priority, export, pipeline → три CSVMayntu
- 2026-09-23 15:22Go moreUNUEX
- 2026-09-23 15:20Merge pull request #1 from BAITC-Hacks/daniilMayntu
- 2026-09-23 15:18chore: .gitignore (Python + Next.js), CLAUDE.md, ТЗ фронта и моки API, данные, стартовый код, explore.pyMayntu
- 2026-09-23 15:17Go onUNUEX
- 2026-09-23 15:09frontend: Фундаментный слой uiUNUEX
- 2026-09-23 14:22feat: Бизнесс видение проектаMayntu
Структура репозитория (124 файлов)
.dockerignore .env.example .gitignore AGENTS.md CLAUDE.md DISCLOSURE.md Dockerfile README.md ROLES.md data/README.md data/edges.parquet data/nodes.parquet data/transactions.parquet docker-compose.yml docs/FRONTEND.md docs/architecture.md docs/demo.md docs/mock/ask_response.json docs/mock/block_response.json docs/mock/brief.json docs/mock/clusters.json docs/mock/ego.json docs/mock/graph.json docs/mock/health.json docs/mock/meta.json docs/mock/next_requests.json docs/mock/node.json docs/mock/resilience.json docs/mock/sankey.json docs/mock/search.json docs/mock/top_block.json docs/mock/top_check.json frontend/.gitignore frontend/AGENTS.md frontend/CLAUDE.md frontend/README.md frontend/app/globals.css frontend/app/layout.tsx frontend/app/page.tsx frontend/app/terminal.css frontend/components/AnalysisSections.tsx frontend/components/FocusNetwork.tsx frontend/components/NetworkAnalysis.tsx frontend/lib/api.ts frontend/next-env.d.ts frontend/next.config.mjs frontend/package-lock.json frontend/package.json frontend/postcss.config.js frontend/public/graph.json frontend/public/meta.json frontend/public/snapshot/brief.json frontend/public/snapshot/cards.json frontend/public/snapshot/graph.json frontend/public/snapshot/meta.json frontend/public/snapshot/resilience.json frontend/public/snapshot/sankey.json frontend/public/snapshot/top_block.json frontend/public/snapshot/top_check.json frontend/public/top_check.json frontend/scripts/publish.mjs frontend/scripts/serve.mjs frontend/scripts/sync-snapshot.mjs frontend/tailwind.config.ts frontend/tsconfig.json mycelium/__init__.py mycelium/ai/__init__.py mycelium/ai/analyst.py mycelium/ai/brief.py mycelium/ai/prompts.py mycelium/ai/routes.py mycelium/ai/tools.py mycelium/ai/verify.py mycelium/clusters.py mycelium/config.py mycelium/evidence.py mycelium/explain.py mycelium/explore.py mycelium/export.py mycelium/features.py mycelium/layout.py mycelium/load.py mycelium/next_requests.py mycelium/pipeline.py mycelium/priority.py mycelium/resilience.py mycelium/roles.py mycelium/sankey.py mycelium/serve.py mycelium/temporal.py mycelium/validate.py out/blocking_plan.csv out/brief.md out/brief_check.json out/clusters.csv out/facts.json out/next_requests.csv out/nodes_roles.csv out/top_nodes.csv out/web/cards.json out/web/clusters.json out/web/graph.json out/web/meta.json out/web/next_requests.json out/web/resilience.json out/web/sankey.json out/web/top_block.json out/web/top_check.json requirements.txt run.bat run.sh starter/README.md starter/requirements.txt starter/starter.py tests/__init__.py tests/conftest.py tests/independent.py tests/shape.py tests/test_ai.py tests/test_ai_golden.py tests/test_api.py tests/test_outputs.py tests/test_semantics.py бизнес-видение проекта (HackAlem AI, «Граф денег»).md
Ветки (3)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.