Технічна демонстрація · Як ШІ читає час
Повний огляд детермінованих підказок дат, маршрутизованого витягу LLM, юридичних строків, живих оновлень SSE та експорту DOCX/ICS.
Архітектура
Хронологія спочатку збирає детерміновані підказки дат, надсилає документ через один маршрутизований структурований потік витягу, а потім PHP фільтрує, оцінює, обчислює строки та готує експорт.
Перед будь-яким викликом моделі PHP сканує весь вхід на дати, що відповідають 12+ норвезьким форматам, і за можливості нормалізує їх до ISO 8601:
dd.mm.yyyy → YYYY-MM-DDНормалізовані якорі додаються до prompt для витягу, щоб зменшити вигадані або неправильно прочитані дати. Це підказки, а не окремий результат AI.
Вибраний маршрут читає документ разом із підказками дат. Для кожного часового посилання він повертає структурований JSON-об’єкт події з полями строків:
date — resolved ISO date, or verbatim string if unresolvabledate_type — absolute | relative | recurring | conditional | periodconfidence — high | medium | lowactor — attributed entity (from source text, not inferred)description — one-sentence event summarysource_excerpt — verbatim text fragment (max 200 chars)is_deadline / deadline_kind — явні маркери юридичних строків, коли вони єPrompt прямо наказує моделі не вигадувати дати чи учасників, яких немає в джерелі. Довгі вхідні тексти діляться на частини на сервері й об’єднуються назад у ту саму схему.
PHP застосовує активні фільтри та похідну логіку строків перед поверненням результату:
Постобробник також будує deadlines[], список what_remains_uncertain і рекомендацію next_practical_step.
Визнання дати
Норвезькі юридичні документи використовують багато позначень дат. Хронологія розпізнає їх детерміновано до того, як модель побачить текст, а потім просить модель розвʼязати решту контекстних посилань.
| Формат | Приклад | Примітки |
|---|---|---|
dd.mm.yyyy |
30.07.2015 | Стандартний норвезький числовий |
dd.mm.yy |
09.04.25 | Дворічний рік → завжди 20YY |
d. månedsnavn yyyy |
3. mars 2024 | Написаний місяць у bokmål/nynorsk |
d. månedsnavn |
15. januar | Рік, виведений шляхом сканування близькості |
yyyy-mm-dd |
2024-03-12 | ISO 8601 |
månedsnavn yyyy |
mars 2024 | Тільки місяць + рік |
yyyy |
2024 | Посилання тільки на рік |
| Season + year | høsten 2023 | Сезонне посилання → Q3/Q4 |
| Diary-format line | 18.09.2025: Møte avholdt | Дата + двокрапка → автоматично позначена як подія |
| Relative reference | tre uker etter vedtaket | Закріплена за найближчою вирішеною подією |
| Recurring pattern | hver mandag | Класифікована як повторювана |
| Period / range | fra mars til juni 2024 | Видає start_date + end_date |
Схема класифікації
| date_type | Визначення | Приклад |
|---|---|---|
absolute |
Конкретна, вирішувана календарна дата | 30.07.2015 → 2015-07-30 |
relative |
Дата, виражена відносно іншої події | tre uker etter vedtaket |
recurring |
Шаблон, що повторюється за розкладом | each Monday, every 6 months |
conditional |
Дата, що залежить від виконання умови | if no response within 14 days |
period |
Діапазон дат або тривалість з початком і закінченням | fra mars til juni 2024 |
| впевненість | Значення | Візуалізація в хронології |
|---|---|---|
high |
Дата чітко і однозначно вказана в вихідному тексті | Зелений значок |
medium |
Дата виведена, приблизна або вказана з невеликою неоднозначністю | Помаранчевий значок |
low |
Дата має на увазі, без дати або витягнута з зіпсованого/неоднозначного уривка | Сірий значок |
| Правило | Приклад |
|---|---|
| Названа сутність в одному реченні | “Trude [saksbehandler] ringte 14. mars” → actor: Trude |
| Мітка ролі без імені | “Barnevernet fattet vedtak” → actor: Barnevernet |
| Немає чіткої атрибуції в реченні | actor: [unattributed] |
| За замовчуванням на рівні документа | Якщо немає актора для кожної події, за замовчуванням використовується відправник/видавець документа |
Двигуни
Швидкий, Стандартний і Глибокий маршрути повертають ту саму JSON-схему, тому постобробка працює однаково. Вибір маршруту впливає лише на швидкість, якість, вартість кредитів і звітність про fallback.
| Модельний маршрут | Модель | Затримка | Найкраще для |
|---|---|---|---|
| Швидкий | nova-lite (власний GPU через LiteLLM) |
~10-25 s | Швидкі чернетки та коротші документи, де найважливіша швидкість. |
| Стандартний ★ | Claude Haiku 4.5 (Amazon Bedrock EU; gpt-4o-mini лише якщо Bedrock вимкнено) |
~20-45 s | Типовий маршрут для більшості юридичних документів; баланс швидкості, якості та вартості. |
| Глибокий | Claude Sonnet 4.6 (Amazon Bedrock EU) |
~45-90 s | Щільні або складні справи з багатьма учасниками, перетином подій або слабкою якістю джерела. |
Живі оновлення та експорт
Хронологія використовує Server-Sent Events (SSE), щоб передавати повідомлення про стан у браузер під час витягу: підготовка, витяг, parsing і фінальне складання.
Після завершення витягу можна експортувати відформатований .docx з позначеними подіями та фрагментами джерел або завантажити .ics-календар для датованих подій і строків.
Конфіденційність та безпека
Конфіденційність за дизайном
nova-lite через LiteLLM; Стандартний і Глибокий використовують Amazon Bedrock EU, коли він увімкнений, із наявним маршрутизованим хмарним fallback, якщо Bedrock вимкнено.Доступно для членів Do Better Norge із прозорою маршрутизацією, оцінками кредитів і process-and-forget обробкою.