Announcing our new Course: AI Red-Teaming and AI Safety Masterclass

Check it out →

🟦 Código como Raciocínio

Última atualização em August 7, 2024 por Sander Schulhoff

Os Modelos de Linguagem Auxiliados por Programa (Program-aided Language Models - PALs)1 são outro exemplo de um sistema de MRKL. Quando uma pergunta é feita, os PALs são capazes de escrever código que resolve essa pergunta. Eles enviam o código para uma execução programática para obter o resultado. O PAL funciona em contraste com a Cadeia de Pensamento; o raciocínio intermediário do PAL é código, enquanto o do CdP é linguagem natural.

PAL Example (Gao et al.)

Uma coisa importante a notar é que o PAL, na verdade, intercala linguagem natural (NL) e código. Na imagem acima, em azul, estão os raciocínios em linguagem natural que o PAL gera. Embora isso não seja mostrado na imagem, o PAL, na verdade, gera um '#' antes de cada linha de raciocínio em NL, para que sejam interpretados como comentários pela execução programática.

Exemplo

Vamos ver um exemplo de PAL resolvendo uma questão de matemática. Eu uso um prompt de 3 disparos, que é uma versão simplificada deste aqui1.

Usarei o LangChain, um pacote Python para encadear a funcionalidade do LLM. Primeiro, são necessárias algumas instalações:

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

Então, podemos criar uma instância do GPT-3 davinci-002 (uma chamada de API acontece quando usamos esse objeto)

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

Aqui está o prompt de poucos disparos:

MATH_PROMPT = '''
Q: Havia nove computadores na sala do servidor. Cinco computadores foram instalados a cada dia, de segunda a quinta-feira. Quantos computadores há agora na sala do servidor?

# solução em Python:
"""Havia nove computadores na sala do servidor. Cinco computadores foram instalados a cada dia, de segunda a quinta-feira. Quantos computadores há agora na sala do servidor?"""
computador_inicio = 9
computador_por_dia = 5
num_dias = 4  # 4 dias entre segunda e quinta
computadores_adicionados = computador_por_dia * num_dias
computadores_total = computador_inicio + computadores_adicionados
resultado = computadores_total
return resultado


Q: Dani tem cinco brinquedos. Para o Natal, ela ganhou dois brinquedos de seu pai e dois da sua mãe. Quantos brinquedos ela tem agora?

# solução em Python:
"""Dani tem cinco brinquedos. Para o Natal, ela ganhou dois brinquedos de seu pai e dois da sua mãe. Quantos brinquedos ela tem agora?"""
brinquedos_inicio = 5
mae_brinquedos = 2
pai_brinquedos = 2
brinquedos_recebidos= mae_brinquedos + pai_brinquedos
total_brinquedos= brinquedos_inicio + brinquedos_recebidos
resultado = total_brinquedos
return resultado


Q: Jason tinha 20 pirulitos. Ele deu alguns para o Denny. Agora Jason tem 12 pirulitos. Quantos pirulitos ele deu para o Denny?

# solução em Python:
"""Jason tinha 20 pirulitos. Ele deu alguns para o Denny. Agora Jason tem 12 pirulitos. Quantos pirulitos ele deu para o Denny?"""
jason_pirulitos_inicio = 20
jason_pirulitos_fim = 12
denny_pirulitos = jason_pirulitos_inicio - jason_pirulitos_fim
resultado = denny_pirulitos
return resultado


Q: {pergunta}

# solução em Python:
'''

Agora podemos passar esse prompt combinado para o GPT-3.

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

A saída é:

Emma levou uma viagem de avião de 60 minutos para Minas Gerais. Ela então pegou um trem de 2 horas para Ouro Preto, e então um ônibus de 30 minutos para Ouro Branco. Quanto tempo ela levou para chegar a Ouro Branco?



viagem_aviao = 60


viagem_trem = 2 * 60 # 2 horas em minutos


viagem_onibus = 30


total_tempo = viagem_aviao + viagem_trem + viagem_onibus


resultado = total_time

Finalmente, podemos passar esse código para um runtime no Python e obter a resposta:

exec(llm_out)
print(result)

A saída é 210, o que é correta.

Veja o notebook Jupyter para esse exemplo here.

More

Confira também esse exemplo.

Footnotes

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

Edit this page
Word count: 0
Copyright © 2024 Learn Prompting.