Путь одного сообщения от клиента до ответа: сборка контекста, вызов функции, смысловой поиск по базе знаний, ограничения по токенам и вызовам. Как это увидеть на своих данных.
За одно сообщение агент проходит пять шагов: собирает контекст (инструкция, история диалога, переменные, фрагменты базы знаний), решает, нужна ли функция, вызывает её, получает результат обратно в контекст и формулирует ответ. Поиск по базе знаний и таблицам работает по порогу схожести, а не по совпадению слов, вызовов одной функции за диалог не больше десяти, и весь этот текст тарифицируется по токенам.
Ответ приходит через две секунды после сообщения клиента, ровно с той скоростью, к которой все уже привыкли. Единственный вопрос, который в этот момент интересен владельцу бизнеса: агент вообще куда-то смотрел, когда отвечал, или сформулировал что-то похожее на правду и отправил.
Ответ на этот вопрос есть, и он не требует веры на слово. Внутри двух секунд происходит конкретная последовательность шагов, и каждый шаг можно посмотреть на собственных диалогах.
Сообщение попадает в подключённый канал — мессенджер, виджет на сайте, CRM или маркетплейс — и с этой точки начинается путь, у которого пять остановок: контекст собирается, модель решает про функцию, функция при необходимости вызывается, результат возвращается в контекст, и уже из всего этого рождается ответ, который уходит обратно в тот же канал. Из чего вообще состоит агент и как он устроен целиком — в статье что такое ИИ-агент; здесь разбираем один ответ по шагам, а не устройство агента заново.
Каждая остановка добавляет к ответу то, чего не было в первоначальном сообщении. Клиент видит только последний шаг — готовую фразу. Всё, что было до неё, определяет, окажется эта фраза точной или похожей на правду.
Прежде чем модель напишет хоть слово, платформа складывает вместе четыре вещи: системную инструкцию агента, историю текущего диалога в объёме, заданном в настройках, переменные (системные, канальные и пользовательские) и фрагменты базы знаний, которые нашлись по смыслу вопроса.
Инструкция здесь главнее остального: при противоречии между ней и базой знаний агент идёт за инструкцией. История диалога — это разговор именно в этом канале с этим человеком, а не вся его переписка с компанией: то, что клиент писал вчера в Telegram, не появится в контексте звонка голосовому агенту, если каналы специально не связаны. Переменные подставляются на лету (имя клиента, номер заказа, текущая дата), и от них зависит, звучит ли ответ как обращение к конкретному человеку или как рассылка.
Проверьте на своих диалогах.Регистрация без карты, 500 ₽ на тест по промокоду BLOG500
Собрать агентаУ каждой функции есть имя и описание, и по ним модель понимает, когда к ней стоит обратиться: посчитать остаток по таблице, найти документ в базе знаний, создать сделку в CRM, отправить вебхук. Это решение принимается заново на каждом сообщении, а не один раз в начале диалога.
Формулировка описания функции здесь важнее, чем кажется. Расплывчатое «работает с заказами» модель может пропустить там, где точное «ищет заказ по номеру телефона в CRM» сработает. Когда вызов обязателен независимо от формулировки вопроса — в инструкции прописывают явную конструкцию вроде call function …, которая принуждает к обращению.
На вызовы функций в одном диалоге действует общий предел — не больше десяти. Ограничение не на сообщение, а на весь диалог целиком, и при превышении он останавливается. До этой границы редко доходят по делу: обычно это симптом того, что функция вызывается вхолостую, без результата, который сдвигает разговор с места.
Здесь важно то же самое различие, что определяет разницу между кнопочным ботом и агентом: поиск идёт по смыслу вопроса, а не по совпадению слов.
Для базы знаний — документов и быстрых ответов — задаются два параметра: Top N, сколько фрагментов вернуть, и порог схожести, насколько близко фрагмент должен подойти к вопросу по смыслу, чтобы попасть в контекст. Для таблиц действует та же логика через VECTOR_SEARCH, где точность поиска — число от 0 до 1.
Соотношение этих параметров задаёт баланс, который приходится настраивать под свой контент. Полный список этих настроек с пояснениями — в руководстве Савви.
| Настройка | Больше совпадений | Точнее совпадения |
|---|---|---|
| Top N | выше | ниже |
| Порог схожести | ниже | выше |
| Риск | случайный фрагмент в ответе | агент ничего не находит |
То же правило действует для таблиц с ценами и остатками: агент не ищет точную строку по ключевому слову, он ищет ближайшую по значению, и порог решает, насколько близкую считать подходящей.
Фрагмент, попавший в контекст, ничего не гарантирует сам по себе: это материал для ответа, и модель может его использовать, а может обойти стороной. Если агент формулирует что-то мимо найденного, обычно дело в инструкции: она не требует опираться именно на найденный текст.
Оплата идёт по токенам (тысяча токенов стоит 1 ₽), и в счёт за один ответ входит весь текст, который прошёл через модель за это сообщение: само сообщение клиента, инструкция, история диалога, описания функций, найденные фрагменты базы знаний и сгенерированный ответ.
Отсюда следует практическая вещь, которую легко упустить: инструкция тарифицируется при каждом ответе заново, а не один раз при создании агента. Длинная инструкция с повторами и лишними пояснениями дорожает умноженной на число диалогов в месяц. То же с историей: чем больше сообщений передаётся в контекст, тем больше токенов уходит на каждый следующий ответ, и за долгий диалог сумма растёт заметно быстрее, чем в начале переписки.
Здесь же прячется вторая причина, по которой агент вдруг начинает путаться в длинных инструкциях: чем больше в контексте текста, не относящегося напрямую к текущему вопросу, тем больше у модели материала, из которого можно выбрать что-то лишнее. Короткая точная инструкция дешевле и устойчивее к сложным диалогам одновременно.
У каждого сообщения агента в менеджере чатов есть иконка с информацией о том, как оно сложилось. В открывшемся окне видно, какая инструкция использовалась и какая история диалога была учтена при генерации именно этого ответа — не текущая версия инструкции в настройках, а та, что реально ушла в модель на этом сообщении.
Вопрос «он вообще куда-то смотрел или просто придумал» здесь перестаёт быть риторическим. Не нужно гадать, посмотрел агент в базу знаний: окно показывает состав контекста напрямую, и видно, откуда взялась конкретная фраза.
Сверьте пять последних диалогов, где агент отвечал быстро и уверенно, через окно формирования ответа — не по памяти, а по факту того, что действительно ушло в модель. В большинстве случаев там обнаружится ровно то, что должно было там быть: инструкция, история и найденный фрагмент базы знаний.
Там, где обнаружится не это, разбор укажет прямо на причину: пробел в базе знаний, который агент дозаполнил похожей фразой, или инструкцию, не требующую опоры на найденный текст. Оба случая чинятся быстрее, чем занимает их найти, а окно с информацией о формировании ответа — единственный способ найти их за пять минут, а не за час чтения переписки подряд.
Сообщение попадает в канал, платформа собирает вокруг него контекст — инструкцию, историю диалога, переменные и найденные фрагменты базы знаний, — модель решает, нужна ли функция, при необходимости вызывает её и результат возвращается в контекст, и только после этого формулируется ответ, который уходит клиенту в тот же канал.
Потому что в контекст попадает история именно этого диалога, а не вся переписка с клиентом на всех площадках. Если человек писал в Telegram, а потом позвонил, для голосового агента это два разных контекста, если каналы не связаны специально.
Не больше десяти. Это общий лимит на диалог, а не на сообщение: при превышении диалог останавливается. На практике до этой границы доходят редко — обычно это признак того, что функция вызывается по кругу без результата.
Поиск идёт по смыслу вопроса, а не по точному совпадению слов: платформа ищет фрагменты текста и строки таблиц, ближайшие к запросу по значению Top N и порогу схожести. Выше порог — точнее совпадения, но выше риск не найти ничего; ниже порог — больше шанс найти, но и больше случайных подборок.
Потому что в токены считается весь текст, который прошёл через модель за один ответ: сообщение клиента, инструкция, история диалога, описания функций, найденные фрагменты базы знаний и сам ответ. Тысяча токенов стоит 1 ₽, и инструкция входит в эту сумму при каждом сообщении, а не один раз при создании агента.
В менеджере чатов у сообщения агента есть иконка с информацией о том, как формировался ответ: какая инструкция использовалась и какая история диалога была учтена. То же самое доступно в экспорте диалога.