Praktyczne tworzenie promptów dla mniejszych modeli LLM

Maud Nalpas
Maud Nalpas

Skuteczność dużego modelu językowego zależy w dużej mierze od instrukcji, które mu podajemy. Inżynieria promptów to proces tworzenia pytań w taki sposób, aby uzyskać najlepsze wyniki z modelu LLM. Jest to kluczowy krok w wdrażaniu funkcji opartej na modelu LLM.

Inżynieria promptów to proces iteracyjny. Jeśli testujesz różne modele LLM, prawdopodobnie zauważyłeś, że aby uzyskać lepsze wyniki, musisz zmodyfikować prompt.

Dotyczy to również modeli o różnych rozmiarach.

Interfejsy czatu oparte na dużych modelach LLM, takich jak Gemini lub ChatGPT, często zapewniają zadowalające wyniki przy minimalnym wysiłku. Jeśli jednak pracujesz z domyślnym, mniejszym modelem LLM, który nie jest dokładny, musisz dostosować swoje podejście.

Mniejsze modele LLM są mniej wydajne i mają mniejszy zasób informacji.

Co rozumiemy przez „mniejsze LLM”?

Definiowanie rozmiarów LLM jest skomplikowane, a twórcy nie zawsze ujawniają je.

W tym dokumencie „mniejsze LLM” oznaczają dowolny model z mniej niż 30 miliardami parametrów. Obecnie modele z od kilku milionów do kilku miliardów parametrów można realistycznie uruchamiać w przeglądarce na urządzeniach konsumenckich.

W jakich sytuacjach stosuje się mniejsze modele LLM?

  • AI generatywne na urządzeniu lub w przeglądarce, na przykład jeśli używasz Gemma 2B z interfejsem API LLM MediaPipe (nawet na urządzeniach z procesorem tylko do obliczeń) lub DistilBert w przeglądarce z Transformers.js. Pobranie modelu i wyciąganie wniosków na urządzeniu użytkownika jest możliwe tylko w przypadku tych mniejszych modeli LLM, ponieważ pozwala to utrzymać rozsądne pobieranie danych z internetu oraz uwzględniać ograniczenia pamięci i GPU/CPU urządzenia.
  • Niestandardowa generatywna AI po stronie serwera. Na własnym serwerze możesz uruchomić małe modele o otwartej wadze, takie jak Gemma 2B, Gemma 7B czy Gemma 27B (i opcjonalnie je dostroić).

Rozpocznij

Interfejsy czatu oparte na dużych modelach LLM, takich jak Gemini czy ChatGPT, często dają zadowalające wyniki przy minimalnym wysiłku. Jednak podczas pracy z mniejszymi modelami LLM musisz dostosować swoje podejście. Mniejsze modele LLM są mniej wydajne i mają mniejszy zasób informacji, z których mogą korzystać.

Podawaj kontekst i dokładne instrukcje dotyczące formatu

Aby uzyskać optymalne wyniki z małymi modelami LLM, twórz bardziej szczegółowe i precyzyjne prompty.

Na przykład:

Based on a user review, provide a product rating as an integer between 1 and 5. \n
Only output the integer.

Review: "${review}"
Rating:
Dane wejściowe (opinia) Dane wyjściowe (ocena)
  Większy model LLM (Gemini 1.5) Mniejszy model LLM (Gemma 2B)
Pasuje idealnie. dobrze rozkłada ciężar i jest zaskakująco wygodna nawet podczas całodniowych wędrówek. Polecam. 5 4 na 5 gwiazdek**
Paski są wąskie i zaczęły wtykać się w ramiona pod ciężkim obciążeniem. 1 2/5

Chociaż Gemini 1.5 zapewnia oczekiwany wynik za pomocą tego prostego promptu, wynik Gemmy nie jest zadowalający:

  • Format jest nieprawidłowy. Prosiliśmy o liczbę całkowitą.
  • Ocena wydaje się nie do końca trafna. Pierwsza opinia jest na tyle entuzjastyczna, że można ją uznać za opinię z 5 gwiazdkami.

Aby to naprawić, musimy użyć technik promptów, promptów typu „one-shot”, „few-shot” i „multi-shot” oraz promptów typu „chain-of-thought”. Musimy też podać wyraźne instrukcje dotyczące formatu i zażądać, aby model stosował pełny zakres ocen.

Na przykład:

`Analyze a product review, and then based on your analysis give me the
corresponding rating (integer). The rating should be an integer between 1 and
5. 1 is the worst rating, and 5 is the best rating. A strongly dissatisfied
review that only mentions issues should have a rating of 1 (worst). A strongly
satisfied review that only mentions positives and upsides should have a rating
of 5 (best). Be opinionated. Use the full range of possible ratings (1 to
5). \n\n
    \n\n
    Here are some examples of reviews and their corresponding analyses and
    ratings:
    \n\n
    Review: 'Stylish and functional. Not sure how it'll handle rugged outdoor
    use, but it's perfect for urban exploring.'
    Analysis: The reviewer appreciates the product's style and basic
    functionality. They express some uncertainty about its ruggedness but
    overall find it suitable for their intended use, resulting in a positive,
    but not top-tier rating.
    Rating (integer): 4
    \n\n
    Review: 'It's a solid backpack at a decent price. Does the job, but nothing
    particularly amazing about it.'
    Analysis: This reflects an average opinion. The backpack is functional and
    fulfills its essential purpose. However, the reviewer finds it unremarkable
    and lacking any standout features deserving of higher praise.
    Rating (integer): 3
    \n\n
    Review: 'The waist belt broke on my first trip! Customer service was unresponsive too. Would not recommend.'
    Analysis: A serious product defect and poor customer service experience naturally warrants the lowest possible rating. The reviewer is extremely unsatisfied with both the product and the company.
    Rating (integer): 1
    \n\n
    Review: 'Love how many pockets and compartments it has. Keeps everything organized on long trips. Durable too!'
    Analysis: The enthusiastic review highlights specific features the user loves (organization and durability), indicating great satisfaction with the product. This justifies the highest rating.
    Rating (integer): 5
    \n\n
    Review: 'The straps are a bit flimsy, and they started digging into my shoulders under heavy loads.'
    Analysis: While not a totally negative review, a significant comfort issue leads the reviewer to rate the product poorly. The straps are a key component of a backpack, and their failure to perform well under load is a major flaw.
    Rating (integer): 1
    \n\n
    Now, here is the review you need to assess:
    \n
    Review: "${review}" \n`;
Dane wejściowe (sprawdzanie) Dane wyjściowe z mniejszej LLM (Gemma 2B)

Pasuje idealnie. dobrze rozkłada ciężar i jest zaskakująco wygodna nawet podczas całodniowych wędrówek. Polecam.

Analiza: ta opinia jest bardzo pozytywna i podkreśla dopasowanie oraz wygodę, co oznacza duże zadowolenie z produktu. Uzasadnia to wysoką ocenę.

Ocena (liczba całkowita): 5

Paski są słabe i pod wpływem ciężkich obciążeń wrzynają się w ramiona.

**Analiza:** w opinii podkreślono, że paski nie są wygodne. Może to też oznaczać, że produkt nie nadaje się do przewożenia ciężkich ładunków ani długich podróży.

**Ocena:** 1 (najgorsza)

Bardziej rozbudowany prompt w połączeniu z krótkimi promptami i promptami wykorzystującymi łańcuch myślenia zapewniają dokładniejsze oceny.

Spodziewaj się ręcznego przetwarzania danych wyjściowych

Zawsze należy ręcznie oczyszczać i interpretować dane wyjściowe LLM, a szczególnie w przypadku mniejszych modeli, które mogą generować mniej dopracowane wyniki i wymagać łańcucha promptów.

W pierwszym przykładzie użyliśmy promptów typu łańcuch myśli, więc wynik obejmował zarówno analizę, jak i ocenę, więc musimy przeanalizować go ręcznie pod kątem oceny. Zwróć też uwagę na niespójności w formatowaniu danych wyjściowych w poprzedniej sekcji: model czasami generuje formatowanie markdown, ale nie zawsze.

// Use try/catch to catch (parsing) errors
try {
  // Parse the output for a rating
  const int = /[1-5]/;
  const ratingAsString = llmOutput.match(int)[0];
  // Parse as int
  const ratingAsInt = parseInt(ratingAsString);
  // `checkRating` checks the rating is a number between 1 and 5, since the
  // regEx may catch a number like "100"
  const finalRating = checkRating(ratingAsInt);
} catch (e) {
  console.error('Error', e);
}

Różnice między interfejsami Mind API

Interfejsy API w chmurze LLM, takie jak Gemini API czy OpenAI, które są zwykle punktem wejścia do większych modeli LLM, oferują przydatne funkcje tworzenia promptów. Na przykład Gemini 1.5 Pro oferuje instrukcje dotyczące systemu i tryb JSON.

Obecnie te funkcje nie zawsze są dostępne w przypadku modeli niestandardowych ani mniejszych modeli LLM uzyskiwanych za pomocą interfejsów AI w przeglądarce, takich jak MediaPipe LLM Inference API lub Transformers.js. Chociaż nie jest to ograniczenie techniczne, interfejsy API AI w przeglądarce są zwykle mniej precyzyjne.

Ograniczenia tokenów umysłu

Prompt z mniejszymi LLM musi zawierać przykłady lub bardziej szczegółowe instrukcje, więc prawdopodobnie będzie dłuższy i zajmuje większy limit tokenów wejściowych, jeśli taki istnieje.

Poza tym mniejsze modele mają zwykle mniejszy limit tokenów wejściowych. Na przykład Gemini 1.5 Pro ma limit 1 mln tokenów wejściowych, a modele Gemma mają okno kontekstu o 8 tys. tokenów.

Aby uniknąć przekroczenia limitu, używaj funkcji liczby tokenów.

Dostosowywanie szacowanych czasów

W swoich szacunkach czasu programowania uwzględnij czas potrzebny na projektowanie i testowanie promptów.

Ze względu na różnice w interfejsie API i limity tokenów tworzenie promptu dla mniejszego modelu LLM będzie wymagać więcej czasu i wysiłku niż w przypadku większego modelu. Testowanie i weryfikowanie wyników modelu LLM może też wymagać więcej pracy.

Czy tworzenie promptów różni się od dostrajania?

W przypadku programistów internetowych preferowanym sposobem korzystania z generatywnej AI jest tworzenie promptów, a nie dostosowanie promptów do własnych potrzeb i ich dostrojenie. Jednak w niektórych przypadkach nawet zaawansowane dostrajanie promptów może nie wystarczyć, zwłaszcza jeśli używasz mniejszego modelu LLM.

Używaj dokładnego dostosowania, gdy:

  • potrzebujesz najwyższej dokładności i wydajności do wykonania konkretnego zadania; Dostosowanie precyzyjne bezpośrednio dostosowuje wewnętrzne parametry modelu w celu uzyskania optymalnych wyników.
  • masz dobrze wyselekcjonowane dane, które są istotne dla Twojego zadania i już mają etykiety z preferowanymi wynikami; Dane te są potrzebne do skutecznego dostrajania reklam.
  • wielokrotnie używasz modelu do tego samego celu; Dostrajanie można przeprowadzić raz i wykorzystać ponownie do wykonania określonego zadania.