Перейти к основному содержимому

Llm Wiki

LLM-вики Карпати: создание/запрос взаимосвязанной базы знаний в Markdown.

Метаданные навыка​

ИсточникВстроенный (устанавливается по умолчанию)
Путьskills/research/llm-wiki
Версия2.1.0
АвторVibeOS
ЛицензияMIT
Платформыlinux, macos, windows
Тегиwiki, knowledge-base, research, notes, markdown, rag-alternative
Связанные навыкиobsidian, arxiv, research-local-corpus, professional-research, qmd

Справочник: полный SKILL.md​

к сведению

Ниже приведено полное описание навыка, которое VibeOS загружает при его активации. Это те инструкции, которые видит агент, когда навык активен.

LLM-вики Карпати

Создание и поддержание постоянной, накапливающей знания базы в виде взаимосвязанных Markdown-файлов. Основано на паттерне LLM Wiki Андрея Карпати.

В отличие от традиционного RAG (который заново извлекает знания с нуля для каждого запроса), вики компилирует знания один раз и поддерживает их в актуальном состоянии. Перекрёстные ссылки уже есть. Противоречия уже отмечены. Синтез отражает всю полученную информацию.

Разделение труда: Человек курирует источники и направляет анализ. Агент резюмирует, создаёт перекрёстные ссылки, систематизирует и поддерживает согласованность.

Когда активируется этот навык​

Используйте этот навык, когда пользователь:

  • Просит создать, построить или запустить вики или базу знаний
  • Просит добавить, обработать источник в свою вики
  • Задаёт вопрос, и существующая вики присутствует по настроенному пути
  • Просит провести линтинг, аудит или проверку работоспособности вики
  • Ссылается на свою вики, базу знаний или «заметки» в контексте исследования

Для запросов «поищи в моей папке исследований / предыдущих брифингах / большой выгрузке markdown» без существующей вики предпочтительнее использовать research-local-corpus (направляет к этому навыку, qmd или ~/.vibeos/research/).

Расположение вики​

Расположение: Задаётся через переменную окружения WIKI_PATH (например, в ${VIBEOS_HOME:-~/.vibeos}/.env).

Если не задана, по умолчанию используется ~/wiki.

WIKI="${WIKI_PATH:-$HOME/wiki}"

Вики — это просто каталог с Markdown-файлами. Его можно открыть в Obsidian, VS Code или любом редакторе. Никакой базы данных или специальных инструментов не требуется.

Архитектура: три слоя​

wiki/
├── SCHEMA.md # Соглашения, правила структуры, конфигурация домена
├── index.md # Каталог контента по разделам с однострочными описаниями
├── log.md # Хронологический журнал действий (только добавление, ротация по годам)
├── raw/ # Слой 1: Неизменяемый исходный материал
│ ├── articles/ # Веб-статьи, вырезки
│ ├── papers/ # PDF, статьи с arXiv
│ ├── transcripts/ # Записи встреч, интервью
│ └── assets/ # Изображения, диаграммы, на которые ссылаются источники
├── entities/ # Слой 2: Страницы сущностей (люди, организации, продукты, модели)
├── concepts/ # Слой 2: Страницы концепций/тем
├── comparisons/ # Слой 2: Сравнительный анализ
└── queries/ # Слой 2: Сохранённые результаты запросов, которые стоит сохранить

Слой 1 — Исходные источники: Неизменяемы. Агент читает, но никогда не изменяет их. Слой 2 — Вики: Markdown-файлы, принадлежащие агенту. Создаются, обновляются и связываются перекрёстными ссылками агентом. Слой 3 — Схема: SCHEMA.md определяет структуру, соглашения и таксономию тегов.

Возобновление работы с существующей вики (КРИТИЧЕСКИ ВАЖНО — делайте это в каждом сеансе)​

Если у пользователя есть существующая вики, всегда сначала ознакомьтесь с ней, прежде чем что-либо делать:

① Прочитайте SCHEMA.md — поймите домен, соглашения и таксономию тегов. ② Прочитайте index.md — узнайте, какие страницы существуют и их краткие описания. ③ Просмотрите последние записи log.md — прочитайте последние 20-30 записей, чтобы понять недавнюю активность.

WIKI="${WIKI_PATH:-$HOME/wiki}"
# Ознакомительное чтение в начале сеанса
read_file "$WIKI/SCHEMA.md"
read_file "$WIKI/index.md"
read_file "$WIKI/log.md" offset=<последние 30 строк>

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

  • Создание дублирующих страниц для уже существующих сущностей
  • Пропуск перекрёстных ссылок на существующий контент
  • Противоречие соглашениям схемы
  • Повторение уже зарегистрированной работы

Для больших вики (100+ страниц) также выполните быстрый search_files по нужной теме перед созданием чего-либо нового.

Инициализация новой вики​

Когда пользователь просит создать или запустить вики:

  1. Определите путь к вики (из переменной окружения $WIKI_PATH или спросите пользователя; по умолчанию ~/wiki)
  2. Создайте структуру каталогов, указанную выше
  3. Спросите пользователя, какой домен охватывает вики — будьте конкретны
  4. Напишите SCHEMA.md, адаптированный под домен (см. шаблон ниже)
  5. Напишите начальный index.md с заголовком, разделённым на секции
  6. Напишите начальный log.md с записью о создании
  7. Подтвердите, что вики готова, и предложите первые источники для добавления

Шаблон SCHEMA.md​

Адаптируйте под домен пользователя. Схема ограничивает поведение агента и обеспечивает согласованность:

# Схема вики

## Домен
[Что охватывает эта вики — например, «исследования AI/ML», «личное здоровье», «разведка стартапов»]

## Соглашения
- Имена файлов: строчные буквы, дефисы, без пробелов (например, `transformer-architecture.md`)
- Каждая страница вики начинается с YAML-шапки (см. ниже)
- Используйте `[[вики-ссылки]]` для связи между страницами (минимум 2 исходящие ссылки на страницу)
- При обновлении страницы всегда обновляйте дату `updated`
- Каждая новая страница должна быть добавлена в `index.md` в соответствующий раздел
- Каждое действие должно быть добавлено в `log.md`
- **Маркеры происхождения:** На страницах, обобщающих 3+ источника, добавляйте `^[raw/articles/source-file.md]`
в конце абзацев, утверждения которых происходят из конкретного источника. Это позволяет читателю проследить
каждое утверждение без повторного чтения всего исходного файла. Опционально на страницах с одним источником, где
поля `sources:` в шапке достаточно.

## Шапка
```yaml
---
title: Заголовок страницы
created: ГГГГ-ММ-ДД
updated: ГГГГ-ММ-ДД
type: entity | concept | comparison | query | summary
tags: [из таксономии ниже]
sources: [raw/articles/source-name.md]
# Опциональные сигналы качества:
confidence: high | medium | low # насколько хорошо подтверждены утверждения
contested: true # устанавливается, если на странице есть неразрешённые противоречия
contradictions: [other-page-slug] # страницы, с которыми эта конфликтует
---

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

Шапка для raw/​

Исходные источники ТАКЖЕ получают небольшой блок шапки, чтобы при повторном добавлении можно было обнаружить расхождения:

---
source_url: https://example.com/article # исходный URL, если применимо
ingested: ГГГГ-ММ-ДД
sha256: &lt;hex-дайджест необработанного содержимого ниже шапки>
---

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

Таксономия тегов​

[Определите 10-20 тегов верхнего уровня для домена. Добавляйте новые теги сюда ПЕРЕД их использованием.]

Пример для AI/ML:

  • Модели: model, architecture, benchmark, training
  • Люди/Организации: person, company, lab, open-source
  • Техники: optimization, fine-tuning, inference, alignment, data
  • Мета: comparison, timeline, controversy, prediction

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

Пороговые значения для страниц​

  • Создавайте страницу, когда сущность/концепция встречается в 2+ источниках ИЛИ является центральной для одного источника
  • Добавляйте в существующую страницу, когда источник упоминает то, что уже освещено
  • НЕ создавайте страницу для мимолётных упоминаний, незначительных деталей или того, что выходит за рамки домена
  • Разделяйте страницу, когда она превышает ~200 строк — разбивайте на подтемы с перекрёстными ссылками
  • Архивируйте страницу, когда её содержимое полностью устарело — перемещайте в _archive/, удаляйте из индекса

Страницы сущностей​

Одна страница на заметную сущность. Включает:

  • Обзор / что это такое
  • Ключевые факты и даты
  • Связи с другими сущностями ([[вики-ссылки]])
  • Ссылки на источники

Страницы концепций​

Одна страница на концепцию или тему. Включает:

  • Определение / объяснение
  • Текущее состояние знаний
  • Открытые вопросы или дискуссии
  • Связанные концепции ([[вики-ссылки]])

Страницы сравнений​

Сравнительный анализ. Включает:

  • Что сравнивается и почему
  • Измерения сравнения (предпочтительно в формате таблицы)
  • Вердикт или синтез
  • Источники

Политика обновления​

Когда новая информация противоречит существующему содержимому:

  1. Проверьте даты — более новые источники обычно заменяют старые
  2. Если действительно противоречиво, укажите обе позиции с датами и источниками
  3. Отметьте противоречие в шапке: contradictions: [page-name]
  4. Сообщите пользователю для проверки в отчёте линтинга

### Шаблон index.md

Индекс разделён по типам. Каждая запись — одна строка: вики-ссылка + описание.

```markdown
# Индекс вики

> Каталог контента. Каждая страница вики перечислена под своим типом с однострочным описанием.
> Читайте это в первую очередь, чтобы найти релевантные страницы для любого запроса.
> Последнее обновление: ГГГГ-ММ-ДД | Всего страниц: N

## Сущности
<!-- В алфавитном порядке в пределах раздела -->

## Концепции

## Сравнения

## Запросы

Правило масштабирования: Когда любой раздел превышает 50 записей, разделите его на подразделы по первой букве или поддомену. Когда индекс превышает 200 записей в сумме, создайте _meta/topic-map.md, который группирует страницы по темам для более быстрой навигации.

Шаблон log.md​

# Журнал вики

> Хронологическая запись всех действий с вики. Только добавление.
> Формат: `## [ГГГГ-ММ-ДД] действие | тема`
> Действия: ingest, update, query, lint, create, archive, delete
> Когда этот файл превышает 500 записей, выполните ротацию: переименуйте в log-ГГГГ.md, начните новый.

## [ГГГГ-ММ-ДД] create | Вики инициализирована
- Домен: [домен]
- Создана структура с SCHEMA.md, index.md, log.md

Основные операции​

1. Добавление источника​

Когда пользователь предоставляет источник (URL, файл, вставленный текст), интегрируйте его в вики:

① Захватите исходный источник:

  • URL → используйте web_extract для получения Markdown, сохраните в raw/articles/
  • PDF → используйте web_extract (обрабатывает PDF), сохраните в raw/papers/
  • Вставленный текст → сохраните в соответствующий подкаталог raw/
  • Назовите файл описательно: raw/articles/karpathy-llm-wiki-2026.md
  • Добавьте шапку raw (source_url, ingested, sha256 тела). При повторном добавлении того же URL: пересчитайте sha256, сравните с сохранённым значением — пропустите, если идентично, сообщите об изменении и обновите, если отличается. Это достаточно дёшево для выполнения при каждом повторном добавлении и позволяет отслеживать незаметные изменения источника.

② Обсудите ключевые выводы с пользователем — что интересно, что важно для домена. (Пропустите в автоматизированных/фоновых контекстах — переходите сразу.)

③ Проверьте, что уже существует — просмотрите index.md и используйте search_files для поиска существующих страниц для упомянутых сущностей/концепций. Это разница между растущей вики и кучей дубликатов.

④ Напишите или обновите страницы вики:

  • Новые сущности/концепции: Создавайте страницы, только если они соответствуют Пороговым значениям для страниц в SCHEMA.md (упоминание в 2+ источниках или центральная роль в одном источнике)
  • Существующие страницы: Добавляйте новую информацию, обновляйте факты, обновляйте дату updated. Когда новая информация противоречит существующему содержимому, следуйте Политике обновления.
  • Перекрёстные ссылки: Каждая новая или обновлённая страница должна ссылаться как минимум на 2 другие страницы через [[вики-ссылки]]. Проверьте, что существующие страницы ссылаются обратно.
  • Теги: Используйте только теги из таксономии в SCHEMA.md
  • Происхождение: На страницах, обобщающих 3+ источника, добавляйте маркеры ^[raw/articles/source.md] к абзацам, утверждения которых восходят к конкретному источнику.
  • Уверенность: Для утверждений, основанных на мнениях, быстро меняющихся или исходящих из одного источника, устанавливайте confidence: medium или low в шапке. Не ставьте high, если утверждение не подтверждено несколькими источниками.

⑤ Обновите навигацию:

  • Добавьте новые страницы в index.md в соответствующий раздел, в алфавитном порядке
  • Обновите счётчик «Всего страниц» и дату «Последнее обновление» в заголовке индекса
  • Добавьте запись в log.md: ## [ГГГГ-ММ-ДД] ingest | Заголовок источника
  • Перечислите каждый созданный или обновлённый файл в записи журнала

⑥ Сообщите, что изменилось — перечислите пользователю каждый созданный или обновлённый файл.

Один источник может вызвать обновления на 5-15 страницах вики. Это нормально и желательно — это эффект накопления знаний.

2. Запрос​

Когда пользователь задаёт вопрос по домену вики:

① Прочитайте index.md, чтобы определить релевантные страницы. ② Для вики с 100+ страницами также выполните search_files по всем .md файлам на предмет ключевых терминов — одного индекса может быть недостаточно. ③ Прочитайте релевантные страницы, используя read_file. ④ Синтезируйте ответ из накопленных знаний. Ссылайтесь на страницы вики, которые вы использовали: «На основе [[page-a]] и [[page-b]]...» ⑤ Сохраните ценные ответы обратно — если ответ представляет собой существенное сравнение, глубокое погружение или новый синтез, создайте страницу в queries/ или comparisons/. Не сохраняйте тривиальные поиски — только те ответы, которые было бы трудно получить заново. ⑥ Обновите log.md с информацией о запросе и о том, был ли он сохранён.

3. Линтинг​

Когда пользователь просит провести линтинг, проверку работоспособности или аудит вики:

① Страницы-сироты: Найдите страницы, на которые нет входящих [[вики-ссылок]] с других страниц.

# Используйте execute_code для этого — программное сканирование всех страниц вики
import os, re
from collections import defaultdict
wiki = "<ПУТЬ_К_ВИКИ>"
# Сканировать все .md файлы в entities/, concepts/, comparisons/, queries/
# Извлечь все [[вики-ссылки]] — построить карту входящих ссылок
# Страницы с нулевым количеством входящих ссылок являются сиротами

② Битые вики-ссылки: Найдите [[ссылки]], которые указывают на несуществующие страницы.

③ Полнота индекса: Каждая страница вики должна присутствовать в index.md. Сравните файловую систему с записями индекса.

④ Валидация шапки: Каждая страница вики должна иметь все обязательные поля (title, created, updated, type, tags, sources). Теги должны быть в таксономии.

⑤ Устаревший контент: Страницы, дата updated которых более чем на 90 дней старше самого нового источника, упоминающего те же сущности.

⑥ Противоречия: Страницы на одну тему с конфликтующими утверждениями. Ищите страницы, которые имеют общие теги/сущности, но содержат разные факты. Выявляйте все страницы с contested: true или contradictions: в шапке для проверки пользователем.

⑦ Сигналы качества: Перечислите страницы с confidence: low и любые страницы, которые ссылаются только на один источник, но не имеют установленного поля confidence — они являются кандидатами либо на поиск подтверждения, либо на понижение до confidence: medium.

⑧ Расхождение источников: Для каждого файла в raw/ с sha256: в шапке пересчитайте хеш и отметьте несовпадения. Несовпадения указывают на то, что исходный файл был отредактирован (не должно происходить — raw/ неизменяем) или был добавлен из URL, который с тех пор изменился. Не критическая ошибка, но стоит сообщить.

⑨ Размер страницы: Отметьте страницы длиннее 200 строк — кандидаты на разделение.

⑩ Аудит тегов: Перечислите все используемые теги, отметьте те, которых нет в таксономии SCHEMA.md.

⑪ Ротация журнала: Если log.md превышает 500 записей, выполните его ротацию.

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

⑬ Добавьте запись в log.md: ## [ГГГГ-ММ-ДД] lint | Найдено N проблем

Работа с вики​

Поиск​

# Поиск страниц по содержимому
search_files "transformer" path="$WIKI" file_glob="*.md"

# Поиск страниц по имени файла
search_files "*.md" target="files" path="$WIKI"

# Поиск страниц по тегу
search_files "tags:.*alignment" path="$WIKI" file_glob="*.md"

# Недавняя активность
read_file "$WIKI/log.md" offset=<последние 20 строк>

Массовое добавление источников​

При одновременном добавлении нескольких источников группируйте обновления:

  1. Сначала прочитайте все источники
  2. Определите все сущности и концепции во всех источниках
  3. Проверьте существующие страницы для всех них (один проход поиска, а не N)
  4. Создайте/обновите страницы за один проход (избегает избыточных обновлений)
  5. Обновите index.md один раз в конце
  6. Напишите одну запись в журнале, охватывающую всю группу

Архивирование​

Когда содержимое полностью устарело или изменилась область действия домена:

  1. Создайте каталог _archive/, если он не существует
  2. Переместите страницу в _archive/ с её исходным путём (например, _archive/entities/old-page.md)
  3. Удалите из index.md
  4. Обновите все страницы, которые ссылались на неё — замените вики-ссылку на обычный текст + «(архивировано)»
  5. Зарегистрируйте действие архивирования

Интеграция с Obsidian​

Каталог вики работает как хранилище Obsidian «из коробки»:

  • [[вики-ссылки]] отображаются как кликабельные ссылки
  • Графовое представление визуализирует сеть знаний
  • YAML-шапка поддерживает запросы Dataview
  • Папка raw/assets/ содержит изображения, на которые ссылаются через ![[image.png]]

Для наилучшего результата:

  • Установите в Obsidian папку для вложений на raw/assets/
  • Включите «Вики-ссылки» в настройках Obsidian (обычно включено по умолчанию)
  • Установите плагин Dataview для запросов типа TABLE tags FROM "entities" WHERE contains(tags, "company")

Если вы используете навык Obsidian вместе с этим, установите OBSIDIAN_VAULT_PATH на тот же каталог, что и путь к вики.

Obsidian Headless (серверы и машины без дисплея)​

На машинах без дисплея используйте obsidian-headless вместо настольного приложения. Он синхронизирует хранилища через Obsidian Sync без графического интерфейса — идеально для агентов, работающих на серверах, которые пишут в вики, в то время как Obsidian Desktop читает её на другом устройстве.

Настройка:

# Требуется Node.js 22+
npm install -g obsidian-headless

# Вход (требуется учётная запись Obsidian с подпиской Sync)
ob login --email <email> --password '<пароль>'

# Создание удалённого хранилища для вики
ob sync-create-remote --name "LLM Wiki"

# Подключение каталога вики к хранилищу
cd ~/wiki
ob sync-setup --vault "<id-хранилища>"

# Первоначальная синхронизация
ob sync

# Непрерывная синхронизация (передний план — используйте systemd для фона)
ob sync --continuous

Непрерывная фоновая синхронизация через systemd:

# ~/.config/systemd/user/obsidian-wiki-sync.service
[Unit]
Description=Синхронизация Obsidian LLM Wiki
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/path/to/ob sync --continuous
WorkingDirectory=/home/user/wiki
Restart=on-failure
RestartSec=10

[Install]
WantedBy=default.target
systemctl --user daemon-reload
systemctl --user enable --now obsidian-wiki-sync
# Включите linger, чтобы синхронизация сохранялась после выхода из системы:
sudo loginctl enable-linger $USER

Это позволяет агенту писать в ~/wiki на сервере, пока вы просматриваете то же хранилище в Obsidian на ноутбуке/телефоне — изменения появляются в течение нескольких секунд.

Подводные камни​

  • Никогда не изменяйте файлы в raw/ — источники неизменяемы. Исправления вносятся на страницах вики.
  • Всегда сначала ознакомьтесь — прочитайте SCHEMA + index + последние записи журнала перед любой операцией в новом сеансе. Пропуск этого приводит к дубликатам и пропущенным перекрёстным ссылкам.
  • Всегда обновляйте index.md и log.md — пропуск этого приводит к деградации вики. Это навигационный хребет.
  • Не создавайте страницы для мимолётных упоминаний — следуйте Пороговым значениям для страниц в SCHEMA.md. Имя, появившееся один раз в сноске, не заслуживает отдельной страницы сущности.
  • Не создавайте страницы без перекрёстных ссылок — изолированные страницы невидимы. Каждая страница должна ссылаться как минимум на 2 другие страницы.
  • Шапка обязательна — она обеспечивает поиск, фильтрацию и обнаружение устаревания.
  • Теги должны быть из таксономии — произвольные теги превращаются в шум. Добавляйте новые теги в SCHEMA.md сначала, затем используйте их.
  • Делайте страницы удобными для просмотра — страницу вики можно прочитать за 30 секунд. Разделяйте страницы длиннее 200 строк. Переносите детальный анализ на специальные страницы для глубокого погружения.
  • Спрашивайте перед массовым обновлением — если добавление источника затронет 10+ существующих страниц, сначала подтвердите объём работ с пользователем.
  • Выполняйте ротацию журнала — когда log.md превышает 500 записей, переименуйте его в log-ГГГГ.md и начните новый. Агент должен проверять размер журнала во время линтинга.
  • Явно обрабатывайте противоречия — не перезаписывайте молча. Укажите оба утверждения с датами, отметьте в шапке, сообщите пользователю для проверки.

Связанные инструменты​

llm-wiki-compiler — это CLI на Node.js, который компилирует источники в концептуальную вики, вдохновлённую тем же подходом Карпати. Он совместим с Obsidian, поэтому пользователи, которым нужен конвейер компиляции по расписанию/из CLI, могут направить его на то же хранилище, которое поддерживает этот навык. Компромиссы: он владеет генерацией страниц (заменяет суждение агента о создании страниц) и настроен на небольшие корпусы. Используйте этот навык, когда вам нужна курация с участием агента; используйте llmwiki, когда вам нужна пакетная компиляция каталога источников.