You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
4.4 KiB
Plaintext
107 lines
4.4 KiB
Plaintext
1 year ago
|
|
||
|
# PAL (Modelos de lenguaje asistidos por programa)
|
||
|
|
||
|
import { Callout, FileTree } from 'nextra-theme-docs'
|
||
|
import {Screenshot} from 'components/screenshot'
|
||
|
import PAL from '../../img/pal.png'
|
||
|
|
||
1 year ago
|
[Gao et al., (2022)](https://arxiv.org/abs/2211.10435) presenta un método que utiliza LLMs para leer problemas en lenguaje natural y generar programas como pasos intermedios de razonamiento. Llamado modelos de lenguaje asistidos por programa (PAL), difiere del prompting en cadena de pensamiento en que, en lugar de utilizar texto libre para obtener una solución, desplaza el paso de la solución a un tiempo de ejecución programático, como un intérprete de Python.
|
||
1 year ago
|
|
||
|
<Screenshot src={PAL} alt="PAL" />
|
||
|
Image Source: [Gao et al., (2022)](https://arxiv.org/abs/2211.10435)
|
||
|
|
||
|
Veamos un ejemplo utilizando LangChain y OpenAI GPT-3. Estamos interesados en desarrollar una aplicación simple que sea capaz de interpretar la pregunta formulada y proporcionar una respuesta aprovechando el intérprete de Python.
|
||
|
|
||
|
Específicamente, estamos interesados en crear una funcionalidad que permita el uso del LLM para responder preguntas que requieren comprensión de fechas. Proporcionaremos al LLM una indicación que incluye algunos ejemplos adoptados de [aquí](https://github.com/reasoning-machines/pal/blob/main/pal/prompt/date_understanding_prompt.py).
|
||
|
|
||
|
Estos son los imports que necesitamos:
|
||
|
|
||
|
```python
|
||
|
import openai
|
||
|
from datetime import datetime
|
||
|
from dateutil.relativedelta import relativedelta
|
||
|
import os
|
||
|
from langchain.llms import OpenAI
|
||
|
from dotenv import load_dotenv
|
||
|
```
|
||
|
|
||
|
Configuremos primeros algunas cosas:
|
||
|
|
||
|
```python
|
||
|
load_dotenv()
|
||
|
|
||
|
# API configuration
|
||
|
openai.api_key = os.getenv("OPENAI_API_KEY")
|
||
|
|
||
|
# for LangChain
|
||
|
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
|
||
|
```
|
||
|
|
||
|
Configuremos la instancia del modelo
|
||
|
|
||
|
```python
|
||
|
llm = OpenAI(model_name='text-davinci-003', temperature=0)
|
||
|
```
|
||
|
|
||
|
Configuremos el prompt y la pregunta:
|
||
|
|
||
|
```python
|
||
|
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: The concert was scheduled to be on 06/01/1943, but was delayed by one day to today. What is the date 10 days ago in MM/DD/YYYY?
|
||
|
# If the concert was scheduled to be on 06/01/1943, but was delayed by one day to today, then today is one day later.
|
||
|
today = datetime(1943, 6, 1) + relativedelta(days=1)
|
||
|
# 10 days ago,
|
||
|
ten_days_ago = today - relativedelta(days=10)
|
||
|
# The answer formatted with %m/%d/%Y is
|
||
|
ten_days_ago.strftime('%m/%d/%Y')
|
||
|
# Q: It is 4/19/1969 today. What is the date 24 hours later in MM/DD/YYYY?
|
||
|
# It is 4/19/1969 today.
|
||
|
today = datetime(1969, 4, 19)
|
||
|
# 24 hours later,
|
||
|
later = today + relativedelta(hours=24)
|
||
|
# The answer formatted with %m/%d/%Y is
|
||
|
today.strftime('%m/%d/%Y')
|
||
|
# Q: Jane thought today is 3/11/2002, but today is in fact Mar 12, which is 1 day later. What is the date 24 hours later in MM/DD/YYYY?
|
||
1 year ago
|
# If Jane thought today is 3/11/2002, but today is in fact Mar 12, then today is 3/12/2002.
|
||
1 year ago
|
today = datetime(2002, 3, 12)
|
||
|
# 24 hours later,
|
||
|
later = today + relativedelta(hours=24)
|
||
|
# The answer formatted with %m/%d/%Y is
|
||
|
later.strftime('%m/%d/%Y')
|
||
|
# Q: Jane was born on the last day of Feburary in 2001. Today is her 16-year-old birthday. What is the date yesterday in MM/DD/YYYY?
|
||
|
# If Jane was born on the last day of Feburary in 2001 and today is her 16-year-old birthday, then today is 16 years later.
|
||
|
today = datetime(2001, 2, 28) + relativedelta(years=16)
|
||
|
# Yesterday,
|
||
|
yesterday = today - relativedelta(days=1)
|
||
|
# The answer formatted with %m/%d/%Y is
|
||
|
yesterday.strftime('%m/%d/%Y')
|
||
|
# Q: {question}
|
||
|
""".strip() + '\n'
|
||
|
```
|
||
|
|
||
|
```python
|
||
|
llm_out = llm(DATE_UNDERSTANDING_PROMPT.format(question=question))
|
||
|
print(llm_out)
|
||
|
```
|
||
|
|
||
|
```python
|
||
|
exec(llm_out)
|
||
|
print(born)
|
||
|
```
|
||
|
|
||
|
Esto producirá la siguiente salida: `02/27/1998`
|