Bet kuri platforma · Atnaujinta · 9 min. skaitymo · Lurto

RAG asistentas atsako pagal senus dokumentus: pasenęs indeksas, ištrinti dokumentai ir prieštaringos versijos

Trumpas atsakymas

Kai asistentas cituoja seną taisyklę, jokios klaidos sistema nerodo: paieška pavyko, atsakymas paremtas šaltiniu, citata tikra, visi rodikliai žali. Tai sukelia keturi gedimai, ir jie atrodo vienodai: dokumentas pasikeitė, bet niekas jo neindeksavo iš naujo; dokumentas šaltinyje atšauktas, bet vektoriai liko; senos versijos fragmentai liko šalia naujų, todėl paieška grąžina abu; arba indeksas tvarkingas, tik tinkamas fragmentas atsiduria žemiau atrankos ribos. Tikrinkite būtent tokia tvarka, nes atšauktų dokumentų fragmentai iškreips kiekvieną paieškos bandymą, kurį atliksite.

RAG indekso aktualumo stebėsena (n8n workflow)Kiekvieną rytą palygina Jūsų pagrindinį šaltinį su tuo, kas iš tikrųjų yra indekse, ir atskirai praneša apie tris neatitikimų rūšis. Prieš publikuojant patikrinta pagal n8n schemą.

Klientas paklausia asistento apie prekių grąžinimo terminą, ir šis užtikrintai, su citata, atsako: trisdešimt dienų. Kovą terminas sutrumpintas iki keturiolikos dienų. Dokumentas buvo atnaujintas, apie pakeitimą pranešta, o asistentas penkis mėnesius klientams kartojo seną skaičių, nes niekas neatnaujino indekso.

Jokios klaidos sistema nerodo. Paieška pavyko, atsakymas paremtas šaltiniu, citata tikra, visi rodikliai žali. Toliau rasite keturis būdus, kaip indeksas atsilieka nuo šaltinio, kaip nustatyti, kuris iš jų yra Jūsų atvejis, ir stebėseną, kuri apie neatitikimus praneša kiekvieną rytą, o ne po kliento skundo.

1. Dokumentas pasikeitė, bet niekas jo neindeksavo iš naujo

Dažniausias atvejis. Indeksavimas buvo paleistas vieną kartą, kai sistema pradėjo veikti, arba vyksta pagal grafiką ir paima tik naujus failus, o esamų dokumentų pakeitimai indekso nepasiekia.

source:  returns-policy.md   modified 2026-03-14T09:22Z   hash a91f...
index:   doc_returns_policy  indexed  2025-11-02T14:10Z   hash 4c7e...

assistant: "You can return items within 30 days of delivery." [returns-policy.md]

Citata nurodo teisingą dokumentą, todėl atsakymas ir atrodo įtikinamai. Tik ji nepasako, iš kurios dokumento versijos paimtas šis sakinys. Palyginus pakeitimo laikus, tai matyti iš vienos užklausos, bet beveik niekas jos nepaleidžia: indeksavimas buvo sukurtas tikrinti, ar dokumentas yra, o ne ar jis aktualus.

2. Dokumentas atšauktas, bet liko indekse

Pavojingiausias atvejis. Taisyklė šaltinyje ištrinama arba pakeičiama nauja, o vektoriai lieka, todėl asistentas toliau atsakinėja pagal dokumentą, kurį įmonė aiškiai atšaukė.

[retrieval] doc_8812 "pricing-2025-promo.md" (0.87)   // deleted at source in January
[assistant] "That plan is 45 € a month with the launch discount applied."

Ištrynimai retai pasiekia indeksą, nes dauguma indeksavimo užduočių tik prideda: jos pereina per šaltinį, įrašo arba atnaujina tai, ką randa (upsert), ir neturi žingsnio, kuris paklaustų, kas yra indekse, bet nebėra šaltinyje. Toks likęs dokumentas blogesnis už pasenusį: pasenęs bent jau kadaise buvo teisingas, o ištrintas gali būti būtent tas, kurį teisininkai liepė pašalinti.

3. Senos versijos fragmentai lieka šalia naujų

Subtilesnis pirmųjų dviejų variantas. Pakartotinis indeksavimas įvyko, bet fragmentų identifikatoriai sudaromi pagal vietą arba turinį, o ne pagal dokumentą, todėl nauja versija buvo pridėta, o seni fragmentai taip ir nepašalinti. Dabar paieška mato abu, ir jie vienas kitam prieštarauja.

[retrieval] chunk 4471 "returns within 14 days" (0.81)   from v3
[retrieval] chunk 2209 "returns within 30 days" (0.79)   from v1, orphaned

[assistant] "Returns are accepted within 14 to 30 days depending on the item."

Tokio sakinio nėra jokiame dokumente. Modelis gavo dvi prieštaringas ištraukas ir bandė jas suderinti. Požymis yra miglotas atsakymas arba intervalas ten, kur Jūsų taisyklėje nurodytas konkretus skaičius. Sprendimas: prieš upsert ištrinti fragmentus pagal dokumento identifikatorių, kad pakartotinis indeksavimas senus fragmentus pakeistų, o ne pridėtų naujus šalia.

4. Dokumentas aktualus, bet paieška jo nepasiekia

Šį atvejį verta atskirti, nes sprendimas visai kitoks. Indeksas tvarkingas: tinkamas fragmentas atsiduria žemiau atrankos ribos, o laimi senesnis dokumentas, kurio formuluotės labiau sutampa su klausimo žodžiais.

query: "how long do I have to send something back"
  0.71  faq-shipping.md        "...send back within 30 days..."   [2024, superseded]
  0.68  returns-policy-v3.md   "...fourteen days from delivery..." [current]
  --- top_k = 1 ---

Net šešios savaitės prompto tobulinimo to neišspręs, nes problema ne prompte. Paprastai padeda didesnis top_k ir pakartotinio rikiavimo (reranking) žingsnis, taip pat pasenusio DUK ištrynimas, nes jis apskritai neturėjo būti indekse. Taigi ir čia viskas grįžta prie to paties klausimo, kaip ir kitais trimis atvejais: ar indekse yra lygiai tai, kas yra šaltinyje, ir nieko daugiau?

Atskirkite juos prieš ką nors keisdami

Keturiems gedimams reikia keturių skirtingų sprendimų, o atrodo jie vienodai, todėl tvarka svarbi. Klauskite tokia seka: ar indekse esanti šio dokumento versija atitinka šaltinio maišą (hash); ar indekse yra dokumentų, kurių šaltinyje nebėra; ar paieška grąžina daugiau nei vieną to paties dokumento versiją; ir tik tada, ar tinkamas fragmentas apskritai randamas. Į pirmus tris klausimus atsakoma palyginus du sąrašus, tai užtrunka kelias minutes. Ketvirtasis reikalauja tikro paieškos derinimo, ir jį verta daryti tik tada, kai pirmi trys tvarkoje, nes kitaip atšauktų dokumentų fragmentai iškreips kiekvieną Jūsų bandymą.

Tikrinkite kiekvieną rytą, o ne po skundo

Pridėtas workflow paima Jūsų šaltinio dokumentų sąrašą ir indekso sąrašą, juos palygina ir atskirai praneša apie tris neatitikimų rūšis: dokumentus, kurie niekada nebuvo indeksuoti; dokumentus, kurių kopija indekse atsilieka nuo šaltinio daugiau nei parą arba kurių turinio maiša skiriasi; ir dokumentus, kurie yra indekse, bet šaltinyje nebeegzistuoja. Įspėjimą jis siunčia tik radęs neatitikimą, o kai viskas tvarkoje, tiesiog užfiksuoja sėkmingą vykdymą, todėl vykdymų istorijoje visada matyti, kada indeksas paskutinį kartą patikrintas, ir niekam nereikia to prisiminti.

Jam reikia dviejų dalykų, kuriuos paruošiate Jūs, abi vietos pažymėtos workflow faile: šaltinio dokumentų sąrašo formatu { id, title, updatedAt, hash } ir analogiško sąrašo iš Jūsų vektorių duomenų bazės. Pinecone, Qdrant ir pgvector visi gali pateikti tokius metaduomenis. Workflow be klaidų praeina dabartinės n8n schemos patikrą: ją atliekame prieš publikuodami kiekvieną importuojamą failą.

Kada pagalbos nereikia

Jei Jūsų žinių bazė yra keli dokumentai, kurie keičiasi kelis kartus per metus, stebėsenos Jums nereikia. Pakanka į taisyklių keitimo tvarką įrašyti žingsnį „indeksuoti iš naujo“ ir paskirti žmogų, kuris kas ketvirtį sąrašus palygintų rankomis.

Jei radote vieną pasenusį dokumentą ir galite jį indeksuoti iš naujo, taip ir padarykite. Vienas neteisingas atsakymas dėl vieno dokumento nėra projektas.

Pagalbos verta ieškoti tada, kai dokumentai keičiasi kas savaitę, juos gali redaguoti keli žmonės, ir šiuo metu niekas negali atsakyti, kiek asistento šaltinių yra aktualūs. Tada sprendimas yra ne pakartotinis indeksavimas, o tai, kad indeksavimas taptų automatine redagavimo pasekme ir kad būtų kas pastebi, kai taip neįvyksta. Tai keičia indeksavimo procesą, o ne duomenis.

Kiek kainuoja, jei taisome mes

Raštiška diagnostika kainuoja 450 €. Ją pateikiame per dvi darbo dienas, visa suma įskaitoma į tolesnį darbą, o jei diagnostika neranda priežasties, kurią galima pataisyti, pinigus grąžiname. Šiuo atveju palyginimą atliekame su Jūsų veikiančiu indeksu ir pateikiame skaičius: kiek dokumentų yra aktualūs, kiek atsilieka, kiek jau atšaukti, bet vis dar naudojami atsakymuose, ir kuris iš keturių gedimų lėmė atsakymą, dėl kurio pradėjote ieškoti priežasties.

Pataisymai kainuoja nuo 700 iki 1 400 €, kai indeksavimo užduočiai reikia ištrynimo prieš upsert ir aktualumo patikros, ir nuo 1 400 iki 3 700 €, kai indeksavimo procesą reikia kurti iš naujo, kad pakeitimas šaltinyje pats paleistų indeksavimą. Abiem atvejais stebėsena lieka veikti, nes net šiandien tvarkingas indeksas be priežiūros atsilieka jau per pirmą savaitę.

Dažnai užduodami klausimai

Citata nurodo teisingą dokumentą. Kodėl atsakymas neteisingas?

Nes citata pasako, iš kurio dokumento kilo sakinys, bet ne iš kurios jo versijos. Jei indeksavimas buvo paleistas vieną kartą, kai sistema pradėjo veikti, arba paima tik naujus failus, esamų dokumentų pakeitimai lieka nematomi. Palyginus šaltinio pakeitimo laiką ir turinio maišą (hash) su indeksu, tai matyti iš vienos užklausos, bet beveik niekas jos nepaleidžia: indeksavimas buvo sukurtas tikrinti, ar dokumentas yra, o ne ar jis aktualus.

Kodėl ištrynus dokumentą jis nedingsta iš asistento?

Nes dauguma indeksavimo užduočių tik prideda: jos pereina per šaltinį, įrašo arba atnaujina tai, ką randa (upsert), ir neturi žingsnio, kuris paklaustų, kas yra indekse, bet nebėra šaltinyje. Toks likęs dokumentas blogesnis už pasenusį: pasenęs bent jau kadaise buvo teisingas, o ištrintas gali būti būtent tas, kurį teisininkai liepė pašalinti.

Asistentas pateikė intervalą, nors mūsų taisyklėje nurodytas konkretus skaičius.

Tai požymis, kad indekse vienu metu yra du vienas kitam prieštaraujantys fragmentai. Jei fragmentų identifikatoriai sudaromi pagal vietą arba turinį, o ne pagal dokumentą, pakartotinis indeksavimas prideda naują versiją nepašalinęs senos, paieška mato abi, ir modelis bando jas suderinti: sukuria sakinį, kurio nėra jokiame dokumente. Sprendimas: prieš upsert ištrinti fragmentus pagal dokumento identifikatorių, kad pakartotinis indeksavimas senus fragmentus pakeistų, o ne pridėtų naujus šalia.

Dokumentas aktualus, o asistentas jo vis tiek neranda.

Tada tai paieškos problema, o ne aktualumo, ir sprendimas visai kitoks. Tinkamas fragmentas atsiduria žemiau atrankos ribos, o laimi senesnis dokumentas, kurio formuluotės labiau sutampa su klausimo žodžiais. Net šešios savaitės prompto tobulinimo to neišspręs, nes problema ne prompte. Paprastai padeda didesnis top_k ir pakartotinio rikiavimo (reranking) žingsnis, taip pat pasenusio DUK ištrynimas, nes jis apskritai neturėjo būti indekse.

Kada neužtenka vien pakartotinio indeksavimo?

Kai dokumentai keičiasi kas savaitę, juos gali redaguoti keli žmonės, ir šiuo metu niekas negali atsakyti, kiek asistento šaltinių yra aktualūs. Tada sprendimas yra ne pakartotinis indeksavimas, o tai, kad indeksavimas taptų automatine redagavimo pasekme ir kad būtų kas pastebi, kai taip neįvyksta. Tai keičia indeksavimo procesą, o ne duomenis. Jei Jūsų žinių bazė yra keli dokumentai, kurie keičiasi kelis kartus per metus, pakanka į taisyklių keitimo tvarką įrašyti žingsnį „indeksuoti iš naujo“ ir kas ketvirtį sąrašus palyginti rankomis.

Ką apima kiekvienas lygis

Kiekvieno lygio kaina sutariama raštu dar prieš išrašant sąskaitą. Diagnostikos kaina visa įskaitoma į taisymo kainą, todėl jei taisymą užsakote per 90 dienų, už diagnostiką atskirai nemokate.

LygisKainaTrukmė
Raštiška diagnostikaPeržiūrime darbo eigas, žurnalus ir promptus. Gaunate raštišką gedimo priežasties ataskaitą ir taisymo pasiūlymą su fiksuota kaina. Visa suma įskaitoma į taisymo kainą, jei taisymą užsakote per 90 dienų, o jei priežasties, kurią galima pašalinti, įvardyti nepavyksta, pinigus grąžiname.nuo 450 €2 darbo dienos
Nedidelis taisymasVienas aiškus gedimas: neveikianti integracija, prastas promptas, trūkstamas pakartotinis bandymas. Jei gedimas nedidelis, ir kaina nedidelė.700-1 400 €2-5 dienos
Įprastas taisymasDažniausias atvejis. Keli gedimo taškai arba nepatikima architektūra: šaliname priežastis, pridedame klaidų apdorojimą, įspėjimus ir veiksmų žurnalą, kurį galima patikrinti.1 400-3 700 €1-2 savaitės
Kūrimas iš naujoTik kai taisyti kainuoja daugiau nei kurti iš naujo. Diagnostikoje tai parašome su abiem kainomis, dar prieš Jums apsisprendžiant.3 700-9 200 €2-4 savaitės

Daugiau informacijos rasite taisymo paslaugos puslapyje, o visos kitos mūsų kainos skelbiamos kainų puslapyje.

Kiti aprašyti gedimai

Plačiau tinklaraštyje

Atsiųskite vykdymo žurnalą ir pasakysime, kas sugedo

Per dvi darbo dienas gausite atsakymą ir kainą. Jei pataisymą nesunkiai atliksite patys, ataskaitoje taip ir parašysime.