
RAG bazės atnaujinimas: naujas laukas senų vektorių nepakeičia

RAG žinių bazę atnaujinkite pagal dokumentų pokyčius, neperkurdami viso indekso. Kiekvienam šaltiniui priskirkite stabilų ID, palyginkite jo turinio maišą su paskutine sėkmingai indeksuota versija, iš naujo apdorokite pakeistus fragmentus ir pašalinkite nebegaliojančius. Jei keitėsi tik paieškos filtrams naudojami metaduomenys, atnaujinkite juos; jei keitėsi vektorizuojamas tekstas, reikia atnaujinti ir jo vektorių.
Naujas schemos laukas savaime neatnaujina anksčiau įrašytų objektų. Weaviate objektų atnaujinimo gairės nurodo, kad pakeitus anksčiau vektorizuotą savybę objektas pervektorizuojamas ir perindeksuojamas, tačiau vien pridėjus savybę prie kolekcijos aprašo esami objektai lieka neatnaujinti. Todėl svarbu atskirti schemos pakeitimą nuo konkrečių įrašų pakeitimo.
Susiekite šaltinį su visais jo fragmentais
Dokumento ID turi išlikti toks pats, kai keičiasi jo tekstas ar failo pavadinimas. Tinka pastovus turinio valdymo sistemos įrašo raktas; vien failo kelias gali pasikeisti perkėlus dokumentą. Atskiras sinchronizavimo žurnalas turėtų saugoti šį ID, paskutinės sėkmingai apdorotos versijos maišą, aktyvią versiją ir jai priklausančių fragmentų ID. Taip galima nustatyti, kuriuos indekso įrašus paveikė vieno šaltinio pakeitimas.
Turinio maišą skaičiuokite iš teksto, kuris iš tiesų siunčiamas skaidyti, o apdorojimo taisyklių versiją saugokite atskirai. Pakeitus PDF teksto išgavimo būdą, fragmentų dydį ar jų persidengimą, tas pats šaltinio failas gali duoti kitokį paieškos turinį. Įrašykite ir naudoto įterpčių modelio versiją: jei pasikeičia modelis, vienodas fragmento tekstas dar nereiškia, kad senas vektorius tinka naujai indeksavimo tvarkai.
Fragmento įraše laikykite dokumento ID, dokumento versiją, jo vietą šaltinyje ir paties fragmento turinio maišą. Jei ID sudarote iš dokumento ID, versijos ir fragmento eilės, seną rinkinį lengva atskirti nuo naujo. Vien maišos nepakanka fragmentams suporuoti: pasikartojančios pastraipos gali būti vienodos, o įterptas sakinys gali pakeisti kelių gretimų fragmentų ribas.
Nuspręskite, ką iš tikrųjų reikia atnaujinti
Teksto, metaduomenų ir schemos pakeitimai reiškia skirtingus darbus. Jei taisote fragmento tekstą, kuris buvo naudotas įterpčiai apskaičiuoti, sukurkite naują vektorių ir įrašykite jį kartu su atitinkamu tekstu. Jei pasikeičia tik kategorija ar prieigos būsena, naudojama kaip paieškos filtras, pakanka pakeisti metaduomenis. Kai toks laukas pats įtrauktas į vektorizuojamą tekstą, jį pakeitus reikia perskaičiuoti ir paveiktą vektorių.
Operacijų pavadinimai skirtingose bazėse gali slėpti svarbų skirtumą. Pinecone Python SDK gairėse nurodyta, kad upsert įrašo arba perrašo vektorių tuo pačiu ID, o atnaujinimas pagal metaduomenų filtrą keičia tik metaduomenis. Pastaroji operacija tinka masiškai pakeisti filtravimo požymį, bet ji nesukurs naujų įterpčių pakeistam tekstui. Pasirinkdami sinchronizavimo veiksmą, tikrinkite, ar jis keičia vektoriaus reikšmes, ar vien įrašo aprašą.
Pridėję naują tekstinį lauką, kuris turi dalyvauti semantinėje paieškoje, užpildykite jį paveiktuose esamuose objektuose ir atlikite jų atnaujinimą pagal naudojamos bazės vektorizavimo taisykles. Jei laukas skirtas tik filtrui, pervektorizuoti jo dėl paties filtro nereikia. Tokia skirtis leidžia riboti darbą iki paveiktų dokumentų ir kartu nepalikti naujo paieškai svarbaus turinio už seno vektoriaus ribų.
Sinchronizuokite tik pasikeitusius dokumentus
Vienas ciklas turi prasidėti patikimai nuskaitytu šaltinių sąrašu ir baigtis užfiksuota aktyvia kiekvieno dokumento versija. Pirmiausia atskirkite naujus, pakeistus, nepakitusius ir iš šaltinio pašalintus dokumentus. Jei nuskaitymas nutrūko ar grąžino nepilną sąrašą, dingusių ID nelaikykite ištrynimo įrodymu.
- Naujam arba pakeistam dokumentui išgaukite tekstą, apskaičiuokite jo maišą ir suskaidykite pagal užfiksuotą taisyklių versiją. Jei nesikeitė nei indeksuojamas turinys, nei apdorojimo taisyklės, nei įterpčių modelis, jo vektorių nelieskite. Metaduomenų pakeitimus apdorokite atskiru keliu.
- Palyginkite ankstesnius ir naujus fragmentus pagal tekstą, vietą bei turinio maišą. Naujiems ar pakeistiems fragmentams apskaičiuokite įterptis. Nepakeisto fragmento vektorių galima pakartotinai naudoti tik jei sutampa visas vektorizavimo įėjimas ir modelis; versijuojant fragmentų ID, jį vis tiek reikia įrašyti po naujos versijos ID.
- Įrašykite naujos versijos fragmentus su dokumento ID, versija, šaltinio nuoroda ir paieškai reikalingais filtrais. Užfiksuokite, kurie įrašymai pavyko. Jei bent dalies fragmentų trūksta, aktyvios versijos nekeiskite ir kartokite tik nepavykusią darbo dalį.
- Kai visas naujas rinkinys parengtas, perjunkite dokumento aktyvią versiją ir pašalinkite ankstesnės versijos fragmentus. Paieška pereinamuoju laikotarpiu turi priimti tik žurnale aktyvia pažymėtos versijos fragmentus, kad viename atsakyme neatsidurtų senos ir naujos ištraukos.
Pašalinkite fragmentus, likusius be šaltinio
Pašalintam dokumentui trynimo sąlygą sudarykite pagal tą patį ID, kuris buvo įrašytas į visų jo fragmentų metaduomenis. Nauja dokumento versija taip pat gali turėti mažiau fragmentų negu ankstesnė, todėl po perjungimo reikia ištrinti visą nebeaktyvų jos rinkinį. Pinecone masinių operacijų aprašas nurodo, kad įrašus galima gauti ir šalinti pagal metaduomenų filtrą, iš anksto nesurenkant kiekvieno vektoriaus ID.
Filtro tikslumas priklauso nuo metaduomenų, kuriuos įrašėte indeksuodami. Dokumento ID ir versija turi vienodą reikšmę visiems to šaltinio fragmentams; kitaip dalis įrašų nepateks į trynimo atranką. Jei du šaltiniai netyčia dalijasi tuo pačiu ID, filtras gali apimti abu, todėl dokumento raktas turi būti unikalus visame naudojamame indekso vardyne. Panaikinus šaltinį, verta pirmiau pažymėti jį neaktyviu paieškai, o tada atlikti ir patikrinti fizinį fragmentų šalinimą.
Patikrinkite paieškos rezultatą
Po sinchronizavimo sulyginkite žurnale esančius aktyvių fragmentų ID su bazėje randamais įrašais. Bandomajai paieškai parinkite užklausą apie konkretų pakeistą faktą, užklausą apie pašalintą šaltinį ir užklausą su pakeistu metaduomenų filtru. Tikrinkite grąžintų fragmentų tekstą, dokumento ID ir versiją, o ne vien sugeneruotą atsakymą: modelis gali suformuluoti įtikinamą atsakymą net gavęs pasenusią ištrauką.
Sėkmingas įrašymo atsakas dar neparodo, kad visi nauji fragmentai matomi paieškoje ir visi seni pašalinti. Jei pakeitimai indekse įsigalioja asinchroniškai, patikrą pakartokite po jų pritaikymo. Tik tada pažymėkite sinchronizavimą baigtu; nesutapusius dokumento ID ar versijas palikite pakartotiniam apdorojimui, užuot iš naujo kūrę visą indeksą.
Taip pat skaitykite:
Susiję straipsniai


„Microsoft Fabric“ agentams atveria duomenis, bet svarbios dalys dar bandomos

Saugus DNS naršyklėje: neteisingas adresas gali palikti apsaugą tik tariamą

Nutekintas „GitHub“ prieigos raktas: ištrinti jį iš kodo nepakanka

OpenAI ar Claude Structured Outputs: tinkamas JSON dar negarantuoja tiesos

Failai debesyje su „Cryptomator“: šifravimas nepaslepia visų metaduomenų
Prenumeruokite mūsų naujienlaiškį
Gaukite naujausias Web3, DI ir kriptovaliutų naujienas tiesiai į savo el. pašto dėžutę.