Использование корпуса в RAG и ассистентах
Назначение и аудитория
Материал для разработчиков и редакторов, которые подключают эту wiki к поиску, RAG или ИИ-ассистентам.
Входные данные
- Клон репозитория или статическая сборка сайта.
- Артефакты в каталоге
exports/:knowledge-index.jsonl,knowledge-chunks.jsonlиknowledge-graph.json(генерируютсяnpm run export:knowledge, вручную не редактируются). - Файлы
llms.txtиKNOWLEDGE.mdв корне репозитория. - Инженерные решения (стек экспорта, политика проверки внешних ссылок):
openspec/engineering-notes.md.
Инструменты
- Node.js 20+, скрипты в
scripts/(export-knowledge-index.mjs, линтеры метаданных). - Любой RAG-стек поверх Markdown или JSONL.
Шаги
- Прочитайте точку входа для моделей (
llms.txt,KNOWLEDGE.md) — там зафиксированы разделы и правила ссылок. - Используйте
knowledge-index.jsonlдля discovery: фильтрации документов поcontent_type,entity_type,tags,rag_priority, предметной области и каноническомуslug. - Используйте
knowledge-chunks.jsonlкак стандартный вход секционного retrieval. Каждая запись содержит текст,document_slug, путь заголовков, Docusaurus-совместимый якорь и канонический URL. - Исключите
draft: trueи из document-, и из chunk-индекса продакшен-RAG. Значение наследуется из одной Markdown-карточки и проверяется на согласованность. - Потребитель может дополнительно делить чанк под tokenizer своей модели, но должен сохранить исходные
chunk_id,document_slugиurlлибо явную трассировку к ним. - Для регрессии retrieval используйте
tests/qa-validation.jsonl(целевой объём 50–100+ сценариев; схема проверяетсяnpm run lint:qaпротив актуальногоknowledge-index.jsonl). Лексический baseline:npm run qa:retrieval— ожидаемые slug из каждого сценария должны попадать в топ-400 ранжирования по документным метаданным (см.scripts/qa-retrieval-regression.mjs).
Контракты и чанкинг
Все три артефакта имеют schema_version: 1. Добавление nullable-поля совместимо внутри версии; удаление, переименование или смена семантики существующего поля требует новой версии и миграционной заметки в KNOWLEDGE.md.
Экспортер сначала делит Markdown по заголовкам ##–######, сохраняет иерархию в heading_path, затем при необходимости группирует целые блочные элементы до 6 000 символов без overlap. Fenced code block, таблица или связный список не разрезаются посередине. Если один такой блок сам длиннее лимита, он остаётся целым, а запись получает oversized: true; downstream-потребитель может обработать её отдельно.
chunk_id детерминирован относительно slug, пути заголовков, якоря и номера части. Переименование заголовка может изменить идентификатор — это адрес retrieval, а не вечный бизнес-ключ.
Для ответа используйте экспортированное поле url: у секционного чанка оно уже содержит канонический #heading_anchor. Для введения без заголовка цитируйте URL страницы без вымышленного якоря.
Воспроизводимый пример
npm ci
npm run export:knowledge
head -n 3 exports/knowledge-index.jsonl
head -n 3 exports/knowledge-chunks.jsonl
Проверка результата
npm run test:knowledge-export проверяет кириллические и повторяющиеся якоря, явные ID, структурные блоки, детерминированность и typed edges. npm run export:knowledge -- --check в CI read-only проверяет drift всех трёх артефактов, уникальность chunk_id и целостность document/chunk/graph ссылок.
Ограничения и типовые ошибки
- Внешние URL в карточках меняются; для контроля живости подключена еженедельная проверка ссылок.
- Не подменяйте канонические пути сайта произвольными URL зеркал без пометки в ответе ассистента.
- Сводка известных пробелов корпуса (поиск по сайту, черновики,
related_pages): файлKNOWLEDGE.mdв корне репозитория.