Wiki-движок знаний: правила, директивы и синтез
Как wiki-движок Simmetric Chat управляет записями в архивы трёхслойной моделью инструкций - жёсткие правила, принуждаемые кодом, консультативный schema prompt каждого архива, структурированные поля - и что цепочка приоритетов значит на практике.

Знание, которое организует себя само - на написанных рельсах
Когда разговоры архивируются в общую базу знаний, вопрос перестаёт быть «можем ли мы хранить страницы» и становится «кто может писать что, где, каким голосом». Wiki-движок Simmetric Chat отвечает трёхслойной моделью инструкций для каждого архива: правила, принуждаемые кодом; редакционный prompt каждого архива, переносимый как данные; и структурированные поля, описывающие ожидаемое поведение. Умозрительная модель, которая остаётся: schema prompt архива для wiki - то же, что CLAUDE.md для репозитория кода - консультативен по природе, силён на практике, никогда не закон.
Эта статья - проход по дизайну: три слоя, что каждый может и не может, цепочка приоритетов при разногласиях, и два встроенных skill'а (wiki_query, wiki_write), делающих истинной машиночитаемую половину обещания.
Слой 1: жёсткие правила, принуждаемые кодом
Первый слой безусловен и независим от конфигурации - он охраняет всё:
- Караул файловой системы.
validateWritablePathотклоняет любую цель записи вне<archiveBase>/wiki/: анти-обходная проверка идёт первой, затем проверка префиксаwiki/. Цель внеwiki/бросает именованную ошибку, иcreatePage, иupdatePageвызывают караул до всякой записи в файл.raw_sources/неизменяем по дизайну - ни один endpoint API не пишет под ним. - Зеркало на уровне prompt'а. Всегда активный блок добавляется в конец каждого привязанного к архиву prompt'а, и его формулировка зеркалит караул файловой системы (
raw_sources/ is immutable). Модель даже не пытается выход изwiki/- а если попытается, код гарантирует, что ничего не приземлится.
Спаренность намеренна: prompt держит модель честной, код держит систему безопасной. Доверие живёт во втором свойстве, не в первом.
Слой 2: консультативный schema prompt архива
Schema prompt (schemaPrompt) - свободное консультативное текстовое поле, сохраняемое в config-JSON архива:
- Форма: до 10000 знаков (≈2500 токенов) внутри config-схемы архива - аддитивный ключ, ноль миграций.
- Валидация: Zod при каждой записи через
PUT /api/archives/:id/config; payload сверх потолка отклоняется 400-й, называющей поле. - Договор чтения: архив без сохранённой строки читает config по умолчанию (путь первой записи); архивы со строкой возвращают сохранённый blob дословно. Legacy-бlob'ы сверх потолка обрезаются при инъекции с явной пометкой - никогда не подрезаются молча и не перепроверяются.
- Консультативен по дизайну: блок входит в prompt'ы как ДАННЫЕ с явной консультативной меткой - никогда как раздача привилегий на уровне system prompt. Никакой санации сверх потолка длины; противоречивые инструкции - принятый риск качества, смягчённый справочным текстом и шаблоном в интерфейсе.
Второй слой - место, где живёт редакционный голос организации: конвенции имён, структура страниц, ожидания к источникам. Это директива - и движок обращается с ней точно так.
Слой 3: структурированные поля
Persona, purpose, scope - структурное описание архива - инжектируются в prompt-путь существующей конфигурацией. Они описывают значения по умолчанию; второй слой берёт верх, когда оба говорят.
Цепочка приоритетов
жёсткие правила (код) > schema prompt (консультативный) > структурированные поля- Schema prompt никогда не может перевесить жёсткие правила - prompt объявляет; код принуждает.
- В конфликте со структурированными полями schema prompt берёт верх.
- Архив без schema prompt ведёт себя как baseline плюс жёсткое правило - ноль приращения, ноль деградации.
Третья строка имеет смысл для умозрительной бухгалтерии оператора: пустое консультативное поле - это завершённая конфигурация, а не отсутствующая. Пустых секций-заглушек, бродящих вокруг prompt'ов, не существует.
Где приземляется консультативный блок
Инъекция имеет явные швы, каждый заносится в system prompt запроса после блока правила поиска и до собственного system prompt workspace:
- Оркестратор чата (оба пути, стриминг и не-стриминг) - жёсткое правило всегда; консультативный блок едет вместе, если архив его имеет.
- Решающий проход pipeline синтеза - консультативный блок несёт там роль SYSTEM, тогда как предшествующие проходы (retrieval, черновик, суд противоречий) по дизайну идут без него.
wiki_query и wiki_write: два встроенных
Встроенные wiki_query и wiki_write - skill'ы, чьи пути выполнения не делают ни одного LLM-вызова - путь записи целиком в коде даёт детерминированные превью. Архитектурное следствие острое: инъекция на skill не достигла бы ни одной модели, потому единственная LLM-facing поверхность wiki - system prompt оркестратора. Поведение записи wiki = три слоя выше; функции чтения/записи = простой, аудитируемый код.
Почему эта форма держится
Три свойства, в комбинации:
- Неизменяемость в основании -
raw_sources/не может переписать никто, модель включительно (караул + всегда активный блок). - Консультативная дисциплина - редакционная директива входит как помеченные данные, аудитируемые на уровне правки конфигурации, никогда как привилегия.
- Детерминированные встроенные - поверхности чтения/записи архива работают без модели, поэтому гарантии не зависят от суждения модели.
Обещание движка скромно и несёт вес: знание организует себя само на написанных рельсах, ровно настолько, насколько рельсы решают. Оператор Simmetric Chat остаётся автором рельсов - в этом тихая суть дизайна.
Читать дальше
Путеводитель несёт полную операторскую справку - полевые таблицы и договоры endpoint'ов - на /ru/docs/wiki-knowledge-engine:
- Wiki knowledge engine - путеводитель
- Факты этого поста: строка
FACT-CENSUS.mdF-WIKI-1 (Wiki Schema Layer: написана, финализирована, сверена с живым кодом на гейте v0.25)
Provenance: Simmetric Chat docs/WIKI_SCHEMA_LAYER.md (v0.28.1, Phase 187/194), validateWritablePath в packages/server/src/utils/archivePath.ts, швы инъекции оркестратора, CHANGELOG.md v0.28.1 - на зафиксированном census'ом документальном состоянии (SHA aca5b8ff).


