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 eksperymentowałeś/eksperymentowałaś z różnymi modelami LLM, prawdopodobnie zauważyłeś/zauważyłaś, że aby uzyskać lepszy wynik, trzeba było 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, z których mogą korzystać.

Co rozumiemy przez „mniejsze LLM”?

Określanie rozmiarów LLM jest skomplikowane, a ich twórcy nie zawsze je podają.

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

W jakich przypadkach 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. Pobieranie modelu i wykonywanie wnioskowania na urządzeniu użytkownika jest możliwe tylko w przypadku mniejszych LLM, aby pobieranie z sieci było rozsądne i odpowiednie do ograniczeń pamięci oraz procesora graficznego i procesora centralnego 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 (sprawdzanie) 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ą słabe i pod wpływem ciężkiego ładunku wrzynają się w ramiona. 1 2/5

Gemini 1.5 zapewnia pożądany wynik za pomocą tego prostego prompta, ale wynik Gemma nie jest zadowalający:

  • Format jest nieprawidłowy. Poprosimy o wyrażenie całkowite.
  • 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 używał pełnego zakresu 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 i wygodę produktu, co wskazuje na duże zadowolenie z jego zakupu. To uzasadnia 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.

Wyniki LLM należy zawsze ręcznie oczyszczać i interpretować, 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 łańcucha promptów, więc dane wyjściowe zawierały zarówno analizę, jak i ocenę. Ocena wymaga ręcznego parsowania. 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 chmurowe LLM, takie jak Gemini API czy OpenAI, które są zwykle punktem wyjścia do większych modeli LLM, oferują przydatne funkcje promptów. Na przykład Gemini 1.5 Pro oferuje instrukcje dotyczące systemu i tryb JSON.

Obecnie te funkcje nie są zawsze 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 koniecznie ograniczenie techniczne, interfejsy API AI w przeglądarce są zazwyczaj bardziej smukłe.

Ograniczenia tokenów

Prompt w przypadku mniejszych modeli językowych musi zawierać przykłady lub bardziej szczegółowe instrukcje, więc prawdopodobnie będzie dłuższy i zajmie więcej miejsca w ramach limitu tokenów wejściowych (jeśli taki istnieje).

Dodatkowo 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 zliczania 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 limitach 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 tworzenie 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; Potrzebujesz tych danych do skutecznego dostosowania ustawień.
  • wielokrotnie używasz modelu do tego samego celu; Dostrajanie można przeprowadzić raz i wykorzystać ponownie do wykonania określonego zadania.