Недавно в X (Твиттер) один пользователь задался вопросом - сколько денег OpenAI потеряла из-за того, что люди говорят своим LLM спасибо и пожалуйста (не дословно). Сэм Альтман ответил на это: "tens of millions of dollars well spent--you never know", что можно перевести как: "десятки миллионов долларов были потрачены не зря, никогда не знаешь (вероятно на чем выиграешь), или другой вариант перевода (поправили в комментариях): "десятки миллионов долларов были потрачены как минимум — а так, кто знает".

Для тех, кто не в курсе как устроена работа LLM (инференс) кратко замечу: когда мы отправляем модели сообщение, вместе с ним модели передается весь предшествующий диалог. Соответственно, завершающее "Спасибо", казалось бы - одно слово, отправляет LLM целый диалог, включающий все предыдущие сообщения пользователя и все ответы LLM. Этот диалог может быть размером с большую обзорную статью, или даже небольшой рассказ. Например, вот длина контекстного окна некоторых моделей OpenAI (в токенах):
GPT-4o: 128 000.
o4-mini: 200 000.
GPT-4.1: 1 047 576 (1млн).
Получается, все это контекстное окно (точнее его максимум, если заполнено) передается модели при любом "Спасибо", "Ок", "До свидания" и тд.
Сложно судить, как здесь происходит на самом деле. В первую голову пришло, что такие простые завершающие сообщения можно обрабатывать отдельно. Делают ли это OpenAI, Antropic и тд не известно.
Я решил провести небольшой поверхностный тест на реальных диалогах. В качестве подопытных выбирал рассуждающие модели, как наиболее ресурсозатратные.
Итоги тестирования
OpenAI o4-mini. При обсуждении моего вопроса она думала по несколько секунд в каждой итерации, но при завершающем "Спасибо" она ответила очень быстро и ответ был шаблонный. Повторил еще раз - так же.
DeepSeek R1. При обсуждении модель много думала. При завершающем "Спасибо" модель... тоже ушла в короткую рефлексию:
Хорошо, пользователь поблагодарил, и мне нужно завершить диалог. Похоже, он удовлетворён ответами. Надо убедиться, что ответы были полными и точными. Возможно, он больше не нуждается в помощи, но стоит предложить дополнительную поддержку на случай, если у него возникнут ещё вопросы.
Нужно ответить вежливо, кратко и предложить помощь в будущем. Например, стандартное "Всегда рад помочь! Если возникнут ещё вопросы — обращайтесь." Это подходящий вариант, так как поддерживает дружелюбный тон и открытость для дальнейшего общения.
Всегда рад помочь! Если возникнут ещё вопросы — обращайтесь.
Вот так вот, бесплатный китайский друг честно отработал в рамках рассуждений.
Claude Sonnet 3.7. В диалоге Клод много думал, детально расписывал ход своих мыслей. На завершающее "Thanks", ответил быстро, немного обдумав:
The user has simply replied with "Thaks" which appears to be a typo for "Thanks". This is a simple acknowledgment that they're satisfied with my previous answer. There's no question to answer or task to perform here.
You're welcome!
Gemini 2.5 Pro. В диалоге модель очень много думала, детально расписывала ход своих мыслей. На завершающее "Спасибо" модель ответила заметно быстрее основного рассуждения, с короткой рефлексией:
The user expressed gratitude. No further action or information is required. A simple acknowledgement is appropriate.
Пожалуйста! Рад был помочь разобраться. Если возникнут еще вопросы - обращайтесь!
Что ж, по-видимому человеческие любезность и эмпатия действительно очень дорого обходятся ИИ-компаниям и обслуживающим их сателлитам (если можно так выразиться).
Отдельно эта проблема для сторонних разработчиков, которые предоставляют своим пользователям прямой или косвенный доступ к LLM. Например, это различные чат-боты, которые работают с LLM через API. Как было сказано выше, при отправке любого сообщения, LLM передается весь предшествующий диалог, любое "Спасибо", "Пока" и тп боту - это оплата всех токенов диалога. То есть, другими словами, "Спасибо" это большие убытки.
Как это можно оптимизировать?
Самый простой вариант - делать предобработку сообщений, и если там односложные предложения без добавленной ценности - обрабатывать их отдельно, например правилами.
Немного более сложный вариант - развернуть промежуточную легкую модель, которая станет оценивать сообщения пользователя, и будет пропускать в основную большую модель только действительно важные сообщения, а на простые сможет отвечать сама.
Модель оценщик также можно "просить" оценивать тональность сообщения пользователя, и отвечать исходя из настроения отправителя. Например, "Спасибо, я все понял" - позитивное простое сообщение, на которое модель может ответить также позитивно: "Пожалуйста, обращайтесь еще, всегда буду рад помочь". Или, сообщение от пользователя "Ты бесполезная железка", тогда ответ LLM-оценщика может быть другим - "Прошу прощения, возможно в следующий раз я смогу помочь". И тд тп. В принципе, здесь может быть достаточно более легких моделей, например BERT или производных, но это уже тема отдельной статьи (возможно позже сделаю).
Поделитесь пожалуйста в комментариях если работали с этим, учитываете ли такие "особенности" LLM и какие решения получилось реализовать. Спасибо за внимание.