Prompt Engineering Guide
😃 Basics
💼 Applications
🧙‍♂️ Intermediate
🤖 Агенты
⚖️ Reliability
🖼️ Image Prompting
🔓 Prompt Hacking
🔨 Tooling
💪 Prompt Tuning
🎲 Miscellaneous
Models
📙 Vocabulary Reference
📚 Bibliography
📦 Prompted Products
🛸 Additional Resources
🔥 Hot Topics
✨ Credits

Код как рассуждение

🟦 This article is rated medium
Reading Time: 1 minute
Last updated on August 7, 2024

Сандер Шульхофф

Program-aided Language Models (PAL) - еще один пример системы MRKL. Когда им задают вопрос, PAL способны написать код, который решает этот вопрос. Они посылают код в программную среду выполнения, чтобы получить результат. PAL работает в отличие от CoT; промежуточные рассуждения PAL - это код, а CoT - естественный язык.

Пример PAL (Gao и др.)

Важно отметить, что PAL фактически чередует естественный язык (NL - natural language) и код. На изображении выше синим цветом выделены рассуждения на естественном языке, которые генерирует PAL. Хотя это не показано на изображении, PAL фактически генерирует '#' перед каждой строкой рассуждений на естественном языке, так что они интерпретируются как комментарии программной средой выполнения.

Пример

Давайте рассмотрим пример решения PAL математического вопроса. Я использую промт из трех вопросов, который является упрощенной версией вот этого.

Для этого я буду использовать langchain, пакет Python для объединения функциональности LLM в цепочку. Сначала необходимо выполнить несколько установок:

!pip install langchain==0.0.26
!pip install openai
from langchain.llms import OpenAI
import os
os.environ["OPENAI_API_KEY"] = "sk-YOUR_KEY_HERE"

Затем мы можем создать копию GPT-3 davinci-002 (при использовании этого объекта происходит вызов API)

llm = OpenAI(model_name='text-davinci-002', temperature=0)

Вот несколько примеров промта:

MATH_PROMPT = '''
Q: В серверной комнате было девять компьютеров. Каждый день, с понедельника по четверг, устанавливалось еще пять компьютеров. Сколько компьютеров сейчас находится в серверной?

# решение на языке Python:
"""В серверной комнате было девять компьютеров. Каждый день с понедельника по четверг устанавливалось еще пять компьютеров. Сколько компьютеров сейчас в серверной?"""
компьютеры_начальные = 9
компьютеры_в_день = 5
число_дней = 4 # 4 дня между понедельником и четвергом
компьютеры_добавлены = компьютеры_в_день * число_дней
компьютеры_всего = компьютеры_начальные + компьютеры_добавленные
результат = компьютеры_всего
вернуть результат


Q: У Шона есть пять игрушек. На Рождество он получил по две игрушки от мамы и папы. Сколько игрушек у него сейчас?

# решение на языке Python:
"""У Шона есть пять игрушек. На Рождество он получил по две игрушки от мамы и папы. Сколько игрушек у него сейчас?"""
игрушки_инициалы = 5
игрушки_мамы = 2
папины_игрушки = 2
общее_полученное = мама_игрушки + папа_игрушки
общее_количество_игрушек = игрушки_начальные + общее_количество_полученных
результат = всего_игрушек


Q: У Джейсона было 20 леденцов. Он дал Денни несколько леденцов. Теперь у Джейсона 12 леденцов. Сколько леденцов Джейсон отдал Денни?

# решение на языке Python:
"""У Джейсона было 20 леденцов. Он дал Денни несколько леденцов. Теперь у Джейсона 12 леденцов. Сколько леденцов Джейсон отдал Денни?""""
джейсон_леденцы_начало = 20
джейсон_леденцы_после = 12 денни_леденцы = джейсон_леденцы_начало - джейсон_леденцы_после
результат = денни_леденцы

Q вопрос: {question}

# решение на языке Python:
'''

Теперь мы можем передать комбинированный промт в GPT-3.

llm_out = llm(MATH_PROMPT.format(question=question))
print(llm_out)

Вывод:

"""Эмма совершила 60-минутный перелет на самолете в Сиэтл. Затем она проехала 2 часа на поезде до Портленда, а затем 30 минут на автобусе до Ванкувера. Сколько времени ей понадобилось, чтобы добраться до Ванкувера?"""


полёт_на_самолёте = 60


проезд_на_поезде = 2 * 60 # 2 часа в минутах


проезд_на_автобусе = 30


общее_время = полёт_на_самолёте + проезд_на_поезде + проезд_на_автобусе


результат = общее_время

Наконец, мы можем передать этот код в среду выполнения Python, чтобы получить ответ:

exec(llm_out)
print(result)

На выходе получается 210, что верно.

Смотрите блокнот Jupyter для этого примера [здесь] (https://github.com/trigaten/Learn_Prompting/blob/v1.2.3/docs/code_examples/PAL.ipynb).

Подробнее

Также смотрите пример PAL's colab.

Footnotes

  1. Gao, L., Madaan, A., Zhou, S., Alon, U., Liu, P., Yang, Y., Callan, J., & Neubig, G. (2022). 2