# PAL (Program Destekli Dil Modelleri) import { Callout, FileTree } from 'nextra-theme-docs' import {Screenshot} from 'components/screenshot' import PAL from '../../img/pal.png' [Gao ve ekibi, (2022)](https://arxiv.org/abs/2211.10435), doğal dil problemlerini okumak ve ara adım olarak önermeleri oluşturmak için LLM'leri kullanan bir metod sunmuştur. Program destekli dil modelleri (PAL) olarak adlandırılan bu yöntem, çözümü Python yorumlayıcısı gibi programlamaya dayalı bir çalışma zamanına devrederek, düşünce zinciri isteminin serbest formatta çözüm elde etme yönteminden farklıdır. Resim Kaynağı: [Gao ve ekibi, (2022)](https://arxiv.org/abs/2211.10435) Bir örneği, LangChain ve OpenAI GPT-3 kullanarak inceleyelim. Python yorumlayıcısını kullanarak sorulan soruyu yorumlayabilen ve bir cevap sağlayabilen basit bir uygulama geliştirmek istiyoruz. Özellikle, LLM'yi tarih anlama gerektiren soruları yanıtlamak için kullanabilen bir işlevsellik oluşturma ilgisi duyuyoruz. LLM'ye, [buradan](https://github.com/reasoning-machines/pal/blob/main/pal/prompt/date_understanding_prompt.py) alınan birkaç örnek içeren bir istem sunacağız. İhtiyacımız olan importlar şunlardır: ```python import openai from datetime import datetime from dateutil.relativedelta import relativedelta import os from langchain.llms import OpenAI from dotenv import load_dotenv ``` Öncelikle birkaç şeyi yapılandıralım: ```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") ``` Model örneğini kurulmuş hali: ```python llm = OpenAI(model_name='text-davinci-003', temperature=0) ``` İstem ve sorunun kurulumu: ```python question = "Bugün 27 Şubat 2023. Tam 25 yıl önce doğmuştum. Doğduğum tarih MM/DD/YYYY formatında neydi?" DATE_UNDERSTANDING_PROMPT = """ # S: 2015 yılına 36 saat kaldı. Bir hafta sonra günün tarihi MM/DD/YYYY formatında ne olacak? # Eğer 2015 yılına 36 saat kaldıysa, bugün 36 saat öncesidir. today = datetime(2015, 1, 1) - relativedelta(hours=36) # Bir hafta sonrası, one_week_from_today = today + relativedelta(weeks=1) # Cevap %m/%d/%Y formatında one_week_from_today.strftime('%m/%d/%Y') # S: 2019'un ilk günü bir Salı’dır ve bugün 2019'un ilk Pazartesi'si. Bugünün tarihi MM/DD/YYYY formatında ne? # Eğer 2019’un ilk günü bir Salı ve bugün 2019’un ilk Pazartesi’si ise, bu, bugünün 6 gün sonrası olduğu anlamına gelir. today = datetime(2019, 1, 1) + relativedelta(days=6) # Cevap %m/%d/%Y formatında today.strftime('%m/%d/%Y') # S: Konser 06/01/1943'te olması planlanıyordu, ancak bugüne bir gün ertelendi. 10 gün önceki tarih MM/DD/YYYY formatında neydi? # Eğer konser 06/01/1943’te olması planlanıyor ama bir günlük gecikmeyle bugüne denk geldiyse, o zaman bugün bir gün sonrasıdır. today = datetime(1943, 6, 1) + relativedelta(days=1) # 10 gün önce, ten_days_ago = today - relativedelta(days=10) # Cevap %m/%d/%Y formatında ten_days_ago.strftime('%m/%d/%Y') # S: Bugün 4/19/1969. 24 saat sonra tarih MM/DD/YYYY formatında ne olacak? # Bugün 4/19/1969. today = datetime(1969, 4, 19) # 24 saat sonra, later = today + relativedelta(hours=24) # Cevap %m/%d/%Y formatında today.strftime('%m/%d/%Y') # S: Jane bugünün 3/11/2002 olduğunu düşündü, ancak bugün aslında 12 Mart, yani 1 gün sonrası. 24 saat sonrası tarih MM/DD/YYYY formatında ne olacak? # Eğer Jane bugünün 3/11/2002 olduğunu düşündü, ancak bugün aslında 12 Mart ise, o zaman bugün 3/12/2002’dir. today = datetime(2002, 3, 12) # 24 saat sonra, later = today + relativedelta(hours=24) # Cevap %m/%d/%Y formatında later.strftime('%m/%d/%Y') # S: Jane, 2001'in Şubat ayının son gününde doğdu. Bugün onun 16. yaş günü. Dünkünün tarihi MM/DD/YYYY formatında neydi? # Eğer Jane 2001'in Şubat ayının son gününde doğdu ve bugün onun 16. yaşı ise, o zaman bugün 16 yıl sonrasıdır. today = datetime(2001, 2, 28) + relativedelta(years=16) # Dün, yesterday = today - relativedelta(days=1) # Cevap %m/%d/%Y formatında yesterday.strftime('%m/%d/%Y') # S: {question} """.strip() + '\n' ``` ```python llm_out = llm.execute(DATE_UNDERSTANDING_PROMPT.format(question=question)) print(llm_out) ``` Bu, aşağıdakini çıktı olarak verecektir: ``` # Eğer bugün 27 Şubat 2023 ve tam 25 yıl önce doğduysam, o zaman doğum tarihim 25 yıl öncesidir. today = datetime(2023, 2, 27) # Doğum tarihim 25 yıl öncesidir, born = today - relativedelta(years=25) # Cevap %m/%d/%Y formatında born.strftime('%m/%d/%Y') ``` `llm_out`'un içeriği bir Python kodu parçacığıdır. Aşağıda, bu Python kod parçacığını çalıştırmak için `exec` komutu kullanılmaktadır. ```python exec(llm_out) print(born) ``` Bu, aşağıdakini çıktı olarak verecektir: `02/27/1998`