Udostępnij za pośrednictwem


Ważne pojęcia i zagadnienia dotyczące deweloperów tworzących generowanie rozwiązań sztucznej inteligencji

Duże modele językowe (LLM) są niesamowite, ale nawet mają swoje ograniczenia. Deweloperzy muszą zrozumieć te ograniczenia, co llMs są w stanie "out of the box" i jak dostosować je, aby uzyskać najlepsze wyniki dla generowanych rozwiązań sztucznej inteligencji, które tworzą. W tym artykule opisano kilka wyzwań i czynników ograniczających oraz wyjaśniono typowe sposoby przezwyciężenia tych wyzwań i przejęcia kontroli nad procesem generowania zawartości niezależnie od typu funkcji generowania sztucznej inteligencji, które tworzysz w aplikacji.

Wyzwania inżynieryjne podczas pracy z llms

Najważniejsze wyzwania lub ograniczenia, które należy wziąć pod uwagę podczas pracy z modułami LLM:

  • Odcięcie wiedzy — ze względu na wysokie koszty szkolenia LLM, ich treść wiedzy jest ograniczona do tego, co zostały przeszkolone w określonym momencie w czasie. Bez żadnych wtyczek ani innych obiektów zakwaterowania nie mają dostępu do informacji w czasie rzeczywistym ani nie mają dostępu do danych prywatnych.

  • Halucynacja — funkcja LLM używa prawdopodobieństwa statystycznego i trochę losowości do generowania informacji. Istnieją mechanizmy, aby zachować wygenerowane odpowiedzi dostosowane do intencji człowieka w pytaniach, które zostały zadane, i informacje, na których zostały przeszkolone, ale możliwe, że tworzą odpowiedzi, które nie są dokładne.

  • Przejrzystość — ponownie ze względu na sposób trenowania modeli nie mają już dostępu do podstawowych wiedzy, na których zostały przeszkolone. A nawet jeśli tak, nie ma gwarancji, że informacje były prawdziwe i zakorzenione w pierwszej kolejności. Ponadto nie ma kroku weryfikacji, aby upewnić się, że wygenerowana odpowiedź jest dokładna.

  • Brak wiedzy specyficznej dla domeny — podobnie jak "odcięcie wiedzy , jeśli masz prywatne informacje, takie jak dokumenty firmowe tylko wewnętrzne, usługa LLM nie została wytrenowana na temat tych informacji i w związku z tym nie ma wiedzy specyficznej dla domeny.

Co można zrobić, aby wyeliminować możliwe wyzwania lub problemy z llMs i uzyskać najlepsze możliwe wyniki, aby pomóc użytkownikom i twojej organizacji? Zacznij od zrozumienia sposobów, w jaki można uzupełnić, gdzie LLM uzyskuje swoje dane.

Informacje o tym, gdzie llMs uzyskują informacje

Dobrym punktem wyjścia do uzyskania najlepszych wyników z usługi LLM jest zrozumienie, gdzie lub jak llms uzyskują informacje. Poniższe kategorie reprezentują różne podejścia do sposobu interakcji z różnymi źródłami informacji w celu generowania odpowiedzi.

Diagram przedstawiający trzy różne typy generowania pobierania z generowaniem pobierania u góry skorelowany z najbardziej wytrenowaną wiedzą, a następnie generowanie rozszerzonego pobierania, a następnie generowanie skoncentrowane na pobieraniu u dołu skorelowane z najbardziej pobraną wiedzą.

  • Pobieranie poza generacją (ROG) — jest to sposób, w jaki działają tradycyjne metody LLM, gdzie model generuje odpowiedzi wyłącznie na podstawie wiedzy, na której został przeszkolony, bez uzyskiwania dostępu do jakichkolwiek informacji zewnętrznych podczas procesu generowania. Wiedza modelu jest statyczna, ograniczona do tego, co zostało uwzględnione w danych treningowych do daty odcięcia. Oprócz kreatywnego pisania, może on odpowiedzieć na pytania dotyczące informacji łatwo dostępnych w Internecie.

  • Generowanie rozszerzonej generacji (RAG, Retrieval-Augmented Generation) — łączy możliwości generowania maszyn LLM z możliwością pobierania informacji z zewnętrznych baz danych lub dokumentów w czasie rzeczywistym. Model wysyła zapytanie do zewnętrznego źródła w celu znalezienia odpowiednich informacji, których następnie używa do informowania o odpowiedzi. Takie podejście umożliwia modelowi dostarczanie bardziej dokładnych i aktualnych informacji, niż tylko ze wstępnie wyszkolonej wiedzy. Przypadki użycia obejmują sprawdzanie faktów, odpowiadanie na pytania na podstawie danych w czasie rzeczywistym lub prywatnych danych specyficznych dla domeny.

  • Generowanie skoncentrowane na pobieraniu (RCG) — stawia jeszcze większy nacisk na zewnętrznie pobieraną zawartość, często strukturyzując odpowiedzi wokół informacji pobieranych ze źródeł zewnętrznych. Model może bezpośrednio uwzględniać duże segmenty pobranego tekstu w danych wyjściowych, edycji lub dodawania do nich adnotacji, aby dopasować je do zapytania użytkownika. Takie podejście można postrzegać jako hybrydę między metodami generowania i pobierania, gdzie równowaga może w dużym stopniu sprzyjać informacjom pobranym z własnych możliwości generowania modelu. Przypadki użycia obejmują podsumowanie dłuższego dokumentu, pomoc badawczą w celu zapewnienia porównań i eksploracji tematycznych w wielu podobnych dokumentach oraz kompilacji lub sortowania różnych źródeł materiału w połączonych danych wyjściowych.

Dobrym przykładem generowania pobierania (ROG) jest ChatGPT. Z kolei, w razie potrzeby, Copilot (za pośrednictwem Bing) rozszerza LLM przy użyciu źródeł zewnętrznych ze źródeł wiadomości (i udostępniania linków do tych źródeł).

Na pierwszy rzut oka dźwięk generowania rozszerzonego pobierania (RAG) i generacji retrieval-Centric Generation (RCG), ponieważ obie obejmują integrowanie informacji zewnętrznych z procesem generowania języka. Różnią się one jednak priorytetem i wykorzystywaniem pobranych informacji w procesie generowania.

W systemach RAG pobieranie danych zewnętrznych służy do rozszerzania możliwości generowania wstępnie wytrenowanego modelu językowego. Pobrane informacje zawierają więcej kontekstu lub konkretnych danych używanych przez model do informowania o jego odpowiedziach. W tym miejscu aspekt generowania modelu językowego pozostaje kluczowy dla odpowiedzi, podczas gdy pobrane dane działają jako element pomocniczy w celu zwiększenia dokładności lub głębokości.

Z drugiej strony systemy RCG kładą silniejszy nacisk na same pobrane informacje. W tych systemach pobierane dane są często centralnym elementem odpowiedzi, z rolą modelu generowania przede wszystkim w celu uściślinia, formatowania lub nieznacznego ulepszania pobranego tekstu. Takie podejście jest stosowane szczególnie wtedy, gdy dokładność i bezpośrednie znaczenie informacji są najważniejsze, a wymagana jest mniej twórcza synteza lub ekstrapolacja.

Mechanizmy zewnętrznego pobierania danych, które zasilają zarówno RAG, jak i RCG, zostały omówione w artykułach dotyczących przechowywania wektoryzowanych osadzania dokumentów w porównaniu do dostrajania LLM, dwóch powszechnych podejść do uzupełnienia wiedzy dostępnej dla LLM na podstawie jego początkowego szkolenia.

Zrozumienie różnic między modelami pobierania może pomóc w wyborze odpowiedniego podejścia do konkretnych aplikacji, równoważenia potrzeby syntezy twórczej w porównaniu z potrzebą dokładności i wierności materiału źródłowego.

Zrozumienie czynników wpływających na sposób działania wnioskowania

Ponieważ prawdopodobnie znasz internetowy interfejs użytkownika aplikacji ChatGPT, zrozumienie sposobu jego działania w celu udzielenia odpowiedzi na pytania może ułatwić zrozumienie pojęć, które będą istotne podczas tworzenia funkcji generowania sztucznej inteligencji we własnych aplikacjach.

Gdy użytkownik rozmawia z ChatGPT, projekt interfejsu użytkownika daje iluzję długotrwałej sesji czatu, która utrzymuje stan w trakcie kilku wymiany między tobą i LLM. W rzeczywistości dla danej sesji czatu wszystkie monity i wszystkie odpowiedzi LLM (znane również jako uzupełnienia) są wysyłane z każdym nowym monitem. W miarę rozwoju konwersacji wysyłasz coraz więcej tekstu do usługi LLM w celu przetworzenia — wszystkie poprzednie monity i zakończenia. ChatGPT używa kontekstu całej sesji czatu — nie tylko bieżącego monitu — podczas tworzenia odpowiedzi na bieżący monit. Cała sesja czatu jest nazywana oknem kontekstu.

Istnieje limit długości okna kontekstowego w zależności od wersji aplikacji ChatGPT, z którą pracujesz. Każda część konwersacji czatu, która przekracza limit długości okna kontekstu, zostanie zignorowana podczas tworzenia odpowiedzi na najnowszy monit.

Długie konwersacje mogą początkowo wydawać się dobrym pomysłem, ale długie okna kontekstowe mogą mieć wpływ na ilość obliczeń wymaganych do przetworzenia monitu i utworzenia ukończenia. Ma to wpływ na opóźnienie odpowiedzi i koszty przetwarzania żądania przez usługę OpenAI.

Co to jest limit okna kontekstowego ChatGPT? A raczej ile słów może pracować ChatGPT? Limit okna kontekstu zależy od modelu LLM, wersji i wersji, z którą pracujesz. Ponadto długość kontekstu jest mierzona w tokenach, a nie słowach. Tokeny to najmniejsze jednostki tekstu, które model może zrozumieć i wygenerować. Te jednostki mogą być wyrazami, częściami wyrazów (takimi jak syllables lub stems), a nawet poszczególnymi znakami. Tokeny są sercem przetwarzania języka naturalnego (NLP).

Użycie tokenów ma wpływ na dwie ważne kwestie dla deweloperów:

  • Maksymalny limit okna kontekstu
  • Cena za monit i ukończenie

Co to jest tokenizacja?

"Tokenizacja" to proces konwertowania tekstu na tokeny. Jest to kluczowy krok w przygotowaniu danych do trenowania lub wnioskowania (proces komponowania uzupełnień na podstawie monitów) za pomocą usługi LLM. Proces obejmuje kilka kroków, w tym podzielenie złożonego tekstu na zarządzane elementy (tokeny), które model może następnie przetworzyć. Ten proces może być prosty, taki jak dzielenie tekstu według spacji i interpunkcji, lub bardziej złożone, obejmujące zaawansowane algorytmy do obsługi różnych języków, morfologii (struktura słów) i składni (układ słów). Naukowcy i deweloperzy LLM decydują o metodzie tokenizacji na podstawie tego, co próbują osiągnąć. Interfejs OpenAI zawiera pomocną stronę , która wyjaśnia więcej na temat tokenizacji, a nawet ma kalkulator ilustrujący podział zdań lub akapitów na tokeny.

Uwaga w dolnej części strony Tokenizer openAI stwierdza, że w typowych tekstach w języku angielskim jeden token jest odpowiednikiem około czterech znaków. Oznacza to, że średnio 100 tokenów jest w przybliżeniu równe 75 wyrazów lub trzy czwarte słowa na token.

Strona Tokenizer openAI zawiera również informacje o tokenach tiktoken, pakiecie dla języka Python i języka JavaScript, który umożliwia programowe oszacowanie liczby tokenów, których użyjesz dla danego monitu wysłanego do interfejsu API OpenAI.

Użycie tokenu wpływa na rozliczenia

Każdy interfejs API usługi Azure OpenAI ma inną metodologię rozliczeń. W przypadku przetwarzania i generowania tekstu przy użyciu interfejsu API uzupełniania czatów opłaty są naliczane na podstawie liczby tokenów przesłanych jako monit oraz liczby tokenów wygenerowanych w wyniku (ukończenie).

Każdy model LLM (np. gpt-3.5, gpt-3.5-turbo, gpt-4 itp.) ma zwykle inną cenę, która odzwierciedla ilość obliczeń wymaganych do przetwarzania i generowania tokenów. Wiele razy cena jest przedstawiana jako "cena za 1000 tokenów" lub "cena za milion tokenów".

Ten model cen ma znaczący wpływ na sposób projektowania interakcji użytkownika oraz ilości dodanych danych przed i po przetworzeniu.

Monity systemowe i monity użytkownika

Do tego momentu dyskusja koncentrowała się wyłącznie na "monitach użytkownika" — monitach, które składają się na wymianę między użytkownikiem a ChatGPT.

Interfejs OpenAI wprowadził "monit systemowy" (znany również jako "instrukcje niestandardowe"), który jest nadmiernym zestawem instrukcji zdefiniowanych i dodawanych do wszystkich konwersacji czatu. Pomyśl o nim jako zestaw metadanych instrukcji, które chcesz, aby llM zawsze obserwować za każdym razem, gdy rozpoczniesz nową sesję czatu. Można na przykład ustawić monit systemowy na "zawsze odpowiadać w poetyckiej formie haiku". Od tego momentu każda nowa prośba do ChatGPT powoduje wyświetlenie haiku zawierającego odpowiedź.

Chociaż wyrażenie "odpowiedź w formularzu haiku" nie jest przydatnym przykładem, ilustruje pomysł, że możesz wpłynąć na ukończenie monitu przez zmodyfikowanie samego monitu.

Dlaczego chcesz zmodyfikować monit użytkownika? Jeśli tworzysz generowanie funkcji sztucznej inteligencji lub aplikacji dla profesjonalnych odbiorców, które mogą obejmować pracowników firmy, klientów i partnerów, bez wątpienia chcesz dodać zabezpieczenia, aby ograniczyć zakres tematów lub domen, na które może odpowiedzieć.

Jednak modyfikowanie monitu użytkownika jest tylko jedną metodą ulepszania środowiska generowania tekstu dla użytkowników.

Metody ulepszania środowiska generowania tekstu dla użytkowników w czacieGPT

Aby poprawić wyniki generowania tekstu, deweloperzy są ograniczeni do prostego ulepszania monitu i istnieje wiele technik inżynierii monitów, które mogą pomóc. Jeśli jednak tworzysz własną aplikację do generowania sztucznej inteligencji, istnieje kilka sposobów ulepszania środowiska generowania tekstu dla użytkowników i warto eksperymentować z implementacją wszystkich z nich:

  • Programowe modyfikowanie monitów użytkownika
  • Implementowanie potoku wnioskowania
  • Generowanie rozszerzonego pobierania (omówione w innych artykułach)
  • Dostrajanie (omówione w innych artykułach)

Programowe modyfikowanie monitów użytkownika

Z perspektywy programowej nie ma specjalnego interfejsu API do dodawania monitu systemowego do konwersacji użytkowników. Wystarczy dołączyć instrukcje do monitu zgodnie z potrzebami. Istnieje jednak kilka technik ulepszania monitów użytkownika:

  • Kontekstowe tworzenie monitów systemowych, które jawnie ustawiają kontekst konwersacji w żądanej domenie. Obejmuje to podanie krótkiego opisu lub zestawu instrukcji na początku każdej interakcji, co prowadzi sztuczną inteligencję do pozostanenia w domenie problemu.
  • Wskazówki oparte na przykładach: zawierają przykłady typów pytań i odpowiedzi, które są istotne dla twojej domeny w początkowym monicie. Pomaga to sztucznej inteligencji zrozumieć oczekiwany rodzaj odpowiedzi.

Ponadto można zastosować wszystkie techniki inżynierii monitów. Jeśli możesz to zrobić programowo w jakiś sposób, możesz ulepszyć monit użytkownika w jego imieniu.

Zastrzeżeniem tego podejścia jest to, że tym dłużej monit, tym droższe każde wywołanie do llm. Mimo to, jest to prawdopodobnie najbardziej niedrogie podejścia, które zostaną omówione.

Implementowanie potoku wnioskowania

Następnym krokiem poza modyfikowaniem monitu użytkownika jest programowe utworzenie całego potoku wnioskowania.

Potok wnioskowania jest procesem końcowym, który pobiera nieprzetworzone dane wejściowe (takie jak tekst lub obrazy) i "czyści go" przed użyciem go do wykonania podstawowego monitu (przetwarzania wstępnego) lub sprawdzenia ukończenia, aby upewnić się, że spełnia wymagania użytkownika przed wyświetleniem go użytkownikowi (po przetworzeniu).

Wstępne przetwarzanie może obejmować sprawdzanie słów kluczowych, ocenianie istotności lub przekształcanie zapytania w celu lepszego dopasowania do oczekiwanego języka domeny. Możesz na przykład przeanalizować początkowy monit przesłany przez użytkownika i rozpocząć od pytania LLM, jeśli monit ma sens, jeśli znajduje się w granicach tego, co chcesz zaakceptować, jeśli jest on oparty na wadliwym założeniu lub musi zostać ponownie napisany, aby uniknąć pewnych uprzedzeń. Jeśli llM analizuje monit i znajdzie problemy, możesz przejść krok dalej: poproś LLM o ponowne sformułowanie monitu, aby potencjalnie poprawić odpowiedź.

Przetwarzanie końcowe może obejmować walidację istotności i przydatności odpowiedzi do domeny. Może to obejmować usuwanie lub flagowanie odpowiedzi, które nie spełniają wymagań domeny. Na przykład możesz sprawdzić ukończenie dostarczone przez LLM, aby upewnić się, że spełnia wymagania dotyczące jakości i bezpieczeństwa. Możesz poprosić LLM o ocenę odpowiedzi, aby sprawdzić, czy rzeczywiście spełnia ona wymagania, do których poproszono cię o przestrzeganie. Jeśli tak nie jest, możesz poprosić LLM o zmodyfikowanie ukończenia i powtórzyć to, dopóki nie uzyskasz zadowalającego wyniku.

Istnieje jedno zastrzeżenie dotyczące dodawania kroków przetwarzania wstępnego: za każdym razem, gdy dodasz wywołanie do modułu LLM w potoku wnioskowania, zwiększysz ogólne opóźnienie (czas odpowiedzi) i koszt każdej interakcji z użytkownikiem. Jako doświadczony deweloper oprogramowania prawdopodobnie już wiesz o tego rodzaju kompromisach, które muszą być dokonywane przez kierownictwo, które wpływają na budżet, wydajność i skuteczność systemu oprogramowania.

Artykuł Building advanced Retrieval-Augmented Generation systems (Tworzenie zaawansowanych systemów generowania rozszerzonego pobierania) szczegółowo opisuje konkretne kroki tworzenia potoku wnioskowania.

Inne czynniki wpływające na ukończenie

Poza programowym modyfikowaniem monitu, tworzeniem potoku wnioskowania i innymi technikami dalsze szczegóły omówiono w temacie Rozszerzanie modelu dużego języka przy użyciu generowania rozszerzonego pobierania i dostrajania. Ponadto istnieją parametry, które można modyfikować podczas wykonywania wywołań do interfejsu API usługi Azure OpenAI.

Dokumentacja punktu końcowego czatu zawiera listę wymaganych i opcjonalnych parametrów, które mogą mieć wpływ na różne aspekty ukończenia. Jeśli zamiast tego używasz zestawu SDK, zapoznaj się z dokumentacją zestawu SDK dotyczącą wybranego języka. Jeśli chcesz eksperymentować z parametrami, możesz to zrobić w placu zabaw.

  • Temperatura: kontrolowanie losowości danych wyjściowych wygenerowanych przez model. Na poziomie zerowym model staje się deterministyczny, konsekwentnie wybierając najbardziej prawdopodobny następny token z danych treningowych. W temperaturze 1 model równoważy między wybraniem tokenów wysokiego prawdopodobieństwa a wprowadzeniem losowości do danych wyjściowych.

  • Maksymalna liczba tokenów: określa maksymalną długość odpowiedzi. Ustawienie wyższego lub niższego limitu może mieć wpływ na szczegóły i zakres wygenerowanej zawartości.

  • Top P (Próbkowanie jądra): używane z temperaturą do kontrolowania losowości odpowiedzi. Górna wartość P ogranicza sztuczną inteligencję do rozważenia tylko najwyższego procentu masy prawdopodobieństwa podczas generowania każdego tokenu. Niższe wartości prowadzą do bardziej ukierunkowanego i przewidywalnego tekstu, a wyższe wartości umożliwiają większą różnorodność.

  • Częstotliwość kary: zmniejsza prawdopodobieństwo powtórzenia tego samego wiersza lub frazy przez model. Zwiększenie tej wartości pomaga uniknąć nadmiarowości wygenerowanego tekstu.

  • Kara za obecność: zachęca model do wprowadzenia nowych pojęć i terminów w zakończeniu. Kara obecności jest przydatna do generowania bardziej zróżnicowanych i kreatywnych danych wyjściowych.

  • Sekwencje zatrzymania: można określić co najmniej jedną sekwencję, aby poinstruować interfejs API, aby zatrzymać generowanie kolejnych tokenów. Sekwencje sklepów są przydatne do kontrolowania struktury danych wyjściowych, takich jak zakończenie na końcu zdania lub akapitu.

  • Logit Bias: umożliwia modyfikowanie prawdopodobieństwa wystąpienia określonych tokenów w zakończeniu. Logit Bias może służyć do kierowania ukończeniem w określonym kierunku lub pomijania niepożądanej zawartości.

Omówienie zabezpieczeń openAI firmy Microsoft

Oprócz zachowania odpowiedzi usługi LLM powiązanych z konkretnym tematem lub domenami, prawdopodobnie będziesz również zaniepokojony rodzajami pytań, które użytkownicy zadają w usłudze LLM. Ważne jest, aby wziąć pod uwagę rodzaje odpowiedzi, które generuje.

Najpierw wywołania interfejsu API do usług Microsoft OpenAI Services automatycznie filtrować zawartość, która potencjalnie obraźliwa, i zgłasza je z powrotem do Ciebie w wielu kategoriach filtrowania.

Interfejs API moderowania openAI można używać bezpośrednio do jawnego sprawdzania zawartości pod kątem potencjalnie szkodliwej zawartości.

Po drugie, możesz użyć bezpieczeństwa zawartości sztucznej inteligencji platformy Azure, aby ułatwić moderowanie tekstu, moderowanie obrazów, wykrywanie ryzyka jailbreaku i wykrywanie chronionych materiałów. Łączy to środowisko konfiguracji, konfiguracji i raportowania portalu z kodem, który można dodać do aplikacji w celu zidentyfikowania szkodliwej zawartości.

Ostateczne zagadnienia, które mogą mieć wpływ na decyzje projektowe aplikacji

Zrozumienie tokenizacji, cen, okien kontekstowych i implementowanie ulepszeń programowych w celu ulepszenia środowiska generowania tekstu użytkowników wpływa na sposób projektowania systemu generowania sztucznej inteligencji. Poniżej przedstawiono krótką listę kwestii, które należy wziąć pod uwagę i inne wnioski z tego artykułu, które mają wpływ na decyzje projektowe aplikacji:

  • Oceń konieczność korzystania z najnowszego modelu sztucznej inteligencji w odniesieniu do zagadnień dotyczących kosztów. Tańsze modele mogą wystarczyć do potrzeb aplikacji, równoważąc wydajność z ograniczeniami budżetowymi.
  • Rozważ optymalizację długości okna kontekstowego, aby zarządzać kosztami bez znaczącego wpływu na środowisko użytkownika. Przycinanie niepotrzebnych części konwersacji może zmniejszyć opłaty za przetwarzanie przy zachowaniu interakcji z jakością.
  • Oceń, jak tokenizacja i stopień szczegółowości danych wejściowych i wyjściowych wpływają na wydajność. Zrozumienie, w jaki sposób wybrana usługa LLM obsługuje tokenizację, może pomóc w optymalizacji wydajności wywołań interfejsu API, potencjalnie zmniejszając koszty i skracając czasy odpowiedzi.

Jeśli chcesz od razu rozpocząć eksperymentowanie z tworzeniem generowania rozwiązania sztucznej inteligencji, zalecamy zapoznanie się z omówieniem rozpoczynania czatu przy użyciu własnego przykładu danych dla języka Python. Istnieją również wersje samouczka dostępne na platformie .NET, Java i w języku JavaScript.