TL;DR
LAPPI — метод, который помогает сформулировать задачу оптимизации через естественный диалог с LLM. Система работает в два этапа: сначала LLM помогает перечислить варианты (например, достопримечательности в Париже), затем назначает числовые оценки каждому варианту на основе предпочтений пользователя. После этого готовая задача передаётся специализированному оптимизатору, который находит лучшее решение с учётом всех ограничений.
Главная проблема: LLM хорошо понимает расплывчатые предпочтения ("хочу культурные места, но не слишком коммерческие"), но плохо соблюдает жёсткие ограничения ("уложиться ровно в 6 часов"). LLM генерирует вероятностно — может выдать маршрут на 8 часов, когда нужно 6. Классические оптимизаторы, наоборот, гарантируют соблюдение ограничений, но не понимают естественный язык. Пользователям сложно самостоятельно перевести "хочу видеть искусство Парижа" в "Лувр = 9 баллов, 2 часа; Эйфелева башня = 5 баллов, 1 час".
Метод использует сильные стороны обоих подходов: LLM переводит предпочтения в структурированные данные (список мест + баллы + время), оптимизатор находит лучший вариант, который точно уложится в ограничения. Пользователь видит результат, может уточнить предпочтения в диалоге, система пересчитывает — итеративный цикл до удовлетворительного решения.
Схема метода
ЭТАП 1: Перечисление вариантов (Item Enumeration)
→ Ввод: описание предпочтений в свободной форме
→ LLM генерирует список кандидатов с обоснованием
→ Пользователь выбирает релевантные варианты
ЭТАП 2: Назначение оценок (Value Assignment)
→ Ввод: выбранные варианты + уточнение предпочтений
→ LLM назначает числовые оценки каждому варианту
→ Система получает точные данные из внешних источников (API)
ЭТАП 3: Оптимизация (внешний solver)
→ Специализированное ПО находит оптимальное решение
→ Строгое соблюдение всех ограничений
ЭТАП 4: Итерация (опционально)
→ Пользователь корректирует предпочтения через диалог
→ Возврат к этапу 1 или 2 → новая оптимизация
Все этапы требуют связки LLM + код + оптимизатор.
Пример применения
Задача: Организовать девичник в Санкт-Петербурге — хочется культурную программу без толп туристов, уложиться в бюджет 15 000₽ на компанию, все места в пешей доступности, максимум 5 часов на всё.
Промпт (Этап 1 — перечисление мест):
Помоги спланировать культурную программу для девичника в Петербурге.
Предпочтения:
- Камерные места, где можно поговорить (не массовые локации)
- Эстетичные для фото
- Культурная программа: галереи, арт-пространства, красивые кафе
- Без стандартных туристических маршрутов
Предложи варианты мест с кратким описанием, почему они подходят.
Промпт (Этап 2 — оценка вариантов):
Мои предпочтения: приоритет на камерные галереи и необычные кафе,
эстетика важнее известности места.
Места:
- Эрарта
- Музей стрит-арта
- Кофейня "Север-Метрополь"
- Лофт Проект Этажи (тихие залы)
- Книжный магазин "Подписные издания"
Для каждого места укажи:
1. Балл соответствия предпочтениям (0-10)
2. Примерное время на посещение (часы)
3. Примерная стоимость на человека (рубли)
Результат:
На этапе 1 модель выдаст список из 7-10 мест с обоснованиями ("Музей стрит-арта — не переполнен туристами, яркие локации для фото"). На этапе 2 — структурированные данные: каждое место получит балл (Эрарта = 8, Подписные издания = 9), время (1.5 часа, 0.5 часа), стоимость (400₽, 0₽).
Без оптимизатора читатель получит эти данные, но составлять маршрут придётся вручную — модель может предложить последовательность, которая не уложится в 5 часов или выйдет за бюджет. С оптимизатором (требует код) система вернёт точный маршрут: какие места, в каком порядке, сколько времени — гарантированно в рамках ограничений.
Почему это работает
Слабость LLM: модель не умеет строго соблюдать числовые ограничения. Если попросить составить маршрут на 6 часов, она может выдать вариант на 7.5 часов — генерация вероятностная, нет механизма систематического поиска оптимума. Prompt engineering ("обязательно уложись в 6 часов!") улучшает результат, но не гарантирует точность.
Сильная сторона LLM: модель отлично понимает контекст и нюансы естественного языка. "Хочу культурные места, но не слишком коммерческие" — LLM уловит, что Эрмитаж подходит под "культурное", но массовость может быть минусом. Модель может оценить релевантность вариантов предпочтениям и назначить примерные числа (баллы, длительность) на основе здравого смысла.
Как метод обходит слабость: LAPPI разделяет задачи по компетенциям. LLM делает то, что умеет — переводит расплывчатые предпочтения в структурированные данные (список + баллы + оценки времени). Специализированный solver делает то, что LLM не умеет — находит математически оптимальное решение с гарантированным соблюдением всех ограничений (время ≤ 6 часов, бюджет ≤ 15000₽). Итеративный цикл добавляет гибкость: после первого результата можно сказать "хочу больше галерей, меньше кафе" → система пересчитает оценки → оптимизатор найдёт новый маршрут.
Рычаги управления (при использовании с кодом): - Количество вариантов на этапе 1 — больше вариантов = шире выбор, но дольше оценка - Шкала оценок — 0-10 или 0-100 влияет на "разрешающую способность" предпочтений - Веса в функции цели (λv для предпочтений, λt для времени) — если два маршрута одинаково хороши по баллам, можно приоритизировать более короткий - Источник точных данных — API для расстояний vs оценки LLM (точность vs простота)
Применимые принципы для чата
Полную систему LAPPI воспроизвести в чате нельзя — требуется оптимизатор и код. Но принципы структурирования задачи применимы:
1. Двухэтапный подход: сначала варианты, потом оценки
Не делай за один запрос: "Посоветуй маршрут по Петербургу с культурными местами на 5 часов"
Делай в два шага:
Шаг 1 — Генерация вариантов:
Предложи 10 культурных мест в Петербурге: галереи, арт-пространства,
необычные книжные. Камерные, не массовые. Кратко объясни, почему каждое подходит.
Шаг 2 — Оценка выбранных:
Оцени каждое место по шкале 0-10 по критериям:
- Камерность (мало людей)
- Эстетика для фото
- Культурная ценность
- Необычность
Укажи примерное время на посещение и стоимость.
Места: [список из шага 1]
Почему работает: на первом шаге модель фокусируется на релевантности (соответствие критериям), на втором — на сравнении (числовые оценки). Смешивание задач в одном запросе даёт менее чёткий результат.
2. Структурированный вывод через явные инструкции
Вместо: "Оцени места с учётом моих предпочтений"
Пиши:
Выведи результат в формате таблицы:
Место | Балл камерности | Балл эстетики | Время (часы) | Стоимость (₽)
Правила оценки:
- Камерность: 10 = пустые залы, 0 = толпы туристов
- Эстетика: 10 = Instagram-worthy, 0 = обычный интерьер
Чёткий формат + правила оценки = структурированные данные, с которыми легче работать дальше.
3. Разделяй то, что LLM оценивает, и то, что нужно проверить
LLM может оценить (estimands): - Релевантность места предпочтениям (субъективно) - Примерное время на посещение (порядок величины) - Относительная стоимость ("недорого", "средне", "дорого")
LLM плохо знает (observables — проверяй отдельно): - Точное расстояние между местами → Google Maps - Актуальный график работы → сайт заведения - Точная цена билета → официальный источник
Принцип: используй LLM для оценок и фильтрации, проверяй критичные данные вручную или через инструменты.
4. Итеративное уточнение через диалог
После первого результата:
Твой список слишком ориентирован на кафе. Замени 2 кафе на дополнительные галереи,
приоритет на современное искусство. Пересчитай оценки.
Модель возьмёт контекст предыдущего ответа + новые критерии → скорректирует список и оценки.
Ограничения применения в чате
⚠️ Нет гарантий оптимальности: Без специализированного оптимизатора LLM может предложить хороший вариант, но не обязательно лучший. Если задача "найти максимум мест за 5 часов в бюджет 10000₽", модель не переберёт все комбинации математически — даст правдоподобный ответ.
⚠️ Слабое соблюдение жёстких ограничений: "Уложись строго в 5 часов" → модель может выдать маршрут на 5 часов 20 минут. Чем сложнее ограничения (время + бюджет + последовательность + расстояния), тем выше вероятность нарушения.
⚠️ Большие задачи не потянет: 50 вариантов мест × 5 критериев × проверка комбинаций — модель потеряет структуру или начнёт упрощать. Метод работает для задач с 10-15 вариантами, не для 100.
⚠️ Субъективные оценки зависят от контекста промпта: "Камерность" может трактоваться по-разному. Если не дать чёткую шкалу ("10 = пустые залы"), модель применит своё понимание, которое может не совпадать с вашим.
Ресурсы
LAPPI: Interactive Optimization with LLM-Assisted Preference-Based Problem Instantiation
Авторы: So Kuroki (Sakana AI), Manami Nakagawa (UC Davis), Shigeo Yoshida, Kozuno Tadashi (OMRON SINIC X), Yuki Koyama (University of Tokyo)
