Udostępnij za pośrednictwem


Tworzenie zaawansowanych systemów generowania rozszerzonego pobierania

W poprzednim artykule omówiono dwie opcje tworzenia aplikacji "czatu na danych", jednej z premierowych przypadków użycia generacyjnych sztucznej inteligencji w firmach:

  • Pobieranie rozszerzonej generacji (RAG), które uzupełnia szkolenie modelu dużego języka (LLM) z bazą danych artykułów z możliwością wyszukiwania, które można pobrać na podstawie podobieństwa do zapytań użytkowników i przekazane do LLM do ukończenia.
  • Dostrajanie, które rozszerza szkolenie LLM, aby lepiej zrozumieć domenę problemu.

W poprzednim artykule omówiono również, kiedy należy używać poszczególnych podejść, profesjonalistów i con każdego podejścia i kilku innych zagadnień.

W tym artykule omówiono usługę RAG bardziej szczegółowo, a w szczególności całą pracę wymaganą do utworzenia rozwiązania gotowego do produkcji.

W poprzednim artykule przedstawiono kroki lub fazy rag przy użyciu poniższego diagramu.

Diagram przedstawiający prosty przepływ RAG z polami reprezentującymi kroki lub procesy i strzałki łączące każde pole. Przepływ rozpoczyna się od zapytania użytkownika. Następnie zapytanie jest wysyłane do interfejsu API osadzania, co powoduje wektoryzowane zapytanie, które służy do znajdowania najbliższych dopasowań w bazie danych wektorów, która pobiera fragmenty artykułu, a fragmenty zapytania i artykułu są wysyłane do interfejsu API uzupełniania, a wyniki są wysyłane do użytkownika.

Ten obraz jest określany jako "naiwny RAG" i jest przydatnym sposobem uprzedniego zrozumienia mechanizmów, ról i obowiązków wymaganych do wdrożenia systemu czatów opartych na rag.

Jednak bardziej rzeczywista implementacja ma o wiele więcej kroków przed i po przetworzeniu w celu przygotowania artykułów, zapytań i odpowiedzi do użycia. Na poniższym diagramie przedstawiono bardziej realistyczne przedstawienie RAG, czasami określane jako "zaawansowana RAG".

Diagram przedstawiający zaawansowany przepływ logiki RAG jako serię pól ze strzałkami między nimi. Istnieje 10 pól rozpoczynających się od zapytania użytkownika. Następnie wykonaj kroki przetwarzania zapytań, a następnie wywołanie interfejsu API osadzania, a następnie wynikowe zapytanie jako wektor, a następnie wektor jest używany do wykonywania zapytań względem bazy danych wektorów w celu znalezienia najbliższego dopasowania, a następnie pobranego jako fragmentów artykułu, a następnie kroków przetwarzania po pobraniu, a następnie przetworzonych zapytań i przetworzonych fragmentów artykułu są wysyłane do interfejsu API uzupełniania, a następnie po zakończeniu przetwarzania kroków przetwarzania,  i wreszcie odpowiedź dostarczona do użytkownika.

Ten artykuł zawiera koncepcyjną strukturę do zrozumienia typów problemów związanych z przetwarzaniem wstępnym i po zakończeniu przetwarzania w rzeczywistym systemie czatów opartych na języku RAG, zorganizowanych w następujący sposób:

  • Faza pozyskiwania
  • Faza potoku wnioskowania
  • Faza oceny

Jako omówienie koncepcyjne słowa kluczowe i pomysły są dostarczane jako kontekst i punkt wyjścia do dalszej eksploracji i badań.

Pozyskiwanie danych

Pozyskiwanie dotyczy przede wszystkim przechowywania dokumentów organizacji w taki sposób, że można je łatwo pobrać, aby odpowiedzieć na pytanie użytkownika. Wyzwanie polega na zapewnieniu, że części dokumentów, które najlepiej pasują do zapytania użytkownika, znajdują się i są używane podczas wnioskowania. Dopasowywanie odbywa się głównie poprzez wektoryzowane osadzanie i wyszukiwanie podobieństwa cosinus. Ułatwia to jednak zrozumienie charakteru zawartości (wzorców, formularzy itp.) oraz strategii organizacji danych (struktury danych przechowywanych w bazie danych wektorowej).

W tym celu deweloperzy muszą wziąć pod uwagę następujące kwestie:

  • Wstępne przetwarzanie i wyodrębnianie zawartości
  • Strategia fragmentowania
  • Organizacja fragmentowania
  • Strategia aktualizacji

Wstępne przetwarzanie i wyodrębnianie zawartości

Czysta i dokładna zawartość jest jednym z najlepszych sposobów poprawy ogólnej jakości systemu czatów opartych na rag. Aby to osiągnąć, deweloperzy muszą zacząć od przeanalizowanie kształtu i formy dokumentów do indeksowania. Czy dokumenty są zgodne z określonymi wzorcami zawartości, takimi jak dokumentacja? Jeśli nie, jakie typy pytań mogą odpowiedzieć na dokumenty?

Deweloperzy powinni co najmniej utworzyć kroki w potoku pozyskiwania, aby:

  • Standaryzacja formatów tekstu
  • Obsługa znaków specjalnych
  • Usuwanie niepowiązanej, nieaktualnej zawartości
  • Konto dla zawartości w wersji
  • Konto środowiska zawartości (karty, obrazy, tabele)
  • Wyodrębnianie metadanych

Niektóre z tych informacji (na przykład metadane) mogą być przydatne do przechowywania dokumentu w bazie danych wektorów do użycia podczas procesu pobierania i oceny w potoku wnioskowania lub w połączeniu z fragmentem tekstu w celu przekonania wektorowego osadzania fragmentu.

Strategia fragmentowania

Deweloperzy muszą zdecydować, jak podzielić dłuższy dokument na mniejsze fragmenty. Może to poprawić istotność dodatkowej zawartości wysyłanej do usługi LLM, aby dokładnie odpowiedzieć na zapytanie użytkownika. Ponadto deweloperzy muszą rozważyć sposób korzystania z fragmentów podczas pobierania. Jest to obszar, w którym projektanci systemów powinni przeprowadzić pewne badania nad technikami stosowanymi w branży i przeprowadzić eksperymenty, nawet testując je w ograniczonej pojemności w organizacji.

Deweloperzy muszą wziąć pod uwagę następujące kwestie:

  • Optymalizacja rozmiaru fragmentu — określ, jaki jest idealny rozmiar fragmentu i jak wyznaczyć fragment. Według sekcji? Według akapitu? Według zdania?
  • Nakładające się i przesuwane fragmenty okien — określ, jak podzielić zawartość na odrębne fragmenty. A może fragmenty nakładają się na siebie? Albo oba (okno przesuwne)?
  • Small2Big — podczas fragmentowania na poziomie szczegółowym, takim jak pojedyncze zdanie, zawartość będzie zorganizowana w taki sposób, że łatwo jest znaleźć sąsiednie zdania lub zawierać akapit? (Zobacz "Organizacja fragmentowania"). Pobranie tych dodatkowych informacji i dostarczenie ich do usługi LLM może dostarczyć więcej kontekstu podczas odpowiadania na zapytanie użytkownika.

Organizacja fragmentowania

W systemie RAG organizacja danych w bazie danych wektorów ma kluczowe znaczenie dla efektywnego pobierania odpowiednich informacji w celu rozszerzenia procesu generowania. Poniżej przedstawiono typy strategii indeksowania i pobierania, które mogą rozważyć deweloperzy:

  • Indeksy hierarchiczne — takie podejście polega na utworzeniu wielu warstw indeksów, w których indeks najwyższego poziomu (indeks podsumowania) szybko zawęża przestrzeń wyszukiwania do podzbioru potencjalnie odpowiednich fragmentów, a indeks drugiego poziomu (indeks fragmentów) udostępnia bardziej szczegółowe wskaźniki do rzeczywistych danych. Ta metoda może znacznie przyspieszyć proces pobierania, ponieważ zmniejsza liczbę wpisów do skanowania w indeksie szczegółowym, filtrując najpierw indeks podsumowania.
  • Wyspecjalizowane indeksy — wyspecjalizowane indeksy , takie jak grafowe lub relacyjne bazy danych, mogą być używane w zależności od charakteru danych i relacji między fragmentami. Na przykład:
    • Indeksy oparte na grafach są przydatne, gdy fragmenty mają połączone informacje lub relacje, które mogą zwiększyć pobieranie, takie jak sieci cytatów lub wykresy wiedzy.
    • Relacyjne bazy danych mogą być skuteczne, jeśli fragmenty są ustrukturyzowane w formacie tabelarycznym, w którym zapytania SQL mogą służyć do filtrowania i pobierania danych na podstawie określonych atrybutów lub relacji.
  • Indeksy hybrydowe — podejście hybrydowe łączy wiele strategii indeksowania w celu wykorzystania mocnych stron każdego z nich. Na przykład deweloperzy mogą używać indeksu hierarchicznego do początkowego filtrowania i indeksu opartego na grafach w celu dynamicznego eksplorowania relacji między fragmentami podczas pobierania.

Optymalizacja wyrównania

Aby zwiększyć istotność i dokładność pobranych fragmentów, korzystne może być dopasowanie ich bliżej do typów pytań lub zapytań, na które mają odpowiedzieć. Jedną ze strategii w tym celu jest wygenerowanie i wstawienie hipotetycznego pytania dla każdego fragmentu, które reprezentuje pytanie, na które fragment najlepiej odpowiada. Pomaga to na kilka sposobów:

  • Ulepszone dopasowywanie: podczas pobierania system może porównać zapytanie przychodzące z tymi hipotetycznymi pytaniami, aby znaleźć najlepsze dopasowanie, poprawiając istotność pobranych fragmentów.
  • Dane szkoleniowe dla modeli uczenia maszynowego: te pary pytań i fragmentów mogą służyć jako dane szkoleniowe w celu ulepszania modeli uczenia maszynowego bazowych w systemie RAG, pomagając dowiedzieć się, na które typy pytań najlepiej odpowiadać, na które fragmenty.
  • Obsługa zapytań bezpośrednich: jeśli rzeczywiste zapytanie użytkownika jest ściśle zgodne z hipotetycznym pytaniem, system może szybko pobrać odpowiedni fragment i użyć odpowiedniego fragmentu, przyspieszając czas odpowiedzi.

Hipotetyczne pytanie każdego fragmentu działa jako rodzaj "etykiety", który kieruje algorytmem pobierania, dzięki czemu jest bardziej skoncentrowany i kontekstowo świadomy. Jest to przydatne w scenariuszach, w których fragmenty obejmują szeroką gamę tematów lub typów informacji.

Strategie aktualizacji

Jeśli Organizacja musi indeksować dokumenty, które są często aktualizowane, ważne jest, aby zachować zaktualizowany korpus, aby zapewnić składnik pobierania (logika w systemie odpowiedzialna za wykonywanie zapytania względem bazy danych wektorów i zwracanie wyników) może uzyskać dostęp do najbardziej aktualnych informacji. Poniżej przedstawiono kilka strategii aktualizowania wektorowej bazy danych w takich systemach:

  • Aktualizacje przyrostowe:
    • Regularne interwały: zaplanuj aktualizacje w regularnych odstępach czasu (na przykład codziennie, co tydzień) w zależności od częstotliwości zmian dokumentu. Ta metoda zapewnia okresowe odświeżanie bazy danych.
    • Aktualizacje oparte na wyzwalaczu: zaimplementuj system, w którym aktualizacje wyzwalają ponowne indeksowanie. Na przykład wszelkie modyfikacje lub dodanie dokumentu mogą automatycznie zainicjować ponowne indeksowanie sekcji, których dotyczy problem.
  • Aktualizacje częściowe:
    • Selektywne ponowne indeksowanie: zamiast ponownie indeksowania całej bazy danych selektywnie aktualizują tylko części korpusu, które uległy zmianie. Może to być bardziej wydajne niż pełne ponowne indeksowanie, szczególnie w przypadku dużych zestawów danych.
    • Kodowanie różnicowe: przechowuj tylko różnice między istniejącymi dokumentami a ich zaktualizowanymi wersjami. Takie podejście zmniejsza obciążenie przetwarzania danych, unikając konieczności przetwarzania niezmienionych danych.
  • Przechowywanie wersji:
    • Migawka: obsługa wersji korpusu dokumentów w różnych punktach w czasie. Dzięki temu system może przywrócić lub odwołać się do poprzednich wersji w razie potrzeby i zapewnić mechanizm tworzenia kopii zapasowych.
    • Kontrola wersji dokumentu: użyj systemu kontroli wersji, aby systematycznie śledzić zmiany w dokumentach. Pomaga to w utrzymaniu historii zmian i może uprościć proces aktualizacji.
  • Aktualizacje w czasie rzeczywistym:
    • Przetwarzanie strumienia: korzystaj z technologii przetwarzania strumieniowego, aby zaktualizować bazę danych wektorów w czasie rzeczywistym w miarę wprowadzania zmian w dokumentach. Może to mieć kluczowe znaczenie dla aplikacji, w których najważniejsze jest terminy informacji.
    • Wykonywanie zapytań na żywo: Zamiast polegać wyłącznie na wektorach wstępnie indeksowanych, zaimplementuj mechanizm wysyłania zapytań o dane na żywo dla najbardziej aktualnych odpowiedzi, prawdopodobnie łącząc je z buforowanymi wynikami w celu zwiększenia wydajności.
  • Techniki optymalizacji:
    • Przetwarzanie wsadowe: Kumuluj zmiany i przetwarzaj je w partiach, aby zoptymalizować wykorzystanie zasobów i zmniejszyć obciążenie spowodowane częstymi aktualizacjami.
    • Podejścia hybrydowe: połącz różne strategie, takie jak używanie aktualizacji przyrostowych w przypadku drobnych zmian i pełne ponowne indeksowanie w przypadku głównych aktualizacji lub zmian strukturalnych w korpusie dokumentu.

Wybór odpowiedniej strategii aktualizacji lub kombinacji strategii zależy od konkretnych wymagań, takich jak rozmiar korpusu dokumentu, częstotliwość aktualizacji, zapotrzebowanie na dane w czasie rzeczywistym i dostępność zasobów. Każde podejście ma swoje kompromisy w zakresie złożoności, kosztów i opóźnień aktualizacji, dlatego ważne jest, aby ocenić te czynniki na podstawie konkretnych potrzeb aplikacji.

Potok wnioskowania

Teraz, gdy artykuły zostały fragmentowane, wektoryzowane i przechowywane w bazie danych wektorów, fokus zamienia się w wyzwania związane z ukończeniem.

  • Czy zapytanie użytkownika zostało napisane w taki sposób, aby uzyskać wyniki z systemu, którego szuka użytkownik?
  • Czy zapytanie użytkownika narusza jakiekolwiek z naszych zasad?
  • Jak ponownie napisać zapytanie użytkownika, aby zwiększyć swoje szanse na znalezienie najbliższych dopasowań w bazie danych wektorów?
  • Jak ocenić wyniki zapytania, aby upewnić się, że fragmenty artykułu są wyrównane do zapytania?
  • Jak ocenić i zmodyfikować wyniki zapytania przed przekazaniem ich do usługi LLM, aby upewnić się, że najbardziej istotne szczegóły zostaną uwzględnione w zakończeniu usługi LLM?
  • Jak ocenić odpowiedź llM, aby upewnić się, że ukończenie usługi LLM odpowiada na oryginalne zapytanie użytkownika?
  • Jak zapewnić, że odpowiedź LLM jest zgodna z naszymi zasadami?

Jak widać, istnieje wiele zadań, które deweloperzy muszą wziąć pod uwagę, głównie w postaci:

  • Wstępne przetwarzanie danych wejściowych w celu zoptymalizowania prawdopodobieństwa uzyskania żądanych wyników
  • Dane wyjściowe przetwarzania końcowego w celu zapewnienia pożądanych wyników

Należy pamiętać, że cały potok wnioskowania działa w czasie rzeczywistym. Chociaż nie ma żadnego właściwego sposobu projektowania logiki, która wykonuje kroki przed i po przetwarzaniu, prawdopodobnie jest to kombinacja logiki programowania i dodatkowych wywołań do usługi LLM. Jedną z najważniejszych kwestii jest wówczas kompromis między tworzeniem najbardziej dokładnego i zgodnego potoku oraz kosztem i opóźnieniem wymaganym do jego wykonania.

Przyjrzyjmy się poszczególnym etapom, aby zidentyfikować konkretne strategie.

Kroki przetwarzania wstępnego zapytania

Przetwarzanie wstępne zapytania odbywa się natychmiast po przesłaniu zapytania przez użytkownika, jak pokazano na tym diagramie:

Diagram powtarzający zaawansowane kroki RAG z naciskiem na kroki przetwarzania zapytań z etykietą box.

Celem tych kroków jest upewnienie się, że użytkownik zadaje pytania w zakresie naszego systemu (i nie próbuje "jailbreak" systemu, aby zrobić coś niezamierzonego) i przygotować zapytanie użytkownika w celu zwiększenia prawdopodobieństwa, że znajdzie on najlepsze możliwe fragmenty artykułu przy użyciu wyszukiwania cosinus / "najbliższy sąsiad".

Sprawdzanie zasad — ten krok może obejmować logikę, która identyfikuje, usuwa, flagi lub odrzuca określoną zawartość. Niektóre przykłady mogą obejmować usuwanie danych osobowych, usuwanie eksplodacyjnych i identyfikowanie prób "jailbreaku". Jailbreaking odnosi się do metod, które użytkownicy mogą zastosować w celu obejścia wbudowanych wytycznych dotyczących bezpieczeństwa, etycznego lub operacyjnego modelu lub manipulowania nimi.

Ponowne pisanie zapytań — może to być coś, co może być związane z rozszerzaniem akronimów i usuwaniem slangu, aby ponownie sformułować pytanie, aby zadać mu bardziej abstrakcyjnie wyodrębnianie pojęć i zasad wysokiego poziomu ("monitowanie krok po kroku").

Odmiana monitowania krokowego to hipotetyczne osadzanie dokumentów (HyDE), które używają funkcji LLM do odpowiadania na pytanie użytkownika, tworzy osadzanie dla tej odpowiedzi (osadzanie hipotetycznego dokumentu) i używa tego osadzania w celu przeprowadzenia wyszukiwania względem wektorowej bazy danych.

Zapytania podrzędne

Ten krok przetwarzania dotyczy oryginalnego zapytania. Jeśli oryginalne zapytanie jest długie i złożone, może być przydatne programowe podzielenie go na kilka mniejszych zapytań, a następnie połączenie wszystkich odpowiedzi.

Rozważmy na przykład pytanie związane z odkryciami naukowymi, szczególnie w dziedzinie fizyki. Zapytanie użytkownika może być: "Kto wniósł większy wkład w nowoczesną fizykę, Alberta Einsteina lub Nielsa Bohra?"

To zapytanie może być złożone do obsługi bezpośrednio, ponieważ "znaczący wkład" może być subiektywny i wielowymiarowy. Podzielenie go na podzapytania może zwiększyć możliwości zarządzania:

  1. Subquery 1: "Jaki jest kluczowy wkład Alberta Einsteina w nowoczesną fizykę?"
  2. Subquery 2: "Jaki jest kluczowy wkład Nielsa Bohra do nowoczesnej fizyki?"

Wyniki tych podzapytania szczegółowo opisy głównych teorii i odkryć przez każdego fizyka. Na przykład:

  • Dla Einsteina wkład może obejmować teorię względności, efekt fotoelektryczny i E=mc^2.
  • Dla Bohra wkład może obejmować jego model atomu wodoru, jego pracę nad mechaniką kwantową i jego zasadą uzupełniania.

Po określeniu tych składek można je ocenić w celu ustalenia:

  1. Subquery 3: "Jak teorie Einsteina miały wpływ na rozwój współczesnej fizyki?"
  2. Podquery 4: "Jak teorie Bohra miały wpływ na rozwój współczesnej fizyki?"

Te podzapytania zbadałyby wpływ pracy każdego naukowca na to pole, takie jak teorie Einsteina doprowadziły do postępów w kosmologii i teorii kwantowej oraz jak praca Bohra przyczyniła się do zrozumienia struktury atomowej i mechaniki kwantowej.

Połączenie wyników tych podzapytania może pomóc modelowi językowemu stworzyć bardziej kompleksową odpowiedź dotyczącą tego, kto wniósł większy wkład w nowoczesną fizykę, w zależności od zakresu i wpływu ich teoretycznych postępów. Ta metoda upraszcza oryginalne złożone zapytanie, zajmując się bardziej szczegółowymi, odpowiedźmi składnikami, a następnie syntetyzując te ustalenia w spójną odpowiedź.

Router zapytań

Istnieje możliwość, że organizacja decyduje się podzielić jej korpus zawartości na wiele magazynów wektorów lub całych systemów pobierania. W takim przypadku deweloperzy mogą użyć routera zapytań, który jest mechanizmem, który inteligentnie określa indeksy lub aparaty pobierania, które mają być używane na podstawie podanego zapytania. Podstawową funkcją routera zapytań jest zoptymalizowanie pobierania informacji przez wybranie najbardziej odpowiedniej bazy danych lub indeksu, który może zapewnić najlepsze odpowiedzi na określone zapytanie.

Router zapytań zazwyczaj działa w punkcie po sformułowaniu zapytania przez użytkownika, ale przed wysłaniem go do dowolnych systemów pobierania. Oto uproszczony przepływ pracy:

  1. Analiza zapytań: usługa LLM lub inny składnik analizuje przychodzące zapytanie, aby zrozumieć jego zawartość, kontekst i typ prawdopodobnie potrzebnych informacji.
  2. Wybór indeksu: na podstawie analizy router zapytań wybiera co najmniej jeden z potencjalnie kilku dostępnych indeksów. Każdy indeks może być zoptymalizowany pod kątem różnych typów danych lub zapytań — na przykład niektóre mogą być bardziej odpowiednie dla zapytań faktycznych, podczas gdy inne mogą wyróżniać się w dostarczaniu opinii lub subiektywnej treści.
  3. Wysyłanie zapytania: zapytanie jest następnie wysyłane do wybranego indeksu.
  4. Agregacja wyników: odpowiedzi z wybranych indeksów są pobierane i ewentualnie agregowane lub dalej przetwarzane w celu utworzenia kompleksowej odpowiedzi.
  5. Generowanie odpowiedzi: Ostatnim krokiem jest generowanie spójnej odpowiedzi na podstawie pobranych informacji, ewentualnie integrowanie lub synchronizowanie zawartości z wielu źródeł.

Organizacja może używać wielu aparatów pobierania lub indeksów dla następujących przypadków użycia:

  • Specjalizacja typu danych: niektóre indeksy mogą specjalizować się w artykułach informacyjnych, innych w dokumentach akademickich, a jeszcze inne w ogólnej zawartości internetowej lub określonych bazach danych, takich jak te dotyczące informacji medycznych lub prawnych.
  • Optymalizacja typu zapytania: niektóre indeksy mogą być zoptymalizowane pod kątem szybkich odnośników faktycznych (na przykład dat, zdarzeń), podczas gdy inne mogą być lepsze dla złożonych zadań rozumowania lub zapytań wymagających głębokiej wiedzy na temat domeny.
  • Różnice algorytmiczne: różne algorytmy pobierania mogą być używane w różnych aparatach, takich jak wyszukiwania podobieństwa oparte na wektorach, tradycyjne wyszukiwania oparte na słowach kluczowych lub bardziej zaawansowane modele semantyczne rozumienia.

Wyobraź sobie system oparty na RAG używany w kontekście porad medycznych. System ma dostęp do wielu indeksów:

  • Indeks publikacji medycznej zoptymalizowany pod kątem szczegółowych i technicznych wyjaśnień.
  • Indeks badania przypadku klinicznego, który dostarcza rzeczywistych przykładów objawów i leczenia.
  • Ogólny indeks informacji o kondycji dla podstawowych zapytań i informacji o zdrowiu publicznym.

Jeśli użytkownik zadaje pytanie techniczne dotyczące skutków chemicznych nowego leku, router zapytań może określić priorytety indeksu papieru badawczego medycznego ze względu na jego głębokość i nacisk techniczny. Na pytanie dotyczące typowych objawów typowej choroby, jednak ogólny indeks zdrowia może być wybrany dla jego szerokiej i łatwo zrozumiałej treści.

Kroki przetwarzania po pobraniu

Przetwarzanie po pobraniu następuje po pobraniu odpowiednich fragmentów zawartości z bazy danych wektorów, jak pokazano na diagramie:

Diagram powtarzający zaawansowane kroki RAG z naciskiem na pole z etykietą kroki przetwarzania po pobraniu.

Po pobraniu fragmentów zawartości kandydata następne kroki to sprawdzenie, czy fragmenty artykułu będą przydatne podczas rozszerzania monitu LLM, a następnie rozpocząć przygotowywanie monitu do wyświetlenia w usłudze LLM.

Deweloperzy muszą rozważyć kilka aspektów monitu. Monit zawierający zbyt wiele informacji uzupełniających i niektóre (prawdopodobnie najważniejsze informacje) mogą być ignorowane. Podobnie monit zawierający nieistotne informacje może mieć wpływ na odpowiedź.

Innym zagadnieniem jest igła w problemie siana , termin, który odnosi się do znanego dziwactwa niektórych LLMs, gdzie zawartość na początku i na końcu monitu mają większą wagę do LLM niż zawartość w środku.

Na koniec należy wziąć pod uwagę maksymalną długość okna kontekstowego usługi LLM oraz liczbę tokenów wymaganych do ukończenia niezwykle długich monitów (zwłaszcza w przypadku obsługi zapytań na dużą skalę).

Aby rozwiązać te problemy, potok przetwarzania po pobraniu może obejmować następujące kroki:

  • Filtrowanie wyników — w tym kroku deweloperzy zapewniają, że fragmenty artykułu zwracane przez bazę danych wektorów są istotne dla zapytania. Jeśli nie, wynik zostanie zignorowany podczas tworzenia monitu dotyczącego usługi LLM.
  • Ponowne klasyfikowanie — klasyfikowanie fragmentów artykułu pobranych z magazynu wektorów w celu zapewnienia, że odpowiednie szczegóły będą aktywne w pobliżu krawędzi (początek i koniec) monitu.
  • Kompresja monitu — użycie małego, niedrogiego modelu zaprojektowanego do łączenia i podsumowywania wielu fragmentów artykułu w jeden, skompresowany monit przed wysłaniem go do usługi LLM.

Kroki przetwarzania po zakończeniu

Przetwarzanie po zakończeniu odbywa się po wysłaniu zapytania użytkownika i wszystkich fragmentów zawartości do usługi LLM, jak pokazano na poniższym diagramie:

Diagram powtarzający zaawansowane kroki RAG z naciskiem na pole z etykietą kroków przetwarzania po zakończeniu.

Po zakończeniu monitu przez llm nadszedł czas, aby zweryfikować ukończenie, aby upewnić się, że odpowiedź jest dokładna. Potok przetwarzania po zakończeniu może obejmować następujące kroki:

  • Sprawdzanie faktów — może to mieć wiele form, ale celem jest zidentyfikowanie konkretnych oświadczeń przedstawionych w artykule, które są prezentowane jako fakty, a następnie sprawdzenie tych faktów pod kątem dokładności. Jeśli krok sprawdzania faktów zakończy się niepowodzeniem, może być konieczne ponowne wysłanie zapytania do usługi LLM w nadziei na lepszą odpowiedź lub zwrócenie użytkownikowi komunikatu o błędzie.
  • Sprawdzanie zasad — jest to ostatni wiersz obrony w celu zapewnienia, że odpowiedzi nie zawierają szkodliwej zawartości, zarówno dla użytkownika, jak i organizacji.

Ocena

Ocenianie wyników systemu niedeterministycznego nie jest tak proste, jak na przykład testy jednostkowe lub integracyjne, z którymi zna większość deweloperów. Należy wziąć pod uwagę kilka czynników:

  • Czy użytkownicy są zadowoleni z uzyskiwanych wyników?
  • Czy użytkownicy otrzymują dokładne odpowiedzi na swoje pytania?
  • Jak przechwytywać opinie użytkowników? Czy istnieją jakieś zasady ograniczające dane, które możemy zbierać na temat danych użytkowników?
  • Czy w przypadku diagnostyki niezadowalającej odpowiedzi mamy wgląd w całą pracę, która przeszła na pytanie? Czy przechowujemy dziennik każdego etapu w potoku wnioskowania danych wejściowych i wyjściowych, abyśmy mogli przeprowadzić analizę głównej przyczyny?
  • Jak możemy wprowadzić zmiany w systemie bez regresji lub degradacji wyników?

Przechwytywanie opinii użytkowników i podejmowanie działań na ich podstawie

Jak wspomniano wcześniej, deweloperzy mogą potrzebować współpracy z zespołem ds. prywatności organizacji w celu zaprojektowania mechanizmów przechwytywania opinii i telemetrii, rejestrowania itp., aby umożliwić analizę kryminalistyczną i główną przyczynę w danej sesji zapytania.

Następnym krokiem jest opracowanie potoku oceny. Potrzeba potoku oceny wynika ze złożoności i czasochłonnego charakteru analizowania opinii dosłownej oraz głównych przyczyn odpowiedzi dostarczonych przez system sztucznej inteligencji. Ta analiza ma kluczowe znaczenie, ponieważ obejmuje badanie każdej odpowiedzi, aby zrozumieć, w jaki sposób zapytanie sztucznej inteligencji wygenerowało wyniki, sprawdzając odpowiedniość fragmentów zawartości używanych z dokumentacji oraz strategie stosowane podczas dzielenia tych dokumentów.

Ponadto wiąże się to z rozważeniem dodatkowych kroków przed lub po przetworzeniu, które mogłyby poprawić wyniki. To szczegółowe badanie często ujawnia luki w zawartości, szczególnie jeśli nie ma odpowiedniej dokumentacji w odpowiedzi na zapytanie użytkownika.

Dlatego utworzenie potoku oceny staje się niezbędne do efektywnego zarządzania skalą tych zadań. Wydajny potok wykorzystuje niestandardowe narzędzia do oceny metryk, które przybliżą jakość odpowiedzi dostarczonych przez sztuczną inteligencję. Ten system usprawniłby proces określania, dlaczego dana odpowiedź została udzielona na pytanie użytkownika, które dokumenty zostały użyte do wygenerowania tej odpowiedzi oraz skuteczność potoku wnioskowania, który przetwarza zapytania.

Złoty zestaw danych

Jedną ze strategii oceny wyników systemu niedeterministycznego, takiego jak system RAG-chat, jest zaimplementowanie "złotego zestawu danych". Złoty zestaw danych to wyselekcjonowany zestaw pytań z zatwierdzonymi odpowiedziami, metadanymi (takimi jak temat i typ pytania), odwołaniami do dokumentów źródłowych, które mogą służyć jako podstawowe informacje na temat odpowiedzi, a nawet odmian (różne frazy służące do przechwytywania różnorodności sposobu, w jaki użytkownicy mogą zadawać te same pytania).

"Złoty zestaw danych" reprezentuje "najlepszy scenariusz przypadku" i umożliwia deweloperom ocenę systemu w celu sprawdzenia, jak dobrze działa, oraz przeprowadzania testów regresji podczas implementowania nowych funkcji lub aktualizacji.

Ocenianie szkody

Modelowanie szkód to metodologia mająca na celu przewidywanie potencjalnych szkód, wykrycie braków w produkcie, które może stanowić zagrożenie dla osób fizycznych i opracowanie proaktywnych strategii w celu ograniczenia takich zagrożeń.

Narzędzie przeznaczone do oceny wpływu technologii, szczególnie systemów sztucznej inteligencji, zawierałoby kilka kluczowych składników opartych na zasadach modelowania szkód, jak opisano w podanych zasobach.

Kluczowe funkcje narzędzia do oceny szkód mogą obejmować:

  1. Identyfikacja uczestników projektu: narzędzie pomogłoby użytkownikom identyfikować i kategoryzować różne zainteresowane strony, których dotyczy technologia, w tym bezpośredni użytkownicy, pośrednio dotknięte strony i inne podmioty, takie jak przyszłe pokolenia lub czynniki inne niż ludzkie, takie jak obawy środowiskowe (.

  2. Kategorie szkód i opisy: Zawierałoby to kompleksową listę potencjalnych szkód, takich jak utrata prywatności, cierpienie emocjonalne lub wykorzystywanie gospodarcze. Narzędzie może prowadzić użytkownika przez różne scenariusze ilustrujące, w jaki sposób technologia może spowodować te szkody, pomagając ocenić zarówno zamierzone, jak i niezamierzone konsekwencje.

  3. Oceny ważności i prawdopodobieństwa: narzędzie umożliwiłoby użytkownikom ocenę ważności i prawdopodobieństwa każdej zidentyfikowanej szkody, umożliwiając im ustalanie priorytetów, które problemy należy rozwiązać jako pierwsze. Może to obejmować oceny jakościowe i mogą być obsługiwane przez dane tam, gdzie są dostępne.

  4. Strategie ograniczania ryzyka: po zidentyfikowaniu i ocenie szkód narzędzie sugeruje potencjalne strategie ograniczania ryzyka. Może to obejmować zmiany w projekcie systemu, większe zabezpieczenia lub alternatywne rozwiązania technologiczne, które minimalizują zidentyfikowane zagrożenia.

  5. Mechanizmy opinii: narzędzie powinno obejmować mechanizmy zbierania opinii od uczestników projektu, zapewniając, że proces oceny szkód jest dynamiczny i reaguje na nowe informacje i perspektywy.

  6. Dokumentacja i raportowanie: Aby pomóc w przejrzystości i odpowiedzialności, narzędzie ułatwiłoby tworzenie szczegółowych raportów, które dokumentują proces oceny szkód, wyniki i działania podejmowane w celu ograniczenia potencjalnych zagrożeń.

Te funkcje nie tylko pomogą zidentyfikować i ograniczyć ryzyko, ale także pomóc w projektowaniu bardziej etycznych i odpowiedzialnych systemów sztucznej inteligencji, biorąc pod uwagę szerokie spektrum wpływu od samego początku.

Aby uzyskać więcej informacji, zobacz:

Testowanie i weryfikowanie zabezpieczeń

W tym artykule opisano kilka procesów mających na celu złagodzenie możliwości wykorzystania lub naruszenia zabezpieczeń systemu czatów opartych na rag. Red-teaming odgrywa kluczową rolę w zapewnieniu skuteczności środków zaradczych. Red-teaming polega na symulowaniu działań przeciwnika mających na celu wykrycie potencjalnych słabości lub luk w zabezpieczeniach. Takie podejście jest szczególnie istotne w rozwiązywaniu znacznego ryzyka złamania więzienia.

Aby skutecznie przetestować i zweryfikować zabezpieczenia systemu czatów opartego na systemie RAG, deweloperzy muszą rygorystycznie ocenić te systemy w różnych scenariuszach, w których te wytyczne można przetestować. Zapewnia to nie tylko niezawodność, ale także pomaga w dostrajaniu odpowiedzi systemu w celu ścisłego przestrzegania zdefiniowanych standardów etycznych i procedur operacyjnych.

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

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:

  • Potwierdzanie niedeterministycznego charakteru generowania sztucznej inteligencji w projekcie, planowanie zmienności danych wyjściowych i konfigurowanie mechanizmów w celu zapewnienia spójności i istotności odpowiedzi.
  • Oceń korzyści wynikające ze wstępnego przetwarzania monitów użytkownika o potencjalny wzrost opóźnienia i kosztów. Uproszczenie lub modyfikowanie monitów przed przesłaniem może poprawić jakość odpowiedzi, ale może zwiększyć złożoność i czas do cyklu odpowiedzi.
  • Badanie strategii równoległego przetwarzania żądań LLM w celu zwiększenia wydajności. Takie podejście może zmniejszyć opóźnienie, ale wymaga starannego zarządzania, aby uniknąć zwiększonej złożoności i potencjalnych konsekwencji związanych z kosztami.

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.