Все кейсы

Родословная по рукописным архивам: восемь поколений с помощью ИИ

Семья попросила найти предков, о которых знали только по рассказам. ИИ читал рукописные метрические книги и переписи, в дерево попадало только то, что подтверждено документом. Работа по книгам заняла один день. Итог — восемь поколений по документам до конца XVIII века и дерево, которое принадлежит семье, а не платформе.

Контекст

Заказчик — моя семья. О предках знали по рассказам, по нескольким фотографиям и письмам, а происхождение держалось на одной семейной версии. Задача: найти предков по всем линиям, живых родственников и собрать всё в дерево, которое можно открыть и дополнять.

Всё старше 1920-х — рукописные церковные книги: дореформенная орфография, старый стиль, у каждого писаря свой почерк. Книги оцифрованы, но не проиндексированы, так что запись приходится искать, листая дело скан за сканом. Работа по книгам заняла один день: за это время агент прошёл дела нескольких приходов и поднял линию до конца XVIII века.

Что сделано

Поиск по рукописным книгам с ИИ. Агент открывает дело, сначала читает титул и оглавление по годам, вычисляет смещение «номер скана = лист + k» и идёт сразу к нужному году. Дальше он листает год целиком: рождения, браки, смерти. Найденные записи он переписывает современной орфографией и выписывает зацепки: крёстных, поручителей, сословие, приход. Чтобы доказать, что других детей в семье нет, агент прошёл все рождения прихода за 15 лет подряд и все смерти за 16.

«Полосы» вместо разворотов. Скрипт вырезает из разворота одну колонку — «имена родившихся» или «родители», — и десятки разворотов просматриваются за минуты. Полный скан открывается, только когда в полосе есть совпадение.

Журнал поиска. По каждому делу записано, какие листы смотрели, что нашли и чего нет. Пустые результаты собраны в список «не повторять», чтобы не платить за одно дело дважды.

Дерево на своём сервере. Для заказчика развёрнут Gramps Web — открытое приложение для родословных. Он работает на собственном кластере и ставится Helm-чартом: веб-сервер, фоновые задачи и очередь в одном поде. Из генеалогической платформы деревья перенесены через GEDCOM. Её экспорт оказался битым: 371 кириллическая буква разрезана пополам на границе строк, около 300 переносов без уровня, 19 ссылок на несуществующие фото. Файл починен скриптом до импорта.

ИИ работает с живым деревом. Агент подключён к Gramps Web через MCP-сервер, который запускается локально в контейнере без открытых портов. Подтверждённое он вносит сам: людей, события, источники, заметки. Права ограничены ролью его учётной записи в приложении, а не флагом в конфиге: понизишь роль — запись закрыта, даже если настройку забыли.

Две резервные копии. Каждую ночь снимается точная копия базы через online-backup API SQLite, без остановки приложения; для неё есть скрипт восстановления. Второй CronJob выгружает дерево в Gramps XML и коммитит в закрытый репозиторий. Метка времени экспорта обнуляется, поэтому коммит появляется только при изменениях, а git log -p превращается в журнал правок дерева по дням. Сканы и фото приложение читает из той же папки, которую выгружает экспорт, второй копии нет. Файлы больше 50 МБ в git не попадают и пишутся в лог.

Композиты для карточек. На каждую находку собирается одна картинка: обложка дела, оглавление, лист с записью, стрелка «где запись» и подпись источника. Сборщик сам проверяет, влез ли текст. Одна и та же метрика раньше грузилась в карточку каждого упомянутого в ней человека. Теперь на карточку идёт один композит с отметками людей, а 32 дубля удалены.

Масштаб: 100 человек, 37 семей, 187 событий. Восемь поколений подтверждены документами, девятое — по справочнику. Около 12 крупных гипотез: 3–4 подтверждены документами, 6–7 опровергнуты.

Как это выглядит

Запись из метрической книги и её расшифровка: ИИ прочитал почерк и сверил расшифровку со сканом. Скан размыт, имена и места скрыты
Запись из метрической книги и её расшифровка: ИИ прочитал почерк и сверил расшифровку со сканом. Скан размыт, имена и места скрыты, мобильная версия
Запись из метрической книги и её расшифровка: ИИ прочитал почерк и сверил расшифровку со сканом. Скан размыт, имена и места скрыты
Дерево в цифрах и одна линия вверх: у каждого звена — документ или пометка «не подтверждено». Живые поколения скрыты
Дерево в цифрах и одна линия вверх: у каждого звена — документ или пометка «не подтверждено». Живые поколения скрыты, мобильная версия
Дерево в цифрах и одна линия вверх: у каждого звена — документ или пометка «не подтверждено». Живые поколения скрыты

Почему так, а не иначе

Сначала ИИ ищет, потом документ решает. ИИ быстро находит кандидатов, но умеет уверенно ошибаться. В первой сессии он назвал кандидата в прадеды «почти наверняка» и построил на этом цепочку поколений. После этого появился отдельный документ «Гипотезы и факты», где всё разделено на «подтверждено документом», «со слов семьи» и «гипотеза», и правило: звено попадает в дерево только со ссылкой на скан. У звеньев без прямого документа стоит процент уверенности и название документа, который их закроет. Цена — часть веток открыта, пока не пришёл нужный документ.

Один день по книгам вместо перебора баз. Сначала поиск шёл туда, куда вела семейная легенда о происхождении, и перебрал десятки баз без результата. Когда агент перешёл к сплошному просмотру метрик, за один день нашлась запись о крещении в книге уездного города, и линия поднялась до конца XVIII века. Та же книга объяснила, почему «дальняя» родственница оказалась родной сестрой прадеда. Вывод для метода: человек листал бы такие книги неделями, а ИИ читает их сплошь за день — поэтому сплошной просмотр первоисточника выгоднее поиска по индексам.

Дерево у семьи, а не у платформы. На платформе удобно искать совпадения с чужими деревьями, но там суточный лимит просмотров, после массового перебора — блокировка на сутки, кончается место под фото, а выгрузка битая. Главная копия теперь своя, платформа осталась местом для совпадений. Цена — сервер и резервные копии теперь на мне.

XML в git, а не только дампы. Дамп привязан к версии приложения и нечитаем в диффе. XML открывается любой версией Gramps, а каждая правка видна строкой. Цена — историю git не почистить, а в дереве живые люди, поэтому репозиторий закрыт навсегда.

Как устроен сам поиск и где ИИ ошибается — в заметке «Поиск предков по рукописным книгам». Второе дерево, до 1715 года, — отдельным кейсом: «Родословная до XVIII века по исповедным росписям».

Другие кейсы

Кейсы и личные проекты