TL;DR
ICA (Intent, Context, Action) — способ представления сложных workflow'ов в виде псевдокода с if-else структурами вместо длинных текстовых описаний. Вместо "если клиент спрашивает про отмену и до бронирования больше 48 часов, то..." пишете if time_until > 48_hours: Action_1.
LLM плохо понимают сложные workflow'ы написанные обычным текстом с таблицами и вложенными условиями. Rich text формат с заголовками, списками, таблицами требует специальной подготовки даже для людей. Условия размыты, приоритеты неявны, логика запутана в абзацах. Модель теряется где начало ветвления, что проверять первым, какие условия важнее.
Трансформация workflow'ов в формат "if Intent X and Context Y then Action Z". Псевдокод убирает двусмысленность и делает логику явной. Сначала проверяем Intent (цель запроса), потом Context (условия окружения), выдаём Action (конкретное действие). Структура как в коде — модель отлично с этим работает.
Схема метода
Intent: [Какая цель у запроса]
if [Условие на контексте 1]:
if [Условие на контексте 2]:
Action: [Что делать]
else:
Action: [Альтернативное действие]
else:
Action: [Другое действие]
Всё выполняется в одном промпте. Модель читает структуру, проверяет условия по порядку, выдаёт соответствующее действие.
Пример применения
Задача: Решить принять ли оффер от новой компании — структурировать критерии принятия решения в явную логику вместо интуитивных размышлений "с одной стороны... с другой стороны..."
Промпт:
Помоги принять решение о переходе на новую работу.
Преобразуй мои критерии в псевдокод формата ICA (Intent, Context, Action).
Intent: Оценить предложение о работе
Контексты для проверки:
- Зарплата: текущая 150к, новая 200к
- Офис: текущий 20 мин, новый 60 мин
- Должность: текущая middle, новая middle
- Компания: текущая стабильная, новая стартап
- Команда: текущая знакомая, новая незнакомая
Мои приоритеты:
1. Зарплата важнее всего если разница >30%
2. Если стартап — должна быть значительная компенсация (+50% минимум)
3. Дорога >45 мин — только если очень хорошие условия
4. Смена команды — только если growth opportunities
Преобразуй в if-else логику с чёткими рекомендациями для каждого сценария.
Результат: Модель структурирует критерии в псевдокод с явными условиями и ветвлениями. Каждая комбинация факторов получит чёткую рекомендацию: "принять", "отклонить" или "запросить улучшение условий". Логика станет явной и легко проверяемой — сразу видно какие сценарии ведут к какому решению, нет размытых "зависит от ситуации".
Почему это работает
LLM лучше обрабатывают структурированные инструкции чем неявную логику в тексте. В обычном описании условия размыты: "если стартап и большая зарплата и не очень далеко" — непонятно что важнее, как комбинируются факторы. В псевдокоде всё явно: сначала проверяем стартап, если да — требуем +50%, потом расстояние, потом остальное.
Псевдокод работает как контракт между вами и LLM. Вместо "подумай учитывая эти факторы" вы даёте чёткий алгоритм: "если А и Б, то В". LLM отлично следует таким инструкциям — они похожи на код, который модель видела в тренировочных данных. Нет интерпретации, есть выполнение.
В оригинальном исследовании точность выросла с 51% до 85% на Mistral-7B только за счёт перехода с rich text на ICA формат. Это +67% относительного улучшения. Особенно сильно эффект на маленьких моделях: для большой Model 1 улучшение было +13%, а для маленькой Mistral-7B целых +54%.
Рычаги управления:
- Глубина вложенности if-else: больше веток = точнее логика, но сложнее читать. Для простых задач 2-3 уровня, для сложных можно 5+
- Порядок проверки условий: что проверяем первым влияет на финальное решение. Ставьте самые важные критерии в начало
- Детализация действий: от короткого "Action_1" до подробного описания следующих шагов
Шаблон промпта
Преобразуй {описание процесса} в формат ICA (Intent, Context, Action).
Intent: {какая цель}
Contexts:
- {фактор 1}: {возможные значения}
- {фактор 2}: {возможные значения}
- {фактор 3}: {возможные значения}
Критерии решения:
{правила и приоритеты в свободной форме}
Создай псевдокод в формате:
Intent: {цель}
if {условие на контекст 1}:
if {условие на контекст 2}:
Action: {что делать}
else:
Action: {альтернатива}
else:
if {другое условие}:
Action: {ещё вариант}
else:
Action: {финальный вариант}
Покажи полную логику для всех комбинаций факторов.
Заполни:
{описание процесса}— что нужно структурировать (принятие решения, бизнес-процесс, процедура){какая цель}— Intent в одном предложении{фактор N}— переменные которые влияют на решение{правила и приоритеты}— ваша логика принятия решений
🚀 Быстрый старт — вставь в чат:
Вот шаблон ICA формата. Адаптируй под мою задачу: [твоя задача].
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит какие факторы важны для твоего решения, какая логика приоритетов — потому что для построения if-else дерева нужны явные условия и их порядок. Она возьмёт структуру из шаблона и адаптирует под задачу.
Ограничения
⚠️ Сложные нелинейные зависимости: Если решение зависит от комбинации факторов которую сложно выразить через if-else (например, "зарплата важна но только если не стартап, а если стартап то неважна если есть опционы"), псевдокод станет громоздким и нечитаемым.
⚠️ Субъективные критерии: Для задач где нет чётких правил (креативные решения, эмоциональная оценка, интуитивные выборы) жёсткая if-else структура может ограничить естественные рассуждения модели.
⚠️ Динамические контексты: Если условия меняются в процессе диалога или зависят от предыдущих шагов, статичный псевдокод нужно обновлять вручную. Не подходит для iterative процессов.
Как исследовали
Команда Airbnb взяла реальные customer support workflow'ы и конвертировала их из rich text (с таблицами, списками, заголовками, гиперссылками) в ICA псевдокод. Затем протестировали на 4 моделях — от больших проприетарных (Model 1, Model 2) до маленьких open-source (Mixtral-8x7B, Mistral-7B).
Ключевой результат: на Mistral-7B точность выросла с 16% (rich text без CoT) до 70% (ICA + CoT) — это в 4+ раза! Даже без fine-tuning. А с fine-tuning на синтетических данных достигли 85%.
Особенно интересно что ICA формат сильнее помог маленьким моделям чем большим. Для Model 1 улучшение было +13%, а для Mistral-7B целых +54%. Это показывает что структурированный формат компенсирует недостаток размера модели — правильная упаковка знаний важнее брутфорса параметрами.
В онлайн-тестах на 5000+ реальных обращениях клиентов fine-tuned Mistral-7B с ICA сократил время обработки на 13% по сравнению с базовым подходом. При этом большие модели с CoT увеличили время из-за latency — они генерировали слишком много токенов.
Главный инсайт для практики: Если у вас сложные workflow'ы в текстовом формате — конвертируйте в псевдокод. Это даст больший прирост точности чем переход на более мощную модель.
Оригинал из исследования
Авторы показывают пример конвертации из rich text в ICA:
Оригинальный workflow (упрощённо):
Reservation Cancellation Policy
When a guest requests cancellation:
- If reservation is more than 48 hours away:
Check if it's a strict cancellation policy
- If strict: Charge 50% fee
- If moderate: Full refund
- If reservation is less than 48 hours away:
No refund unless extenuating circumstances
ICA формат:
Intent: Guest requests reservation cancellation
if time_until_reservation > 48_hours:
if cancellation_policy == "strict":
Action: charge_50_percent_fee
elif cancellation_policy == "moderate":
Action: full_refund
else:
if extenuating_circumstances == True:
Action: review_extenuating_circumstances
else:
Action: no_refund
Контекст: В исследовании этот формат затем использовался для генерации синтетических тренировочных данных и fine-tuning моделей. Но сам ICA формат работает и без fine-tuning — просто вставляете в промпт.
Адаптации и экстраполяции
💡 Адаптация для личных decision frameworks:
ICA можно использовать не только для бизнес-процессов, но и для структурирования личных систем принятия решений — от выбора квартиры до планирования карьеры.
Помоги создать decision framework для {моя задача}.
Используй ICA формат:
Intent: {цель решения}
Variables:
- {фактор 1}: {значения}
- {фактор 2}: {значения}
- {фактор 3}: {значения}
Priorities:
1. {главный приоритет}
2. {второй приоритет}
3. {третий приоритет}
Создай псевдокод который выдаст чёткую рекомендацию для любой комбинации факторов.
Покажи все возможные пути решения.
🔧 Техника: Визуализация логики → видеть все пути решения
После создания псевдокода добавь:
Преобразуй этот псевдокод в decision tree diagram в текстовом формате.
Покажи все возможные пути и их финальные действия.
Это помогает увидеть полную картину: какие комбинации факторов к чему ведут, есть ли пропущенные сценарии, нет ли противоречий в логике.
🔧 Техника: Action IDs → быстрое сравнение вариантов
Вместо текстовых описаний действий используй номера:
Action_1: Принять оффер
Action_2: Отклонить оффер
Action_3: Запросить улучшение условий
Затем попроси модель:
Для этих трёх вариантов моих данных:
- Вариант А: зарплата +20%, офис +40 мин, стартап
- Вариант Б: зарплата +50%, офис +60 мин, стабильная компания
- Вариант В: зарплата +35%, офис +20 мин, стартап
Какие Action ID получатся? Выведи таблицу.
Это даёт quick comparison разных сценариев без генерации длинных объяснений.
Ресурсы
"LLM-Friendly Knowledge Representation for Customer Support"
Airbnb Inc.
Hanchen Su, Wei Luo, Wei Han, Yu Liu, Yufeng Zhang, Cen Zhao, Joy Zhang, Yashar Mehdad
