Skip to content

Latest commit

 

History

History
191 lines (156 loc) · 12.6 KB

File metadata and controls

191 lines (156 loc) · 12.6 KB

Коннектом FLYCSR1 — «Живая муха» (C2/v0.33.0)

Мозг мухи FlyWire v783 (Eckstein et al. 2024): 138 639 нейронов, 54 492 922 синапса (full) / ядро ≥ 5 синапсов на ребро: 2 700 513 рёбер, масса 34 153 566 — как исполняемая матрица A со знаками. Это руководство — как ИИ-агенту допрашивать живой мозг через MCP и CLI.

Общие принципы и математика формата — docs/flywire-connectome/README.md. Справочник CLI — docs/CLI.md §7. Здесь — семантика операций, стратегия допроса и золотые числа для самопроверки.


1. Семантика знаков и медиаторов

Класс Медиатор Знак Роль в динамике
0 gaba −1 тормозной — гасит цель
1 ach +1 возбуждающий
2 glut +1 возбуждающий
3 oct 0 модулятор (октамин)
4 ser 0 модулятор (серотонин)
5 da 0 модулятор (допамин)

Знаковый вес signed_weight = sign · weight — это A(u,v) канонического уравнения dp/dt = −η·Π_Λ[D·p + γJ·p + ∇F]. Модуляторы проводят массу, но не сигнал: в ротор J, PageRank и симуляцию не входят.

Ротор пары J = A − Aᵀ антисимметричен: J[u][v] = −J[v][u]. Однонаправленное ребро даёт чистый поток ±w; реципрокная симметричная пара гасится в ноль. Глобальный топ |J| — карта самых однонаправленных влияний мозга.

2. MCP — основной путь агента

poler-engine --mcp

Первый вызов грузит артефакт в RAM (ядро: ~53–70 мс, ~25 МБ; full: ~300–400 мс, ~106 МБ) — дальше всё семейство работает без диска, CSC «кто управляет» строится лениво один раз (~43 мс на ядре). Запросы исполняются в пуле воркеров: пачка независимых допросов параллелится, ответы приходят по готовности (JSON-RPC сопоставляет по id).

Инструмент Что отвечает
poler_fly загрузка (csr + nodes) / сводка / eject из RAM
poler_fly_node паспорт: степени, массы, топ партнёров обоих направлений
poler_fly_edge ребро u→v, обратное, ротор J пары
poler_fly_khop фронты BFS по хопам + всего достигнуто
poler_fly_path кратчайший путь from→to: каждый прыжок с весом/медиатором/знаком
poler_fly_common общие мишени (down) / общие источники (up) набора 2–32 нейронов
poler_fly_centrality хабы по степеням + взвешенный PageRank
poler_fly_rotor глобальный топ пар по J (порог min_abs)
poler_fly_motifs вокруг нейрона: реципрокные пары, feedforward, feedback
poler_fly_propagate симуляция x(t+1) = leak·x + γ·A·x: хронология + топ

Нейрон везде задаётся индексом CSR (0..138 638) или root_id FlyWire (строкой/числом; root_id требует загруженной таблицы nodes). Все ответы — pretty-JSON с root_id рядом с каждым индексом.

Стратегия допроса (проверенный конвейер)

  1. poler_fly {csr} — сводка: убедиться в артефакте, увидеть баланс медиаторов (E/I ≈ 73.6/23.4/3.0 по массе full).
  2. poler_fly_node {neuron} — паспорт стартового нейрона: кто его топ-тормозит, куда он стреляет.
  3. poler_fly_edge {u, v} — вступить в диалог с конкретной парой: ротор покажет, кто из двоих доминирует.
  4. poler_fly_khop {neuron, depth: 2–3} — оценить разлёт сигнала.
  5. poler_fly_path {from, to} — проложить маршрут; фильтр sign: exc даёт чисто возбуждающий путь, inh — тормозную дорожку.
  6. poler_fly_common {neurons: [a, b], direction: up} — найти общего босса двух нейронов (конвергенция управления).
  7. poler_fly_centrality {top: 20} — хабы и PageRank-топ как кандидаты «узких мест» схемы.
  8. poler_fly_rotor {top: 20, min_abs: 500} — самые асимметричные влияния: где сигнал течёт в одну сторону без ответа.
  9. poler_fly_motifs {neuron} — местная схемотехника: петли u⇄v, усиление (feedforward), обратная связь (feedback).
  10. poler_fly_propagate {neurons: [семена], steps: 3–6} — запустить мышление: наблюдать разлёт активных и баланс масс по шагам.

Параллельность: шаги 4–9 над разными нейронами можно отправить одним конвейером — пул воркеров исполнит их одновременно.

3. CLI (разовые запросы, скрипты, пайплайны)

Каждый CLI-вызов платит холодную загрузку (ядро ~70 мс) — для серий используйте MCP. Режимы взаимно исключают друг друга; --connectome-json переводит любой режим в машиночитаемую форму. Полная таблица флагов — docs/CLI.md §7.

# партнёры гиганта 79529 по входящим (кто на него давит)
poler-engine --connectome core.csr.zst --connectome-neighbors 79529 --connectome-dir in

# маршрут с цепочкой синапсов
poler-engine --connectome core.csr.zst --connectome-path 0:116214

# общие мишени пары нейронов
poler-engine --connectome core.csr.zst --connectome-common 0,6135 --connectome-dir down

# хабы + PageRank
poler-engine --connectome core.csr.zst --connectome-centrality --connectome-top 5

# топ циркуляции
poler-engine --connectome core.csr.zst --connectome-rotor-top 5 --connectome-min-abs 50

# мотивы и симуляция
poler-engine --connectome core.csr.zst --connectome-motifs 79529
poler-engine --connectome core.csr.zst --connectome-propagate 0 --connectome-steps 3

4. Алгоритмы (src/graph/flyops.rs)

Все операции работают через публичный API CSR/CSC — срезы строк это сплошная память, копий графа нет.

  • shortest_path — BFS по исходящим с фильтром знака; parent-массив (узел, позиция ребра) восстанавливает цепочку; O(n + m).
  • common_partners — пересечение отсортированных окрестностей слиянием; партнёр несёт рёбра от каждого нейрона набора и суммарную массу; до 32 нейронов.
  • pagerank — классическая итерация степени по |signed_weight|; висячие узлы раздают массу равномерно; стоп по L1 < 1e-9 или потолку итераций (умолчание 30); Σ рангов = 1.
  • rotor_top — проход по всем рёбрам со знаком, обратное ребро — бинарным поиском; мин-куча размера k; дедупликация: при двунаправленной паре эмитится только сторона с J > 0, односторонняя нормализуется ориентацией «положительный J первым».
  • motif_census — членство окрестностей в bool-массивах; проход по строкам исходящих соседей считает feedforward (цель в out-окрестности центра) и feedback (цель во в-окрестности); аутапсы исключены.
  • propagate — x(t+1) = leak·x(t) + γ·A·x(t) на знаковых весах; активные = |x| > theta; мягкий клип ±1e15 страхует от расходящихся колец; до 64 семян и 64 шагов.

5. Золотые числа (самопроверка агента)

Ядро v783 (артефакты в git, docs/flywire-connectome/):

  • Паспорт узла 0: исходящих 13 (масса 98), входящих 13 (масса 99); топ-торможение — узел 79529, w = 17, gaba.
  • Ребро 0→116214: w = 17 ach; J[0][116214] = +17, J[116214][0] = −17.
  • K-hop от 0 (глубина 2): фронты [13, 443], достигнуто 457.
  • Топ циркуляции (порог 50): J[74067][133436] = +2395, J[112021][86059] = +2343, J[129880][136978] = +2330, J[82815][60985] = +2307, J[53290][90883] = +1886.
  • Хаб 79529: 6399 исходящих / 5080 входящих; 3684 реципрокных пары, 11 999 feedforward-треугольников, 8082 feedback-цикла.
  • PageRank (d = 0.85, 30 итераций): топ-1 — нейрон 66912, ранг ≈ 0.001836547.
  • Симуляция от 0 (γ = 0.05, leak = 0.8): активные [14, 455, 15 457] за 3 шага; на шаге 3 торможение доминирует (≈ −3465 против +1285); топ-1 по |x| — нейрон 129880 с отрицательным потенциалом (≈ −152).

Эти числа зафиксированы тестами (golden_c2_core_analytics, fly_family_tests): воспроизводимость гарантируется бит-в-бит.

6. Интерпретация для агента

  • Отрицательный потенциал в топе симуляции — не ошибка: тормозная сеть мухи сильнее возбуждающей на разлёте (E/I по массе 73.6/23.4, но gaba-хабы плотнее бьют по центрам). Сигнал от одиночного нейрона гасится — устойчивость живой сети.
  • Высокий |J| — иерархия без диалога: нейрон-источник управляет целью, не получая ответа. Кандидаты для проверки: есть ли модуляторный (da/ser/oct) параллельный путь — модуляторы не входят в J, но в живой сети часто сопровождают однонаправленные потоки.
  • PageRank vs степень: хаб по степени раздаёт много, но ранг растёт от входящих endorse — нейрон 66912 важнее для сети, чем гигант 79529.
  • Реципрокная пара — цикл обратной связи; feedforward — усиление/модуляция параллельным путём; feedback3 — кольцо u→v→w→u, осцилляторный кандидат.

7. Производительность (release, ядро v783)

Операция Время
Загрузка артефакта ~53–70 мс
CSC (лениво, один раз) ~43 мс
Паспорт/ребро/khop/путь < 1 мс
PageRank (30 итераций) ~250 мс
Ротор-скан (все рёбра) ~70 мс
Симуляция (3 шага) ~15 мс

11-запросный MCP-конвейер (загрузка + весь спектр запросов, включая PageRank и ротор) — 0.49 с суммарно; ответы приходят внеочерёдно по готовности (пул воркеров).