TOTEAA: Tämä ei ole tavallinen blogiartikkeli. Se on tekninen eritelmä kirjattu konkreettiselle ominaisuudelle ilmeinenRAG. Olen toistuvasti antanut tämän asiakirjan koodiin:-, "focused LLMs during development," "reason about trade", "offs", "validate assumptions" ja "converge on a rational implementation".
Tässä asiakirjassa kuvataan alajärjestelmää ilmeinenRAG, hanke IM SK1 kehitän aktiivisesti
Yksi keskeinen vaatimus ilmeinenRAG on kyky ekstrahoida todisteiden osia - lauseetM SK1 kappaleet , otsikot, otsikotMSC4 puitteetMST5 tai rakenteelliset lohkot SSK6 ja varmistaa, että kyseiset osat kaksinkertaistettu ilman hyödyllisen signaalin tuhoamista.
ilmeinenRAG työt analysoimalla ja keräämällä paras saatavilla olevat todisteet asiakirjoista, kuvat, äänioikeudessa , ja rakenteelliset tiedotM SK3 toisin kuin useimmissa RAG-rakenteiden täytäntöönpanossa ei varastoida LLM-generoida yhteenvedot ensisijaisena artefaktina . Monissa tapauksissa, syöminen ei edellytä lainkaan LLM:tä M SK3, vaikka sitä voidaan käyttää, kun syvennys on perusteltuaMSC4
Sen sijaan, ilmeinenRAG soveltaa monia deterministisia ja todennäköisiä tekniikoita:
Redupollu on ratkaiseva osa tätä prosessia.
Yksinkertainen ketjujen yhdenvertaisuus ei riitä. Sama käsite ilmaistaan usein erilaisten sanamuotojen avulla , rakenteenaM SK2 tai muodollisuutena. Niiden käsitteleminen erillisenä johtaa ylimääräiseen varastointiin ja huonoon menettelytapaan ketjun jälkeenMSC4
Ongelma moninkertaistuu pyyntiajan jälkeen.
Kun tulokset otetaan käyttöön, (SQL:n välityksellä , vektorin sisällyttämisen avulla, BM-lähettiläiden välitykselläM SK3 tai hybridien välitysjärjestelmien välitykselläMSC4 liitetään LLM:lle useita segmenttejä, jotka kaikki ilmaisevat saman taustalla olevan ajatuksen, tuodaan tuskallisiaMST5 toistuvia vastauksiaMSP6 Viisi läheisyydessäMSV7 eri asiakirjoista saaduista samankaltaisista osista ei lisätä selkeyden lisäämistä.
Tätä varten, ilmeinenRAG kaksinkertaistaminen first-luokan kompilointiongelma, ei lähetetä postia
Muissa asiakirjoissa kuvataan, miten tämä päällekkäisyyksiin perustuva strategia on suunniteltu.This is part of how I work with Code LLMs 'Agile Speccing mukautettu koodi LLMS.
Tämä kristallisoi ajatukset, erilaiset käsitteet ja pakottaa LLM:n dokumentoimaan ne. Tämä on ensimmäinen vaihe sen varmistamisessa rakentaa oikean asian.
Lisätietoja ilmeinenRAG täällä.
ilmeinenRAG käytetään kahta vaihetta koskevaa menetelmää, jonka avulla voidaan poistaa ylimääräinen sisältö ja säilyttää tärkeitä signaaleja. signaali-varmistava filterti, ei sisällön normalisointia
┌─────────────────────────────────────────────────────────────────────────────┐
│ INGESTION (Per Document) │
│ │
│ Document → Extract → Embed → DEDUPE (intra-doc) → Index to Vector Store │
│ │ │
│ ├─ Near-duplicates: boost salience │
│ └─ Exact duplicates: drop (no boost) │
└─────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ RETRIEVAL (Cross Document) │
│ │
│ Query → Search → Rank (RRF) → DEDUPE (cross-doc) → Top K → LLM Synthesis │
│ │ │
│ └─ Keep segment with highest RRF score │
└─────────────────────────────────────────────────────────────────────────────┘
Nämä invariantit säilytetään vähentämisjärjestelmässä:
| Takuutus | Kuvaus |
|---|---|
| Asetus säilytetään | päällekkäisyydellä ei koskaan muuteta semanttista järjestystä RRF:n luokituksen jälkeen. |
| Ei käsitteen menetystä | päällekkäisyydellä ei koskaan poisteta kaikkia käsitteen instanseja. |
| Asiakirjan raja noudatetaan | päällekkäisyydet eivät koskaan ylitä asiakirjan rajoja syöttäessä |
| Muutamaton sisältö | päällekkäisyydellä ei koskaan muuteta sisällytyksiä tai tekstisisältöä |
| Deterministi | Kun otetaan huomioon identtiset tulot ja configM SK1 päällekkäisyydet tuottavat identtisiä tuloksia |
Tämä järjestelmä ei yritetään:
Kahdenkertaistaminen on täysin deterministista:
Miksi tämä on tärkeää: Käyttäjät voivat luottaa siihen, että re-käynnin samaa inputtia käyttäen tuottaa samat outputitM SK1 Tämä vastaa ilmeinenRAG'laajempi "rajoittunut epämääräisyysM SK2filosofia - epämääräinen vastaavuus deterministiseen käyttäytymiseen.
Tavoitteena: Vähennetään varastointia ja estetään asiakirjan sisäinen-ylijäämä
Ongelma: Asiakirjat sisältävät usein toistuvaa sisältöä:
ratkaisu: Ennen indeksointia kaksinkertaistetaan kussakin asiakirjassa.
Avainkäsitys: Lähes-duplikaatit käsitellään riippumattomia tärkeitä todisteitaJos esittelijä selittää käsitteen kolmella eri tavalla, se on merkityksellinen.
Tavoitteena: Varmistaa, ettei LLM saa ylimääräistä tietoa asiakirjoista.
Ongelma: Useiden asiakirjojen välisessä kysymyksessä samankaltaiset kappaleet voivat esiintyä eri lähteissä.
ratkaisu: Rakennerahaston (RRF) luokituksen jälkeen (, joka yhdistää semanttiseen samankaltaisuuteen , avainsanojen yhteensopivuusM SK2 merkityksellisyys, ja tuoreuusMSC4 kaksinkertaistetaan asiakirjoissa pitämällä kiinni korkeimmasta prosenttimäärästä
Miksi RRF:n jälkeen RRF-tulos on paras kokonaisvaltainen merkittävyyden mittaus.
Separointi on tarkoituksellista:
| Fassi | Mitä se saa aikaan |
|---|---|
| Kuluttamisen lisääminen | Esittelijä korostaa - miten paljon asiakirjassa korostetaan käsitettä |
| Päätöstulos | Kysymyksen relevanssi - miten hyvin sisältö vastaa käyttäjän aikomusta |
Näiden sekoittaminen hakuvaiheessa sekoittaa asiakirjan tarkoituksen käyttäjän tarkoitukseen. On tärkeää, että käsite toistetaan M SK1 kertaa asiakirjassa asiakirjaan,, mutta se ei voi olla merkityksellinen tähän kysymykseen. Nopeuttamalla vastaanottoaM SK1 säilytämme esittelijän signaalin ilman kysymyksen tulosten puolueellistamista .
src/Mostlylucid.DocSummarizer.Core/Services/BertRagSummarizer.cs
DeduplicateSegments()
1. Filter segments by minimum salience threshold (0.05)
2. Sort by salience score (highest first)
3. For each segment:
a. If no embedding → keep (can't compare)
b. Check cosine similarity against all selected segments
c. If similarity >= 0.90:
- If same ContentHash → exact duplicate, drop silently
- If different ContentHash → near-duplicate, boost kept segment's salience
d. If no match → add to selected list
4. Apply salience boosts: +15% per near-duplicate merged
5. Cap salience at 1.0 to prevent any single concept from dominating
| Parameter | Default |
|---|---|
similarityThreshold |
|
salienceThreshold |
|
boostPerNearDuplicate |
Täsmällinen jäljennöksi (Ei lisäystäM SK1
Segment A: "Contact us at [email protected]" [hash: abc123]
Segment B: "Contact us at [email protected]" [hash: abc123] ← same hash
Result: Keep A, drop B, no boost (likely boilerplate)
Läheltä-Duplicate M SK1Boost Applied)
Segment A: "Machine learning models require training data" [hash: abc123]
Segment B: "ML systems need data for training" [hash: def456] ← different hash, 0.92 similarity
Segment C: "Training data is essential for ML" [hash: ghi789] ← different hash, 0.91 similarity
Result: Keep A with +30% salience boost (concept emphasized 3 ways)
src/LucidRAG.Core/Services/AgenticSearchService.cs
DeduplicateByEmbeddingPostRanking()
1. Receive ranked results (already sorted by RRF or dense score)
2. For each segment (in score order):
a. If no embedding → keep
b. Check cosine similarity against all selected segments
c. If similarity >= 0.90 → skip (higher-scored duplicate already selected)
d. If no match → add to selected list
3. Return deduplicated list (maintains score ordering)
| Parameter | Default |
|---|---|
similarityThreshold |
RRF (Reciprocal Rank Fusion
RRF:n jälkeen päällekkäistyminen tarkoittaa sitä, että säilytämme segmentin, joka sopii parhaiten kysymykseen kaikissa mittasuhteissa.
Query: "How do I configure authentication?"
Results before dedup:
1. [Doc A] "Authentication is configured via config.yaml..." (RRF: 0.052)
2. [Doc B] "Configure auth using the config.yaml file..." (RRF: 0.048, similarity to #1: 0.93)
3. [Doc A] "Set the API key in environment variables..." (RRF: 0.041)
Results after dedup:
1. [Doc A] "Authentication is configured via config.yaml..." (RRF: 0.052)
2. [Doc A] "Set the API key in environment variables..." (RRF: 0.041)
Doc B's similar paragraph dropped - Doc A's version had higher RRF score.
| Epäonnistumisvaihe | Kuvaus SSK2 lieventäminen | |
|---|---|---|
| Valheellinen positiivinen (overM SK1dedup ) | Kaksi erillistä mutta läheisesti toisiinsa liittyvää käsitettä voivat ylittää 0.90 samankaltaisuudet | |
| False negative (under | Hyvin lyhyet segmentit saattavat sijoittaa huonostiM SK1 puuttuvaa semanttista samankaltaisuutta | Hash-pohjainen täsmällinen päällekkäisyyksien havaitseminen saa samat tekstit |
| Sisällyttäminen ajoon | Siihen sisällyttämistä koskevien mallien muuttaminen mitätöi vähennyksen olettamukset | Requires full re |
| Luetteloherkkyys | Hyödyllinen valinta merkitsee ensisijaisen korkean tason valintaaM SK1hyväksyntäosuus voittaa | lievennetään vakaan sortoinnin avulla; korkein tason valiminenMSC4hyhäksyntäosa säilytetään |
Monikielisen sisällön päällekkäisyydet:
| Scénari | Behavior | Rationale SSK3 |
|---|---|---|
| Sama kieli | Sovelletaan tavanomaista vähennysarvoa. | |
| Cross-kielinen johdanto-osan kappale | ei ole kaksinkertaistettu. | |
| Sekakielinen-asiakirja | Dedup kieliryhmittymien sisällä | Siirron samankaltaisuus erottaa kielet luonnollisesti toisistaan |
Suunnitelma choice: Cross-kielinen vähennys ei selvästikään ole tuettu. Tämä säilyttää kyvyn palauttaa sama tosiasia käyttäjän toivomassa kielessä tai verrata sitä, miten erilaiset lähteet sanovat asiat
Tuleva parannus:YhteenlaajuinenM SK1kielten vähennykset voitaisiin jakaa käännösten välityksellä
päällekkäisyyksiä koskeva järjestelmä sisältää epäsuorat suojat:
| hyökkäysvektori | |
|---|---|
| Salienssin inflaatio toistuvasti | Nopeuttaminen rajoittuu 1.0; täsmälliset päällekkäisyydet ei |
| Kopiota-paste spam across documents | CrossM SK1doc dedup jäljittämisessä poistaa ylimääräiset tulokset |
| Palkintojen manipulointi päällekkäisillä syytyksillä | vähennys tapahtuu sen jälkeen, kun tulostaulukko on suoritettu. |
| Katilavalvonnan aiheuttama tulva | Täsmällinen hash-vastauksen havaitseminen vähenee ilman nopeuttamista |
Huomautus: Väärentäminen ei ole turvallisuusrajaa. Köyllinen sisältö, joka kulkee syöttämisfilterejä läpi, indeksoidaan
Redupollu ja GraphRAG ovat tarkoituksellisesti ortogonaisia:
| Järjestelmä | ||
|---|---|---|
| Yhdenmukaistaminen | Segmentit (tekstikierroksia) | Poistaa ylimääräiset hakutulokset SSK4 |
| GraphRAG | Yritykset & Suhteet SSK2 Tietämyksen rakentaminen Grafi , Ratkaisevia viittauksia S |
Miksi erottaa:
Ingestion:
[dim]Deduplication: 150 → 98 segments[/]
Takaaminen:
Post-ranking deduplication: 50 → 42 segments (removed 8 cross-doc duplicates)
Tuotantovalvontaa varten, harkitaan seurantaaM SK1
| Metriki SSK1 Kuvaus | Terve vyöhyke S | |
|---|---|---|
dedup_ratio_ingestion |
% segmentit poistetaan syöttäessä | |
dedup_ratio_retrieval |
||
avg_salience_boost |
Asiakirjaa kohden sovellettava keskimääräinen lisäys | |
max_salience_boost |
Asiakirjan korkein nousu | < \0.60 \ (muunlainen käsite hallitsee |
dedup_by_doc_type |
vähennystavoite, joka on segmentoitu asiakirjatyypin mukaan |
päällekkäisyydet on määritelty DocSummarizerConfig.Deduplication -osuus appsettings.json:
{
"DocSummarizer": {
"Deduplication": {
"Ingestion": {
"Enabled": true,
"SimilarityThreshold": 0.90,
"SalienceThreshold": 0.05,
"EnableSalienceBoost": true,
"BoostPerNearDuplicate": 0.15,
"MaxSalienceBoost": 1.0,
"BoostDecayMode": "Logarithmic",
"LogBase": 2.0
},
"Retrieval": {
"Enabled": true,
"SimilarityThreshold": 0.90,
"MinRelevanceScore": 0.25
},
"Analytics": {
"EnableLogging": true,
"EnableMetrics": true,
"HighIngestionDedupThreshold": 0.50,
"HighRetrievalDedupThreshold": 0.30,
"HighSalienceBoostThreshold": 0.60
}
}
}
}
| Parameter | Default | |
|---|---|---|
Enabled |
true |
sallitaanM SK1suljetaan syömisen päällekkäisyydestä |
SimilarityThreshold |
0.90 |
Kosineiden samankaltaisuuden kynnys päällekkäisyyksien havaitsemiseksi |
SalienceThreshold |
0.05 |
vähimmäismäärä, jota on otettava huomioon |
EnableSalienceBoost |
true |
Korostaa esiintyvyyttä läheisyydessä |
BoostPerNearDuplicate |
0.15 |
Alkutuki läheisyydessäM SK1toistaa (+15%) |
MaxSalienceBoost |
1.0 |
enimmäis salienssin katto |
BoostDecayMode |
Logarithmic |
Linear tai Logarithmic kuivuus |
LogBase |
2.0 |
Logarithmic decay -perusta |
| Parameter | Default | |
|---|---|---|
Enabled |
true |
Sovuttaa/suljettaa jäljittämisväärennys |
SimilarityThreshold |
0.90 |
Kosiinijohdonmukaisuuden kynnysarvo |
MinRelevanceScore |
0.25 |
vähimmäismääräinen RRF-tulos, johon sisältyy |
| Parameter | Default | |
|---|---|---|
EnableLogging |
true |
Login päällekkäisyydet |
EnableMetrics |
true |
Valvontaa varten kerättävät mittarit |
HighIngestionDedupThreshold |
0.50 |
Varoittakaa, jos |
HighRetrievalDedupThreshold |
0.30 |
Varoittakaa, jos |
HighSalienceBoostThreshold |
0.60 |
Varoittakaa, jos kasvu ylittää |
Lineaarinen menettely ( yksinkertainen , ennustettavissa olevaM SK2
boost = boostPerNearDuplicate × count
Esimerkki: M SK1 lähellä-dupes × \0.15 |= \ \ +45% \ lisäys
Logaritmillinen menettely (vähennyspalautuksistaM SK1默aehtoinen ):
boost = boostPerNearDuplicate × log₂(1 + count)
Esimerkki: M SK1 lähellä-dupes → \0.15 |× logi \ ₂(4) | = | +30%\ boost
Logarithmic mode on suositeltava, koska:
| vaihe | monimutkaisuus | tyypillinen koko S | vaikutukset M | ||||
|---|---|---|---|---|---|---|---|
| Ingestion | OM SK2n² SSK4 \50-500 segments | < | 100 | ms | SSK9 | ||
| Päätöslauselma | OmM SK3 SSK4 \20-100 segmentit | < | SSK8ms |
Useiden suurten asiakirjojen osalta (10,000+ segmentit
Nykyinen täytäntöönpano on optimoitu tyypillisille asiakirjakokosuhteille. LSH lisää monimutkaisuutta ilman hyötyä useimmille käyttötapauksille
| Lähestymistapa |
|---|
| Tämä täytäntöönpano |
| NVIDIA NeMo Curator SemDeDup -ohjelma |
| MinHash LSH Googlen paperi C4, GPT |
| SemHash GitHub |
Meidän kynnysarvomme 0.90 vastaa alan parhaita käytänteitä semanttisesta kaksinkertaistamisesta
| Sisältötyyppi | Syy SSK2 |
|---|---|
| YhdenmukainenM SK1asiakirja syöttäessä | säilytetään kutakin source resolution ja attributionta kohti SSK3 |
| alhainenM SK1johdonmukaisuuspitoisuus | |
| Eri segmenttityypit | Johdanto-osan ja kohdan väliset rakenteelliset tehtävät ovat erilaiset |
| Yhdyskielinen -kieliset lausekkeet SSK2 säilyttää kielellisen monimuotoisuuden |
| Merkintö | Tilanne | sijaintipaikka SSK3 | ||||||
|---|---|---|---|---|---|---|---|---|
Konfiguroitavissa olevat kynnysarvot DeduplicationConfig luokka |
||||||||
| Boost decay | ( | Log scale | ) | 3 | 4 | täytäntöön pantu | BoostDecayMode.Logarithmic |
|
Dedup-analyyttinen analyysi DeduplicationResult<T> kirjallinen |
||||||||
DI-palvelujen integroiminen IDeduplicationService |
Tämä kaksinkertaistumisstrategia:
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.