Промпт-инжиниринг / Техники промптинга
PAL: как нейросеть пишет код для решения задач¶
Когда нейросети решают сложные логические или математические задачи, они часто ошибаются в вычислениях. Техника PAL предлагает элегантный выход: пусть ИИ пишет не ответ, а программу, которая этот ответ вычисляет. Этот метод, описанный в статье Gao et al., 2022, называется Program-Aided Language Models. Вместо того чтобы строить цепочку рассуждений текстом (как в Chain of Thought), модель генерирует код на Python, который затем выполняется в интерпретаторе. Это позволяет переложить точные вычисления на плечи машины, оставив за нейросетью творческую часть - понимание задачи и перевод её на язык программирования.

Источник изображения: Gao и др., (2022)
Суть метода PAL: от текста к коду¶
Представьте, что вы просите ИИ решить арифметическую задачу со множеством действий. Даже мощные модели вроде GPT-4 могут допустить ошибку в длинных расчётах. Техника PAL меняет парадигму: мы просим модель не "подумать и дать ответ", а "написать скрипт, который найдёт ответ". Ключевое отличие от Chain of Thought - результат работы модели это не текст с рассуждениями, а исполняемый код. Этот код передаётся в интерпретатор (например, Python), который выполняет вычисления и возвращает абсолютно точный результат. Таким образом, нейросеть отвечает за логику, а интерпретатор - за точную арифметику.
Практический пример: работа с датами¶
Рассмотрим задачу на понимание дат, актуальную для многих бизнес-приложений (например, расчёт сроков, возрастов). Мы используем LangChain и модель OpenAI GPT-3 (text-davinci-003), но логика применима и к другим моделям, доступным в РФ, таким как YandexGPT или GigaChat - главное, чтобы модель могла генерировать синтаксически правильный Python-код.
Сначала настроим окружение и модель:
from datetime import datetime
from dateutil.relativedelta import relativedelta
from langchain.llms import OpenAI
from dotenv import load_dotenv
import os
load_dotenv()
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
llm = OpenAI(model_name='text-davinci-003', temperature=0)
Теперь сформулируем вопрос и создадим промпт. Промпт содержит несколько примеров (few-shot examples), которые показывают модели шаблон решения: как перевести текстовое условие в код на Python с использованием библиотек datetime и relativedelta.
Промпт:
question = "Today is 27 February 2023. I was born exactly 25 years ago. What is the date I was born in MM/DD/YYYY?"
DATE_UNDERSTANDING_PROMPT = """
# Q: 2015 is coming in 36 hours. What is the date one week from today in MM/DD/YYYY?
# If 2015 is coming in 36 hours, then today is 36 hours before.
today = datetime(2015, 1, 1) - relativedelta(hours=36)
# One week from today,
one_week_from_today = today + relativedelta(weeks=1)
# The answer formatted with %m/%d/%Y is
one_week_from_today.strftime('%m/%d/%Y')
# Q: The first day of 2019 is a Tuesday, and today is the first Monday of 2019. What is the date today in MM/DD/YYYY?
# If the first day of 2019 is a Tuesday, and today is the first Monday of 2019, then today is 6 days later.
today = datetime(2019, 1, 1) + relativedelta(days=6)
# The answer formatted with %m/%d/%Y is
today.strftime('%m/%d/%Y')
# Q: {question}
""".strip() + '\n'
Промпт отправляется модели. Обратите внимание: в примерах код уже содержит комментарии (рассуждения) и рабочие строчки на Python. Модель учится по этому шаблону.
Ответ модели (llm_out):
# If today is 27 February 2023, and I was born exactly 25 years ago, then the date I was born is 25 years before.
today = datetime(2023, 2, 27)
born = today - relativedelta(years=25)
# The answer formatted with %m/%d/%Y is
born.strftime('%m/%d/%Y')
Модель сгенерировала не ответ, а корректный Python-код. Теперь мы можем выполнить его:
Вывод будет точным и не подверженным ошибкам вычислений нейросети: 02/27/1998.
Где применять PAL в реальных проектах¶
Метод PAL особенно эффективен для задач, требующих безошибочных вычислений: финансовые расчёты, календарное планирование, статистическая обработка данных, решение алгебраических уравнений. В российском контексте это может быть автоматизация расчёта отпускных дней по ТК РФ, определение сроков поставки с учётом праздников или конвертация валют по точным курсам. Вместо того чтобы надеяться на арифметические способности модели, вы поручаете ей написать скрипт, который всегда даст верный результат при одних и тех же входных данных.
Главное преимущество PAL - разделение ответственности. Нейросеть, особенно русскоязычная (например, YandexGPT), хорошо справляется с пониманием контекста и формулировок на естественном языке. А стандартный интерпретатор Python гарантирует математическую точность. Комбинируя эти две технологии, вы создаёте более надёжные и предсказуемые AI-решения для бизнеса и аналитики.
Нейросеть на ваших встречах, документах и переписке: отвечает со ссылкой на источник. Это ваша вторая память на базе ИИ. Данные хранятся в России, старт бесплатный.
Зарегистрироваться бесплатноENGRAM запоминает ваши встречи, документы и переписку и мгновенно находит ответ со ссылкой на источник. Ваша вторая память на базе ИИ. Данные в России, старт бесплатный.
Зарегистрироваться бесплатно