Как собрана эта база
Пошаговый план сборки базы знаний по философскому тексту на примере «Размышлений» Марка Аврелия. Повторяемо для любого другого философа с PD-текстом.
Общие скрипты пайплайна лежат в ../sps_community/. Скрипты, специфичные для этой базы — в scripts/.
Шаг 1. Найти источники
Три обязательных источника:
- Английский перевод в общественном достоянии — берём за основу перевода. Для «Размышлений»: George Long, 1862, Project Gutenberg #2680.
- Оригинальный текст — как авторитет. Для Марка: греческий с el.wikisource.org (12 отдельных страниц по книгам).
- Референсный перевод на русском — только для качества сравнения, не для копирования (соблюдать копирайт). Для Марка: Гаврилов (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 файлов комментариев вКомментарии Яна Унта/, переписывает wikilinksscripts/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— порядковый номер для сортировки в magazinemagazine_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):
- Общий портрет
- Психологический профиль: Big Five, HEXACO, ценности Шварца
- Tone of Voice (NNG, 4 шкалы)
- Пять столпов голоса (Bloomstein)
- Риторические ходы — как автор трансформирует проблему
- Синтаксис и лексика — характерные конструкции, типичные слова
- Чего автор никогда не делает
- Рекомендации по имитации + пример абзаца
Пишется вручную на основе чтения переведённого текста и сравнения с оригиналом.
Шаг 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/.