Магия семантических связей в графе Obsidian

Магия семантических связей в графе Obsidian

Ранее я уже поднимал тему использования графа в Obsidian, но эта область настолько более глубокая, что я решил вернуться к ней вновь. В этой статье рассматриваются практические сценарии использования семантических, то есть смысловых, связей в графе для подготовки материалов, в обучении и при любой другой творческой работе с Obsidian.

Важное замечание: Всё, приведенное в этой заметке, является исключительно личным мнением автора. Эта заметка не является ни истинной в последней инстанции, ни учебником, ни руководством. Это лишь сказка о Силе. Это — палец, указывающий на Луну.

Содержание

Я считаю, что граф Obsidian является одной из самых недооцененных возможностей Obsidian. Отчасти это связано с тем, что понятных инструментов для работы с графом или анализа связей в графе очень и очень мало. Но они есть. И при правильном использовании эти инструменты и подходы могут открывать совершенно иной уровень работы с собственными идеями, отраженными в ваших заметках.

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

Локальный граф с фильтром семантических ссылок

На этом скриншоте приведен локальный граф, но не совсем обычный: во-первых у него установлена глубина 2 или 3, во-вторых, в нем установлен некий фильтр, о котором я расскажу ниже, и в третьих, этот фильтр отбирает заметки на основе семантических (смысловых) связей, то есть, они присутствуют в моем волте, и о чем я тоже расскажу ниже.

Конечно же, эти идеи, отображенные графом, будут вам не очень понятны, но мне, как автору всех этих заметок, граф говорит о многом, о чём я и хочу здесь написать. По крайней мере, мне это позволяет легко и быстро возвращаться к контексту темы и продолжать писать.

Немного о методах визуального размышления

Вообще схематическое отражение идей и мыслей можно отнести к методам визуального размышления. И таких методов много. У всех на слуху интеллект-карты (mind maps) Тони Бьюзена, но есть еще концептуальные карты Джозефа Новака (concept maps); есть диалогическое картирование IBIS, которое хоть и предназначено для совещаний (или для политики изначально), но вполне себе может применяться в диалоге с самим собой и раскрытии некой темы; есть диаграммы и карты мышления (thinking maps) Хайерла и прочие методы.

В данном случае то, о чем я хочу рассказать в этом заметке, наиболее близко к концептуальным картам Новака. Если говорить упрощенно, но концептуальная карта состоит из концептов (узлов графа) и смысловых связей (ребер графа). Например, текущая заметка является концептом «Семантический граф», который имеет смысловую связь «базируется» на концепте «Концептуальная карта Новака», который в свою очередь имеет смысловую связь «является» к концепту «Методы визуального мышления».

В примере выше концептами считаются заметки, а связями предполагаются ссылки между заметками. Но это не является обязательным условием, просто я хочу показать близкую родственность графу Obsidian.

Зачем это нужно? Во-первых, для гораздо лучшего и гораздо более глубокого понимания темы в целом. Если говорить о концептуальных картах, то этот эффект погружения я очень хорошо наблюдаю в собственной практике. Если что-то нужно хорошо понять, запомнить или разобраться — нарисуй концептуальную карту, причем самостоятельно. Неважно где (на бумажке или на экране), неважно каким инструментом или способом, важна лишь ее полнота.

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

В-третьих, сама концептуальная карта в виде схемы является лишь отражением связей и отношений между концептами, а такие отражения могут быть получены в самом разнообразном виде, хоть просто с помощью текста. Главное в нужное время, то есть тогда, когда мне это вдруг понадобилось. Для примера я взял этот текст в момент его написания и задал несколько вопросов Copilot (ИИ помощник в Obsidian):

Вопросы и ответы Obsidian Copilot на основе семантических ссылок

Обратите внимание, скриншот сделан на планшете, где ни о каком поиске по векторам (RAG) в Copilot речи не идет. Он брал только черновую, незаконченную заметку и отвечал очень быстро. Но, согласитесь, демонстрация хоть и упрощенная, но достаточно наглядная. И это тоже отражение смысловых связей между концептами темы, которую я пытаюсь сейчас раскрыть.

Однако есть очень важное отличие концептуальной карты от графа Obsidian, а именно — отсутствие в графе семантики связи (смыслового отношения между концептами). То есть, наличия явного смыслового значения связи («является», «базируется» и т. п.), а не просто самого факта наличия такой связи (ссылки). Граф Obsidian показывает только наличие ссылок, у него нет ни способов отображения такого значения, ни механизмов анализа таких связей.

Но сама идея семантических связей от этого никуда не девается, и мы можем привносить семантику (смысловое значение) в связи Obsidian.

Obsidian Copilot показывает семантические ссылки в заметке

Есть как минимум два способа это сделать:

  • Использовать свойства заметки (frontmatter, YAML), в котором с помощью заранее определенных свойств (Тема, Материалы и т. п.) явно определять связи с другими заметками;
  • Использовать явные свойства dataview в тексте, например, перед ссылкой написать что-то типа (источник:: [[другая заметка]]) . Обратите внимание, есть два равносильных способа записать такое свойство для ссылки:
    • В круглых скобках, как показано выше, при этом в тексте скрывается значение ключа, оставляя только ссылку. Но сам ключ существует (а это и есть семантическое значение этой ссылки) и говорит что другая заметка является источником для текущей.
    • В квадратных скобках [источник:: [[другая заметка]]], при этом значение ключа (семантика связи) отображается с тексте.

Онтология связей

Очевидно, что таких смысловых значений для ссылок может быть много, но их число всё равно конечно. Как раз такой полный список типов семантических связей (типов отношений между концептами) называется онтологией связей или онтологией отношений. И его надо сделать.

Так же очевидно, что подобный список невозможно сделать сразу и полностью, поэтому это еще одна причина создать заметку «Моя онтология связей» и приготовится к частой её модификации и дополнению. Чуть ниже мы вернемся к этому списку.

Понятно, что названия таких связей полностью определяется вашими задачами, стилем мышления, теми целями, которые вы пытаетесь решить с помощью Obsidian, и невозможно создать универсальный законченный готовый пример. Более того, такой гипотетический пример универсальной онтологии будет изначально вреден, потому что он накладывает мощный отпечаток стиля автора.

Именно поэтому я с огромным скепсисом отношусь ко всевозможным демо-хранилищам, так ценимым иными пользователями. Да — весьма наглядно, да — не надо думать и набивать шишки, повторяй за автором раз-два. Но это не ваш волт, не ваше мышление. Это лишь сильно упрощенный и уродливый отпечаток представления о прекрасном у автора такого демо-хранилища. Это как огрызок недоеденного яблока, использованная упаковка от чужого подарка. И вы просто обречены на тупик, если вам не хватит ума понять, что никто и никак вас не ограничивает; что любой автор может сильно заблуждаться и ошибаться; что нет никаких законченных систем или зафиксированных истин; что каменные скрижали Моисея не более чем миф. И если вам хватит ума сначала это понять, а потом смелости сломать навязанную вам систему, выбросить все впаренные вам «истины» на помойку, разбить скрижали с «незыблемыми» правилами, то вы придете к тому, что можно назвать целостностью себя. И тогда вы вдруг увидите и поймете, что вам не нужна ни чужая онтология связей, ни чужие теги или чужой волт. У вас уже есть всё свое. И оно единственно верное для вас.

Итак, нам необходимо определиться с возможными отношениями между заметками. Это может быть оформлено в виде некоего списка, я чуть ниже покажу пример такого списка.

Еще раз, эти отношения определяют как одна заметка может быть связана с другой, например, «следует из»«приводит к»«базируется на»«является» и т. п. Крайне важным является то, что вы сами должны буквально интуитивно подставлять эти названия из своего списка. Именно поэтому чужой, готовый список вам не поможет.

А насчет того, как вспоминать эти названия отношений (онтологию семантических связей), беспокоиться не надо, далее я покажу очень простой трюк, который позволит держать их буквально на кончиках пальцев.

Семантические связи в графе Obsidian

Итак, мы определили онтологию связей и, возможно, проставили (пометили) ряд связей между заметками этими отношениями. Здесь нужно отметить, что нет необходимости размечать абсолютно все ссылки Obsidian семантическими отношениями. Помечаются только те ссылки, где семантика явно просится. Например, в этой моей заметке (в её черновом варианте в моем Obsidian) есть ряд ссылок, которые я могу использовать чисто в технических целях. При работе с заметками я достаточно часто нахожу ассоциации с другими заметками с помощью методов ассоциативного поиска, в данном случае методом перекрытия (это плагин Graph Analysis).

Ассоциированные заметки с текущей в Graph Analysis

Ряд таких ссылок я могу проставить себе, например в комментариях, прямо в тексте заметки, чтобы потом не забыть. В примере на скриншоте выше такой ссылкой может быть ссылка на заметку «Graph Analysis NLP». Это просто напоминалка мне, зацепка, но она для меня не несет особой семантической нагрузки. Я не собираюсь использовать материалы этой заметки здесь в каком-либо виде. Вот поэтому я не буду ее никак помечать. Просто поставлю. А вот ссылку на заметку «Теги в графе» я обязательно поставлю в нужном месте текста ниже, с семантикой «используется». Или даже прямо сейчас проставлю, чтобы потом не забыть.

Ссылки в комментариях

Обратите внимание, ссылки в комментариях — это тоже ссылки. Но не забываем: это лишь пример!

Теперь давайте попробуем посмотреть локальный граф этой заметки. Но не в том виде, в каком он обычно открывается (ромашка из ссылок текущей заметки), а более глубокий. Поставим уровень вложенности 2. Мы тут же получим плотную связанную сеть (если у вас много заметок и они хорошо залинкованы, конечно же!). Что-либо понять в ней будет несколько сложно, а просматривать последовательно по одной заметке или елозить мышкой довольно утомительно.

И здесь мы приходим к очень важному выводу: большинство инструментов работы с графом или инструментов визуального размышления должны давать ответ (результат) очень и очень быстро, буквально по клику, чтобы не отвлекать нас от самого процесса размышления.

Так вот, давайте уберем из нашего графа «ненужные» (не требуемые сейчас) заметки. К сожалению, стандартный граф Obsidian не умеет ни анализировать, ни фильтровать по смыслу связей (по названию отношений), но мы можем сделать некоторое допущение — оставим в нашем графе только те заметки, в которых есть семантические ссылки.

Напишем очень простой фильтр: ":: [[" (кавычки обязательны!). Обратите внимание, как граф стал тут же очень понятным, буквально шпаргалкой тем и вопросов, которые мне следует упомянуть здесь (желательно, конечно же, скрыть блок фильтров, но я оставил его, чтобы вам фильтр был виден).

Локальный граф с панелью фильтров

Можно еще поиграть. Давайте просто в поиск вбивать слова, названия из нашей онтологии связей. Мы можем получать очень интересные результаты, например, с чем ассоциируется текущая заметка:

Поиск семантических связей в локальном графе

Я достаточно наглядно получил среди прочих следующие заметки:

  • Онтология связей (уже рассказал);
  • Ассоциативный поиск (упомянул и показал);
  • Граф знаний (мы к этому идем);
  • Концептуальное картирование с помощью онтологии связей (ниже покажу);
  • Обработка сырой заметки (о как! И в этом есть смысл — работа с семантическим графом — это мощнейший метод правильной линковки сырых заметок).

Но всегда важно помнить, что граф Obsidian ищет и фильтрует не связи, а заметки, поэтому результат при таком приёме всегда будет неполный! Но зато этот приём не требует вообще ничего, это стандартные возможности Obsidian.

Конечно же, такого примитивного подхода нам мало, поэтому нам на помощь приходят плагины. На самом деле плагинов для работы с графом не так много в Obsidian, но они есть, и некоторые я покажу здесь, особенно в разрезе использования семантических связей.

ExcaliBrain

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

Честно говоря, его идеи не сразу доходят, по крайней мере, я далеко не сразу проникся ими и смог раскрыть для своей практики. Отчасти это связано с тем, что нет внятного, разумного описания, даже не самого плагина, а его идей и концепций. К тому же, в достаточно популярных статьях об использовании Obsidian в интернете этот плагин описан совершенно дебильным образом, в очень упрощенном и сильно извращенном виде.

Но ларчик-то на самом деле довольно просто открывается. В основании концепции ExcaliBrain лежит всё та же онтология связей. Это важно, потому что без неё плагин будет работать крайне примитивно. То есть все наши определенные типы связей, о которых мы говорили выше, ExcaliBrain сводит к семи группам, которые называются:

  • Parents (родители)
  • Children (дочерние)
  • Left-Side Friends (Друзья слева)
  • Right-Side Friends (Друзья справа)
  • Previous (Предыдущие)
  • Next (Следующие)
  • Hidden (Спрятанные)
Онтология ExcaliBrain

Вот здесь первый важный момент для нас: фактически ExcaliBrain — это хранитель нашей онтологии! Именно он ее держит в актуальном состоянии для работы и он её синхронизирует между устройствами. Первое, что следует сделать, так это удалить его предложенные варианты и записать свои названия типов отношений. Именно те, которые понятны вам.

Далее шесть групп типов отношений ExcaliBrain привязывает к четырем сторонам прямоугольника, символизирующего текущую заметку: верх, низ, левая сторона, правая сторона или так: север, юг, запад, восток. Вот по такой схеме:

  • Родители — верх, север;
  • Дочерние — низ, юг;
  • Друзья слева и Предыдущие — слева, запад;
  • Друзья справа и Следующие — справа, восток.

Седьмую группу «Спрятанные» ExcaliBrain вообще не показывает.

Таким образом большое число свойств в вашей онтологии ExcaliBrain сводит к четырем сторонам или направлениям. Тем самым он идентифицирует, определяет с какой стороны рисовать ссылки и заметки, связанные с текущей.

Вообще ExcaliBran определяет тип ссылки двумя способами:

  • Явное определение: ссылка в заметке помечена отношением из онтологии;
  • Неявное определение: это просто ссылка и она определяется так:
    • Все входящие ссылки считаются родительскими;
    • Все исходящие ссылки считаются дочерними.

Возникает резонный вопрос: а зачем всё это надо? Ответ мы уже давали выше: чтобы быстро, буквально одним кликом (или горячей клавишей) мы могли бы увидеть контекст, окружение текущей заметки и продолжить работу с ней.

Граф ExcaliBrain

Обратите внимание, на графе в правой колонке контекст, тема. И смысловое направление заметки читается буквально сразу, можно даже не вчитываться в сам текст заметки. Даже на ограниченном по размерам экране планшета, на котором я часто пишу заметки.

Кроме того, у ExcaliBrain есть поиск (по мне так не самый удобный), который позволяет быстро, прямо на графе открыть нужную заметку или тег и посмотреть ее связи и семантический контекст.

Более того, поскольку ExcaliBrain умеет неявно определять тип связей, он вполне сносно показывает ссылки в заметке, в которой нет семантических связей, он может использоваться как довольно удобный и простой инструмент при ее линковке. То есть, мы видим какие ссылки уже есть и с помощью свойств онтологии размечаем ссылки в заметке, распределяя их по сторонам.

Вот этот момент мне тоже не сразу стал понятен: зачем и, самое главное, как много свойств онтологии привести к четырем сторонам? А потом я нарисовал себе вот такую схему:

Схема онтологии ExcaliBrain

До меня вдруг дошло, что четыре стороны ExcaliBrain (и родственного плагина Breadcrumbs) — это две оси на плоскости, которые показывают:

  • Процесс детализации или погружения сверху вниз — от общего к частному;
  • Процесс преобразования, изменения и получения результата слева направо — из исходных данных к результатам.

Небольшое примечание: эту схему я для себя рисовал достаточно давно, впоследствии опираясь на собственный опыт и ощущения, Источники на этой схеме я перенёс на левую сторону, а не в качестве родительских тем.

После этого понимания считывать графы ExcaliBrain мне стало легко и просто. Буквально одним мимолетным взглядом. Более того, сами свойства онтологии приобрели дополнительный смысл: например, свойство «взято из» просто просится на левую сторону, а свойство «ведет к» — на правую.

Кроме того, у плагина ExcaliBrain есть вторая и очень важная функция — быстрые подсказки свойств онтологии. Просто при наборе текста введите (::: и тут же появится окно выбора типа связи, можно далее просто набрать одну-две буквы и буквально мнговенно вставить нужную связь в заметку:

Подсказки ExcaliBrain

Можно выводить не все типы, а привязанные к конкретной стороне или группе ExcaliBrain:

  • (::p — Parent, связи сверху
  • (::l — Left, связи слева
  • (::r — Right, связи справа
  • (::c — Children, дочерние связи
  • (::e — prEvious, связи предыдущих заметок
  • (::n — Next, связи следующих заметок

На деле это оказалось невероятно удобным, достаточно просто запомнить мнемонику, букву, и далее набирать и вставлять тип связи при написании текста получается буквально на автомате.

Обратите внимание, в настройках плагина нужно выбрать, какой тип полей dataview вы будете использовать по умолчанию, это параметр Mid-sentence dataview field suggester trigger. Нужно выбрать либо квадратную, либо круглую скобку. Напомню, разница здесь в том, показывается ли ключ (название связи) в тексте или нет. Именно этот параметр определяет с какой скобки вы будете начинать быстрый ввод семантического свойства. В примерах выше используется круглая скобка. Но после ввода семантической ссылки поменять её тип записи легко, просто замените скобки.

Итак, ExcaliBrain очень удобный плагин для быстрого показа семантического окружения заметки, хранения и управления онтологией ваших связей. Конечно же, у него есть множество других возможностей, но их обзор выходит за рамки этой статьи.

Срезы графа

Но ExcaliBrain — это быстрый показ семантических связей у одной заметки, и он не очень хорошо подходит для изучения или моделирования смысловых срезов графа. Под срезами графа мы понимаем здесь отображение определенных заметок и их отношений, раскрывающих определенную идею или тематику. Собственно мы пытались делать это в локальном графе с помощью фильтров.

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

Срез графа по теме

На деле срезы довольно удобны, ведь они показывают основные идеи (концепты) в наглядном виде. Главное чтобы срез был читаемым, то есть на нём было бы видно о чём та или иная заметка и как она связана с другими. Большое число заметок в срезе делают его нечитаемым, просто набором точек, максимум, раскрашенных точек. От такого вида толка мало, разве что похвастаться на форуме, что мы и делаем с большим удовольствием. Но у большинства пользователей складывается впечатление, что это и есть основное и единственное назначение графа Obsidian. Но это далеко не так!

Граф — это не более чем инструмент, который может использоваться самыми разными способами, и успех зависит лишь от того, можете kb вы им пользоваться или нет. В качестве примера срез моего графа, показанный выше, может использоваться как материал при написании этой статьи, к которому я регулярно возвращаюсь при написании этого текста.

Кстати, немногие знают, что срезы графа легко сохраняются на будущее штатными средствами Obsidian. Для этого нужно щелкнуть по трем точкам справа и выбрать «Добавить в закладки». В дальнейшем вы просто в закладках Obsidian щелкаете по сохраненному срезу графа и он мгновенно открывается.

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

И вот нам на помощь приходит еще один плагин — Juggl.

Juggl

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

Давайте попробуем прямо в этой заметке. Для этого нужно выполнить команду «Juggl Open local graph of note». Рекомендуется сразу повесить её на горячую клавишу, потому что мы будем часто ей пользоваться. Итак, вот что получаем:

Локальный граф Juggl

Обратите внимание на панель с кнопками на графе: там четыре вида отображения (равноудалённые, круговая, сетка, иерархия), кнопка авто-масштаба (чтобы вписать граф в окно) и переключение на режим рабочей области (об этом чуть позже).

Есть поле фильтра, он похож на фильтр в обычном графе, но несколько урезанный:

  • file:path:content: и tag: работают, как обычном графе Obsidian.
  • class: Поиск на основе класса CSS.
  • raw: Поиск с использованием селектора CSS. Например, если у вас есть атрибут YAML, такой как year, вы можете получить все узлы после 2000 года, используя raw: [year > 2000].
  • Любой атрибут, который вы используете в своем YAML фронтматтере, может быть использован для запросов, например, aliases:color:title: и любые другие.

К сожалению, в фильтрах не работают регулярные выражения, нет операторов section:line:block:.

Но тем не менее, даже эти возможности уже позволяют быстро отобрать заметки. И не только! Условия фильтра позволяют как угодно настраивать стили отображения узлов графа. Для этого нужно открыть панель справа Juggl Style, которая позволяет настроить цвета, форму, иконку узла по произвольным правилам, определяемым фильтром. Но это выходит за рамки этой статьи и поэтому я не буду особо это описывать.

Здесь же нас интересует отображение семантических связей в графе. Хорошо видно, что они явно показываются и подписаны. Уже этот факт делает полученный локальный граф намного более интересным в сравнении с обычным графом Obsidian.

Однако особенные возможности появляются при переключении на режим рабочей области (Workspace mode). Число инструментов резко увеличивается. Но главной идеей режима рабочей области Juggl является возможность ручной правки графа. То есть, мы сами моделируем что именно должно отображаться и как.

Например на моем графе для этой заметки есть семантическая связь «Область» с MOC заметкой «Мои статьи». Это логично и правильно, но здесь и сейчас она мне совершенно не нужна. Я и так знаю, что пишу свою статью. Так давайте её уберём. Для этого в режиме рабочей области на пляшете я просто сделаю долгий тап на этом узле графа и выберу перечёркнутый глаз, то есть, скрыть этот узел:

Скрытие узла на графе Juggl

Таким образом я всегда могу скрыть ненужные сейчас узлы. Обратите внимание на другие команды: замок фиксирует положение узла, чтобы он не двигался, также есть режимы раскрытия и сворачивания узла. А от о них я расскажу подробнее.

Итак, меня интересует узел ExcaliBrain, сделаю на нем долгий тап на планшете (или правая кнопка мышки на десктопе) и раскрою его:

Раскрытие узла на графе Juggl

Теперь скрою «лишние» узлы, которые явно не нужны в графе этой статьи, и вот я получаю граф пересечения двух предметных областей. Аналогично я поступлю с узлом «Граф Obsidian» и получу пересечения уже трех предметных областей.

Подготовленный граф Juggl

И так далее. Играя с рабочей областью Juggl мы получаем как бы подсвечивание идей, их комбинаций и связей между ними. Порой такие связи приводят к очень интересным выводам.

Отлично! Теперь когда граф в рабочей области более-менее отражает ту идею, которая сейчас в голове, саму рабочую область можно сохранить, чтобы возвращаться к ней позже в любое время.

Ну, а при работе с тестом заметки, например, тестом этой статьи очень удобно открыть панель справа Juggl Nodes, которая показывает просто список всех заметок (узлов) нашей рабочей области. Кстати, в этом списке очень удобно скрывать или наоборот показывать отдельные заметки на графе в рабочей области.

Список узлов графа Juggl

Таким образом сам процесс работы с текстом значительно упрощается, мы фактически получили готовый список материалов, всегда доступный по простому клику (или горячей клавише). Список тех материалов, которые мы обобрали на графе рабочей области.

Встраивание среза графа в заметку Obsidian

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

А у Juggl есть свой тип кодового блока, который позволяет визуализировать граф с указанными настройками. Вот пример такого блока в заметке:

```juggl
local: Магия семантических связей в графе Obsidian
layout: hierarchy
```
Встроенный граф Juggl в заметке Obsidian

Обратите внимание, мы буквально двумя строчками код добавили прямо в заметку практически концептуальную карту Новака, в которой концептами являются наши заметки, а отношениями — семантические ссылки.

Сам блок кода Juggl — это просто YAML, в котором прежде всего нужно задать отображение среза графа в одном из трех режимах (это первая строчка):

  • local — локальный граф по указанной заметке, просто указываем название заметки;
  • workspace — загрузка заранее сохраненной рабочей области, просто указываем название сохраненной рабочей области;
  • oql — для выборки узлов графа используется синтаксис и возможности плагина Obsidian Query Language. Мы не будем здесь рассматривать эту возможность.

Помимо режима можно использовать следующие параметры (в скобках указаны значения по умолчанию):

  • layout (force-directed): Макет, используемый для графа. Возможные значение force-directedcirclegridhierarchy.
  • fdgdLayout (cola): Алгоритм, используемый для макетов с расчетом положения узлов. Возможные значения colad3-force.
  • filter (‘ ‘): Фильтр узлов графа.
  • width (100%): Ширина холста, созданного блоком кода.
  • height (750px): Высота холста, созданного блоком кода.
  • limit (250): Максимальное количество узлов для отображения в визуализации.
  • metaKeyHover (true): Показывать ли предварительный просмотр при наведении только при нажатой клавише Ctrl или Cmd.
  • navigator (true): Показывать ли «мини-карту» в правом нижнем углу. Она может быть также выключена в настройках плагина.
  • toolbar (true): Показывать ли панель инструментов сверху.
  • zoomSpeed (1): Скорость увеличения и уменьшения масштаба.
  • autoAddNodes (false): Автоматическое добавление новых узлов (если они появились) при переключении на заметку. Надо пользоваться с осторожностью, потому что при каждом переключении на заметку граф пересчитывается и его вид может поменяться.
  • autoZoom (false): Автоматически масштабировать так, чтобы весь граф был виден. Это делается после завершения построения макета, что приводит к некоторому «дёрганию» графа при отображении, но зато он показывается полностью.
  • expandInitial (false): Расширять ли автоматически наборы узлов из запроса. Внимание: это может создать очень большие графы!

Таким образом Juggl позволяет отображать срезы графа, да еще с семантическими связями, прямо в тексте заметки.

Холсты на основе семантических связей

Несмотря на широкие возможности описанных выше плагинов, бывает необходимо поработать например с концептуальной картой в более привычном виде и в более привычном редакторе, например в виде холста (Canvas) Obsidian. И мы можем несложно это организовать. Здесь нужно отметить очень важный момент: семантические связи не привязываются к конкретному плагину, это сущность, которую мы привнесли в наш волт Obsidian и она может быть использована в самых разных сценариях и для решения самых разных задач.

В одном из первых примеров в этой статье я использовал Obsidian Copilot для получения списка семантических связей этой заметки в виде простого текста. Продолжим работать с этим текстом и дадим Копилоту следующую задачу (здесь используется режим Copilot Plus):

Создание холста Canvas на основе семантических связей

Готово! Мы получили холст с заметками и связями между ними как готовую отправную точку в нашем процессе построения концептуальной карты в том виде, в котором она нужна.

Другие способы работы с семантическими связями

Как уже отмечалось выше, семантические связи — это еще один смысловой слой в вашем Obsidian. И несмотря на то, что подавляющее число примеров как или иначе касалось графов в Obsidian, работу со семантическими связями можно строить не только в виде графа. Я выше уже приводил тезис о том, что самое главное, самое полезное в повседневной работе с цифровыми заметками — это возможность получить требуемую информацию здесь и сейчас, не отвлекаясь от той мысли или идеи, которая сейчас в голове, без лишних телодвижений, без ухода от контекста текущего момента. И здесь семантические связи в Obsidian также помогают нам, например вот в таких или подобных запросах к ИИ помощнику, Copilot в моем примере.

Obsidian Copilot отвечает на вопросы, используя семантические связи

Не отвлекаясь от заметки, не открывая новых вкладок, одной горячей клавишей и коротким запросом я получил быстрый ответ из своего же волта Obsidian. Еще раз хочу отметить, что такой ответ не использовал ничего, кроме текста заметки, ни режим QA (который не самый быстрый), ни семантический поиск по векторной близости (который требует расчёт эмбеддингов и обладает рядом особенностей). Такой трюк работает где угодно: на телефоне, на планшете и работает очень быстро. Единственное требование — наличие семантических связей в заметке.

Предсказания семантических связей

Вообще сама идея привнесения смыслового значения связи между заметками изначально предполагает что это делается вами, как автором этой заметки, и делается вручную. Никто лучше вас не знает и не понимает зачем именно, с какой целью вы ставите ту или иную ссылку в своих заметках. Именно это вы расшифровываете, поясняете для себя, используя свои же, придуманные вами, типы из онтологии связей. Попытка поручить это ИИ не самая хорошая идея, потому что он сделает так, как сам понимает текущий контекст, и несмотря на кажущуюся правильность таких ссылок, вы потеряете самое главное — это уже не ваши правила, уже не ваши мысли, не то, о чем вы думали в момент указания такой ссылки.

Но тем не менее, можно попробовать предсказать другие связи, которых сейчас нет, с другими заметками, которые ассоциируются с текущей. Для поиска ассоциаций я воспользуюсь Лувенским методом из плагина Graph Analysis (о методах ассоциативного поиска можно подробнее почитать в статье Ассоциативный поиск, связи и граф в Obsidian)

Ассоциированные заметки, выбранные Лувенским методом

Промпт для такого предсказания в моем примере я написал такой:

На основании текста и смысла заметки [[Магия семантических связей в графе Obsidian]] и списка ассоциирующихся заметок предложи возможные семантические связи, используя типы связей из [[Моя онтология связей ExcaliBrain]]

Ответ получился довольно объемным, поэтому я приводу лишь часть его на скриншоте:

Obsidian Copilot предложил ряд семантических связей для этой статьи

Конечно же, ответ несколько сыроватый и требует проработки, но даже здесь видно как вскрылись интересные ассоциации этой статьи: например, обработка сырой заметки и явно предложенная некая «Рукописная заметка 19.03.2025.excalidraw». Копилот указал, что это может быть примером использования ExcaliBrain или семантических связей.

Вообще интересная идея, тем более я выше упоминал тезис о том, что работа с семантическими ссылками — это мощнейший метод правильной линковки сырых заметок. Я вообще стараюсь все рукописные заметки сразу же распознавать и далее их обрабатывать уже в обычном виде, но можно попробовать внести коррективы в промпты распознавания, чтобы после распознавания сразу выделялись отдельным списком концепты заметки для дальнейшей семантической линковки. Но как говорили браться Стругацкие, это уже совсем другая история! И эту «сказку о Силе» я расскажу уж как-нибудь потом…

Но обратите внимание на интересный момент: помните, я выше написал непонятную, заумную фразу о том, что «связи между концептами различных тем могут чудесным образом пересекаться друг с другом, взаимодействовать друг с другом…»? Так вот, это — прямо готовый пример такого пересечения и взаимодействия! Идея, приведенная в предыдущем параграфе, мне пришла в голову, когда я просто расписывал вам пример предсказания связей. И самое главное — это всё получено исключительно на основании заметок в моем Obsidian.

Выводы и заключение

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

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

Но всё меняется, прогресс неумолим и кто знает, какие еще инструменты анализа или работы с семантическими связями появятся завтра. Но мы готовы к таким изменениям, потому что мы уже прикоснулись к магии семантических связей. И это здорово!

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *