Це нотатки з обговорень, не план релізу. Рішення можуть змінитися; код і схема БД тут не зафіксовані.
Контекст: у поточних наборах (напр. один акт на скані) багато зв’язків імпліцитні: порядок у persons (дитина → батько → мати) і поля father в meta. Це слабко, коли на сторінці кілька записів, кілька дітей, свідки, схожі прізвища.
Що зручно для ШІ (JSON-вивід):
- Кожній знайденій на цьому скані особі дати стабільний рядковий
idу відповіді (на кшталтc1,f1,m1) — не плутати зpersons.idу SQLite. - Не класти граф лише в
metaвипадкової особи; краще окремо на верхньому рівні поруч ізpersons(або підscan.meta— за смаком): масивrelationships(абоedges) з посиланнями на ціid. - Модель «вузли + ребра» — звична для промпта й валідації.
Приклад ідеї JSON:
{
"scan": {},
"persons": [
{ "id": "child1", "surname": "…", "name": "…", "meta": { } },
{ "id": "father1", "surname": "…", "name": "…", "meta": { } }
],
"relationships": [
{ "type": "parent", "child": "child1", "parent": "father1", "role": "father" }
]
}Збереження в БД (на майбутнє): у persons.meta можна тримати scan_person_id, що відповідає id з JSON; окрема таблиця для ребер (from_person_id, to_person_id, scan_id, тип зв’язку) — якщо потрібні запити по графу. Альтернатива — relationships у scans.meta, якщо достатньо сирого виводу без нормалізації.
Поле father у meta: може лишатися для імені з по батькові; канонічні зв’язки батько/мати–дитина — через relationships + id, коли введемо.
- Коди (фіксований набір у
TEXT/ enum / константи в коді): мінімум схеми, зручно в промпті «лише ці значення» (напр.parent_of,spouse,sibling,witness,godparent). - Окрема таблиця-довідник типів: варта уваги, якщо потрібні підписи в БД, локалізація, порядок сорту, історія змін — інакше часто достатньо кодів і поля
role/side(напр.father/mother) де потрібно. - Для екстракції в JSON стабільні англ. коди; гарні назви українською — у UI, не в сирих полях.
Орієнтир на майбутню таблицю ребер: kind TEXT (або kind + role); довідник опційно.
Перше питання: чи може Gemini «сама» пам’ятати контекст між викликами, коли, наприклад, батько на одній сторінці, діти на наступній?
- У стандартному API нема постійної сесії як у чаті: кожен запит — окремо. Щоб зв’язок між сторінками існував, його має передати пайплайн: підсумок попереднього скану, скорочений витяг, або нескорені зображення / діапазон PDF в одному запиті (батч сусідніх сторінок).
- Тотожне формулювання: «щоб модель запам’ятовувала між сканами» = або групувати сусідні сторінки в один виклик, або зберігати стан (чернетка списку, «стан сім’ї») у своїй БД/коді і додавати це в наступний prompt.
- Якщо дати моделі обидві сусідні сторінки разом, вона може узгодити суперечності; якщо лише одна сторінка без сусіда, збільшується ризик «домислити» зв’язок.
Друге питання: скрипт пропускає вже оброблені скани після рестарту (ідемпотентність).
- Це окремий шар: кеш / done / ідентифікування файлу не залежать від моделі.
- Якщо колись з’являться залежності між файлами, треба чітко визначити, що значить «успішно оброблено»: лише ця сторінка чи ще й пара сусідніх / перегляд після наступного файлу. Інакше легше випадково закешувати неповний випадок, коли «продовження» (діти) прийде пізніше на іншому скані.
Коротко: модель не зберігає сам контекст між викликами; лише то, що ви зберігли і підставили в наступний запит, або кілька сторінок в одному запиті. Пропуск уже обробленого при рестарті — корисна властивість, але при крос-сторінкових графах потребуватиме явних правил кешування/повтору.
Можливі напрямки, якщо будемо формалізовувати: «вікно з N сусідніх сторінок», об’єднаний state у JSON після кожного скану, правила повторної обробки, коли з’являється новий сусід.