Как работает NOUZ
Вы пишете заметки. NOUZ читает YAML frontmatter, строит DAG, классифицирует контент через эмбеддинги и находит мосты между ветками.
Формула сущности
Каждый узел в графе описывается компактной формулой:
(дети)[узел]{родители}( ) — потомки. Знаки агрегируются: число перед знаком только если больше одного. Куст в точке пересечения доменов.
[ ] — сам узел, с доменным знаком. Составной знак (SE) — кросс-доменная идея.
{ } — родители. Знаки записываются слитно.
Примеры:
(S2E)[E]{E} — 3 потомка (1×S + 2×E), сам E, родитель E
(2D)[SE]{SE} — 2 потомка D, сам SE, родители S и E
(SE)[SE]{SE} — 1 потомок SE, сам SE, родитель SEФормула сжимает всю топологию узла в одну строку: количество и домены детей, собственный домен, домены родителей.
Инструмент format_entity_compact возвращает эту формулу для любой заметки.
Знак — доменная классификация
Знак показывает, к какому домену знаний принадлежит заметка. Домены задаются описательными текстами в config.yaml — NOUZ превращает их в вектор-эталоны и классифицирует каждую заметку по cosine similarity к этим эталонам.
| Уровень | Откуда знак |
|---|---|
| L1 Ядро | Вручную — это и есть домен |
| L2 Паттерн | Вручную + валидация эмбеддингом |
| L3 Модуль | Наследуется от родителя L2 |
| L4 Квант | Вычисляется из эмбеддинга контента |
| L5 Артефакт | Наследуется от родителя |
Приоритет: manual > auto (confident) > weak_auto > унаследованный
Заметка получает составной знак (например ES), если два домена набирают выше порога одновременно. Это кросс-доменная идея — две проекции одной мысли.
Нормализация через spread
Классификация не работает по абсолютному cosine. Используется нормализация:
percent = (cosine - min) / (max - min) × 100Это решает проблему низкой абсолютной близости: если все тексты в базе знаний похожи по стилю, абсолютные значения могут быть высокими у всех доменов. Spread выделяет относительный перевес.
Порог по умолчанию: 30% для присвоения знака домену.
Двунаправленная причинность
Два потока работают одновременно:
↑ core_mix (Реальность): L4 → L3 → L2 — агрегируется из контента снизу
Намерение — какой домен вы ожидаете от модуля. Реальность — о чём его контент на самом деле. Когда они расходятся — это core_drift.
Пример drift:
Модуль "Machine Learning":
sign: E (Engineering) ← задан вручную при создании
core_mix: {S: 61%, E: 39%} ← реальность из квантов снизу
→ DRIFT WARNINGЭто сигнал. Последние заметки сдвинулись в сторону системного мышления. Пора пересмотреть — или принять эволюцию.
Типы связей
| Тип | Кто создаёт | Смысл |
|---|---|---|
hierarchy | Только человек | Структурное решение. Знак передаётся только по ней. |
temporary | Человек или ИИ | Временная связь. Артефакт ещё не прирос к графу. |
semantic | ИИ предлагает, человек подтверждает | Кросс-доменное смысловое пересечение. |
analogy | ИИ предлагает, человек подтверждает | Структурный изоморфизм — та же роль в графе, другой домен. |
error | Автоматически | Пропуск уровня в иерархии. |
Семантические мосты
Эмбеддинг заметки сравнивается со всеми заметками из других доменов. Cosine ≥ 0.55 → мост предложен с флагом proposed: true.
Связи внутри одного домена уже покрыты иерархией. Мост нужен когда два разных домена говорят об одном — разными словами, разным языком, одним смыслом.
Примеры мостов которые NOUZ находит:
- Дедлок в базе данных ↔ Трагедия общин (структурная ловушка)
- Энтропия ↔ Технический долг (накопление хаоса)
- Мицелий ↔ Интернет (сетевой паттерн)
Аналогические мосты
Структурный изоморфизм: две заметки из разных доменов играют похожую роль в своих подграфах. Взвешенная формула:
score = 0.35 × core_mix_angle
+ 0.25 × level_match
+ 0.20 × degree_similarity
+ 0.20 × tag_overlapПорог по умолчанию: 0.65.
Пайплайн
Заметка
Markdown-файл с YAML frontmatter: родители, тип, уровень. Без frontmatter — NOUZ индексирует без семантики.
Эмбеддинг + классификация
Контент превращается в вектор. Cosine similarity с эталонами после нормализации → доменный знак и процентное распределение.
Размещение в DAG
Родители из YAML размещают узел в графе. Циклы проверяются перед записью — write_file вернёт ошибку при обнаружении цикла.
Агрегация снизу вверх
core_mix поднимается от квантов (L4) к модулям (L3) и паттернам (L2). Родитель получает средневзвешенное доменное распределение детей.
Обнаружение мостов
Семантические и аналогические мосты связывают узлы между доменами. Все предложения помечены proposed: true — ИИ предлагает, вы решаете.
Эталоны
Домены задаются в config.yaml как описательные тексты. Не список ключевых слов — а описание сути домена своими словами. Команда calibrate_cores превращает их в вектор-эталоны и записывает в БД.
Пример эталона:
etalons:
- sign: S
name: Systems Thinking
text: >
Methodology for analysing complex objects: feedback loops,
emergent properties, self-regulation, bifurcation points.
Not data and not code — a way of thinking about how parts
form a whole and why systems behave non-linearly.
- sign: E
name: Engineering
text: >
Software engineering and infrastructure: writing and debugging
code, deployment, containerisation, neural networks, inference,
microservices, CI/CD, refactoring, APIs. The practical discipline
of building computational systems.После calibrate_cores сервер выводит попарные косинусы между эталонами — в двух вариантах: сырые и mean-centered (с вычитанием среднего вектора, которое убирает анизотропию трансформерных эмбеддингов). Хороший результат: mean-centered косинус между разными доменами заметно ниже чем между одним доменом и самим собой. Если значения между всеми парами примерно одинаковые — эталоны семантически перекрываются, стоит усилить различия.
Эталоны не нужно пересчитывать при каждом запуске — только при изменении config.yaml.
База данных
NOUZ хранит индекс в SQLite (obsidian_kb.db в корне vault). В базе:
- Метаданные всех файлов (тип, уровень, знак, parents)
- Эмбеддинги (если включены)
- Эталонные векторы доменов
- Граф связей для traversal
База полностью локальная. Данные остаются на машине. Если используете облачный провайдер эмбеддингов (OpenAI) — только тексты для эмбеддинга покидают машину.