Skip to content

Как работает NOUZ

NOUZ читает YAML-блоки заметок, строит направленный ациклический граф, классифицирует контент через эталоны и предлагает связи между ветками. Вы задаёте структуру и принимаете решения; ИИ помогает считать, сравнивать и замечать слабые места графа.

Формула сущности

Каждый узел можно показать компактной формулой:

(дети)[узел]{родители}

( ) — потомки. Знаки агрегируются, число перед знаком появляется только если таких знаков больше одного.

[ ] — сам узел: его sign или artifact_sign.

{ } — родители. Формула остаётся компактной даже в обычном тексте.

(2E)[E]{S}      — два потомка E, сам узел E, родитель S
(σE)[σE]{E}     — квант с artifact_sign σ и доменным знаком E
[β]             — артефакт без родителей и детей

format_entity_compact возвращает эту формулу для любой заметки. Это не отдельная логика классификации, а визуальная координата: по ней быстро видно, что лежит ниже узла, какой знак у самого узла и к какой структуре он привязан сверху.

Графовый контекст

NOUZ строит граф сверху вниз: от доменов к артефактам. Граф задаёт явную структуру, а семантический слой добавляет вычисленные признаки: домен, мосты, core_mix и сигналы дрифта.

Через MCP агент может явно запросить место заметки в графе:

  • родителей и детей;
  • уровень и sign;
  • компактную формулу (дети)[узел]{родители};
  • core_mix, если включён режим PRIZMA или SLOI.

Так агент работает не только с текстом заметки, но и с её положением в базе. Семантические расчёты идут отдельно: текст сравнивается с эталонами, мосты ищутся по embeddings, а core_mix показывает, как содержание квантов меняет картину снизу вверх.

Level 0 (meta_root)

Якорный узел для всей базы. Задаётся в config.yaml как meta_root: "Моя база". Все L1-ядра могут ссылаться на него, а сам узел исключается из семантических расчётов. В визуализации это центр графа: он держит домены в одной системе, но не влияет на классификацию их содержания.

artifact_sign

Знак, определяемый эвристикой содержимого (логи, чаты, конфиги). Используется для L5, чтобы отделять тип материала от его темы. Для L4 он становится частью составного знака: тип материала + домен.

sign и artifact_sign

У NOUZ два слоя знаков:

УровеньКак определяется
L1-L3Доменный sign по эталонам, если sign не задан вручную
L4 КвантСоставной знак: artifact_sign из связанных артефактов + доменный sign по контенту
L5 Артефактartifact_sign по эвристике содержимого, без доменного sign

Ручная разметка имеет приоритет. Если sign уже задан в YAML, сервер не переписывает его как “истину”, но может посчитать sign_auto для сравнения.

artifact_sign описывает тип материала: заметка, понятие, референс, лог, новость, гипотеза, спецификация. Для L4 он может сохраняться в YAML как часть составного знака; для L5 хранится в базе и отображается как знак артефакта.

Классификация по эталонам

Домены задаются в config.yaml списком etalons. Инструмент calibrate_cores превращает эти тексты в эталонные векторы и сохраняет их в SQLite.

При классификации сервер:

  1. Берёт embedding содержимого без HTML-формул.
  2. Сравнивает его с mean-centered эталонами.
  3. Считает spread: max_score - min_score.
  4. Если spread < sign_spread (0.05) — различие между доменами слишком слабое, и сервер не выбирает домен.
  5. Иначе переводит scores в проценты:
adjusted = score - min_score
percent = adjusted / sum(adjusted) * 100

Все домены с процентом ≥ pattern_second_sign_threshold (30.0) входят в составной sign. Доминанта считается уверенной, если её процент ≥ confident_spread (60.0).

Mean-centering против анизотропии

У трансформерных эмбеддингов есть неприятная особенность: многие тексты выглядят “немного похожими” друг на друга, даже если домены разные. Абсолютный cosine из-за этого может быть обманчивым.

В сервере это решается функцией _mean_center: перед сравнением из эталонов вычитается их общий средний вектор. После этого NOUZ смотрит не на голый cosine, а на разницу между доменами: насколько один эталон выигрывает у остальных. Поэтому важны spread, проценты и пороги, а не одно число близости.

core_mix и дрифт

sign — это намерение: как узел размечен или классифицирован. core_mix — фактический доменный профиль, который собирается из содержимого нижних уровней.

↓ sign: задаётся вручную или считается для конкретного узла
↑ core_mix: L4 → L3 → L2, агрегируется снизу вверх

Если sign модуля говорит “Engineering”, а core_mix показывает рост “Systems Analysis”, появляется сигнал дрифта: содержимое модуля сместилось относительно исходной рамки.

Типы связей

ТипКто создаётСмысл
hierarchyПользовательОсновная структурная связь
temporaryПользователь или ИИВременная связь для материала, который ещё не прирос к графу
semanticИИ предлагаетТексты из разных доменов говорят об одном смысле
tagИИ предлагаетСходство отдельных тегов или понятий
analogyИИ предлагаетПохожая роль в графе при разных доменах
errorСерверНарушение строгой иерархии в SLOI

В формуле отображаются только hierarchy, semantic и temporary, чтобы она оставалась читаемой. Остальные типы связей доступны в данных MCP и в индексе.

Мосты

Семантические мосты (semantic) сравнивают весь текст заметки с заметками других доменов. Порог по умолчанию: semantic_bridge_threshold = 0.55.

Теговые мосты (tag) сравнивают теги и короткие понятия. Это помогает находить скрытые общие концепты даже когда тексты целиком разные.

Аналогические мосты (analogy) ищут структурное сходство: похожий core_mix, уровень, степень узла и пересечение тегов. Порог по умолчанию: structural_bridge_threshold = 0.55.

Все мосты возвращаются как предложения (proposed: true). Сервер показывает кандидатов; вы решаете, превращать ли их в связи.

Автоматический поиск родителей

suggest_parents, process_orphans и add_entity могут предложить место для заметки без родителей.

Сервер сравнивает текст заметки с потенциальными родителями. Кандидаты ниже parent_link_threshold (0.55) отбрасываются. Если несколько кандидатов близки, родитель из того же домена получает приоритет.

Пайплайн

Заметка

Markdown-файл с YAML: type, level, sign, parents, tags. Файл без YAML тоже индексируется, но требует доразметки.

Индекс

Сервер сохраняет метаданные, контент, связи и embeddings в SQLite.

Классификация

Контент сравнивается с эталонами; L5 получает artifact_sign, L4 может получить составной знак.

Агрегация

L4 получает профиль из классификации текста; L3 и L2 агрегируют дочерние узлы снизу вверх.

Предложения

Мосты, родители, теги и ошибки иерархии возвращаются как кандидаты для вашего решения.

База данных

NOUZ хранит индекс в SQLite (obsidian_kb.db в корне vault):

  • метаданные файлов;
  • связи графа;
  • embeddings;
  • reference vectors эталонов;
  • core_mix, sign_auto, sign_source, artifact_sign.

Заметки и база остаются локальными. Если используется облачный embedding provider, наружу отправляются только тексты, для которых запрошен embedding.

SQLite не требует отдельного сервера: Python поставляется с модулем sqlite3, а NOUZ использует aiosqlite как асинхронную обёртку. Файл индекса создаётся локально при индексации базы.