W nowym arcie poruszę temat budowania promptów dla wielkich modeli językowych takich jak GPT, LLaMa3, Mistral 7B i tym podobnych. Opowiem także, skąd wynikają halucynacje w tych modelach oraz jak ich unikać, stosując techniki zero-shot prompts, one-shot prompts i multi-shot prompts.

Jak mogłeś zauważyć, napisałem już kilka artykułów na temat budowania promptów, które są stosowane przy generowaniu grafiki przy użyciu modeli typu Stable Diffusion Network. Takie techniki budowania promptów są również używane w innych modelach do generowania grafiki. W szczegółach to opisujemy temat i opisujemy parametry generowania obrazu, jak budować prompty można poczytać tutaj.

Podobne techniki można zastosować także przy tworzeniu promptów do wielkich modeli językowych, gdzie podajemy kontekst, parametry generowanego tekstu, styl, przykładowe odpowiedzi tak aby uniknąć halucynowania.


Z czego wynika halucynacja?

Wyobraź sobie, że posiadasz „wielki mózg”, który ma wiedzę z różnych dziedzin – wiedzę z całego Internetu, ale nie rozumie znaczenia, zna tylko statystykę i powiązania pomiędzy wyrazami.

model statystyczny

Tym w uproszczeniu jest wielki model językowy – nie rozumie, czym jest dana rzecz, a opiera się tylko na statystycznych powiązaniach między tokenami, a w najprostszym przypadku – między sylabami słów (bo w uproszczeniu token to będzie jedna sylaba lub kilka znaków tekstu).

Jeśli model posiada wiedzę z różnych tematów, to przy ogólnikowym zapytaniu, jak na przykład "wygeneruj mi wiersz" bez podawania szczegółów czy kontekstu, zacznie generować tekst, który statystycznie pasuje między kolejnymi tokenami, ale nie musi to oznaczać generowania tekstu z danego tematu.

Aby uniknąć halucynacji, należy powiedzieć modelowi, w jakim obszarze ma się specjalizować. Można to osiągnąć na przykład przez sformułowanie:

  • "Pracuj jako programista Python"
  • „Pracuj jako copywriter”
  • „Pracuj jako analityk biznesowy”
  • „Jesteś analitykiem biznesowym”
  • „Jesteś programistą Pythona, który używa bibliotek FastAPI, Pytorch”
  • „Zachowuj się jak copywriter z 10 letnim stażem, pisz bezpośrednim językiem…”

W ten sposób zawężamy dziedzinę i styl, w której model będzie operował.


Zero-shot, One-shot, Multi-shot Prompts

Innym sposobem ograniczenia halucynacji jest stosowanie metod:

  • 0-shot
  • 1-shot
  • multi-shot prompts

Jeśli chcemy, aby model generował odpowiedzi w określonym formacie lub stylu, możemy podać mu przykład, jak ma się zachowywać lub w jakim formacie ma udzielać odpowiedzi.


Zero-shot

Nie podajemy żadnego przykładu. Używamy techniki typu 0-shot, jeśli „wierzymy”, że ogólna wiedza modela zapewni wystarczającą odpowiedź.

Prosimy model o wygenerowanie pliku JSON z informacjami o użytkowniku, nie podając szczegółów struktury. Model generuje przykładową strukturę opierając się na wewnętrznym schemacie.

Przykład promptu:

generuj plik JSON z opisem produktu

Odpowiedź:

{
  "product": {
    "name": "Smartphone",
    "brand": "TechCo",
    "model": "X200",
    "description": "A high-end smartphone with advanced features.",
    "price": 699.99,
    "currency": "USD",
    "availability": true,
    "specs": {
      "display": "6.5-inch AMOLED touchscreen",
      "processor": "Octa-core Snapdragon 888",
      "memory": "8GB RAM, 256GB storage",
      "camera": "Quad-camera setup (108MP main, 12MP ultra-wide, 8MP telephoto, 2MP depth sensor)",
      "battery": "5000mAh",
      "connectivity": ["5G", "Wi-Fi 6", "Bluetooth 5.2"],
      "color": "Black",
      "dimensions": "160 x 75 x 8 mm",
      "weight": "180 grams"
    },
    "images": [
      "image1.jpg",
      "image2.jpg",
      "image3.jpg"
    ],
    "reviews": [
      {
        "user": "John Doe",
        "rating": 4.5,
        "comment": "Great phone! Excellent camera quality."
      },
      {
        "user": "Jane Smith",
        "rating": 5,
        "comment": "Amazing battery life and performance."
      }
    ]
  }
}

One-shot

Podajemy pojedynczy przykład pożądanego wyniku. To podejście jest przydatne, gdy potrzebny jest określony format lub styl.

Prompt z przykładem:

generuj plik JSON z opisem telefonu, jak dla poniższego przykładu
example""":
{
  "product": {
    "id": "001",
    "name": "Laptop",
    "price": "2999.99",
    "description": "Example description"
  }
}
"""

Odpowiedź:

{
  "product": {
    "id": "002",
    "name": "Smartphone",
    "price": "999.99",
    "description": "A high-end smartphone with advanced features."
  }
}

Multi-shot

Podajemy kilka przykładów odpowiedzi. Model uczy się struktury i kontekstu, aby generować odpowiedzi w podobnym formacie.

Prompt z przykładami:

generuj plik JSON z opisem jednej książki, jak dla poniższego przykładu:

example""":
{
  "book": {
    "id": "110",
    "title": "The Great Gatsby",
    "author": "F. Scott Fitzgerald",
    "descryption":"Book descryption"
  }
}
{
  "book": {
    "id": "111",
    "title": "1984",
    "author": "George Orwell",
    "descryption":"Book descryption"
  }
}
"""

Odpowiedź:

{
  "book": {
    "id": "112",
    "title": "To Kill a Mockingbird",
    "author": "Harper Lee",
    "description": "Set in the American South during the Depression, 'To Kill a Mockingbird' follows the journey of Scout and Jem Finch, whose father has been appointed to defend a black man accused of rape. The novel explores themes of racial injustice, moral growth, and the strength of personal conviction."
  }
}

Generalnie ważne jest to, aby pamiętać o różnicach pomiędzy poszczególnymi modelami, gdyż ten sam prompt da różne odpowiedzi w zależności od użytego modelu — ale to jest zagadnienie do rozwinięcia w innym artykule.