Praktyczne tworzenie promptów dla mniejszych modeli LLM

Maud Nalpas
Maud Nalpas

Skuteczność dużego modelu językowego w dużej mierze zależy od podanych przez nas instrukcji. Inżynieria promptów to proces tworzenia pytań w taki sposób, aby uzyskać jak najlepsze wyniki z LLM. To kluczowy krok w implementacji funkcji opartej na LLM.

Inżynieria to proces iteracyjny. Jeśli eksperymentowałeś z różnymi LLM, prawdopodobnie udało Ci się zauważyć, że musisz dostosować prompt, aby uzyskać lepszy wynik.

Odnosi się to również do modeli o różnych rozmiarach.

Interfejsy czatu oparte na dużych modelach LLM, np. Gemini czy ChatGPT, często pozwalają uzyskać satysfakcjonujące wyniki przy minimalnym nakładzie pracy. Jednak w przypadku pracy z domyślnym, mniejszym LLM, który nie jest dostrojony, musisz dostosować swoje podejście.

Mniejsze modele LLM są mniej wydajne i mają mniejszą pulę informacji.

Co oznacza „mniejsze modele LLM”?

Definiowanie rozmiarów LLM jest skomplikowane i nie zawsze są one ujawniane przez twórców.

W tym dokumencie „mniejsze modele LLM” oznaczają każdy model poniżej 30 mld parametrów. Obecnie modele zawierające od kilku milionów do kilku miliardów parametrów można realistycznie uruchamiać w przeglądarce na urządzeniach klasy konsumenckiej.

Gdzie są używane mniejsze LLM?

  • generatywnej AI na urządzeniu lub w przeglądarce, np. jeśli korzystasz z Gemma 2B z MediaPipe LLM Inference API (nawet wtedy, gdy jest odpowiedni dla urządzeń obsługujących tylko procesor) lub DistilBert w przeglądarce (Transformers.js). Pobranie modelu i uruchomienie wnioskowania na urządzeniu użytkownika jest możliwe tylko w przypadku tych mniejszych modeli LLM. Dzięki temu pobieranie z internetu jest rozsądne i dostosowuje się do ograniczeń pamięci urządzenia oraz procesora graficznego i procesora.
  • Niestandardowa generatywna AI po stronie serwera. Małe modele otwartej wagi, takie jak Gemma 2B, Gemma 7B czy Gemma 27B, możesz uruchamiać na własnym serwerze (i opcjonalnie dostroić).

Rozpocznij

Interfejsy czatu oparte na dużych modelach LLM, takich jak Gemini czy ChatGPT, często pozwalają uzyskać satysfakcjonujące wyniki przy minimalnym nakładzie pracy. Podczas pracy z mniejszymi modelami LLM musisz jednak dostosować swoje podejście. Mniejsze modele LLM są mniej wydajne i mają mniejszą pulę informacji.

Podaj kontekst i precyzyjne instrukcje dotyczące formatu.

Aby uzyskać optymalne wyniki w przypadku małych modeli LLM, twórz bardziej szczegółowe i konkretne 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 LLM (Gemini 1.5) Mniejszy LLM (Gemma 2B)
Bardzo mi się podoba. Dobrze rozkłada wagę i zaskakująco wygodnie nawet podczas całodniowych wędrówek. Polecamy. 5 4 na 5 gwiazdek**
Paski są miękkie i zaczęły wchodzić w ramiona przy dużym obciążeniu. 1 5/2

Gemini 1.5 za pomocą tego prostego promptu zwraca wymagane dane wyjściowe, ale dane wyjściowe Gemmy nie są zadowalające:

  • Format jest nieprawidłowy. Poprosiliśmy o liczbę całkowitą oceny.
  • Ocena nie jest dość dokładna. Pierwsza opinia jest na tyle entuzjastyczna, że można ją ocenić na 5 gwiazdek.

Aby rozwiązać ten problem, musimy użyć technik tworzenia promptów, takich jak prośby jeden-, kilka czy kilka sesji oraz prompty łańcuchowe. Musimy też podać jasne instrukcje dotyczące formatu i uważać, że model powinien 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 (opinia) Dane wyjściowe z mniejszym LLM (Gemma 2B)

Bardzo mi się podoba. Dobrze rozkłada ciężar i zaskakująco wygodnie nawet podczas całodniowych wędrówek. Polecamy.

Analiza: ta opinia jest bardzo pozytywna, podkreśla dopasowanie i wygodę produktu, co wskazuje na duże zadowolenie z niego. To uzasadnia wysoką ocenę.

Ocena (liczba całkowita): 5

Paski są miękkie i zaczęły wciskać mi się w ramiona pod dużym obciążeniem.

**Analiza:** opinia wskazuje na poważny problem z wygodą korzystania z pasków. Sugeruje też, że produkt może nie być odpowiedni do dużych obciążeń lub długich wycieczek.

**Ocena:** 1 (najgorsza)

Bardziej precyzyjne oceny w połączeniu z promptami typu „few-shot” i „łańcuch myśli” zapewniają dokładniejsze oceny.

Oczekuj ręcznego analizowania danych wyjściowych

Chociaż zawsze należy ręcznie czyścić i interpretować dane wyjściowe LLM, dotyczy to w szczególności mniejszych modeli LLM, które mogą dawać mniej dopracowane wyniki i wymagać promptów opartych na łańcuchu myśli.

W pierwszym przykładzie użyliśmy promptów opartych na łańcuchu myśli, więc dane wyjściowe zawierały zarówno analizę, jak i ocenę, a ocenę trzeba przeanalizować ręcznie. Pamiętaj też o niespójnym formatowaniu w danych wyjściowych w poprzedniej sekcji: model czasami zwraca kod Markdown, ale nie za każdym razem.

// 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 Mind API

Interfejsy LLM Cloud API, takie jak Gemini API lub OpenAI, które są zwykle punktem wejścia do większych LLM, oferują przydatne funkcje promptów. Na przykład Gemini 1.5 Pro oferuje instrukcje systemowe i tryb JSON.

W tej chwili te funkcje nie zawsze są dostępne w przypadku użycia modelu niestandardowego lub w przypadku mniejszych LLM, do których dostęp jest uzyskiwany za pomocą interfejsów API AI w przeglądarce, takich jak MediaPipe LLM Inference API lub Transformers.js. Nie musi to być ograniczenie techniczne, jednak interfejsy API AI w przeglądarkach są zazwyczaj mniej restrykcyjne.

Limity tokenów umysłu

Ponieważ prompt dla mniejszych LLM musi zawierać przykłady lub bardziej szczegółowe instrukcje, prawdopodobnie będzie on dłuższy i zajmie więcej limitu tokenów wejściowych, jeśli taki istnieje.

Poza tym mniejsze modele mają zazwyczaj mniejszy limit tokenów wejściowych. Na przykład model Gemini 1.5 Pro ma limit 1 miliona tokenów wejściowych, a modele Gemma – okno kontekstu 8 K.

Aby uniknąć przekroczenia limitu, użyj funkcji liczenia tokenów.

Dostosuj szacowane godziny

Weź pod uwagę projektowanie i testowanie promptów w szacowanym czasie pracy zespołu technicznego.

Ze względu na różnice w interfejsach API i limity tokenów prawdopodobnie potrzebujesz więcej czasu i wysiłku, aby przygotować prompt dla mniejszego LLM niż dużego. Testowanie i weryfikowanie danych wyjściowych LLM również może wymagać więcej wysiłku.

Inżynier ds. promptów czy dostrajanie?

W przypadku twórców stron internetowych inżynieria promptów to nasz preferowany sposób wykorzystania generatywnej AI zamiast niestandardowego trenowania i dostrajania. Jednak w niektórych przypadkach nawet zaawansowane prace techniczne mogą nie wystarczyć, zwłaszcza jeśli używasz mniejszego LLM.

Użyj dostrajania, gdy:

  • W przypadku konkretnego zadania wymagana jest wysoka dokładność i wydajność. Dostrajanie bezpośrednio dostosowuje wewnętrzne parametry modelu w celu uzyskania optymalnych wyników.
  • Masz dobrze dobrane dane istotne dla Twojego zadania, które są już oznaczone z preferowanymi danymi wyjściowymi. Są one niezbędne do skutecznego dostrajania.
  • Wielokrotnie używasz modelu w tym samym celu. Można je dostrajać raz, a potem użyć ponownie do konkretnego zadania.