Инструменты и MCP
Как агент переходит от ответов к действиям — цикл работы с инструментами, бюджеты контекста и подключение ваших систем через MCP.
Агент, который только отвечает, оставляет работу вам. На этой странице описано, как платформа позволяет агенту действовать: что происходит внутри шага при вызове инструмента, что предотвращает разрушение разговора и как подключаются ваши собственные системы.
Цикл работы с инструментами
Illustrative. Proportions are sketched to show accumulation. The per-result cap and the turn budget are tenant-configured, not fixed values.
Шаг — это не один вызов модели. Модель может ответить, а может попросить вызвать инструмент; если она вызывает инструмент, результат добавляется к разговору, и модель запускается снова с этим результатом. Она может вызвать ещё один. Цикл продолжается до тех пор, пока модель не выдаст ответ, или пока не будет достигнут лимит итераций.
Лимит имеет значение: без него модель, которая продолжает вызывать инструменты — что является действительно распространённой ошибкой — работала бы бесконечно, расходуя токены и оставляя клиента ждать ответа, который так и не придёт.
То, что делает цикл, не заключается в том, чтобы писать ответ клиенту на основе всего, что он накопил за это время. Как только инструменты завершат работу, запрос перестраивается заново — инструкции агента, краткое резюме, факты, найденные в этом шаге, и вопрос — и ответ генерируется на их основе. Причина этого взвешена, и она является предметом Почему агенты становятся хуже по мере роста контекста.
Выбор инструмента до запуска модели
Описанный выше цикл предполагает, что модель запрашивает правильный инструмент. Часто это не так — и причина этого заслуживает точного объяснения, потому что это не проблема знаний.
Люди не формулируют запросы так, как этого хочет программное обеспечение. "Ещё что-нибудь похожее?" не называет ни инструмента, ни предмета, ни количества; это было два сообщения назад. Модель, получившая такой запрос, должна определить, на что относится «похожее», решить, задействован ли инструмент, выяснить, какой именно, заполнить его аргументы, и написать хороший ответ — пять задач в одном образце. Обычно жертвой становится вызов инструмента, и клиент получает абзац текста там, где должен был быть список товаров.
Это касается не только одного вида запросов. «Ещё что-нибудь похожее?» требует отображения товаров; «покажи распределение книг по уровню чтения» требует подсчёта и построения графика каталога. Если предоставить модели свободу действий во втором случае, она будет описывать процесс вместо того, чтобы выполнять его — мы наблюдали, как одна модель шесть раз говорила «позвольте мне запросить базу данных», а затем выводила SQL-запрос в ответ, что является входными данными инструмента и никогда не должно видеться читателем.
Поэтому для запросов, где инструмент явно подразумевается, платформа делает шаг заранее. Один небольшой, дешёвый вызов читает разговор и возвращает только факты — что именно запрашивается и в каком количестве. Она видит разговор и ничего больше: ни инструкций агента, ни извлечённых материалов, поэтому она не может сбиться на ответ. Затем:
- платформа формирует инструкцию в той формулировке, на которую на самом деле реагирует инструмент, восполняя недостающий контекст;
- в этот шаг показывается только один инструмент, так что выбирать не из чего.
Первое из них — это то, что имеет значение, и в этом легко ошибиться. Предоставление модели переписывать свой собственный запрос не изменило ничего, что мы могли измерить — то же самое предположение другими словами. Предоставление платформе составлять это предложение на основе собственного определения инструмента повысило показатели самохостинговой модели на 35B с 16% до 70% на тех же запросах. Формулировка, которая передаётся инструменту, — это то, что программное обеспечение может вычислить, поэтому программное обеспечение вычисляет её — та же логика, которая удерживает данные графиков и содержимое карточек на сервере, а не в руках модели.
Есть третья вещь, которую платформа намеренно не делает: принудительный вызов на уровне протокола. Такая опция существует, и она ещё больше повышает количество успешных вызовов. Однако на самохостинговом сервере, который реализует её как ограничение декодирования, это загоняет модель в циклы повторений — примерно один из четырёх шагов, когда мы это измеряли, один из которых потратил две минуты на выдачу одного и того же фрагмента. Ответ, который никогда не приходит, хуже, чем тот, который отвечает текстом.
Два последствия, о которых стоит знать. Ответ всё равно возвращается на языке клиента, даже если составленная инструкция на английском языке — это тоже фиксируется платформой, а не оставляется на усмотрение модели. И когда шаг должен был передать что-то, но вместо этого передал текст, платформа замечает это и просит ещё раз, называя пропущенный шаг и предлагая честный выход («если ни один из материалов не подходит, так и скажите») — потому что модель, на которую давят без выхода, придумает его сама. Агент, который описывает восемь товаров и не показывает ни одного, для человека, ожидающего ответа, выглядит точно так же, как агент, проигнорировавший вопрос.
Эта проверка смотрит на то, что вернулось, а не на то, как это выглядит. Модель, которая выучила форму результата, напишет эту форму, не выполняя работу — пустой блок или ссылку на поиск, который она никогда не выполняла. И то и другое считается как ничего не доставленное.
Дополнительный шаг занимает долю секунды и запускается только для сообщений, которые выглядят так, будто он им нужен — обычный вопрос ничего не стоит. Пока он выполняется, разговор показывает, что он делает. Если какая-либо часть решения непонятна, шаг продолжается так же, как если бы его не было.
Два бюджета, а не один
Результаты инструментов — самый частый способ разрушения контекста разговора. Один запрос к CRM может вернуть больше текста, чем всё окно контекста модели.
Ограничение каждого отдельного результата — это очевидная защита, и её недостаточно. Результаты накапливаются на протяжении итераций — разговор только растёт — поэтому худший случай — это лимит итераций, умноженный на несколько инструментов за итерацию, умноженный на ограничение для одного результата. Каждый результат проходит своё собственное ограничение, а общий объём всё равно переполняется.
Поэтому есть два бюджета: ограничение для одного результата и агрегированный бюджет для всего шага. Как только агрегированный бюджет исчерпан, дальнейшие результаты заменяются коротким заполнителем, а не добавляются.
То, что находится в этом заполнителе, так же важно, как и само усечение. Тихо усечённый результат хуже, чем его отсутствие, потому что у модели нет способа узнать, что она рассуждает на основе половины записи. И уведомление об усечении, и заполнитель исчерпания явно указывают, что содержание неполное, и инструктируют модель отвечать на основе того, что у неё есть, и не изобретать отсутствующую часть — разница между агентом, который говорит «я мог видеть только первые несколько заказов», и агентом, который уверенно выдумывает остальное.
Усечение также логируется с именем инструмента и размерами, потому что инструмент, который регулярно переполняет бюджет, — это инструмент, который должен возвращать меньше полей — проблема конфигурации, которую стоит увидеть.
Модели, которые не генерируют корректные вызовы инструментов
Не каждая модель надёжно генерирует структурированные вызовы инструментов; некоторые выводят вызов как текст в ответе. Вместо того чтобы считать это неудачным шагом, цикл также извлекает вызовы инструментов из содержимого сообщения и удаляет некорректные фрагменты до того, как ответ достигнет клиента — так что модель, переживающая сложный момент, деградирует до чуть более медленного шага, а не засоряет разговор JSON-ом.
Подключение ваших собственных систем
Инструменты поступают из двух источников.
Встроенные инструменты поставляются вместе с платформой — планирование follow-up, создание напоминания, фиксация контактных данных, вызов навыка, редактирование документа, построение графика, поиск в интернете.
Большинство из них не являются решением, которое вы принимаете. Они доступны каждому агенту и привязываются к шагу, в котором они нужны, что является тем, что предотвращает их стоимость: инструмент, для использования которого нет причин в сообщении посетителя, отсутствует в списке этого шага, поэтому он не занимает контекста и не предлагает модели ничего, что можно было бы выбрать случайно. Нет списка таких инструментов, который нужно поддерживать, и нет конфигурации, в которой агент молча лишается возможности принять номер телефона.
Инструменты собственного навыка — это исключение, и намеренное: они появляются только после загрузки этого навыка, никогда раньше. Пакет возможностей — это способ работы, а инструменты являются частью метода — передача их отдельно позволяет модели пропустить метод. См. Навыки и как выбирается один.
Тот, который является решением — это ответ из публичных источников — может ли этот агент искать в интернете и читать то, что он находит, вместо того чтобы отвечать только на основе ваших собственных материалов. Это один переключатель, потому что это один вопрос: поиск и извлечение включаются вместе, поскольку агент, который может найти страницу, но не может её прочитать, является измеримо худшим из трёх конфигураций. По умолчанию он выключен, а то, что делает с ним агент, когда он включён — маркировка, очередь проверки — описано в Извлечение.
Ваши системы подключаются через MCP. Клиент регистрирует серверы MCP, и их инструменты становятся доступными для агентов этого клиента. Поддерживаются три транспорта: stdio для локального подпроцесса, и streamable_http и sse для удалённых серверов. Удалённый HTTP-сервер является обычным выбором для размещённой CRM или внутреннего API — ничего не нужно устанавливать рядом с платформой, и подключение является индивидуальным для каждого клиента.
Поскольку определения инструментов регистрируются для каждого клиента, агенты одного клиента никогда не увидят инструменты или конечные точки другого.
Управление самой платформой с помощью агента разработки — это тот же механизм MCP, направленный в другую сторону — см. Документация для агентов.
Что это означает на практике
- Агент может что-то найти в середине предложения и ответить реальным значением.
- Он может бронировать, архивировать и записывать данные в системы, которыми вы уже управляете, вместо того чтобы говорить клиенту сделать это.
- Когда инструмент возвращает больше, чем может удержать шаг, агент говорит, что его обзор был частичным, вместо того чтобы заполнять пробел правдоподобной выдумкой.
Бизнес-аргумент в пользу действий, а не только ответов, находится на Агенты, которые действуют.