Как собрана эта база

Пошаговый план сборки базы знаний по философскому тексту на примере «Размышлений» Марка Аврелия. Повторяемо для любого другого философа с PD-текстом.

Общие скрипты пайплайна лежат в ../sps_community/. Скрипты, специфичные для этой базы — в scripts/.


Шаг 1. Найти источники

Три обязательных источника:

  1. Английский перевод в общественном достоянии — берём за основу перевода. Для «Размышлений»: George Long, 1862, Project Gutenberg #2680.
  2. Оригинальный текст — как авторитет. Для Марка: греческий с el.wikisource.org (12 отдельных страниц по книгам).
  3. Референсный перевод на русском — только для качества сравнения, не для копирования (соблюдать копирайт). Для Марка: Гаврилов (1985) с ancientrome.ru.

Если текст не на Gutenberg — ищи на:

  • archive.org (Internet Archive)
  • wikisource.org / en.wikisource.org / el.wikisource.org
  • sacred-texts.com

Шаг 2. Скачать и распарсить источники

Скрипт: scripts/parse_sources.py

Что делает:

  • Скачивает английский текст через curl с Gutenberg
  • Скачивает греческий с Wikisource (отдельный URL на каждую книгу)
  • Разбивает по главам (regex по заголовкам или номерам)
  • Создаёт JSON-скелет: _data/meditations.json

Структура JSON:

{
  "books": [
    {
      "number": 1,
      "title_ru": "Книга первая",
      "chapters": [
        { "n": 1, "en": "...", "el": "...", "ru": "" }
      ]
    }
  ]
}

Частые проблемы:

  • Кодировка: ancientrome.ru отдаёт cp1251 — нужен response.encoding = 'cp1251'
  • Приложения и индексы в конце текста ломают счёт глав — обрезай текст на первом вхождении слова APPENDIX/APPENDICE
  • Wikisource иногда нумерует главы со смещением (особенно книги 2 и 3 у Марка: первая «глава» — это место написания, а не глава). Промотри fix_location_headers.py как пример фикса.

Шаг 3. Перевести на русский

12 параллельных субагентов Claude Opus — по одной книге каждый.

Промпт агенту (в сжатом виде):

Переведи главы из en/el на русский. Источник: George Long EN (за основу),
греческий оригинал (как авторитет). Референс: Гаврилов (не копировать).
Стиль: современный русский, без архаизмов, без пышности.
Верни JSON: [{n, ru}]

Каждый агент получает свой book_NN_input.json, возвращает book_NN_output.json.

Слияние результатов: scripts/merge_translations.py — добавляет поле ru в meditations.json.

Проверка качества: запустить ещё 12 агентов-критиков, которые сравнивают перевод с Гавриловым семантически и составляют отчёты. Складывать в _data/critic_reports/.


Шаг 4. Добавить комментарии

Если есть академические комментарии к тексту (в Notion, PDF, HTML) — подключи их.

Для «Размышлений»: комментарии Яна Унта из Notion-экспорта (zip-файл).

Скрипты:

  • scripts/parse_unt_export.py — разбирает zip: копирует 110 файлов комментариев в Комментарии Яна Унта/, переписывает wikilinks
  • scripts/merge_unt_refs.py — добавляет поле unt_refs в каждую главу JSON: [{anchor, commentary}]

Если Notion экспортирует zip с UTF-8 именами файлов — разархивируй через Python zipfile, не через unzip (macOS ломает кириллицу).


Шаг 5. Сгенерировать markdown-файлы книг

Скрипт: scripts/build_md.py

Что генерирует: Книги/Книга 01.mdКнига 12.md

Формат каждой главы:

### N

{ru}

{en}

{el}

*Комментарий Унта:* [[Комментарии Яна Унта/Имя|якорь]]

Фронтматтер файла:

---
home_position: NN
---

Хлебная крошка + аннотация книги перед ---, потом главы.

Соглашения trip2g/2pub.me:

  • Нет H1 внутри файла
  • home_position — порядковый номер для сортировки в magazine
  • magazine_include_property: home_position — в _index.md
  • Wikilinks без алиасов в навигации

Шаг 6. Создать навигационные страницы

Четыре типа страниц поверх основного текста:

Файл Назначение
Размышления.md Оглавление всех книг
Марк Аврелий.md Биографический контекст
Цепочки.md Тематические цепочки: тема → 5–8 глав из разных книг
Карта решений.md Состояние → релевантные главы
Принципы.md 20–25 ключевых идей с ссылками
Сравнение переводов.md Наш vs референсный по первым книгам

Ссылки на конкретные главы через #-якоря: [[Книги/Книга 02#1|Книга 2, гл. 1]]

Генерируются агентом Opus, который читает meditations.json и формирует тематические группировки вручную.


Шаг 7. Написать голос автора

Файл: _author_style.md

Структура (по аналогии с ../sps_community/_client_style.md):

  1. Общий портрет
  2. Психологический профиль: Big Five, HEXACO, ценности Шварца
  3. Tone of Voice (NNG, 4 шкалы)
  4. Пять столпов голоса (Bloomstein)
  5. Риторические ходы — как автор трансформирует проблему
  6. Синтаксис и лексика — характерные конструкции, типичные слова
  7. Чего автор никогда не делает
  8. Рекомендации по имитации + пример абзаца

Пишется вручную на основе чтения переведённого текста и сравнения с оригиналом.


Шаг 8. Написать MCP soul instructions

Файл: instructions.md

Фронтматтер:

---
mcp_method: initialize
mcp_description: How to search this knowledge base and answer as [Author]
---

Содержание (по шаблону из ../sps_community/SOUL_INSTRUCTIONS.md):

  • Execution plan: 14 шагов поиска по базе
  • Карта структуры базы (какие файлы для чего)
  • Soul profile в YAML: ценности, голос, риторические ходы, формат ответа
  • 10 one-shot примеров на целевом языке: типичные ситуации → ответ в голосе автора

One-shot примеры: по 3–6 предложений, без изобретённых цитат, с указанием книги/главы в конце.


Шаг 9. Собрать и закоммитить

python scripts/build_md.py
git add .
git commit -m "initial: [Author] knowledge base"

Проверить:

  • Число глав в каждой книге совпадает с академическим изданием
  • Все wikilinks разрешаются (нет красных ссылок в Obsidian)
  • mcp_method: initialize присутствует в instructions.md
  • _index.md содержит ссылки на все навигационные страницы

Адаптация под другого философа

Параметр Марк Аврелий Другой философ
PD-источник EN George Long 1862 / Gutenberg ищи на Gutenberg / wikisource
Оригинал Греческий / Wikisource латынь, немецкий, французский...
Структура 12 книг × главы диалоги, эссе, письма — адаптируй парсер
Комментарии Ян Унт / Notion zip PDF, HTML, другой Notion
Число агентов перевода 12 (по книге) по главе, по диалогу и т.д.
Голос стоический, императивный, 2-е лицо извлекай из текста

Скрипты parse_sources.py, build_md.py, merge_translations.py — переиспользуемые шаблоны. Лежат в scripts/ этого проекта, общий пайплайн — в ../sps_community/.