«Спасибо». Пожалуйста, с нас миллион $

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

Спасибо на миллион
Спасибо на миллион

Ссылка в X.

Для тех, кто не в курсе как устроена работа 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 и какие решения получилось реализовать. Спасибо за внимание.

PS

Недавно я запустил Tg-канал, куда планирую писать вокруг LLM, RAG, Agents и опыте внедрения различных нейросетей в прикладных задачах. Писать планирую не часто, только реальные опыты и интересные, на мой взгляд, вещи.