⚠️PAL (Program-Aided Language Models)

"Program-Aided Language Models" дословно на русский "программно-управляемые языковые модели"

Gao и др., (2022) представили метод, который использует модели LLM для анализа проблем на естественном языке и генерации программ в качестве промежуточных шагов рассуждения. Эти методы называются "program-aided language models" (сокращенно PAL) и отличаются от цепочки мыслей тем, что они не просто используют текст для нахождения решения, а передают этот этап в программную среду, такую как интерпретатор Python.

Источник изображения: Gao и др., (2022)

Давайте рассмотрим пример с использованием LangChain и OpenAI GPT-3. Мы заинтересованы в разработке простого приложения, которое способно интерпретировать заданный вопрос и предоставлять ответ, используя интерпретатор Python.

онкретно, нас интересует создание функциональности, позволяющей использовать LLM для ответов на вопросы, требующие понимания даты. Мы предоставим LLM подсказку, которая включает несколько образцов, взятых отсюда.

Вот перечень импортов, которые нам понадобятся:

import openai

from datetime import datetime

from dateutil.relativedelta import relativedelta

import os

from langchain.llms import OpenAI

from dotenv import load_dotenv

Давайте начнем с настройки нескольких вещей:

load_dotenv()

# API configuration

openai.api_key = os.getenv("OPENAI_API_KEY")

# for LangChain

os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")

Настройка экземпляра модели:

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

Настройка подсказки + вопроса:

вопрос = "Сегодня 27 февраля 2023 года. Я родился ровно 25 лет назад. Какова дата моего рождения в формате ММ/ДД/ГГГГ?".

DATE_UNDERSTANDING_PROMPT = """

# вопрос: 2015 год наступит через 36 часов. Какой будет дата через неделю после сегодняшнего дня в формате ММ/ДД/ГГГГ?

# Если 2015 год наступает через 36 часов, то сегодняшний день наступает за 36 часов до него.

today = datetime(2015, 1, 1) - relativedelta(hours=36)

# Через неделю после сегодняшнего дня, one_week_from_today = today + relativedelta(weeks=1)

# Ответ, отформатированный в %m/%d/%Y, имеет вид one_week_from_today.strftime('%m/%d/%Y')

# Вопрос: Первый день 2019 года - вторник, а сегодня - первый понедельник 2019 года. Какой будет сегодняшняя дата в формате ММ/ДД/ГГГГ?

# Если первый день 2019 года - вторник, а сегодня - первый понедельник 2019 года, то сегодня будет на 6 дней позже. today = datetime(2019, 1, 1) + relativedelta(days=6)

# Ответ, отформатированный в %m/%d/%Y, имеет вид| today.strftime('%m/%d/%Y')

# вопрос: Концерт должен был состояться 06/01/1943, но был перенесен на один день на сегодня. Чему равна дата 10 дней назад в формате ММ/ДД/ГГГГ?

# Если концерт должен был состояться 06/01/1943, но был перенесен на один день на сегодня, то сегодня - это на один день позже. today = datetime(1943, 6, 1) + relativedelta(days=1)

# 10 дней назад, ten_days_ago = today - relativedelta(days=10)

# Ответ, отформатированный в %m/%d/%Y, имеет вид

ten_days_ago.strftime('%m/%d/%Y')

# вопрос: Сегодня 4/19/1969. Какой будет дата через 24 часа в формате ММ/ДД/ГГГГ?

# Сегодня 4/19/1969. today = datetime(1969, 4, 19)

# 24 часа спустя, later = today + relativedelta(hours=24)

# Ответ, отформатированный в %m/%d/%Y, имеет вид

today.strftime('%m/%d/%Y')

# Вопрос: Джейн думала, что сегодня 3/11/2002, но на самом деле сегодня 12 марта, то есть на 1 день позже. Какой будет дата через 24 часа в формате ММ/ДД/ГГГГ?

# Если Джейн думала, что сегодня 3/11/2002, а на самом деле сегодня 12 марта, то сегодня 3/12/2002. today = datetime(2002, 3, 12)

# 24 часа спустя, later = today + relativedelta(hours=24)

# Ответ, отформатированный в %m/%d/%Y, имеет вид later.strftime('%m/%d/%Y')

# Вопрос: Джейн родилась в последний день февраля 2001 года. Сегодня ей исполняется 16 лет. Какова дата вчерашнего дня в формате ММ/ДД/ГГГГ?

# Если Джейн родилась в последний день февраля 2001 года и сегодня ее 16-летний день рождения, то сегодня 16 лет спустя. today = datetime(2001, 2, 28) + relativedelta(years=16)

# Вчера, yesterday = today - relativedelta(days=1)

# Ответ, отформатированный в %m/%d/%Y, имеет вид yesterday.strftime('%m/%d/%Y')

# вопрос: {question}

""".strip() + '\n'

llm_out = llm(DATE_UNDERSTANDING_PROMPT.format(question=question))

print(llm_out)

exec(llm_out) print(born)

Это выведет следующее: 02/27/1998

Last updated