TL;DR
UtilityMax — техника, которая переводит задачу с несколькими критериями из слов в формулу. Вместо "найди что-то хорошее, недорогое и быстрое" ты описываешь каждый критерий как отдельную переменную и просишь модель оценить каждую по отдельности, а потом перемножить оценки — и выбрать максимум.
Проблема в том, что LLM плохо балансирует конкурирующие цели в одном предложении. Когда ты пишешь "найди выгодный, но надёжный вариант" — модель сама решает, как взвешивать "выгоду" против "надёжности". Это её интерпретация, не твоя. Что важно: если сделать требование жёстче ("найди ТОЛЬКО выгодный И надёжный") — не помогает. Эксперименты показали, что жёсткая формулировка иногда даёт результат хуже, чем мягкая. Причина — двусмысленность никуда не уходит, просто становится жёстче зафиксированной.
UtilityMax убирает двусмысленность: каждый критерий получает своё место в формуле O(a) = E[X1] × E[X2] × E[X3]. Модель по очереди оценивает каждую переменную, потом перемножает и выбирает вариант с максимальным произведением.
Схема метода
Всё выполняется в одном промпте:
ШАГ 1: Описываешь задачу и все критерии как переменные X1, X2, X3...
→ Формула цели: O(a) = E[X1|a] × E[X2|a] × E[X3|a]
ШАГ 2: Модель генерирует список кандидатов (возможных ответов)
→ Набор вариантов a1, a2, a3...
ШАГ 3: Для каждого кандидата модель оценивает каждую переменную отдельно
→ Числовые оценки E[X1], E[X2], E[X3] для каждого варианта
ШАГ 4: Модель вычисляет произведение O(a) и выбирает максимум
→ Финальный ответ a* с пояснением
Пример применения
Задача: Артём открывает первый розничный магазин и выбирает нишу. Хочет одновременно: высокую маржу, большой спрос в российских городах-миллионниках и низкий порог входа (до 500 тыс. рублей). Критерии конкурируют: высокая маржа часто означает дорогой вход, а массовый спрос — низкую маржу.
Промпт:
Я хочу, чтобы ты решил следующую задачу: выбрать нишу для розничного магазина
в российском городе-миллионнике.
Формально, пусть K — это твои знания. Сюда входят все твои внутренние знания
из параметров, а также любые внешние знания, которые я предоставлю.
Пусть P(A | K) — распределение вероятностей по возможным нишам при знаниях K.
Пусть a — конкретная ниша.
Пусть X1 | A=a — переменная, представляющая маржинальность ниши a
(оценка от 0 до 1: 0 — минимальная, 1 — максимальная маржа).
Пусть X2 | A=a — переменная, представляющая уровень потребительского спроса
в российских городах-миллионниках для ниши a
(оценка от 0 до 1).
Пусть X3 | A=a — переменная, представляющая доступность входа: вероятность,
что стартовые вложения не превысят 500 000 рублей
(вероятность от 0 до 1).
Твоя задача — найти оптимальную нишу a*, которая максимизирует:
O(a) = E[X1 | A=a] × E[X2 | A=a] × E[X3 | A=a]
Для этого:
1. Сгенерируй список из 7–10 ниш-кандидатов.
2. Для каждой ниши оцени E[X1], E[X2] и E[X3] по отдельности с пояснением
каждой оценки. Затем вычисли O(a).
3. Верни нишу a*, которая максимизирует O, с итоговой таблицей всех оценок.
Результат: Модель выдаст список 7–10 ниш с таблицей оценок — отдельная строка для каждого критерия и финальное произведение O(a). Будет видно почему, например, "спортивное питание" проиграло "детским товарам" — не потому что маржа ниже, а потому что произведение трёх факторов в совокупности оказалось меньше. Финальный выбор будет обоснован числами, а не "в целом кажется хорошим вариантом".
Почему это работает
LLM не умеет молча взвешивать несколько целей. Когда ты пишешь "найди выгодный и надёжный вариант", модель генерирует текст, который звучит как баланс — но реальных вычислений нет. Она не знает, что для тебя важнее: 80% надёжности при 60% выгоде или наоборот. Это как попросить советника "принеси лучшее" без критериев — он принесёт то, что ему кажется лучшим.
Зато модель умеет делать одно: оценивать что-то конкретное, когда его изолировали. "Насколько вероятно, что этот вариант удовлетворяет критерию X — оцени от 0 до 1" — это задача, с которой LLM справляется хорошо. Она не балансирует, она фокусируется на одном.
Формула делает следующее: убирает задачу "взвешивай несколько целей одновременно" и заменяет её задачей "оцени каждую цель по очереди, потом перемножь". Это переводит сложное в набор простых. Мультипликативная структура ещё и логична: если хотя бы один критерий близок к нулю — весь вариант проваливается, даже если остальные хорошие.
Рычаги управления: - Количество переменных → добавь X4, X5 для более тонкого контроля; убери лишние, если они не нужны — произведение больших чисел может смещать в сторону "усреднённых" вариантов - Шкала оценок → можно задать не 0–1, а 1–10 или вероятность в процентах — важно держать одну шкалу для всех переменных - Число кандидатов → увеличь до 15–20 для широкого поиска; уменьши до 3–5 если уже знаешь варианты и хочешь только сравнить - Описание переменных → чем точнее описание ("вероятность, что инвестиции не превысят 500 тыс. рублей"), тем калиброваннее оценка
Шаблон промпта
Я хочу, чтобы ты решил следующую задачу: {описание задачи}.
Формально, пусть K — это твои знания. Сюда входят все твои внутренние знания
из параметров, а также любые внешние знания из этого промпта или истории чата.
Пусть P(A | K) — твоё распределение вероятностей по возможным ответам при знаниях K.
Пусть a — это один из возможных ответов.
Пусть X1 | A=a — переменная, представляющая {описание критерия 1} при ответе a
(оценка от 0 до 1).
Пусть X2 | A=a — переменная, представляющая {описание критерия 2} при ответе a
(оценка от 0 до 1).
Пусть X3 | A=a — переменная, представляющая {описание критерия 3} при ответе a
(оценка от 0 до 1).
Твоя задача — найти оптимальный ответ a*, который максимизирует:
O(a) = E[X1 | A=a] × E[X2 | A=a] × E[X3 | A=a]
Для этого ты должен:
1. Сгенерировать набор из {число} кандидатов.
2. Для каждого кандидата оценить E[X1], E[X2] и E[X3] по отдельности,
используя свои знания, затем вычислить O(a).
3. Вернуть ответ a*, который максимизирует O, с таблицей всех оценок.
Что подставлять:
- {описание задачи} — конкретная цель: "выбрать подрядчика", "порекомендовать книгу", "определить фичу для MVP"
- {описание критерия X} — один измеримый аспект: "вероятность, что срок выполнения не превысит 2 недели", "ожидаемый уровень интереса для читателя-технаря 30 лет"
- {число} — сколько вариантов искать (7–10 для открытого поиска, 3–5 если варианты уже известны)
Важно: каждый критерий описывай предельно конкретно. "Высокое качество" — плохо. "Вероятность, что клиент останется доволен и вернётся" — хорошо.
🚀 Быстрый старт — вставь в чат:
Вот шаблон UtilityMax Prompting. Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить все поля.
[вставить шаблон выше]
LLM спросит какие критерии для тебя важны и как их измерить — потому что формула требует конкретных переменных, а не размытых пожеланий. Она возьмёт структуру из шаблона и подставит твои данные.
Ограничения
⚠️ Только для топовых моделей: На слабых моделях (не уровня Claude Sonnet, GPT-4o, Gemini Pro) техника может работать хуже обычного промпта — модель не умеет делать откалиброванные вероятностные оценки. Авторы прямо оговаривают этот риск.
⚠️ Зависит от качества переменных: Если неправильно описал критерии — оптимизируешь не то. Выбросил важный фактор из формулы — модель его проигнорирует. "Мусор на входе — мусор на выходе" здесь особенно актуально.
⚠️ Не для субъективных задач: "Напиши красивый текст" нельзя разложить на независимые переменные без потери смысла. Техника работает там, где критерии можно сформулировать измеримо.
⚠️ Произведение наказывает средних: Если все критерии важны одинаково — мультипликативная формула будет предпочитать "хорошего по всем" вместо "отличного по одному, слабого по другому". Это фича, но нужно понимать.
Как исследовали
Команда взяла неплохой полигон для проверки — датасет MovieLens 1M с реальными оценками фильмов. Задача: по истории просмотров пользователя порекомендовать 10 фильмов из 50 кандидатов, причём пользователь хочет только комедии и только романтику — два конкурирующих фильтра поверх общего рейтинга.
Сравнивали три промпта: мягкий ("пользователь любит комедии и романтику"), жёсткий ("рекомендуй ТОЛЬКО комедии И романтику, ничего другого") и UtilityMax с формулой из трёх переменных — предсказанный рейтинг × вероятность жанра "комедия" × вероятность жанра "романтика". Тестировали на 20 пользователях по 20 запросов на каждого — всего 400 запросов на модель, на трёх топовых моделях.
Самая интересная находка: жёсткий промпт не стал лучше мягкого — у Claude он даже ухудшился по качеству ранжирования. Это важно: интуиция "если сказать строже — модель лучше выполнит" не работает. UtilityMax при этом стабильно выигрывал у обоих вариантов на всех трёх моделях — разрыв статистически значимый (p < 0.01). Улучшение у Claude составило ~12–19% в зависимости от метрики — заметный прирост, который пришёл только от смены структуры промпта.
Адаптации и экстраполяции
🔧 Техника: добавь веса к переменным → управляй приоритетами
Если один критерий важнее других, измени формулу:
O(a) = E[X1]^2 × E[X2] × E[X3]. Возведение в степень усиливает влияние нужной переменной. Это не в оригинале статьи — но логично вытекает из мультипликативной структуры.
🔧 Техника: бинарные переменные для жёстких условий-фильтров
Если критерий — "да/нет" (например, "бюджет до 1 млн рублей"), опиши переменную как вероятность от 0 до 1 что условие выполняется:
P(бюджет ≤ 1 млн | a). При умножении это работает как мягкий фильтр — варианты, нарушающие условие, получают оценку, близкую к нулю, и автоматически выпадают.
🔧 Техника: двухэтапный поиск
Сначала прогони UtilityMax для широкого отбора (10–15 кандидатов), затем примени снова только к топ-3 с более детальным описанием каждой переменной. Грубый фильтр + тонкая калибровка.
🔧 Автоматическая декомпозиция через LLM
Авторы упоминают это как направление для будущих исследований — но попробовать можно уже сейчас. Спроси модель: "У меня задача {описание}. Помоги разложить её цель на 3–5 независимых измеримых критериев для UtilityMax Prompting". Получишь черновик переменных — потом дожми под свою задачу.
Ресурсы
Работа: UtilityMax Prompting: A Formal Framework for Multi-Objective Large Language Model Optimization — технический отчёт
Автор: Ofir Marom, независимый исследователь (ofiremarom@gmail.com)
Датасет: MovieLens 1M — F. Maxwell Harper, Joseph A. Konstan, 2015
Связанные техники из обзора: Chain-of-Thought (Wei et al., 2022), Program of Thoughts (Chen et al., 2023), Chain-of-Symbol (Hu et al., 2023), OPRO (Yang et al., 2024)
