Przewodnik i wgląd

RAG dla wielu dzierżawców za bramą API kompatybilną z OpenAI

Praktyczna architektura referencyjna do tworzenia generacji wspomaganej pobieraniem za wielomodelową bramą API: indeksy ograniczone do dzierżawy, adaptery pobierania neutralne dla dostawcy, znormalizowane cytaty, kontrola cyklu życia i atrybucja kosztów.

Asystenci AI stykający się z klientem potrzebują generowania wspomaganego wyszukiwaniem, ale RAG staje się trudniejszy, gdy żądania przepływają przez bramę API kompatybilną z OpenAI zamiast przez natywny stos jednego dostawcy modelu. Brama musi izolować dane najemców, zachowywać cytaty u dostawców modeli, usuwać indeksowaną treść zgodnie z harmonogramem oraz przypisywać koszty osadzania, pobierania i generowania właściwemu klientowi.

Praktyczną odpowiedzią jest traktowanie pobierania jako pierwszorzędnego podsystemu bramy. Nie ukrywaj tego w integracji z jednym dostawcą. Trzymaj pobieranie oddzielnie od generowania, nadawaj każdemu żądaniu kontekst pobierania ograniczony do najemcy, normalizuj cytaty przed ich zwróceniem i zapisuj każdy płatny krok w księdze.

Problem czytelnika

Zespół tworzący asystenta AI dla wielu klientów zwykle zaczyna od prostego procesu: przesłania dokumentów, osadzania fragmentów, pobierania najważniejszych dopasowań, umieszczania tych fragmentów w wierszu zachęty i poproszenia modelu o udzielenie odpowiedzi. To działa, dopóki produkt nie będzie wymagał wielu dostawców modeli, rozliczeń na poziomie klienta, wycofania się z usługi i możliwości audytu.

Ryzykiem są nie tylko niedokładne odpowiedzi. Większe ryzyko operacyjne to błędy w przestrzeni nazw najemców, niemożliwe do zweryfikowania cytaty, nieaktualne indeksy po usunięciu dokumentu i marże, których nie można wyjaśnić, ponieważ koszty wyszukiwania znikają w ogólnych wydatkach na infrastrukturę.

W tym artykule oddzielono fakty, zalecenia i przewidywania. Faktami są możliwości implementacji udokumentowane przez interfejsy API aktualnych dostawców i wektorowych baz danych. Zalecenia dotyczą wyboru architektury produktu bramy. Przewidywania wskazują, że architektura ta będzie prawdopodobnie wymagać elastyczności w miarę ciągłych zmian funkcji wyszukiwania dostawców.

Architektura referencyjna

Projekt RAG na poziomie bramy powinien składać się z pięciu komponentów:

  • Narzędzie rozpoznawania dzierżawy: mapuje przychodzący klucz API, obszar roboczy, konto klienta lub klienta Partner API na kanoniczny identyfikator_dzierżawy.
  • Profil pobierania: określa, który korpus ma zostać umieszczony wyszukiwanie, który osadzony model ma zostać użyty, liczba wyników, filtry, opcje ponownego rankingu, wymagania dotyczące cytowań i zachowanie awaryjne.
  • Warstwa adaptera pobierania: wywołuje pobieranie natywnego dostawcy, zewnętrzną bazę wektorową lub niestandardową usługę wyszukiwania za pośrednictwem jednego wewnętrznego interfejsu.
  • Adapter szybkiego montażu i generowania: przekazuje pobrany kontekst do wybranego dostawcy modelu bez ujawniania osobom wywołującym szczegółów zaplecza wektorowego.
  • Zastosowanie i księga audytu: rejestruje osadzanie, indeksowanie, pobieranie, tokeny podpowiedzi, tokeny zakończenia, dzierżawcę, model, dostawcę i identyfikatory śledzenia.

Umowa na minimalne żądania może pozostać neutralna dla dostawcy:

{
  "ident_dzierżawcy": "dzierżawca_123",
  "model": "model zgodny z gpt lub-claude",
  "retrieval_profile": "support_docs_v2",
  „citation_required”: prawda,
  „wiadomości”: [
    {"role": "user", "content": "Jakie są nasze zasady zwrotów w przypadku planów rocznych?"}
  ]

Odpowiedź powinna być również neutralna dla dostawcy:

{
  "answer": "Plany roczne mogą zostać zwrócone w skonfigurowanym oknie polisy...",
  „cytowania”: [
    {
      "id_źródła": "doc_789",
      "title": "Polityka rozliczeniowa",
      "url_or_internal_ref": "kb://billing-policy",
      "chunk_id": "kawałek_044",
      "przesunięcia": {"strona": 3},
      „wynik”: 0,82,
      "retrieval_provider": "vector_db",
      "model_provider": "openai_kompatybilny",
      "ładunek_dostawcy": {}
    }
  ],
  "retrieval_trace_id": "rt_456",
  "billable_tenant": "tenant_123",
  „embedding_usage”: null,
  "retrieval_usage": {"zapytania": 1, "wyniki": 6},
  "model_usage": {"input_tokens": 1920, "output_tokens": 180}

Fakt: Funkcje wyszukiwania dostawców nie są identyczne

Interfejs API Vector Stores OpenAI obsługuje magazyny wektorowe, które można tworzyć, przeszukiwać, konfigurować za pomocą strategii dzielenia na porcje, wiązać z metadanymi plików i usuwać. Wyszukiwanie w sklepie wektorowym obsługuje zapytania, filtry, maksymalną liczbę wyników, opcje rankingu, progi punktacji i elementy sterujące przepisywaniem zapytań. Te elementy sterujące dają autorom bram przydatne narzędzia do kontrolowania opóźnień, trafności i kosztów.

Kontrola danych platformy OpenAI również sprawia, że ​​ważny jest projekt cyklu życia: treści klientów w sklepach wektorowych są zachowywane do momentu usunięcia. Jeśli najemca odejdzie lub wygaśnie tymczasowy projekt, brama nie może założyć, że dostawca automatycznie usunie indeksowaną treść zgodnie z harmonogramem biznesowym produktu.

Anthropic udostępnia inny wzorzec cytowań. Aplikacje mogą udostępniać bloki treści wyników wyszukiwania z metadanymi źródła i tytułu, a gdy włączone są cytaty, model może dołączać odniesienia do cytatów do wygenerowanego tekstu. Istnieją praktyczne ograniczenia: ustawienia cytatów w wynikach wyszukiwania to „wszystko albo nic” w żądaniu, bloki wyników wyszukiwania obsługują treść tekstową, a szczegółowość cytatów zależy od sposobu podziału treści na bloki.

Konsekwencja jest bezpośrednia: brama nie powinna ujawniać kształtu wyszukiwania jednego dostawcy jako swojej umowy publicznej, chyba że zamierza uczynić tego dostawcę stałym organem ds. wyszukiwania.

Zalecenie: używaj adapterów wyszukiwania, a nie Blokada pobierania

Utwórz wewnętrzny interfejs adaptera pobierania. Brama może obsługiwać kilka backendów:

  • Natywne pobieranie dostawców: przydatne, gdy klient chce najszybszej ścieżki do funkcji wyszukiwania plików jednego dostawcy lub przechowywania wektorów.
  • Zewnętrzna baza danych wektorów: przydatna, gdy produkt musi obsługiwać wielu dostawców modeli ze spójną izolacją dzierżawców i kontrolą cyklu życia.
  • Bloki wyników wyszukiwania pobierane z wyprzedzeniem: przydatne, gdy brama składa pobrany tekst i przekazuje do dostawcy obsługującego wyraźny kontekst uwzględniający cytaty.

Adapter powinien zwracać tę samą strukturę wewnętrzną niezależnie od zaplecza:

interfejs RetrievalResult {
  pobieranieTraceId: ciąg znaków;
  identyfikator najemcy: ciąg;
  corpusId: ciąg;
  kawałki: Tablica<{
    identyfikator źródła: ciąg;
    tytuł: ciąg;
    tekst: ciąg;
    urlOrInternalRef?: ciąg znaków;
    chunkId: ciąg;
    przesunięcia?: { strona?: liczba; bajtStart?: liczba; bajtEnd?: liczba; tokenStart?: liczba; tokenEnd?: liczba };
    wynik?: liczba;
    metadane: Rekord;
    dostawcaPayload?: nieznany;
  }>;
  pobieranieUżycie: {
    dostawca: ciąg;
    queryCount: liczba;
    wynikIlość: liczba;
    BillableUnits?: liczba;
  };

Dzięki temu warstwa generująca otrzymuje kontekst bez wiedzy, czy pochodzi on z magazynów wektorowych OpenAI, Pinecone, Weaviate, indeksu wyszukiwania pełnotekstowego w bazie danych czy wewnętrznego hybrydowego modułu pobierania.

Izolacja dzierżawcy rozpoczyna się przed zapytaniem wektorowym

Izolacja dzierżawcy nie może zależeć od instrukcji wyświetlanych na ekranie. Należy to wymusić przed pobraniem, na granicy pamięci masowej i na granicy zapytań.

W przypadku systemów typu Pinecone udokumentowany wzorzec wielodostępności to jedna przestrzeń nazw na dzierżawcę w indeksach bezserwerowych. Operacje na płaszczyźnie danych są ukierunkowane na przestrzeń nazw, co upraszcza izolację i odłączanie dzierżawy, ponieważ usunięcie przestrzeni nazw powoduje usunięcie rekordów tej dzierżawy. Pinecone dokumentuje także kompromisy między przestrzeniami nazw a filtrowaniem metadanych: filtrowanie w dużej współdzielonej przestrzeni nazw może skanować więcej danych, kosztować więcej i działać wolniej niż zapytania o zakresie przestrzeni nazw.

W systemach typu Weaviate wielodostępność przechowuje każdego dzierżawcę na oddzielnym fragmencie, więc dane jednego dzierżawcy nie są widoczne dla innego dzierżawcy. Usunięcie dzierżawy powoduje usunięcie skojarzonego fragmentu. Weaviate obsługuje także stany dzierżawy, takie jak aktywny, nieaktywny i odciążony, co tworzy opcję cyklu życia dla rzadko używanych dzierżawców.

Lista kontrolna implementacji

  • Rozwiąż identyfikator najemcy na podstawie uwierzytelnionej tożsamości bramy, a nie tylko na podstawie pola treści dostarczonego przez użytkownika.
  • Mapuj identyfikator najemcy na wektorową przestrzeń nazw, fragment lub identyfikator sklepu wektora dostawcy za pośrednictwem po stronie serwera rejestru.
  • Odrzucaj żądania, jeśli dzierżawa klucza API i żądana dzierżawa korpusu nie pasują.
  • Trzymaj wspólne korpusy publiczne oddzielnie od prywatnych korpusów dzierżawców.
  • Użyj filtrowania metadanych według typu dokumentu, języka, obszaru produktu lub zakresu dat po wybraniu granicy dzierżawy.
  • Loguj przestrzeń nazw, fragment, identyfikator_korpusu, profil_pobierania i identyfikator_pobierania dla możliwość kontroli.

Zarezerwuj wyszukiwanie między dzierżawcami dla jawnych administracyjnych przepływów pracy z oddzielną autoryzacją, oddzielnymi indeksami lub kontrolowanymi ścieżkami agregacji. Nie traktuj wyszukiwania między dzierżawcami jako przypadkowego efektu ubocznego filtrów metadanych.

Normalizuj cytaty jako obiekty bramy

Cytowania to umowa dotycząca produktu, a nie tylko dekoracja. Asystent obsługi klienta, narzędzie do redagowania dokumentów prawnych lub asystent wiedzy wewnętrznej musi wykazać, dlaczego udzielono odpowiedzi i skąd pochodzi tekst pomocniczy.

Brama powinna normalizować dane cytatów do własnego schematu:

{
  "id_źródła": "doc_123",
  "title": "Warunki zwrotu pieniędzy",
  "url_or_internal_ref": "kb://refund-terms",
  "kawałek_id": "kawałek_006",
  "offsets": {"page": 2, "byte_start": 4410, "byte_end": 5020},
  „wynik”: 0,79,
  "retrieval_provider": "przeplataj",
  "model_provider": "antropiczny",
  "model_provider_citation_payload": {}

Utrzymuj stabilne znormalizowane pola i zezwalaj na rozszerzenia specyficzne dla dostawcy. Niektórzy dostawcy udostępniają bogatsze szczegóły cytatów niż inni. Niektórzy powołują się na bloki wyników wyszukiwania. Niektórzy będą cytować przesłane pliki. Niektóre nie zapewniają dokładnego formatu przesunięcia, jakiego oczekuje Twoja aplikacja. Brama powinna zachować to, co istnieje, bez udawania, że ​​każdy dostawca ma identyczną semantykę cytowań.

Tryb ścisłego cytowania

Jeśli citation_required ma wartość true, zdefiniuj od razu zachowanie w przypadku awarii. Tryb ścisły może wymagać, aby każdy akapit dotyczący faktów zawierał co najmniej jeden cytat lub aby ostateczna odpowiedź zawierała cytaty z pobranych fragmentów powyżej minimalnego progu punktacji. Jeśli wybrany dostawca modelu nie może spełnić umowy o cytowanie, brama powinna szybko zawieść, skorzystać z kompatybilnego dostawcy lub zwrócić ustrukturyzowaną odmowę.

To jest zalecenie, a nie uniwersalna zasada. Ścisły tryb cytowania zwiększa zaufanie, ale może zwiększyć liczbę odmów, ponownych prób i złożoność rozwiązań awaryjnych. W przypadku przepływów pracy związanych z kreacją niskiego ryzyka cytaty mogą być opcjonalne. W przypadku wsparcia kontaktowego z klientem lub regulowanych wewnętrznych przepływów pracy, citation_required powinien często stanowić część profilu wyszukiwania.

Cykl życia indeksu to cecha produktu

Systemy RAG gromadzą dane. Przesyłane tymczasowo stają się przez przypadek trwałe. Byli klienci pozostawiają po sobie osady. Zespoły produktowe zmieniają strategie podziału na porcje i zapominają o odbudowaniu starych indeksów.Brama powinna wyraźnie określać kontrolę cyklu życia.

Zalecane kontrole cyklu życia obejmują:

  • Tymczasowe wygaśnięcie korpusu: dokumenty przesłane w ramach krótkotrwałej sesji powinny mieć sygnaturę czasową wygaśnięcia i zadanie usunięcia.
  • Wycofanie dzierżawy: usunięcie dzierżawy powinno spowodować usunięcie z kolejki przestrzeni nazw, fragmentów, magazynów wektorów dostawców i powiązanych obiektów plików.
  • Obsługa zimnych dzierżaw: tam, gdzie jest to obsługiwane, nieaktywnych dzierżawców można oznaczyć jako nieaktywnych lub odciążyć, aby zmniejszyć wykorzystanie zasobów.
  • Ponowna indeksacja kontroli wersji: przechowuj model osadzania, zasady fragmentowania, wersję analizatora składni i indeksowany_at dla każdej porcji.
  • Udostępnianie stanu usunięcia: Przepływy pracy interfejsu API partnerów powinny pokazywać, czy usunięcie dokumentu, usunięcie wektora czy po stronie dostawcy usuwanie zostało zakończone.

Ważnym faktem jest to, że część zawartości sklepu wektorowego jest zachowywana do czasu usunięcia. Zalecana architektura polega na tym, aby usunięcie było widoczne i możliwe do przetestowania, zamiast zakopywać je w zadaniu asynchronicznym, bez stanu skierowanego do klienta.

Śledź trzy księgi kosztów

Pojedyncza księga tokenów nie wystarczy dla RAG. Brama potrzebuje co najmniej trzech rejestrów:

  • Koszt osadzania i indeksowania: analizowanie dokumentów, dzielenie na fragmenty, osadzanie wywołań, przechowywanie plików, zapisy indeksów i ponowne indeksowanie.
  • Koszt pobierania: odczyty wektorowych baz danych, natywne przeszukiwanie magazynu wektorów, zmiana rankingu, przepisywanie zapytań i rozszerzanie wyników.
  • Koszt generowania: tokeny wejściowe z wiadomości użytkowników i pobrany kontekst, tokeny wyjściowe, wywołania narzędzi, ponowne próby i awarie.

Jest to szczególnie ważne dla agencji, dostawców SaaS i zespołów platform wewnętrznych, które odsprzedają lub alokują koszty sztucznej inteligencji. Bez oddzielnych ksiąg marże RAG stają się trudne do wyjaśnienia. Dzierżawca korzystający z małej generacji może nadal być kosztowny, jeśli stale przesyła dokumenty, ponownie indeksuje duże korpusy lub uruchamia szerokie zapytania pobierające.

Każde zdarzenie księgi powinno zawierać identyfikator_dzierżawy, identyfikator_klienta, jeśli jest inny, identyfikator klucza API, profil_odzyskiwania, identyfikator_korpusu, model, dostawcę, identyfikator_traceu i jednostki płatne. Dzięki temu analityka użytkowania może odpowiedzieć na praktyczne pytania: którzy najemcy mają kosztowne profile pobierania, które korpusy są nieaktualne, które modele powodują błędy w cytowaniach i którzy klienci generują zbyt duże monity, ponieważ pobieranie zwraca zbyt duży kontekst.

Tryby awarii do przetestowania

Podsystem RAG bramy powinien mieć testy trybów awarii, które powodują uszkodzenia widoczne dla klienta:

  • Brakujące cytaty: citation_required ma wartość true, ale odpowiedź dostawcy nie zawiera żadnych użytecznych odnośników do cytatów.
  • Nieaktualne indeksy: dokument został zaktualizowany lub usunięty, ale w wynikach pobierania nadal pojawiają się stare fragmenty.
  • Niezgodność dzierżawcy: żądanie jest kierowane do dzierżawcy A, podczas gdy korpus lub przestrzeń nazw należy do dzierżawcy B.
  • Pobieranie zbyt szerokie: profil również powraca wiele fragmentów, zwiększając koszty i pogarszając jakość odpowiedzi.
  • Niedopasowanie rozmiaru fragmentów: fragmenty są tak duże, że cytaty są nieprecyzyjne, lub tak małe, że kontekst traci znaczenie.
  • Niedopasowanie funkcji dostawcy: jeden model może emitować cytaty w wymaganym kształcie, a drugi nie.
  • Błąd cyklu życia: żądane jest usunięcie, ale pamięć po stronie dostawcy pozostaje aktywna lub niezweryfikowane.

Testy powinny być uruchamiane na poziomie kontraktu bramy, a nie tylko wewnątrz adaptera jednego dostawcy. Celem jest udowodnienie, że zachowanie społeczeństwa pozostaje stabilne w przypadku zmiany dostawcy oprogramowania lub dostawcy generacji.

Kompromisy

Wyszukiwanie natywnego dostawcy może zredukować kod aplikacji i przyspieszyć tworzenie pierwszej wersji. Kompromis polega na tym, że cykl życia magazynu, format cytowań, kontrola zapytań i dostępność funkcji mogą zostać powiązane z jednym dostawcą.

Zewnętrzne wektorowe bazy danych zwiększają powierzchnię operacyjną. Korzyścią jest większa przenośność w modelach zgodnych z OpenAI, modelach Anthropic i przyszłych dostawcach. Ułatwiają także zrozumienie przestrzeni nazw lub fragmentów o zasięgu dzierżawcy, kiedy brama jest odpowiedzialna za rozliczenia i wycofywanie.

Drobnoziarniste fragmenty poprawiają precyzję cytowań i możliwość kontroli. Zwiększają także rozmiar indeksu, objętość pobierania i ułatwiają montaż. Zgrubne fragmenty są prostsze, ale mogą generować cytaty wskazujące na obszerniejszą stronę lub sekcję, a nie na dokładny fragment pomocniczy.

Tryb ścisłego wymagania cytatów zwiększa zaufanie użytkowników.Zmusza to także bramę do obsługi modeli, które nie są w stanie wygenerować wymaganego formatu cytatów, co może oznaczać odmowę żądania, zmianę modeli lub zwrócenie odpowiedzi z niższym stanem ufności.

Przewidywanie: pobieranie stanie się bardziej natywne, ale bramy nadal wymagają własnej umowy

Funkcje wyszukiwania natywne dla dostawcy prawdopodobnie staną się bardziej wydajne. Więcej modeli akceptuje pobrany kontekst ze strukturalnymi metadanymi źródłowymi. Więcej interfejsów API udostępni kontrolę rankingu, przepisywanie zapytań i ustawienia cytowań. Nie eliminuje to potrzeby zawarcia umowy dotyczącej bramy.

Brama nadal jest właścicielem tożsamości dzierżawcy, zarządzania kluczami, limitów wydatków, analiz użytkowania, przepływów pracy interfejsu API partnerów i obietnic usunięcia skierowanych do klienta. Funkcje dostawcy mogą być używane za warstwą adaptera, ale produkt nie powinien narzucać każdemu najemcy, modelowi i przepływowi pracy związanemu z rozliczeniami korzystania z abstrakcji pobierania jednego dostawcy.

Wnioski, które można zastosować

Zbuduj wielodostępny RAG jako podsystem bramy z wyraźnymi granicami. Rozpoznaj tożsamość dzierżawcy przed pobraniem. Używaj przestrzeni nazw, fragmentów lub magazynów wektorowych o zasięgu dzierżawy. Zachowaj pobieranie za adapterami. Normalizuj cytaty w schemacie należącym do bramy. Dodaj stany cyklu życia i weryfikację usunięcia. Śledź oddzielnie koszty osadzania, pobierania i generowania.

Ta architektura zapewnia stabilność RAG bez konieczności blokowania produktu dla jednego dostawcy pobierania. Zapewnia także zespołom kontrolę operacyjną, której potrzebują, gdy asystent AI przechodzi od prototypu do systemu skierowanego do klienta: izolacja, cytowania, przenośność, zarządzanie cyklem życia i atrybucja kosztów.

Powiązane lektury

FAQ

Często zadawane pytania

Czy brama wielomodelowa powinna korzystać z natywnego wyszukiwania dostawców, czy z zewnętrznej bazy danych wektorowych?
Korzystaj z wyszukiwania natywnych dostawców, gdy liczy się szybkość wdrożenia, a cykl życia i zachowanie cytowań jednego dostawcy są akceptowalne. Użyj zewnętrznej bazy danych wektorowych, gdy ważniejsza jest przenośność, izolacja najemców, odejście od dostawcy i spójne rozliczenia między dostawcami.
Czy filtrowanie metadanych jest wystarczające do izolacji dzierżawców w RAG?
Filtrowanie metadanych jest przydatne po wybraniu granicy dzierżawy, ale nie powinno być głównym mechanizmem izolacji danych prywatnych dzierżawców. Preferuj domyślnie sklepy wektorowe z przestrzenią nazw na dzierżawcę, fragmentem na dzierżawę lub dzierżawcą.
Co powinien zawierać znormalizowany obiekt cytatu?
Uwzględnij identyfikator źródła, tytuł, adres URL lub odniesienie wewnętrzne, identyfikator fragmentu, dostępne przesunięcia, wynik pobierania, dostawcę pobierania, dostawcę modelu i pole rozszerzenia dla ładunków cytatów specyficznych dla dostawcy.
Po co oddzielne rejestry osadzania, pobierania i generowania?
Koszt RAG nie pochodzi wyłącznie z żetonów wyjściowych modelu. Przesyłanie, osadzanie, ponowne indeksowanie, wyszukiwanie wektorowe, zmiana rankingu i szybka rozbudowa mogą zmienić koszty najemcy. Oddzielne księgi pozwalają wyjaśnić marże i fakturowanie klientów.