3,583 papers
arXiv:2409.11724 92 18 сент. 2024 г. FREE

TART: фреймворк с открытым исходным кодом, дополненный инструментами, для объяснимого табличного рассуждения

КЛЮЧЕВАЯ СУТЬ
Вместо того чтобы просить конечный результат, пользователь просит сначала сгенерировать "инструменты" (код) и "план", а затем уже дать ответ на основе этого плана
Адаптировать под запрос

Исследование показывает, что большие языковые модели (LLM) плохо справляются с точными вычислениями и анализом структурированных данных в таблицах. Для решения этой проблемы предлагается фреймворк TART, который учит LLM не решать задачу напрямую, а сначала создавать для нее специальные "инструменты" (в виде Python-функций), а затем составлять план их использования для получения ответа.

Ключевой результат: Превращение LLM из "исполнителя" в "планировщика", который делегирует точные вычисления коду, кардинально повышает надежность и точность ответов при работе с таблицами и числами.

Суть метода TART для практического применения в промптах заключается в том, чтобы перестать требовать от LLM быть калькулятором или аналитиком данных, а вместо этого использовать ее сильную сторону — способность к рассуждению и генерации кода.

Вместо промпта "Проанализируй таблицу и скажи, какой продукт самый прибыльный", вы используете более сложную, но надежную конструкцию:

  1. Даете LLM роль: "Ты — ассистент по анализу данных".
  2. Предоставляете данные: Вставляете таблицу.
  3. Запрещаете прямой ответ: "Не отвечай на вопрос сразу. Твоя задача — сначала подготовить инструменты для анализа".
  4. Ставите задачу на создание инструментов: "Шаг 1: Напиши несколько простых Python-функций, которые понадобятся для ответа. Например: функция для извлечения столбца, функция для расчета прибыли (доход минус расход), функция для поиска максимального значения в списке".
  5. Ставите задачу на планирование: "Шаг 2: Напиши пошаговый план, как ты будешь использовать эти функции для ответа на мой вопрос".
  6. Ставите задачу на исполнение: "Шаг 3: Мысленно выполни этот план и дай финальный ответ, объяснив, как ты к нему пришел".

Этот подход заставляет модель декомпозировать сложную задачу на простые, логичные шаги. Генерация кода для вычислений и его последующее "использование" в плане резко снижает вероятность арифметических ошибок и неправильного чтения данных из таблицы, так как модель оперирует четкими логическими инструкциями, а не пытается "угадать" результат.

  • Прямая применимость: Пользователь может напрямую внедрить эту логику в свои промпты для продвинутых LLM (например, GPT-4, Claude 3 Opus). Вместо того чтобы просить конечный результат, пользователь просит сначала сгенерировать "инструменты" (код) и "план", а затем уже дать ответ на основе этого плана. Это можно сделать в рамках одного промпта, разделив его на логические блоки.

  • Концептуальная ценность: Ключевая идея — "делегируй точные задачи коду". Это дает пользователю мощную ментальную модель для взаимодействия с LLM. Становится понятно, почему модель может написать гениальное эссе, но ошибиться в простом сложении. Пользователь учится разделять задачи на "креативно-планировочные" (для LLM) и "точно-вычислительные" (для симуляции кода).

  • Потенциал для адаптации: Метод легко адаптируется для любых задач, требующих точности и логики. Например, для решения многоступенчатых логических головоломок, анализа финансовых отчетов, планирования сложных проектов. Механизм адаптации прост: определите, какие операции требуют точности, и попросите модель сначала определить "инструменты" для этих операций, прежде чем строить общий план решения.

**Роль:** Ты — опытный маркетолог-аналитик. Твоя задача — анализировать данные и давать четкие, основанные на фактах рекомендации.

**Контекст:**
Вот данные по эффективности постов в социальной сети за последнюю неделю.

| День | Тема поста | Охват | Лайки | Комментарии |
|---|---|---|---|---|
| Пн | Новинка месяца | 1200 | 150 | 25 |
| Вт | За кулисами | 800 | 180 | 40 |
| Ср | Отзыв клиента | 950 | 120 | 15 |
| Чт | Полезный совет | 1500 | 250 | 60 |
| Пт | Акция "Скидка 20%"| 2500 | 300 | 50 |

**Задача:**
Определи, какой пост имел самый высокий **коэффициент вовлеченности (ER)**. ER рассчитывается по формуле: `(Лайки + Комментарии) / Охват * 100%`.

**Методология (ВАЖНО: следуй строго по шагам):**

1.  **Создание Инструментов:**
    *   Не вычисляй ничего напрямую.
    *   Сначала определи и напиши набор простых Python-функций, которые необходимы для решения этой задачи. Как минимум, тебе понадобится функция для расчета ER.

2.  **План Рассуждений:**
    *   После создания функций, напиши пошаговый план. В плане укажи, для какой строки таблицы и с какими данными ты будешь вызывать свои функции.

3.  **Выполнение и Ответ:**
    *   Следуя своему плану, рассчитай ER для каждого поста.
    *   Представь результаты в виде таблицы: `[День, Тема поста, ER]`.
    *   В конце четко назови пост-победитель с самым высоким ER.

Этот промпт работает, потому что он напрямую применяет принципы из исследования TART, обходя слабые места LLM:

  1. Декомпозиция задачи: Промпт заставляет модель разбить одну сложную задачу ("найди лучший пост") на три последовательных подзадачи: создание инструментов, планирование, выполнение. Это соответствует модулям TART (Tool Maker, Reasoning Plan, Explanation Generator).
  2. Снижение когнитивной нагрузки: Вместо того чтобы одновременно держать в "уме" формулу, данные из нескольких строк и выполнять вычисления, модель сначала фокусируется на определении логики (пишет функцию calculate_er). Это изолирует сложную часть.
  3. Надежность вычислений: Когда модель "вызывает" свою же функцию calculate_er(likes=150, comments=25, reach=1200), она с гораздо большей вероятностью выполнит операцию (150 + 25) / 1200 правильно, чем если бы ей просто сказали "посчитай". Она следует своему же программному коду, что делает процесс более строгим и менее подверженным ошибкам.
  4. Прозрачность и верифицируемость: План рассуждений делает "мыслительный процесс" модели видимым. Пользователь может легко проверить, правильную ли логику она собирается применить, еще до получения финального ответа.
**Роль:** Ты — финансовый консультант, который помогает мне анализировать личные расходы. Ты должен быть точным и методичным.

**Контекст:**
Вот моя таблица расходов за прошлый месяц:

| Дата | Категория | Сумма (руб) | Описание |
|---|---|---|---|
| 01.05 | Продукты | 1500 | Покупка в "Пятерочке" |
| 03.05 | Транспорт | 550 | Заправка автомобиля |
| 05.05 | Развлечения | 2500 | Билеты в кино и ужин |
| 10.05 | Продукты | 2200 | Закупка на неделю |
| 12.05 | ЖКХ | 5500 | Квартплата |
| 18.05 | Транспорт | 350 | Такси |
| 22.05 | Продукты | 800 | Фрукты и овощи |
| 25.05 | Развлечения | 1200 | Поход в театр |

**Задача:**
Проанализируй мои расходы и ответь на два вопроса:
1. Какая категория расходов была самой большой в этом месяце?
2. Сколько всего было потрачено на "Продукты"?

**Методология (ОБЯЗАТЕЛЬНОЕ ТРЕБОВАНИЕ):**

1.  **Шаг 1: Определение Инструментов.**
    *   Не давай ответ сразу.
    *   Сначала опиши, какие Python-функции ты бы создал для этого анализа. Например: `get_total_for_category(data, category_name)` и `sum_by_category(data)`.

2.  **Шаг 2: План Анализа.**
    *   Напиши четкий пошаговый план. Например:
        *   "1. Вызвать функцию `sum_by_category`, чтобы сгруппировать все траты по категориям."
        *   "2. Найти категорию с максимальной суммой в полученном результате."
        *   "3. Вызвать функцию `get_total_for_category` для категории 'Продукты'."

3.  **Шаг 3: Финальный Отчет.**
    *   Следуя плану, предоставь ясные ответы на оба моих вопроса.

Этот пример работает по тем же фундаментальным причинам, что и предыдущий, но иллюстрирует их в контексте агрегации и поиска данных:

  1. Точная фильтрация: Вместо того чтобы модель пыталась "на глаз" найти все строки с категорией "Продукты" и сложить их, она сначала определяет инструмент get_total_for_category. Это заставляет ее сфокусироваться на четком критерии отбора, что исключает пропуск строк или случайное включение трат из других категорий.
  2. Надежная агрегация: Задача сгруппировать данные и посчитать суммы по категориям (sum_by_category) — классическая операция, где LLM часто ошибаются, если делают это "в уме". Формализация этого шага в виде функции и плана заставляет модель действовать как база данных: сначала сгруппировать, потом посчитать сумму для каждой группы.
  3. Предотвращение ошибок в сложном запросе: Запрос содержит два вопроса. Без структурированного подхода модель могла бы попытаться ответить на них одновременно, запутаться в цифрах и выдать неверный результат. Методология TART заставляет ее последовательно и независимо обрабатывать каждую часть задачи, что повышает общую надежность ответа.
📌

Основные критерии оценки

  • A. Релевантность техникам промтинга: Да, предлагает фундаментальный подход к промтингу для задач, требующих точности (работа с таблицами, вычисления).
  • B. Улучшение качества диалоговых ответов: Да, исследование напрямую нацелено на повышение точности и снижение "галлюцинаций" в задачах, связанных с табличными данными и математикой.
  • C. Прямая практическая применимость: Да, хотя сам фреймворк TART требует дообучения моделей, основную идею — заставить LLM сначала сгенерировать "инструменты" (код), а затем использовать их — можно напрямую реализовать в промпте для мощных моделей (GPT-4, Claude 3).
  • D. Концептуальная ценность: Очень высокая. Исследование дает пользователю ключевую "ментальную модель": LLM — это не калькулятор, а "планировщик" или "младший программист". Это помогает понять, почему LLM ошибается в расчетах и как обойти это ограничение.
  • E. Новая полезная практика: Да, работа попадает сразу в несколько кластеров:
    • Кластер 1 (Техники формулирования): Предлагает продвинутую технику, эволюцию Chain-of-Thought, для логических и вычислительных задач.
    • Кластер 5 (Извлечение и структурирование): Является ядром исследования — как надежно извлекать и обрабатывать данные из таблиц.
    • Кластер 7 (Надежность и стабильность): Основная цель — снизить ошибки и галлюцинации в числовых и табличных задачах.
  • Чек-лист практичности: Да, исследование показывает, как структурировать сложные запросы, раскрывает неочевидные слабости LLM и предлагает способ повысить точность ответов. Это дает +15 баллов к базовой оценке.
📌

Цифровая оценка полезности

Аргументы в пользу высокой оценки (92/100):

Исследование предлагает не просто "трюк", а фундаментально новый подход к решению целого класса задач, с которыми стандартные LLM справляются плохо — анализ таблиц и точные вычисления. Для пользователя, который часто работает с данными, это настоящий прорыв. Концептуальная ценность огромна: понимание, что LLM лучше попросить написать программу для решения задачи, чем решать ее напрямую, меняет правила игры. Методологию можно адаптировать для использования в обычных чатах с продвинутыми моделями, что делает ее чрезвычайно практичной.

Контраргументы (почему оценка не 100):

  • Требует адаптации: Прямое применение фреймворка TART недоступно обычному пользователю, так как оно предполагает дообучение моделей и наличие среды для выполнения кода. Пользователю нужно самостоятельно "перевести" эту идею в формат промпта, что требует определенного навыка и понимания.
  • Не для всех задач: Метод избыточен для простых вопросов и творческих задач. Его сила раскрывается только в специфических, хотя и важных, сценариях (анализ данных, логические задачи).
  • Зависимость от модели: Эффективность симуляции этого подхода в одном промпте сильно зависит от способностей LLM к генерации кода и следованию сложным инструкциям. На менее мощных моделях это может не сработать.

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

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

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