Last updated on August 7, 2024
Program-aided Language Models (PAL) - еще один пример системы MRKL. Когда им задают вопрос, PAL способны написать код, который решает этот вопрос. Они посылают код в программную среду выполнения, чтобы получить результат. PAL работает в отличие от CoT; промежуточные рассуждения PAL - это код, а CoT - естественный язык.
Важно отметить, что 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.