Program of Thought
Код вместо текста
Проблема: ИИ часто ошибается в арифметике даже с Chain of Thought. Когда вычисления становятся сложными, как обеспечить точность?
Решение: Используй калькулятор, а не устный счёт
Program of Thought (PoT) заставляет ИИ писать код для решения вычислительных задач вместо попыток считать в уме. Это как использовать калькулятор вместо устного счёта — компьютер точно обрабатывает числа. Если Chain-of-Thought рассуждает на естественном языке, то PoT перекладывает саму арифметику на код, который выполняет внешний интерпретатор. Поэтому итоговый ответ берётся из детерминированного выполнения, а не из того, что модель предсказывает следующую цифру токен за токеном.
Как это работает
Вся суть — в разделении ролей. Языковая модель действительно хороша в рассуждении: прочитать текстовую задачу, понять, какие величины важны, и выстроить последовательность операций. А вот в вычислениях она ненадёжна, потому что каждое «посчитанное» число — это на самом деле просто самый вероятный токен в данном контексте, и именно на длинных умножениях или составных формулах это вероятностное угадывание даёт сбой. PoT оставляет за моделью логику, но превращает каждый шаг в явную строку кода на Python (или JavaScript): объявляет переменные, пишет формулу и передаёт программу настоящему интерпретатору. Интерпретатор возвращает точное значение, а модель потом объясняет, что этот результат означает. Ты получаешь гибкость модели на этапе «что делать» и точность машины на этапе «сделать это».
Когда применять и на что смотреть
Бери PoT всякий раз, когда ответ зависит от вычисления, которое должно быть точным: сложные проценты, конвертация единиц, разница между датами, статистика по списку или любая многошаговая числовая цепочка. Конкретный пример: «вклад $10 000 под 5% годовых с ежемесячной капитализацией на 5 лет». Если попросить решить это в тексте, модель часто выдаст уверенную, но слегка неверную цифру. С PoT она вместо этого генерирует balance = 10000 * (1 + 0.05/12) ** (12 * 5), запускает код и сообщает точные $12 833,59. Основные компромиссы: нужна песочница, которая реально выполнит сгенерированный код (это добавляет задержку и поверхность для атак), и техника помогает только для задач, которые можно выразить программно — она бесполезна для открытых рассуждений, оценочных суждений или задач, где нет формулы. Воспринимай её как правильный инструмент для количественных вопросов, а не как универсальную замену обычному рассуждению.
Представьте это как калькулятор против устного счёта:
- 1. Читаем задачу: "Рассчитай сложный процент за 5 лет..."
- 2. Пишем код: Выражаем логику на Python/JavaScript
- 3. Выполняем: Запускаем код и получаем точный результат
- 4. Объясняем: Описываем, что делает код и какой ответ
Где это используется?
- Финансовые расчёты: Сложные проценты, платежи по кредиту, ROI
- Анализ данных: Статистические расчёты, агрегации
- Научные вычисления: Расчёты по физике, химии
- Математика дат: Дни между датами, конвертация часовых поясов
Интересный факт: Program of Thought достигает почти идеальной точности на математических текстовых задачах, где Chain of Thought даёт ~70%. Ключевое понимание: пусть ИИ делает то, в чём он хорош (логика), а компьютер — то, в чём хорош он (вычисления)!
Попробуйте сами!
Используй интерактивный пример ниже, чтобы увидеть, как генерация кода вместо прямых вычислений приводит к более точным результатам.
💻 Program of Thought — вместо текстовых рассуждений модель генерирует и выполняет код. Это устраняет ошибки вычислений и даёт точные результаты.
Если инвестировать $1000 под 5% годовых на 5 лет с ежегодной капитализацией, сколько получится?
⚠️ Неточный результат из-за округлений
Если инвестировать $1000 под 5% годовых на 5 лет с ежегодной капитализацией, сколько получится? Напиши Python код для решения этой задачи. Выведи результат.
LLM отлично генерируют код, но плохо считают в уме. Program of Thought использует сильную сторону модели (код) для компенсации слабой (арифметика). Код выполняется интерпретатором, который не ошибается.
Частые вопросы
Что такое Program of Thought (PoT) в промптинге?
Program of Thought (PoT) — это техника, при которой модель не считает результат в уме, а пишет код (обычно Python), решающий задачу. Код выполняет внешний интерпретатор и возвращает точное значение, после чего модель объясняет ответ. Так логика остаётся за моделью, а вычисления — за машиной.
Чем Program of Thought отличается от Chain-of-Thought?
Chain-of-Thought рассуждает шагами на естественном языке и сам же «вычисляет» числа, предсказывая токены, из-за чего часто ошибается в арифметике. Program of Thought тоже рассуждает по шагам, но каждый вычислительный шаг выражает в виде кода и запускает его в интерпретаторе, получая детерминированный и точный результат.
Когда стоит использовать Program of Thought?
Когда ответ зависит от точного вычисления: сложные проценты, конвертация единиц, разница между датами, статистика по списку чисел, многошаговые формулы. Для открытых рассуждений, оценочных суждений и задач без формулы PoT не нужен — там обычного рассуждения достаточно.
Какие минусы и ограничения у Program of Thought?
Нужна песочница, которая реально выполнит сгенерированный код, — это добавляет задержку и поверхность для атак (безопасность исполнения). Кроме того, техника помогает только для задач, которые можно выразить программно: открытые рассуждения и субъективные оценки она не улучшает.
Попробуй сам
Интерактивное демо этой техники
Вклад $10,000 под 5% годовых с ежемесячной капитализацией на 3 года. Какая итоговая сумма?
Используем формулу сложных процентов: A = P(1 + r/n)^(nt) A = 10000(1 + 0.05/12)^(12×3) A = 10000 × 1.004167^36 A ≈ $11,614.72
# Данные
principal = 10000 # начальная сумма
annual_rate = 0.05 # годовая ставка
compounds_per_year = 12 # капитализация в месяц
years = 3
# Формула сложных процентов
monthly_rate = annual_rate / compounds_per_year
total_periods = compounds_per_year * years
final_amount = principal * (1 + monthly_rate) ** total_periods
print(f"Итоговая сумма: ${final_amount:.2f}")
print(f"Заработано процентов: ${final_amount - principal:.2f}")
🖥️ ВЫПОЛНЕНИЕ: monthly_rate = 0.05 / 12 = 0.00416666... total_periods = 12 × 3 = 36 final_amount = 10000 × (1.00416666...)^36 final_amount = 10000 × 1.16161678... final_amount = 11616.17
✅ ТОЧНЫЙ ОТВЕТ: Итоговая сумма: 1,616.17
💡 Преимущество кода: точность до цента, нет ошибок округления при ручном расчёте.
Program of Thought даёт точный ответ ($11,616.17) против приблизительного ($11,614.72). Код устраняет ошибки округления.
Создайте бесплатный аккаунт для решения челленджей
3 челленджей с AI-проверкой для этого урока
Этот урок — часть структурированного курса по LLM.
Мой путь обучения