TL;DR
ToolChoiceConfusion — это явление, когда AI делает ошибку не потому что не знает ответа, а потому что видит слишком много вариантов сразу. Если перед AI лежат 100 инструментов, все они «по смыслу» связаны с задачей — модель выбирает неправильный. Не потому что глупая, а потому что релевантный и нужный прямо сейчас — разные вещи.
AI плохо фильтрует «нужно сейчас» от «нужно потом». Если попросить обработать письмо и перечислить всё что можно: поискать, прочитать, ответить, переслать, удалить — модель может сразу «ответить» до того как нашла нужное письмо. Это не ошибка понимания задачи, это ошибка очерёдности: в голове одновременно лежат все шаги, и AI хватается за ближайший по смыслу, не по порядку.
CMTF решает это жёстким ограничением: в каждый момент времени AI видит только один инструмент — тот, который нужен прямо сейчас на пути к цели. После его выполнения открывается следующий. Никакого забегания вперёд.
Схема метода
(Реализуется как система с кодом, но принцип работает в промптах)
ШАГ 1: Определи начальное состояние → что уже известно
ШАГ 2: Определи цель → что должно стать известно в конце
ШАГ 3: Построй цепочку → минимальная последовательность шагов от начала к цели
ШАГ 4: Покажи AI только ПЕРВЫЙ шаг → один вариант действия
ШАГ 5: Получи результат → обнови состояние
ШАГ 6: Покажи следующий шаг → и так далее до цели
Все шаги — отдельные запросы. Каждый следующий шаг открывается только после выполнения предыдущего.
Пример применения
Задача: Ты запускаешь Telegram-канал про инвестиции в России и хочешь через Claude подготовить разбор компании — от анализа до публикации. Обычно ты выдаёшь всё сразу: «проанализируй, сравни с конкурентами, напиши пост, предложи заголовок, сделай CTA». Часто Claude начинает писать пост, ещё не закончив анализ.
Промпт (пошаговая структура по принципу CMTF):
Работаем по шагам. На каждом шаге я даю тебе одну задачу.
Выполни её и жди следующую. Не забегай вперёд.
ТЕКУЩЕЕ СОСТОЯНИЕ: есть название компании — Positive Technologies
ЦЕЛЬ: готовый пост для Telegram-канала об инвестиционных рисках
ШАГ 1 (только это):
Перечисли 5 ключевых рисков для инвестора в Positive Technologies
на основе того, что ты знаешь о компании.
Формат: список, одна строка на риск.
Ничего больше — только список рисков.
(После получения ответа — следующий промпт):
ТЕКУЩЕЕ СОСТОЯНИЕ: список рисков готов
ШАГ 2 (только это):
Для каждого риска из списка — одно предложение с объяснением
почему это важно для частного инвестора с горизонтом 2 года.
(И так далее — анализ → структура поста → заголовок → CTA)
Результат: Каждый шаг даст чёткий, завершённый блок. Claude не будет смешивать анализ с написанием, не прыгнет к заголовку пока не готов контент. Итоговый пост будет логически выстроен — каждый следующий блок опирается на предыдущий.
Почему это работает
Проблема: AI не умеет хорошо управлять приоритетами во времени. Он видит все варианты сразу — и выбирает «похожий на правильный», а не «нужный прямо сейчас». «Проанализируй и напиши пост» — оба шага семантически близки к задаче, но написать без анализа — ошибка порядка. Именно так появляются поверхностные, «сначала выводы, потом аргументы» тексты.
Сильная сторона AI: он отлично справляется с одним чётким заданием. Когда перед ним один вопрос, одно действие, одна цель текущего шага — качество резко растёт. Исследование показывает: при показе всех 100 инструментов сразу — 83% успеха. При показе только нужного инструмента на каждом шаге — 99% успеха и в 90% меньше токенов.
Принцип: разделяй состояние и действие. На каждом шаге есть «что уже известно» (состояние) и «что нужно узнать дальше» (следующий шаг). Явно передавай оба в промпте. Не давай AI самому решать порядок — диктуй его искусственно через структуру запросов.
Рычаги управления:
- Явное состояние (ТЕКУЩЕЕ СОСТОЯНИЕ: ...) — чем точнее описан контекст, тем меньше AI додумывает лишнего
- Один глагол на шаг — «перечисли», «объясни», «напиши» — не два действия в одном промпте
- Условие перехода — следующий шаг отправляй только после того как предыдущий тебя устраивает
- Запрет на забегание («ничего больше», «только это») — прямо запрещает AI «помогать» лишним
Шаблон промпта
Работаем по шагам. Выполни только текущий шаг, жди следующего.
ТЕКУЩЕЕ СОСТОЯНИЕ: {что уже известно / какие данные есть}
ЦЕЛЬ: {финальный результат который нужен}
ШАГ {номер} (только это):
{одно конкретное действие}
Формат: {как должен выглядеть ответ}
Больше ничего — только {название конкретного выхода}.
Что подставлять:
- {что уже известно} — факты, данные, результаты предыдущих шагов
- {финальный результат} — что должно получиться в самом конце всей цепочки
- {одно конкретное действие} — один глагол + объект: «перечисли риски», «напиши вступление», «выбери заголовок»
- {как должен выглядеть ответ} — список / абзац / таблица / одно предложение
🚀 Быстрый старт — вставь в чат:
Вот шаблон пошагового промптинга по принципу CMTF.
Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит про конечную цель и какие данные уже есть — потому что без этого нельзя выстроить правильную цепочку шагов. Она разобьёт твою задачу на последовательные блоки и подготовит промпты для каждого шага.
Ограничения
⚠️ Линейные задачи: Метод работает когда шаги зависят друг от друга. Для простых «напиши пост про X» — избыточен.
⚠️ Требует дисциплины: Нужно действительно ждать результата каждого шага и не перескакивать. Если сразу передашь всё — эффект пропадает.
⚠️ Полноценный CMTF требует кода: Оригинальный метод — это система с графом зависимостей, контрактами инструментов и автоматическим управлением состоянием. В чате работает только принцип, не механика.
⚠️ Оценка на синтетических данных: Бенчмарк использовал моковые (имитированные) ответы инструментов, не реальные API — реальный мир сложнее.
Ресурсы
ToolChoiceConfusion: Causal Minimal Tool Filtering for Reliable LLM Agents Rahul Suresh Babu (Boston University), Laxmipriya Ganesh Iyer (Northeastern University) Independent researchers, 2025
Связанные концепции: ReAct (Yao et al.), Toolformer, ToolBench/ToolLLM, Berkeley Function-Calling Leaderboard
