Решение · боты и AI-функции
Даты без галлюцинаций: правила отвечают за даты, AI — за смысл
Языковые модели уверенно путают даты: «в пятницу после обеда», «через неделю в это же время». Когда мы отдали всё модели целиком, она совпала с эталоном лишь в 42 фразах из 65. Решение — гибрид: даты разбирает детерминированный парсер на правилах для трёх языков, а модель отвечает только за смысл и формулировку.
Как это выглядит
Макеты на демо-данных, без реальных данных
🗓️Фраза → разбор
| Фраза | Дата (правила) | Смысл (AI) |
|---|---|---|
| «созвон в пятницу после обеда» | пт, 14:00 | Событие |
| «через неделю в это же время» | +7 дн, то же время | Задача |
| «с 14 до 15 завтра встреча» | завтра 14:00–15:00 | Событие |
| «перенеси на час позже» | — | Перенос +1 ч |
Коротко
- В проде
- В боте hey, nooka; тот же подход — в его iOS-версии (в разработке)
- Подходит
- Любым ботам и ассистентам, которые создают задачи и события из живой речи
- Нужно
- Ничего особенного: парсер работает как отдельный сервис
Результат у клиента
42 из 65
фраз модель разобрала верно в одиночку — 64,6%, поэтому даты отданы правилам
128
шаблонов дат на русском, английском и испанском
65
фраз в эталонном корпусе — 100% прохождения как условие выпуска
Совпадение с эталонным корпусом из 65 фраз
Как было
- Модель путает дни недели, «следующую пятницу» и «эту», годы на стыке декабря и января.
- Ошибка в дате незаметна, пока задача не всплывёт не в тот день.
- Промптом это не лечится: модель вероятностная, а дата должна быть точной.
Что построено
Парсер на правилах
Отдельный сервис разбирает даты, диапазоны и время на трёх языках с учётом часового пояса пользователя, сезонов и смены года.
Чёткое разделение
Если парсер нашёл дату — используется она, а даты от модели игнорируются. Модель отвечает за тип сообщения, заголовок и цель переноса.
Эталонный корпус
65 живых фраз с ожидаемым результатом прогоняются перед каждым изменением. Пока не 100% — изменение не выходит.
Стек
- Node.js
- chrono-node
- Регулярные выражения
- Swift (iOS-порт)
- AI-модели через API
Где это работает
Вопросы
Почему бы не улучшить промпт?
Мы пробовали: модель, которой отдали всё, совпала с эталоном в 64,6% фраз. Для дат нужна детерминированность — один и тот же ввод должен давать один и тот же результат.
А если фраза не подходит ни под одно правило?
Тогда используется дата от модели, но это редкий случай: большинство живых фраз покрывается правилами.