РУКОВОДСТВО · ОБНОВЛЕНО 2026-10-19
Как извлекать даты и часовые пояса с помощью LLM
Как превратить разговорную дату в проверяемое предложение для календаря, не назначив встречу на неверное время.
При извлечении даты из текста передавайте модели опорное время и часовой пояс, сохраняйте исходную фразу и отделяйте распознавание от назначения события. «Завтра в девять» нельзя надёжно превратить в момент времени без даты сообщения и зоны пользователя. Попросите вернуть предложение с признаком неоднозначности, затем проверьте его календарной библиотекой. Только после проверки покажите человеку конкретную дату, время и зону. Если информации недостаточно, полезный результат — вопрос для уточнения, а не выдуманное значение.
1. Задайте контракт результата
Храните исходный текст, дату получения сообщения, предполагаемую локальную дату, локальное время, зону и список неясностей. Разрешите отсутствие значения: если человек написал только «в пятницу», время остаётся неизвестным. Не используйте ноль или текущий момент как скрытую замену отсутствующей информации. Для повторной обработки сохраняйте ту же опорную дату, иначе вчерашнее сообщение при перезапуске получит совершенно другой результат. Привяжите интерпретацию к идентификатору сообщения и версии правил.
2. Уточните правила разговорных выражений
Согласуйте, что означает ближайшая пятница, конец недели или утро в вашем продукте. Эти правила являются договорённостью интерфейса, а не универсальным свойством языка. Фразу «через два дня» и интервал в сорок восемь часов следует различать, когда важна точность. Если известен город, не считайте его безусловным доказательством текущего местонахождения человека. Запросите зону или предложите явно подтвердить выбранный вариант перед созданием напоминания.
3. Проверьте календарь обычным кодом
Модели не поручают окончательную проверку существования даты и переходов времени. Библиотека zoneinfo в Python работает с правилами зон IANA; её документация описывает неоднозначные времена и fold. В приложении предусмотрите отдельную обработку повторяющегося или несуществующего местного времени. Сохраните название зоны, а не только числовое смещение, если событие повторяется. Обновление календарных правил и доступность данных зоны тоже входят в эксплуатацию вашей системы.
4. Подтвердите именно событие
Покажите человеку: дата, локальное время, зона, длительность и повторение. Отдельно укажите, что ещё не определено. Сначала получите подтверждение конкретного предложения, затем создавайте запись с защитой от дублей. В контрольный набор включите сообщение около полуночи, високосную дату, смену года, разные локали записи чисел и исправление пользователем ранее предложенного времени. Успешное извлечение поля не доказывает, что внешняя календарная запись уже создана.
Частые вопросы
Можно ли всегда использовать зону сервера?
Только если это явно принятое правило продукта. Обычно она ничего не говорит о зоне пользователя или месте будущей встречи.
Что делать с 03/04?
Уточнить порядок дня и месяца либо использовать известную локаль. Не скрывайте неоднозначность за формально корректной датой в JSON.
Нужно ли назначать время дате без часов?
Нет. Сохраняйте дату отдельно или создавайте событие на весь день по согласованным правилам. Полночь не должна появляться как незаметная догадка.
Проверяет ли JSON Schema календарную корректность?
Схема помогает контролировать структуру. Существование даты, правила зоны и смысл относительной фразы требуют дополнительных проверок в прикладном коде.