3,583 papers
arXiv:2607.03953 77 4 июля 2026 г. FREE

NLT (Natural Language Tools): замени JSON-вызовы инструментов на список YES/NO — и модель ошибается в 15 раз реже

КЛЮЧЕВАЯ СУТЬ
Обнаружено: когда модель выбирает инструмент через JSON, она одновременно решает задачу и соблюдает синтаксис — два несовместимых режима работы в одном шаге. Рассуждение страдает, точность падает. NLT позволяет строить агентов, которые выбирают нужные инструменты точнее — без дообучения и без JSON-схем. Фишка: замени структурированный вызов на список с YES/NO на обычном языке — модель остаётся в одном режиме и перестаёт тратить ресурс на форматирование кода. Результат: в 15 раз меньше критических сбоев и +15% точности из одного изменения в промпте.
Адаптировать под запрос

TL;DR

NLT — это замена структурированного формата выбора инструментов (JSON-схемы) на простой список с ответами YES/NO на естественном языке. Вместо того чтобы модель выводила {"tool": "check_availability"}, ей дают список вариантов — она просто помечает каждый: нужен или нет.

Когда модель вынуждена выбирать инструмент через JSON, она одновременно решает две несовместимые задачи: думает о сути запроса и форматирует структурированный вывод. Это как параллельно решать логическую задачу и диктовать текст по правилам синтаксиса — внимание раздваивается, и страдает именно смысловая часть. У языковых моделей JSON-паттерны «живут» в зоне кода, а рассуждение о задаче — в зоне языка. Совмещение двух зон снижает точность.

NLT оставляет модель в одной зоне — языковой. Список YES/NO — это не структура данных, это текст. Модель думает и отвечает в одном режиме, без переключения. Результат: на 15% точнее и в 15 раз меньше критических сбоев.


🔬

Схема метода

Все шаги — в одном промпте:

ШАГ 1: Роль + контекст → кто агент, что за диалог, задача
ШАГ 2: Список инструментов → каждый в формате "[Инструмент] – YES/NO"
ШАГ 3: Модель заполняет список → YES для нужных, NO для ненужных
ШАГ 4: Завершающая фраза → "Оценка завершена."

🚀

Пример применения

Задача: Ты строишь ассистента для менеджера по продажам в SberCRM. Клиент написал: "Хочу понять, стоит ли продлевать подписку на ваш пакет Pro". Ассистент должен автоматически решить, какую информацию о клиенте поднять перед ответом.

Промпт:

Ты — помощник Алексея, менеджера по работе с клиентами в B2B SaaS-компании. 
Тебе дана переписка между Алексеем и клиентом.

Сообщение клиента:
"Хочу понять, стоит ли продлевать подписку на ваш пакет Pro."

Твоя задача — определить, какие данные о клиенте нужны Алексею 
для подготовки к ответу. Отметь каждый пункт:

Размышление: (вставь свои мысли)
История платежей и подписки – YES/NO
Активность использования продукта за последние 30 дней – YES/NO
Открытые обращения в поддержку – YES/NO
Информация о тарифных планах и скидках – YES/NO  
Данные о продлении у похожих клиентов – YES/NO
Контакты ответственного за аккаунт – YES/NO
Передать разговор старшему менеджеру – YES/NO

Оценка завершена.

Результат: Модель покажет краткое рассуждение в блоке "Размышление", затем выдаст список с YES/NO для каждого пункта. YES получат только релевантные источники — в этом случае, скорее всего, история платежей, активность и тарифы. Вывод чистый, без лишнего текста, без JSON-синтаксиса.


🧠

Почему это работает

LLM плохо делает два дела одновременно. JSON — это синтаксис из мира кода: скобки, кавычки, точные имена ключей. Рассуждение о задаче — это совсем другой паттерн. Когда модель должна одновременно рассуждать и форматировать вывод по схеме, внимание делится. Страдает то, ради чего всё затевалось — точный выбор нужного инструмента.

Модель хорошо работает в своей стихии. YES/NO — это язык, не код. Список инструментов на обычном языке — это тоже язык. Когда весь промпт и весь вывод находятся в одной «зоне» — языковой — модель не переключается и не тратит ресурс на соблюдение синтаксиса.

Рычаги управления:

  • Количество инструментов в списке → больше вариантов = чуть сложнее задача, но всё равно лучше JSON
  • Блок "Размышление" → если убрать, получишь чистый список без объяснений; если оставить — видишь логику выбора
  • Завершающая фраза ("Оценка завершена.") → служит стоп-сигналом и снижает дополнительный текст после списка
  • Формулировки инструментов → чем точнее и конкретнее название, тем точнее выбор

📋

Шаблон промпта

Ты — помощник {имя_агента}, {роль и контекст агента}.
Тебе дан диалог между {агентом} и {пользователем}.

{Содержание диалога или сообщения пользователя}

Твоя задача — определить, какие из следующих {ресурсов / инструментов / 
источников} нужны для работы с этим запросом.

Размышление: (вставь свои мысли)
{Инструмент 1} – YES/NO
{Инструмент 2} – YES/NO
{Инструмент 3} – YES/NO
{Инструмент 4} – YES/NO
{Инструмент 5} – YES/NO

Оценка завершена.

Что подставлять: - {имя_агента} — имя роли: "Алексей", "Саша", "Служба поддержки" - {роль и контекст} — чем занимается агент и в каком контексте - {диалог} — сообщение или переписка, по которой нужно принять решение - {Инструмент N} — конкретные источники данных, базы знаний, действия или шаги


🚀 Быстрый старт — вставь в чат:

Вот шаблон NLT — метода выбора инструментов через естественный язык. 
Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

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


⚠️

Ограничения

⚠️ Новейшие топовые модели: Gemini 2.5 Pro показал обратный результат — структурированный вызов точнее на 34%. GPT-5 показал паритет. Эти модели специально обучены на структурированном выводе — преимущество NLT у них минимально или отсутствует.

⚠️ Только выбор инструментов, не выполнение: NLT решает задачу маршрутизации — что нужно использовать. Что делать с выбранными инструментами дальше — отдельная история.

⚠️ Нет параметров: Метод тестировался на выборе без передачи параметров ("открыть историю покупок", а не "открыть историю покупок за период 2024-01-01 – 2024-06-30"). Для сложных вызовов с параметрами — отдельное исследование.


🔍

Как исследовали

Идея была простой: взять оригинальное исследование Johnson et al. (2025), которое показало +18.4pp в пользу NLT, и проверить независимо — на новых моделях, другим кодом. Исследователи написали собственный Python-фреймворк с нуля и прогнали 8 560 испытаний на 14 моделях — от маленьких (Mistral 7B, Llama 3.1 8B) до топовых (GPT-5, Claude Sonnet 4, Gemini 2.5 Pro).

Каждой модели давали один и тот же диалог дважды: в одном случае — NLT (список YES/NO), в другом — стандартный структурированный вызов через JSON-схему. Задача — правильно выбрать нужные инструменты. Оценка жёсткая: точное совпадение с эталоном, никакого частичного зачёта.

Самый неожиданный результат — Claude Sonnet 4: frontier-модель, которую ждёшь на уровне 80%+, выдала лишь 18.8% на структурированном формате и 61.9% на NLT. Это +43pp — самый большой разрыв в исследовании. Причина, скорее всего, в том, что конкретный API-путь для function calling у Claude оказался слабо оптимизирован. Mistral 7B вообще полностью сломался на JSON: 320 ошибок из 320 попыток, 0% точности — и при этом 39% с NLT. Вывод прямой: структурированный вывод — хрупкая зависимость. Reasoning-модели (DeepSeek-R1) получили +24pp с NLT — потому что цепочка рассуждений и JSON-форматирование буквально мешают друг другу, а в NLT рассуждение можно вынести в блок "Размышление" без конфликта.


📄

Оригинал из исследования

You are an assistant to Alex, an AI customer service agent who handles bookings 
for a music venue called "Yes! Music". You will be given a message between Alex 
and a customer. They are texting one another.
Your mission is to identify if any of the following topics have been brought up...

Thinking: (insert_thinking)
Recap of previous conversation – YES/NO
Website information – YES/NO
Recent social media posts – YES/NO
Available discounts – YES/NO
List of upcoming events – YES/NO
Past Purchases – YES/NO
Talk to a Human – YES/NO
Assessment finished.

Контекст: Это точный промпт из исследования для агента "Alex" — менеджера по билетам музыкального зала. Модель получает диалог с клиентом и должна выбрать, какие источники данных открыть. YES/NO — вся структура вывода.


💡

Адаптации и экстраполяции

💡 Адаптация для контент-команд: тот же принцип работает для роутинга задач внутри контент-процесса.

Ты — редактор Маша, главред телеграм-канала об инвестициях. 
Тебе прислали идею для поста: "{идея}".

Определи, что нужно для подготовки материала:

Размышление: (вставь свои мысли)
Проверить актуальные данные / цифры – YES/NO
Найти мнение эксперта или цитату – YES/NO
Добавить исторический контекст – YES/NO
Проверить юридические/регуляторные ограничения – YES/NO
Сравнить с предыдущими постами на эту тему – YES/NO
Запросить правку у юриста перед публикацией – YES/NO

Оценка завершена.

🔧 Техника: убрать блок "Размышление" → чище, быстрее

Если тебе нужен только список без объяснений — убери строку Размышление: (вставь свои мысли). Получишь чистый чеклист напрямую. Оставь "Размышление" — и увидишь логику, по которой модель сделала выбор. Полезно при отладке промпта.


🔧 Техника: именованная роль → точнее выполнение

Вместо безликого "Ты — помощник агента" дай конкретное имя и характер:

Ты — Полина, ведущий специалист по удержанию клиентов в Тинькофф.
Полина педантична: она никогда не открывает лишних вкладок.

Конкретный персонаж с характером даёт модели более чёткий ориентир — и список YES/NO становится строже.


🔗

Ресурсы

Основная работа: The Remarkable Effectiveness of Providing AI Agents with Natural Language Tools: A Replication Study Validating NLT Performance Across 14 Models — A. Somma, I. Plante, F. Premji, Sage.is AI-UI, July 2025

Оригинальное исследование: Johnson et al. (2025) — первая публикация NLT-фреймворка (+18.4pp, 10 моделей, 6 400 испытаний)

GitHub: github.com/Sage-is/NLT-Replication-Study

Связанные работы: ToolFlow (Chen et al., 2025), CallNavi (Zhang et al., 2025), Martinez (2025) по RL-оптимизации tool use


📋 Дайджест исследования

Ключевая суть

Обнаружено: когда модель выбирает инструмент через JSON, она одновременно решает задачу и соблюдает синтаксис — два несовместимых режима работы в одном шаге. Рассуждение страдает, точность падает. NLT позволяет строить агентов, которые выбирают нужные инструменты точнее — без дообучения и без JSON-схем. Фишка: замени структурированный вызов на список с YES/NO на обычном языке — модель остаётся в одном режиме и перестаёт тратить ресурс на форматирование кода. Результат: в 15 раз меньше критических сбоев и +15% точности из одного изменения в промпте.

Принцип работы

Не заставляй модель переключаться между рассуждением и кодом — держи всё в языке. JSON — это паттерн из мира кода: скобки, ключи, точный синтаксис. Рассуждение о задаче — совсем другой паттерн. Совмещать их в одном шаге — как диктовать XML пока решаешь логическую задачу вслух: что-то одно обязательно просядет. NLT разрывает это совмещение: список инструментов на обычном языке + YES/NO — и модель думает в одном режиме без переключений.

Почему работает

LLM обучены на миллиардах слов — язык это их стихия. JSON — это код. Когда модель пишет его, активируются другие паттерны. Совместить рассуждение «нужна ли мне история платежей?» и одновременно вывести {"tool": "payment_history"} с правильными скобками и кавычками — это два разных процесса. Один мешает другому. Когда весь промпт и весь вывод находятся в одной зоне — языковой — этого конфликта нет. Исследование проверило это на 14 моделях — преимущество NLT подтвердилось на большинстве из них. Важный нюанс: Gemini 2.5 Pro дал обратный результат (-34% при NLT) — он специально обучен на структурированном выводе. Метод работает на моделях среднего класса, а не на самых последних топах.

Когда применять

Агентные системы → выбор инструментов, источников данных или баз знаний по сообщению пользователя — особенно на моделях среднего класса: GPT-4o, Claude Sonnet, Llama, Mistral и похожих. НЕ подходит для Gemini 2.5 Pro (там JSON точнее на 34%) и GPT-5 (паритет). Не закрывает случаи, где нужно передавать параметры в инструменты — метод тестировался только на выборе без параметров.

Мини-рецепт

1. Опиши агента: роль, имя, контекст — одна-две строки в начале промпта
2. Добавь блок «Размышление:» — модель напишет логику выбора перед ответом. Если прозрачность не нужна — убери, получишь чистый список
3. Составь список инструментов: каждый инструмент на отдельной строке в формате {Инструмент} – YES/NO. Чем конкретнее формулировка — тем точнее выбор
4. Заверши фразой «Оценка завершена.» — это стоп-сигнал, модель не добавит лишнего после списка
5. Проверь на 3-5 сценариях: нужные инструменты должны получать YES, остальные — NO. Если модель ставит YES везде — сократи список или переформулируй инструменты конкретнее

Примеры

[ПЛОХО] : Выбери подходящий инструмент для ответа клиенту о продлении подписки
[ХОРОШО] : Ты — помощник Алексея, менеджера по работе с клиентами. Клиент написал: «Хочу понять, стоит ли продлевать подписку на пакет Pro». Размышление: (вставь свои мысли) История платежей и подписки – YES/NO Активность использования продукта за 30 дней – YES/NO Открытые обращения в поддержку – YES/NO Информация о тарифах и скидках – YES/NO Передать разговор старшему менеджеру – YES/NO Оценка завершена.
Источник: The Remarkable Effectiveness of Providing AI Agents with Natural Language Tools: A Replication Study Validating NLT Performance Across 14 Models
ArXiv ID: 2607.03953 | Сгенерировано: 2026-07-07 06:28

Проблемы LLM

ПроблемаСутьКак обойти
Одновременное рассуждение и форматирование JSON снижает точностьКогда модель выбирает инструмент через JSON, она делает два дела сразу: думает какой инструмент нужен и форматирует структурированный вывод. Это разные режимы работы. Внимание делится. Страдает именно смысловая часть — точный выбор нужного инструмента. Проявляется в любых агентных сценариях где модель маршрутизирует через {"tool": "..."}Замени JSON на список YES/NO на обычном языке. Модель остаётся в одном режиме — языковом. Рассуждает и отвечает без переключения в "режим кода"

Методы

МетодСуть
Список YES/NO вместо JSON для выбора инструментовДай модели список вариантов. Пусть помечает каждый: нужен или нет. Шаблон: Размышление: (вставь свои мысли) затем каждый пункт на новой строке {Инструмент} – YES/NO в конце Оценка завершена. Почему работает: JSON — это синтаксис кода. Список на языке — это текст. Когда и задача, и вывод в языковой зоне, модель не переключается между режимами. Рычаги: блок "Размышление" показывает логику выбора; финальная фраза "Оценка завершена." служит стоп-сигналом и убирает лишний текст после списка; точные формулировки инструментов = точнее выбор. Когда не работает: топовые новые модели (Gemini 2.5 Pro) дают обратный результат — у них структурированный вызов точнее на 34%. Эти модели специально обучены на таком формате. Метод — для всех остальных
📖 Простыми словами

The Remarkable Effectiveness of ProvidingAIAgentswith NaturalLanguageTools: A Replication Study Validating NLT Performance Across 14Models

arXiv: 2607.03953

Современные AI-агенты спотыкаются не на логике, а на чертовых скобках. Когда ты просишь модель вызвать инструмент через JSON-схему, ты заставляешь её делать два дела сразу: мучительно соображать, что именно нужно сделать, и одновременно следить за синтаксисом кода. Это фундаментальный конфликт нейронки: она рождена болтать, а не писать конфиги. В итоге внимание размывается, и модель либо ошибается в выборе, либо ломает формат. Метод NLT (Natural Language Tools) убирает этот барьер, позволяя модели общаться с инструментами на её родном языке.

Это как если бы ты пришел в ресторан и официант вместо обычного заказа потребовал от тебя заполнить сложную налоговую декларацию на каждое блюдо. Ты бы точно перепутал графы и в итоге остался голодным. NLT — это когда тебе просто дают меню, где нужно поставить галочки «Да» или «Нет» напротив позиций. Модели гораздо проще сказать «да, мне нужен этот поиск», чем генерировать сложную структуру данных с кавычками и двоеточиями. Формализм убивает интеллект, и это исследование наглядно это доказывает.

Суть метода до смешного проста: вместо того чтобы заставлять модель рожать код, ей скармливают список инструментов в одном промпте и просят вынести вердикт по каждому на естественном языке. Например, в CRM-системе на запрос клиента о продлении подписки модель не будет генерировать {"tool": "check_status"}. Она просто пройдется по списку: «Проверить статус оплаты? Да. Посмотреть историю звонков? Нет. Вызвать техподдержку? Нет». Этот бинарный выбор на человеческом языке работает в разы стабильнее, потому что не отвлекает ресурсы нейронки на соблюдение правил программирования.

Исследователи прогнали этот подход через 14 разных моделей, и результат везде один: естественный язык уделывает структурированные схемы. Это применимо везде, где AI должен принимать решения: от умных домов до сложных банковских систем. Принцип универсален — если хочешь, чтобы агент работал четко, перестань требовать от него быть программистом. NLT превращает выбор инструментов в обычный диалог, и это оказывается эффективнее любых попыток загнать AI в жесткие рамки кода.

Короче, хватит мучить модели JSON-ами там, где без них можно обойтись. NLT — это легальный чит, который повышает точность работы агентов просто за счет смены формата общения. Если твой бот постоянно тупит и вызывает не те функции, просто дай ему список с вариантами «Да/Нет». Это сэкономит кучу нервов разработчикам и сделает AI реально полезным, а не просто генератором синтаксических ошибок. Кто первым выкинет лишние скобки из промптов, тот и получит самых стабильных агентов на рынке.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с