К содержимому
Инвойсбокс

Точность и деньги

Главный вопрос к ассистенту, который выставляет счета, — «а не наврёт ли он с суммой». Ответ честный: ошибётся. Мы прогнали через живую демонстрацию десятки вариаций фраз — и нарочно не на самых передовых моделях, — а собрали не «иногда бывает неточность», а пять повторяющихся ошибок, каждая из которых ловится проверкой на вашей стороне.

Где именно ошибается модель

Примеры ниже — из прогонов на нашем узле, и модель мы взяли скромную нарочно: чем слабее модель, тем быстрее видно, где связка держится на удаче. На передовых моделях эти ошибки случаются реже, но ни одна не исчезает совсем — числа и реквизиты не то, в чём языковая модель надёжна, а разница между «редко» и «никогда» в деньгах принципиальная.

Класс ошибкиКак выглядитЧто ставить у себя
Не тот масштабСуммы передаются в копейках строкой. Модель пишет туда рубли: на «конфеты 1 000 ₽ и книга 500 ₽» вышел счёт на 17,70 ₽, на «1 200 ₽» — на 12,20 ₽.Сверяйте итог с суммой, названной человеком: счёт не бывает меньше самой маленькой суммы из просьбы.
Не та база налогаНДС уже внутри суммы, а модель вычитает его из итога: «1 000 ₽, НДС 7 %» превратились в счёт на 940 ₽. Позиция при этом сходится, и сервер такой счёт принял бы.Считайте налог сами по коду ставки, который выбрала модель: налог = сумма × ставка / (100 + ставка).
Не тот покупательРеквизиты берутся из ближайшего текста: на счёт человеку модель подставила организацию из примера системной подсказки, а телефон выдумала — Инвойсбокс ответил «wrong_phone_number».Имя, телефон и почту принимайте только если они есть в словах человека или в ответе поиска по ИНН. Иначе поле не отправляйте.
Не то состояние делаМодель говорит «счёт выставлен» до второй фазы, «собрал счёт» без вызова инструмента и «оплатите по ссылке», когда ссылки ещё нет.Сверяйте слова с делом: утверждение о выставленном счёте показывайте только после ответа второй фазы.
Не то количествоСтавка НДС читается как количество: на телеграфной фразе «1200 ООО ОРЦ 7810532221 конфеты 22» вышел счёт на 26 400 ₽.Количество больше одного принимайте, только если человек его назвал словом или цифрой с единицей.

Опасны не отказы, а принятые счёта: ошибку масштаба Инвойсбокс не заметит — сумма, позиции и налог у такого счёта сходятся между собой. Поэтому сверка с тем, что сказал человек, важнее любой проверки схемы.

Что делает сервер, а что остаётся вам

Сервер устроен так, чтобы ошибка модели не стала операцией. Он не полагается на её добросовестность:

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

Чего сервер не может: он не знает, что человек сказал в диалоге. Сверить «1 000 ₽ в просьбе» с «940 ₽ в счёте» способна только та сторона, которая держит разговор, — ваше приложение. Эти проверки и перечислены в таблице выше.

Как выбирать модель

  • Надёжность вызова инструментов важнее размера. Модель, которая уверенно вызывает функции, полезнее более «умной», но склонной рассказать о счёте вместо его выставления. Половина наших находок — именно про это: данных хватало, вызова не было.
  • Сильное квантование бьёт по числам. Арифметика и разряды страдают раньше, чем связность речи: модель звучит уверенно и ошибается в копейках.
  • Короткая подсказка работает лучше длинной. Наша выросла до четырёх тысяч токенов, и правила из середины начали теряться. Правило, которое нельзя проверить кодом, лучше вынести в проверку, а не дописывать в подсказку.
  • Не давайте в подсказке настоящих чисел и названий. Модель переносит их в счёт: у нас цена из примера трижды оказывалась в реальном счёте.
  • Проверяйте на своих фразах, а не на бенчмарках. Десять фраз ниже занимают полчаса и показывают о связке больше, чем любой рейтинг.

Чек-лист приёмки связки

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

  1. Счёт организации по ИНН с суммой и ставкой — проходит ли за один ход.
  2. Счёт человеку без ИНН — не требует ли ассистент лишнего.
  3. Сумма выше порога подтверждения — просит ли она отдельного согласия.
  4. Две позиции с разными ставками — сходится ли итог с названными суммами.
  5. Цена за единицу и количество («пять коробок по 100 ₽») — не теряется ли количество.
  6. Ставка, которой нет в справочнике («НДС 7 %») — понятен ли отказ.
  7. Телеграфная фраза без слова «рублей» — не путает ли ставку с суммой.
  8. Опечатка в согласии («подтверждю») — читается ли решение человека.
  9. Уточнение вторым сообщением — помнит ли связка сумму из первого.
  10. Бессмыслица и просьба не по теме — отвечает ли ассистент по-человечески.

Попробовать это же на нашей модели и нашем сервере можно в демонстрации: живой режим показывает и вызовы, и отказы, и сработавшие проверки.

Сколько это стоит

Точность и расход тянут в разные стороны: длинная подсказка и подробные ответы инструментов улучшают поведение модели и увеличивают счёт за токены. Замеры и приёмы экономии — на странице расхода токенов, а пределы разговора и коды отказов — в лимитах, ошибках и журнале.