⚠️PAL (Program-Aided Language Models)

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

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

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

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

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

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

circle-info

import openai

from datetime import datetime

from dateutil.relativedelta import relativedelta

import os

from langchain.llms import OpenAI

from dotenv import load_dotenv

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

circle-info

load_dotenv()

# API configuration

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

# for LangChain

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

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

circle-info

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

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

circle-info

вопрос = "Сегодня 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'

circle-info

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

print(llm_out)

circle-info

exec(llm_out) print(born)

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

Last updated