Skip to content

Aplicațiile prompturilor

În acest ghid, vom acoperi câteva modalități avansate și interesante în care putem folosi ingineria prompturilor pentru a executa sarcini utile și mai avansate.

Reține că această secțiune este în curs de dezvoltare intensă. Subiecte:


Generarea de date

LLM-urile au capacități puternice de a genera text. Folosirea strategiilor eficiente de prompturi poate ghida modelul să producă răspunsuri mai bune, mai consistente și mai factuale. LLM-urile pot fi de asemenea foarte utile pentru generarea de date care sunt utile pentru a rula tot felul de experimente. De exemplu, putem folosi pentru a genera eșantioane rapide pentru un clasificator de sentimente precum așa:

Prompt:

Produce 10 exemple pentru analiza sentimentelor. Exemplele sunt categorizate fie ca pozitive, fie ca negative. Produce 2 exemple negative și 8 exemple pozitive. Folosește acest format pentru exemple:
Î: <propoziție>
R: <sentiment>

Ieșire:

Î: Tocmai am primit cea mai bună veste vreodată!
R: Pozitiv

Î: Tocmai am primit o mărire la muncă!
R: Pozitiv

Î: Sunt atât de mândru de ceea ce am realizat astăzi.
R: Pozitiv

Î: Am cea mai bună zi vreodată!
R: Pozitiv

Î: Îmi doresc cu adevărat weekend-ul.
R: Pozitiv

Î: Tocmai am primit cel mai bun cadou vreodată!
R: Pozitiv

Î: Sunt atât de fericit acum.
R: Pozitiv

Î: Sunt atât de binecuvântat să am o familie atât de uimitoare.
R: Pozitiv

Î: Vremea afară este atât de sumbră.
R: Negativ

Î: Tocmai am primit niște vești groaznice.
R: Negativ

Aceasta este foarte utilă. Folosim acest exemplu pentru un test diferit într-o altă secțiune a ghidurilor.

Iată un alt exemplu de prompt care arată cum să valorifici LLM-ul pentru o sarcină de etichetare/augmentare de date.

Prompt:

produce 3 recenzii de vin și etichetează tokenii legați de gust, aromă, parfum; prezintă rezultatul ca un fișier json, în plus adaugă coordonatele fiecărui termen pentru sarcina NER

Ieșire:

[
  {
    "review": "Acest Chardonnay are o textură bogată, cremoasă cu note de vanilie și stejar untos. Gustul este neted și bine echilibrat, cu un indiciu de fructe tropicale la final.",
    "tokens": [
      {"text": "bogată", "label": "aromă", "start": 5, "end": 9},
      {"text": "cremoasă", "label": "textură", "start": 10, "end": 16},
      {"text": "vanilie", "label": "aromă", "start": 28, "end": 35},
      {"text": "untos", "label": "aromă", "start": 40, "end": 47},
      {"text": "stejar", "label": "parfum", "start": 48, "end": 51},
      {"text": "neted", "label": "gust", "start": 61, "end": 67},
      {"text": "bine echilibrat", "label": "gust", "start": 68, "end": 81},
      {"text": "indiciu", "label": "aromă", "start": 89, "end": 93},
      {"text": "fructe tropicale", "label": "aromă", "start": 98, "end": 112},
      {"text": "final", "label": "gust", "start": 116, "end": 122}
    ]
  },
  {
    "review": "Acest Cabernet Sauvignon are o aromă îndrăzneață, cu corp complet cu note de cireșe negre și ciocolată neagră. Parfumul este bogat și complex, cu indicii de tutun și piele.",
    "tokens": [
      {"text": "îndrăzneață", "label": "aromă", "start": 5, "end": 9},
      {"text": "cu corp complet", "label": "textură", "start": 10, "end": 21},
      {"text": "cireșe negre", "label": "aromă", "start": 30, "end": 42},
      {"text": "ciocolată neagră", "label": "aromă", "start": 47, "end": 60},
      {"text": "bogat", "label": "parfum", "start": 69, "end": 73},
      {"text": "complex", "label": "parfum", "start": 78, "end": 85},
      {"text": "indicii", "label": "parfum", "start": 90, "end": 96},
      {"text": "tutun", "label": "parfum", "start": 101, "end": 108},
      {"text": "piele", "label": "parfum", "start": 113, "end": 120}
    ]
  },
  {
    "review": "Acest Riesling are un gust proaspăt, răcoritor cu note de măr verde și miere. Parfumul este floral și fructat, cu un indiciu de citrice.",
    "tokens": [
      {"text": "proaspăt", "label": "textură", "start": 5, "end": 10},
      {"text": "răcoritor", "label": "textură", "start": 12, "end": 22},
      {"text": "măr verde", "label": "aromă", "start": 31, "end": 42},
    ]
  }

PAL (Modelele de limbaj asistate de programe)

Gao et al., (2022) prezintă o metodă care folosește LLM-urile pentru a citi probleme în limbaj natural și generează programe ca pași intermediari de raționament. Denumit, modelele de limbaj asistate de programe (PAL), diferă de promptarea chain-of-thought prin faptul că în loc să folosească text liber pentru a obține soluția, transferă pasul de soluție către un runtime programatic precum un interpretor Python.

Să ne uităm la un exemplu folosind LangChain și OpenAI GPT-3. Suntem interesați să dezvoltăm o aplicație simplă care să poată interpreta întrebarea care este pusă și să furnizeze un răspuns prin valorificarea interpretorului Python.

Specific, suntem interesați să creăm o funcționalitate care permite folosirea LLM-ului pentru a răspunde la întrebări care necesită înțelegerea datelor. Vom furniza LLM-ului un prompt care include câteva exemple care sunt adoptate de aici.

Acestea sunt importurile de care avem nevoie:

python
import openai
from datetime import datetime
from dateutil.relativedelta import relativedelta
import os
from langchain.llms import OpenAI
from dotenv import load_dotenv

Să configurăm mai întâi câteva lucruri:

python
load_dotenv()

# configurația API
openai.api_key = os.getenv("OPENAI_API_KEY")

# pentru LangChain
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")

Configurarea instanței modelului:

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

Configurarea promptului + întrebarea:

python
question = "Astăzi este 27 februarie 2023. M-am născut exact acum 25 de ani. Care este data când m-am născut în MM/DD/YYYY?"

DATE_UNDERSTANDING_PROMPT = """
# Î: 2015 vine în 36 de ore. Care este data de o săptămână de astăzi în MM/DD/YYYY?
# Dacă 2015 vine în 36 de ore, atunci astăzi este cu 36 de ore înainte.
today = datetime(2015, 1, 1) - relativedelta(hours=36)
# O săptămână de astăzi,
one_week_from_today = today + relativedelta(weeks=1)
# Răspunsul formatat cu %m/%d/%Y este
one_week_from_today.strftime('%m/%d/%Y')
# Î: Prima zi din 2019 este o marți, și astăzi este prima luni din 2019. Care este data de astăzi în MM/DD/YYYY?
# Dacă prima zi din 2019 este o marți, și astăzi este prima luni din 2019, atunci astăzi este cu 6 zile mai târziu.
today = datetime(2019, 1, 1) + relativedelta(days=6)
# Răspunsul formatat cu %m/%d/%Y este
today.strftime('%m/%d/%Y')
# Î: Concertul era programat să fie pe 06/01/1943, dar a fost amânat cu o zi pentru astăzi. Care este data de acum 10 zile în MM/DD/YYYY?
# Dacă concertul era programat să fie pe 06/01/1943, dar a fost amânat cu o zi pentru astăzi, atunci astăzi este cu o zi mai târziu.
today = datetime(1943, 6, 1) + relativedelta(days=1)
# Acum 10 zile,
ten_days_ago = today - relativedelta(days=10)
# Răspunsul formatat cu %m/%d/%Y este
ten_days_ago.strftime('%m/%d/%Y')
# Î: Este 4/19/1969 astăzi. Care este data cu 24 de ore mai târziu în MM/DD/YYYY?
# Este 4/19/1969 astăzi.
today = datetime(1969, 4, 19)
# Cu 24 de ore mai târziu,
later = today + relativedelta(hours=24)
# Răspunsul formatat cu %m/%d/%Y este
today.strftime('%m/%d/%Y')
# Î: Jane credea că astăzi este 3/11/2002, dar astăzi este de fapt 12 martie, care este cu 1 zi mai târziu. Care este data cu 24 de ore mai târziu în MM/DD/YYYY?
# Dacă Jane credea că astăzi este 3/11/2002, dar astăzi este de fapt 12 martie, atunci astăzi este 3/12/2002.
today = datetime(2002, 3, 12)
# Cu 24 de ore mai târziu,
later = today + relativedelta(hours=24)
# Răspunsul formatat cu %m/%d/%Y este
later.strftime('%m/%d/%Y')
# Î: Jane s-a născut în ultima zi din februarie în 2001. Astăzi este ziua ei de naștere de 16 ani. Care este data de ieri în MM/DD/YYYY?
# Dacă Jane s-a născut în ultima zi din februarie în 2001 și astăzi este ziua ei de naștere de 16 ani, atunci astăzi este cu 16 ani mai târziu.
today = datetime(2001, 2, 28) + relativedelta(years=16)
# Ieri,
yesterday = today - relativedelta(days=1)
# Răspunsul formatat cu %m/%d/%Y este
yesterday.strftime('%m/%d/%Y')
# Î: {question}
""".strip() + '\n'
python
llm_out = llm(DATE_UNDERSTANDING_PROMPT.format(question=question))
print(llm_out)
python
exec(llm_out)
print(born)

Aceasta va produce următoarea ieșire: 02/27/1998


Notebook-uri Python

|Descriere| Notebook |Învață cum să folosești interpretorul Python în combinație cu modelul de limbaj pentru a rezolva sarcini.Modelele de limbaj asistate de programe


Mai multe exemple vin în curând!

Secțiunea anterioară (Promptarea avansată)

Secțiunea următoare (ChatGPT)