Juhend ja ülevaade

Mitme rentniku RAG OpenAI-ga ühilduva API lüüsi taga

Praktiline etalonarhitektuur mitme mudeli API lüüsi taga toomisega täiendatud põlvkonna loomiseks: rentnike ulatusega indeksid, pakkuja-neutraalsed otsinguadapterid, normaliseeritud tsitaadid, elutsükli juhtelemendid ja kulude omistamine.

Kliendiga seotud tehisintellekti assistendid vajavad otsimisega laiendatud genereerimist, kuid RAG muutub raskemaks, kui päringud liiguvad läbi OpenAI-ga ühilduva API lüüsi, mitte ühe mudelipakkuja natiivse virna. Lüüs peab hoidma rentnike andmed isoleerituna, säilitama mudelipakkujate tsitaate, kustutama indekseeritud sisu ajakava järgi ning omistama manustamise, toomise ja genereerimise kulud õigele kliendile.

Praktiline vastus on käsitleda otsingut esmaklassilise lüüsi alamsüsteemina. Ärge peitke seda ühe pakkuja integratsiooni sisse. Hoidke otsimine genereerimisest eraldi, andke igale päringule rentniku ulatusega otsingukontekst, normaliseerige tsitaadid enne nende tagastamist ja registreerige iga arveldatav samm pearaamatusse.

Lugeja probleem

Meeskond, kes loob paljudele klientidele tehisintellekti assistendi, alustab tavaliselt lihtsa vooga: laadige üles dokumendid, manustage tükid, tooge need vastused, küsige parimad vasted, sisestage mudelisse need vastused ja küsimised. See toimib seni, kuni toode vajab mitut mudelipakkujat, klienditasemel arveldamist, väljalülitamist ja auditeeritavust.

Oht ei seisne ainult ebatäpsetes vastustes. Suuremad operatsiooniriskid on rentnike nimeruumi vead, kontrollimatud tsitaadid, vananenud indeksid pärast dokumendi kustutamist ja marginaalid, mida ei saa seletada, kuna otsingukulud kaovad üldiste infrastruktuurikulude alla.

Selles artiklis eraldatakse faktid, soovitused ja prognoosid. Faktid on praeguste pakkujate ja vektorandmebaasi API-de dokumenteeritud juurutamisvõimalused. Soovitused on lüüsitoote arhitektuurivalikud. See arhitektuur vajab ennustuste puhul tõenäoliselt paindlikkust, kuna pakkuja otsingufunktsioonid muutuvad pidevalt.

Viitearhitektuur

Lüüsitasemel RAG-i kujundus peaks koosnema viiest komponendist:

  • üürniku lahendaja: vastendab sissetuleva API-võtme, tööruumi, kliendikonto.>Partner-API-klientKeskne partnerliitriklient. profiil: määrab, millist korpust otsida, millist manustamismudelit kasutada, tulemuste arvu, filtrid, ümberpaigutamise valikud, tsiteerimise nõuded ja varukäitumine.
  • Tootmisadapteri kiht: kutsub ühe sisemise liidese kaudu välja natiivse pakkuja otsingu, välise vektorandmebaasi või kohandatud otsinguteenuse. vektori taustaprogrammi üksikasjade esitamine helistajatele.
  • Kasutus- ja auditeerimisraamat: salvestab manustamise, indekseerimise, otsimise, viipade märgid, lõpetamise märgid, rentniku, mudeli, pakkuja ja jälgimise identifikaatorid.

Minimaalne päringu leping võib jääda pakkuja neutraalseks:

< kood.
  "üürniku_id": "üürnik_123",
  "mudel": "gpt-yhteensopiva-or-claude-ühilduv-mudel",
  "retrieval_profile": "support_docs_v2",
  "citation_required": tõsi,
  "sõnumid": [
    {"role": "user", "content": "Millised on meie aastaplaanide tagasimakse eeskirjad?"}
  ]
}

Vastus peaks olema ka pakkuja neutraalne:

{
  "vastus": "Aastaplaanide eest saab tagasi maksta konfigureeritud poliitikaaknas...",
  "tsitaadid": [
    {
      "source_id": "doc_789",
      "title": "Arvelduspoliitika",
      "url_or_internal_ref": "kb://arvelduspoliitika",
      "chunk_id": "chunk_044",
      "nihked": {"leht": 3},
      "skoor": 0,82,
      "retrieval_provider": "vector_db",
      "model_provider": "openai_yhteensopiva",
      "provider_payload": {}
    }
  ],
  "retrieval_trace_id": "rt_456",
  "billable_tenant": "üürnik_123",
  "embedding_usage": null,
  "retrieval_usage": {"päringud": 1, "tulemused": 6},
  "mudeli_kasutus": {"sisendtokenid": 1920, "väljundmärgid": 180}}

Fakt: pakkujate otsingufunktsioonid ei ole identsed

OpenAI vektorpoodide API toetab vektorpoode, mida saab luua, otsida, konfigureerida tükeldamisstrateegiatega, seostada faili metaandmetega ja kustutada. Vektorpoe otsing toetab päringuid, filtreid, tulemuste maksimaalset arvu, järjestamise valikuid, punktide lävendeid ja päringu ümberkirjutamise juhtelemente. Need juhtelemendid annavad lüüsi autoritele kasulikke nuppe latentsusaja, asjakohasuse ja kulude määramiseks.

OpenAI platvormi andmete juhtelemendid muudavad ka elutsükli disaini oluliseks: vektoripoodides sisalduv klientide sisu säilitatakse kuni kustutamiseni. Kui rentnik väljub pardast või kui ajutine projekt aegub, ei saa lüüs eeldada, et pakkuja eemaldab indekseeritud sisu automaatselt toote äriplaanist.

Anthropic avaldab tsitaatide jaoks teistsuguse mustri. Rakendused võivad pakkuda otsingutulemuste sisuplokke allika ja pealkirja metaandmetega ning kui tsitaadid on lubatud, saab mudel lisada loodud tekstile viiteviiteid. On praktilisi piiranguid: otsingutulemuste tsiteerimise seaded on päringus kõik või mitte midagi, otsingutulemuste plokid toetavad tekstisisu ja tsitaadi detailsus sõltub sellest, kuidas sisu plokkideks jaotatakse.

Mõju on otsene: lüüs ei tohiks avaliku lepinguna avaldada ühe pakkuja otsingukuju, välja arvatud juhul, kui see kavatseb seda pakkujat kasutada püsivaks. Tootmisadapterid, mitte allalaadimise lukustus

Looge sisemine otsinguadapteri liides. Lüüs võib toetada mitut selle taga olevat taustaprogrammi:

  • Omapakkuja otsimine: kasulik, kui klient soovib kiireimat teed ühe pakkuja failiotsingu või vektorite salvestamise funktsioonide juurde.
  • Väline vektorandmebaas: kasulik, kui toode peab toetama paljusid mudelipakkujaid koos järjekindla rentnike eraldamise ja kasulike otsingutulemustega.Pre-li> kui lüüs koondab allalaaditud teksti ja edastab selle teenusepakkujale, mis toetab selgesõnalist tsitaaditeadlikku konteksti.

Adapter peaks tagastama sama sisemise struktuuri olenemata taustaprogrammist:

liides RetrievalResult {
  retrievalTraceId: string;
  rentantId: string;
  korpusId: string;
  tükid: massiiv<{
    sourceId: string;
    pealkiri: string;
    tekst: string;
    urlOrInternalRef?: string;
    chunkId: string;
    nihked?: { leht?: number; byteStart?: number; byteEnd?: number; tokenStart?: number; tokenEnd?: number };
    skoor?: arv;
    metaandmed: kirje;
    pakkujaPayload?: teadmata;
  }>;
  retrievalUsage: {
    pakkuja: string;
    queryCount: number;
    resultCount: number;
    billableUnits?: number;
  };}

See võimaldab genereerimiskihil saada konteksti, teadmata, kas see pärineb OpenAI vektorpoodidest, Pinecone'ist, Weaviate'ist, andmebaasi täistekstiotsingu indeksist või sisemisest hübriidretriiverist.

Üürniku isoleerimine algab enne vektorpäringut

Üürniku isoleerimine ei tohi sõltuda viipadest juhistest. See tuleb jõustada enne otsingut, salvestuspiiril ja päringu piiril.

Pinecone-stiilis süsteemide puhul on dokumenteeritud mitme üürimise muster üks nimeruum rentniku kohta serverita indeksites. Andmetasandi toimingud sihivad nimeruumi, mis lihtsustab üürniku isoleerimist ja väljalülitamist, kuna nimeruumi kustutamine eemaldab selle rentniku kirjed. Pinecone dokumenteerib ka kompromisse nimeruumide ja metaandmete filtreerimise vahel: suure jagatud nimeruumi sees filtreerimine võib skannida rohkem andmeid, maksta rohkem ja toimida aeglasemalt kui nimeruumi ulatusega päringud.

Weaviate-stiilis süsteemide puhul salvestab mitu rentniku iga rentniku eraldi killule, nii et ühe rentniku andmed pole teisele rentnikule nähtavad. Üürniku kustutamine kustutab seotud killu. Weaviate toetab ka rentniku olekuid, nagu aktiivne, passiivne ja mahalaaditud, mis loob elutsükli valiku harva kasutatavate rentnike jaoks.

Rakenduse kontroll-loend

  • Lahendage rentant_id autentitud lüüsi identiteedist, mitte ainult kasutaja pakutavast kehaväljast.
  • Vectors name_id kaardistata. identifikaator serveripoolse registri kaudu.
  • Keelduge päringutest, kus API võtme rentnik ja taotletud korpuse rentnik ei ühti.
  • Hoidke jagatud avalikud korpused privaatsetest rentnikkorpustest eraldi.
  • Kasutage metaandmete filtreerimist dokumendi tüübi, keele, tooteala või kuupäevavahemiku jaoks pärast seda, kui rentniku piir, corpus_liid>s on juba valitud. retrieval_profile ja retrieval_trace_id auditeeritavuse tagamiseks.

Reserveerige rentnikeülene otsing selgesõnaliste haldustöövoogude jaoks, millel on eraldi volitus, eraldi indeksid või juhitud koondamisteed. Ärge muutke rentnikevahelist otsingut metaandmete filtrite juhuslikuks kõrvalmõjuks.

Titaatide normaliseerimine lüüsiobjektidena

Titaadid on tooteleping, mitte ainult kaunistus. Klienditoe assistent, juriidilise vormistamise tööriist või siseteadmiste assistent peab näitama, miks vastus koostati ja kust tugitekst pärines.

Lüüs peaks normaliseerima viiteandmed oma skeemi järgi:

{
  "source_id": "doc_123",
  "title": "Tagasimakse tingimused",
  "url_or_internal_ref": "kb://refund-terms",
  "chunk_id": "chunk_006",
  "nihked": {"leht": 2, "byte_start": 4410, "byte_end": 5020},
  "skoor": 0,79,
  "retrieval_provider": "weaviate",
  "model_provider": "antroopne",
  "model_provider_citation_payload": {}
}

Hoidke normaliseeritud väljad stabiilsena ja lubage teenusepakkujapõhiseid laiendusi. Mõned pakkujad avaldavad tsitaadi üksikasjalikumat teavet kui teised. Mõned tsiteerivad otsingutulemuste plokke. Mõned viitavad üleslaaditud failidele. Mõned neist ei paku täpset nihkevormingut, mida teie rakendus soovib. Lüüs peaks säilitama olemasoleva, ilma et teeskleks, et igal pakkujal on identne tsitaadi semantika.

Range tsiteerimise režiim

Kui tsitation_required on tõene, määrake tõrkekäitumine eelnevalt. Range režiim võib nõuda, et iga faktiline lõik sisaldaks vähemalt ühte tsitaati või et lõplik vastus sisaldaks tsitaate, mis pärinevad hankitud osadest, mis ületavad minimaalse skoori. Kui valitud mudeli pakkuja ei suuda tsiteerilepingut täita, peaks lüüs kiiresti üles ütlema, kasutama ühilduvat pakkujat või tagastama struktureeritud keeldumise.

See on soovitus, mitte universaalne reegel. Range viitamisrežiim suurendab usaldust, kuid see võib suurendada keeldumiste, korduskatsete ja tagavara keerukust. Madala riskiga loominguliste töövoogude puhul võivad tsitaadid olla valikulised. Kliendile suunatud toe või reguleeritud sisemiste töövoogude jaoks peaks tsiteerimine_nõutav sageli olema otsinguprofiili osa.

Indeksi elutsükkel on toote funktsioon

RAG-süsteemid koguvad andmeid. Ajutised üleslaadimised muutuvad püsivaks juhuslikult. Endised kliendid jätavad manused maha. Tootemeeskonnad muudavad tükeldamise strateegiaid ja unustavad vanu indekseid uuesti üles ehitada.Lüüs peaks muutma elutsükli juhtelemendid selgesõnaliseks.

Soovitatavad olelusringi juhtelemendid on järgmised:

  • Ajutine korpuse aegumine: lühiajaliseks seansiks üles laaditud dokumentidel peab olema aegumise ajatempel ja kustutamistöö.
  • Rendniku ruumi eemaldamise, nimetuse kustutamise avaldis killud, pakkuja vektorsalved ja seotud failiobjektid.
  • Külmüürniku käsitlemine: kui seda toetatakse, saab passiivsed rentnikud märkida passiivseks või maha laadida, et vähendada ressursside kasutamist.
  • Versioonikontrolli uuesti indekseerimine: salvestage manustamismudel, tükeldamise poliitika, parseri versioon ja iga partneri oleku >säritus. API töövood peaksid näitama, kas dokumendi kustutamine, vektorite kustutamine ja pakkujapoolne kustutamine on lõpetatud.

Oluline on see, et osa vektormälu sisust säilitatakse kuni kustutamiseni. Arhitektuurisoovitus on muuta kustutamine nähtavaks ja testitavaks, selle asemel et matta see asünkroonsesse töösse, kus pole kliendile suunatud olekut.

Jälgige kolme kuluraamatut

RAG-i jaoks ei piisa ühest märgiraamatust. Lüüsil on vaja vähemalt kolme pearaamatut:

  • Manustamise ja indekseerimise kulud: dokumentide sõelumine, tükeldamine, kõnede manustamine, failide salvestamine, registrikirjutamine ja uuesti indekseerimine.
  • Tootmiskulu: vektorandmebaasi lugemised, natiivse vektori salvestamise otsing, päringu tulemuste ümberpaigutamine, laiendamine.
  • Tegemiskulu: kasutajate sõnumitest ja hangitud kontekstist pärinevad sisendmärgid, väljundmärgid, tööriistakutsed, korduskatsed ja varud.

See on eriti oluline agentuuride, SaaS-i tarnijate ja sisemiste platvormimeeskondade jaoks, kes müüvad edasi või jaotavad tehisintellekti kulusid. Ilma eraldi pearaamatuteta on RAG-i marginaalid raskesti seletatavad. Väikese põlvkonna kasutusega rentnik võib siiski olla kulukas, kui ta laadib pidevalt üles dokumente, indekseerib uuesti suuri korpuseid või käitab laiaulatuslikke otsingupäringuid.

Iga pearaamatu sündmus peaks sisaldama väärtust rentant_id, customer_id, kui see on erinev, API võtme ID, otsinguprofiil, korpuse_id, mudel, pakkuja, jälgimistunnus ja arveldatavad üksused. See võimaldab kasutusanalüütikal vastata praktilistele küsimustele: millistel üürnikel on kallid otsinguprofiilid, millised korpused on aegunud, millised mudelid tekitavad tsiteerimise tõrkeid ja millised kliendid genereerivad liiga suuri viipasid, kuna otsimine tagastab liiga palju konteksti.

Testitavad tõrkerežiimid

Lüüs RAG-i alamsüsteemi jaoks peaks olema testitud, mis võimaldab testida. kahjustused:

  • puuduvad tsitaadid: tsitaat_nõutav on tõene, kuid pakkuja vastus ei sisalda kasutatavaid tsitaadiviiteid.
  • Aegunud indeksid: dokumenti värskendati või kustutati, kuid vanad tükid kuvatakse otsingutulemustes endiselt.
  • Rendija nimi ei ühti, samas kui üürniku nimi ei ühti. üürnikule B.
  • Liiga laiaulatuslik otsimine: profiil tagastab liiga palju tükke, mis suurendab kulusid ja halvendab vastuse kvaliteeti.
  • Tundi suuruse mittevastavus: tükid on nii suured, et tsitaadid on ebatäpsed või nii väikesed, et kontekst kaotab tähenduse.
  • Tsitaadid võivad ühest mudelist sobida. ei saa.
  • Elutsükli tõrge: taotletakse kustutamist, kuid pakkujapoolne salvestusruum jääb aktiivseks või kinnitamata.

Need testid peaksid käima lüüsi lepingu tasemel, mitte ainult ühes pakkuja adapteris. Eesmärk on tõestada, et avalik käitumine püsib stabiilsena, kui otsingu tagaprogramm või genereerimisteenuse pakkuja vahetub.

Muutused

Omateenuse pakkuja otsimine võib vähendada rakenduse koodi ja kiirendada esimest versiooni. Kompromiss seisneb selles, et salvestusruumi elutsükkel, viitevorming, päringu juhtelemendid ja funktsioonide saadavus võivad olla seotud ühe pakkujaga.

Välised vektorandmebaasid lisavad tööpinda. Selle eeliseks on parem kaasaskantavus OpenAI-ga ühilduvate mudelite, antropiliste mudelite ja tulevaste pakkujate vahel. Samuti muudavad need rentnike ulatusega nimeruumid või killud lihtsamini aru, millal lüüs vastutab arveldamise ja väljalülitamise eest.

Peened tükid parandavad viitamise täpsust ja auditeeritavust. Need suurendavad ka indeksi suurust, otsingu mahtu ja kiiret kokkupaneku keerukust. Jämedad tükid on lihtsamad, kuid need võivad tekitada tsitaate, mis osutavad laiale lehele või jaotisele, mitte täpsele toetavale lõigule.

Reiim, mis nõuab ranget viidet, suurendab kasutajate usaldust.Samuti sunnib see lüüsi käsitlema mudeleid, mis ei suuda nõutavat tsitaadivormingut toota, mis võib tähendada taotlusest keeldumist, mudelite muutmist või madalama usaldusväärsuse olekuga vastuse tagastamist.

Prognoos: otsimine muutub natiivsemaks, kuid lüüsid vajavad endiselt oma lepingut

Pakkuja omapärased toomisfunktsioonid muutuvad tõenäoliselt paremini võimekamaks. Rohkem mudeleid aktsepteerib hangitud konteksti koos struktureeritud allika metaandmetega. Rohkem API-sid paljastavad järjestamise juhtelemendid, päringu ümberkirjutamise ja tsiteerimise seaded. See ei eemalda vajadust lüüsilepingu järele.

Lüüsile kuulub endiselt rentniku identiteet, võtmehaldus, kululimiidid, kasutusanalüüs, partneri API töövood ja kliendipoolsed kustutamislubadused. Pakkuja funktsioone saab kasutada adapterikihi taga, kuid toode ei tohiks sundida iga rentnikku, mudelit ja arveldamise töövoogu ühe pakkuja otsingu abstraktsiooni.

Tegevusalane järeldus

Koostage mitme rentniku RAG selgete piiridega lüüsi alamsüsteemina. Enne otsimist lahendage üürniku identiteet. Kasutage rentniku ulatusega nimeruume, killukesi või vektorpoode. Hoidke otsimine adapterite taga. Normaliseerige tsitaadid lüüsile kuuluvaks skeemiks. Lisage elutsükli olekud ja kustutamise kinnitus. Jälgige manustamise, toomise ja genereerimise kulusid eraldi.

See arhitektuur hoiab RAG-i maandatud, ilma et see lukustaks toodet ühele otsinguteenuse pakkujale. Samuti annab see meeskondadele juhtseadised, mida nad vajavad, kui AI-assistent liigub prototüübilt kliendipõhisele süsteemile: eraldamine, tsitaadid, teisaldatavus, elutsükli haldamine ja kulude omistamine.

Seotud lugemine

FAQ

Korduma kippuvad küsimused

Kas mitme mudeliga lüüs peaks kasutama natiivse teenusepakkuja otsingut või välist vektorandmebaasi?
Kasutage natiivset pakkuja otsimist, kui rakendamise kiirus on oluline ning ühe pakkuja elutsükkel ja viitamiskäitumine on vastuvõetavad. Kasutage välist vektorandmebaasi, kui kaasaskantavus, rentnike isoleerimine, offboarding ja järjepidev arveldamine pakkujate vahel on olulisemad.
Kas metaandmete filtreerimisest piisab RAG-is üürnike isoleerimiseks?
Metaandmete filtreerimine on kasulik pärast seda, kui rentniku piir on juba valitud, kuid see ei tohiks olla privaatsete üürnike andmete peamine isoleerimismehhanism. Eelistage vaikimisi nimeruumi-üürniku, killu-üürniku või rentniku ulatusega vektorpoode.
Mida peaks normaliseeritud tsiteerimisobjekt sisaldama?
Kaasake allika_id, pealkiri, URL või siseviide, tüki_id, saadaolevad nihked, otsinguskoor, otsingupakkuja, mudeli pakkuja ja laiendusväli pakkujaspetsiifiliste viidete jaoks.
Miks eraldada manustamis-, otsimis- ja genereerimisraamatud?
RAG-i maksumus ei tulene ainult mudeli väljundmärkidest. Üleslaadimised, manustamine, uuesti indekseerimine, vektorotsing, ümberpaigutamine ja kiire laiendamine võivad kõik rentniku kulusid muuta. Eraldi pearaamatud muudavad marginaalid ja klientide arveldamise seletatavaks.