mirror of
https://github.com/dair-ai/Prompt-Engineering-Guide
synced 2024-11-06 09:20:31 +00:00
106 lines
4.4 KiB
Plaintext
106 lines
4.4 KiB
Plaintext
# PAL (Program-Aided Language Models)
|
||
|
||
import { Callout, FileTree } from 'nextra-theme-docs'
|
||
import {Screenshot} from 'components/screenshot'
|
||
import PAL from '../../img/pal.png'
|
||
|
||
[Gao et al., (2022)](https://arxiv.org/abs/2211.10435) doğal dil problemlerini okumak ve ara akıl yürütme adımları olarak programlar oluşturmak için LLM'leri kullanan bir yöntem sunar.
|
||
Türetilmiş, program destekli dil modelleri (PAL), çözüm elde etmek için serbest biçimli metin kullanmak yerine çözüm adımını Python yorumlayıcısı gibi programlı bir çalışma zamanına aktardığı için düşünce zinciri yönlendirmesinden farklıdır.
|
||
|
||
<Screenshot src={PAL} alt="PAL" />
|
||
Image Source: [Gao et al., (2022)](https://arxiv.org/abs/2211.10435)
|
||
|
||
LangChain ve OpenAI GPT-3 kullanan bir örneğe bakalım. Sorulan soruyu yorumlayabilen ve Python yorumlayıcısından yararlanarak yanıt sağlayabilen basit bir uygulama geliştirmekle ilgileniyoruz.
|
||
|
||
Spesifik olarak, tarihin anlaşılmasını gerektiren soruları yanıtlamak için LLM kullanımına izin veren bir işlev oluşturmakla ilgileniyoruz. LLM'ye [buradan](https://github.com/reasoning-machines/pal/blob/main/pal/prompt/date_understanding_prompt.py) benimsenen birkaç örneği içeren bir bilgi istemi sağlayacağız.
|
||
|
||
İhtiyacımız olan kütüphaneler:
|
||
|
||
```python
|
||
import openai
|
||
from datetime import datetime
|
||
from dateutil.relativedelta import relativedelta
|
||
import os
|
||
from langchain.llms import OpenAI
|
||
from dotenv import load_dotenv
|
||
```
|
||
|
||
Önce birkaç şeyi yapılandıralım:
|
||
|
||
```python
|
||
load_dotenv()
|
||
|
||
# API yapılandırma
|
||
openai.api_key = os.getenv("OPENAI_API_KEY")
|
||
|
||
# LangChain için
|
||
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
|
||
```
|
||
|
||
Kurulum modeli örneği:
|
||
|
||
```python
|
||
llm = OpenAI(model_name='text-davinci-003', temperature=0)
|
||
```
|
||
|
||
Kurulum istemi + soru:
|
||
|
||
```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 = """
|
||
# S: 36 saat sonra 2015 geliyor. AA/GG/YYYY olarak bugünden bir hafta sonraki tarih nedir?
|
||
# 2015 yılı 36 saat sonra geliyorsa, bugün 36 saat öncesidir.
|
||
today = datetime(2015, 1, 1) - relativedelta(hours=36)
|
||
# Bugünden bir hafta sonra,
|
||
one_week_from_today = today + relativedelta(weeks=1)
|
||
# %m/%d/%Y ile biçimlendirilen yanıt:
|
||
one_week_from_today.strftime('%m/%d/%Y')
|
||
# S: 2019'un ilk günü Salı ve bugün 2019'un ilk Pazartesi günü. Bugünün AA/GG/YYYY cinsinden tarihi nedir?
|
||
# 2019'un ilk günü Salı günü olup bugün de 2019'un ilk Pazartesi günüyse, bugün 6 gün sonradır.
|
||
today = datetime(2019, 1, 1) + relativedelta(days=6)
|
||
# %m/%d/%Y ile biçimlendirilen yanıt:
|
||
today.strftime('%m/%d/%Y')
|
||
# S: Konserin 01/06/1943 tarihinde yapılması planlanmıştı, ancak bir gün ertelenmiştir. AA/GG/YYYY cinsinden 10 gün önceki tarih nedir?
|
||
# Konser 01/06/1943 tarihinde planlanmış, ancak bugüne bir gün ertelenmişse, bugün bir gün sonradır.
|
||
today = datetime(1943, 6, 1) + relativedelta(days=1)
|
||
# 10 gün önce,
|
||
ten_days_ago = today - relativedelta(days=10)
|
||
# %m/%d/%Y ile biçimlendirilen yanıt:
|
||
ten_days_ago.strftime('%m/%d/%Y')
|
||
# S: Bugün 19/4/1969. AA/GG/YYYY cinsinden 24 saat sonraki tarih nedir?
|
||
# Bugün 19/4/1969.
|
||
today = datetime(1969, 4, 19)
|
||
# 24 hours later,
|
||
later = today + relativedelta(hours=24)
|
||
# %m/%d/%Y ile biçimlendirilen yanıt:
|
||
today.strftime('%m/%d/%Y')
|
||
# S: Jane bugünün 11/3/2002 olduğunu düşündü, ama aslında bugün 12 Mart yani 1 gün sonra. AA/GG/YYYY cinsinden 24 saat sonraki tarih nedir?
|
||
# Jane bugünün 11/3/2002 olduğunu düşündüyse ama aslında bugün 12 Mart ise, o zaman bugün 1/3/2002'dir.
|
||
today = datetime(2002, 3, 12)
|
||
# 24 saat sonra,
|
||
later = today + relativedelta(hours=24)
|
||
# %m/%d/%Y ile biçimlendirilen yanıt:
|
||
later.strftime('%m/%d/%Y')
|
||
# S: Jane, 2001'de Şubat ayının son gününde doğdu. Bugün onun 16.yaş günü. AA/GG/YYYY cinsinden dünkü tarih nedir?
|
||
# Jane 2001'de Şubat ayının son gününde doğduysa ve bugün onun 16.yaş günü ise, o zaman bugün 16 yıl sonradır.
|
||
today = datetime(2001, 2, 28) + relativedelta(years=16)
|
||
# Dün,
|
||
yesterday = today - relativedelta(days=1)
|
||
# %m/%d/%Y ile biçimlendirilen yanıt:
|
||
yesterday.strftime('%m/%d/%Y')
|
||
# S: {question}
|
||
""".strip() + '\n'
|
||
```
|
||
|
||
```python
|
||
llm_out = llm(DATE_UNDERSTANDING_PROMPT.format(question=question))
|
||
print(llm_out)
|
||
```
|
||
|
||
```python
|
||
exec(llm_out)
|
||
print(born)
|
||
```
|
||
|
||
Aşağıdaki çıktıyı verecektir: `27/02/1998` |