注: 备注 这不是传统博客文章 @._# 技术规格 写为具体特征的 清晰RAG 区域包. 在开发过程中,我反复将本文件输入代码- 专注的LMS, 以解释交易情况 ~- offs\ ,}验证假设=,\ 并集中到合理执行上.
本文件描述一个子系统。 清晰RAG 区域包@, @ a project I’_m 积极开发@.}
一项核心要求 清晰RAG 区域包 是提取的能力 证据的各部分 -}句子 @,}段落,}标题_,}字幕@,}框架{,}或构件块并确保这些部分是 已拆除 不销毁有用的信号@. @%
清晰RAG 区域包 通过分析和提取 最佳 从文件<,}图像> ,}音频{,}和结构化数据*.}提供的现有证据 否 LLM- 生成摘要,作为主要的亚麻末 . 在许多情况下,进食需要完全不使用LLM {(虽然当升级有正当理由时可以使用*).
取代, 清晰RAG 区域包 运用广泛的确定性和概率技术
解码是此进程的关键部分 @. @%
简单的字符串等同是不够的@.}这个概念经常用不同的措辞表达,使用不同的用词 @,_ 结构,或方式.
检索时间的问题化合物@. @%
当获取结果时 {(}%via SQL,矢量嵌入=,}BM25,}或混合体MPK4}喂养一个表示相同基本想法的LLM多个区块, 产生沉闷,}重复解答 *.5个来自不同文档的接近@-的同质块 不会增加清晰度 @-}它们会稀释它□.}
要解决这个问题 @ , @ @ 清晰RAG 区域包 将重复作为 第一次-类汇编问题@,_* 不是一个文章@-} @hoc过滤器 @MS K2
本文件的其余部分说明如何设计这一脱重复战略,这是我如何与《守则》合作的一部分。 'AGIE SCPCING MS K1 适应代码LLMS=.}需要
这是确保LLM的第一个阶段。 建设正确的东西.
清晰RAG 区域包 使用两个“-”的分解策略消除冗余内容,同时保存重要信号@.}这是 设置过滤器@ label@,#没有内容正常化 #.#
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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 │
└─────────────────────────────────────────────────────────────────────────────┘
这些变数由分解系统维护 :
| 保证 1 描述 * | * |
|---|---|
| 维持秩序 在RRF排名@ | 后, 插图永远不会改变语义顺序 |
| 无概念损失 | 解析从不删除概念的所有实例 @ |
| 文件边界遵守 | 调试在摄取时从不跨越文档边界@ |
| 内容不可更改 @ | _ 解析从不改变嵌入或文字内容@ MS K1}只选择和突出分数 @ |
| 确定性 * | * 依据相同的输入和配置 , * 重复产生相同的输出 * @ |
这一制度明确 否 尝试:
应用是完全决定性的 @: @%
为什么这重要? 用户调试检索结果的用户可以相信,使用相同输入的 re- 运行能够产生相同的输出@ .% 此匹配 清晰RAG 区域包“'”和“确定性行为”相匹配的模糊
目标#: 减少储存并预防在@-}文件冗余 *.
问题M: 文件通常包含重复的内容 @: @%
解答@: @ 在索引前在每文档中复制@. @%
密钥 Insight @ : 在接近- 的重复处理中, 重要独立证据“,”不是多余的“.” 如果作者用三种不同的方式解释一个概念, 这个概念很重要, 我们通过提升突出度来捕捉这个信号 。
目标#: 防止LLM通过文件接收多余信息
问题M: 当在多个文档中查询时 ,\ 类似段落可能出现在不同来源 .}LLM should{'t 描述相同信息多次@.}
解答@: @ 由 RRF {(} 排序后, 它结合了语义相似性},关键词 匹配MS K2} 突出\ ,}\ 和新鲜@), 在保持最高比例的文档中进行翻版。 <-\ scolring cluction ♪.
为什么在RRFZ?之后? RRF分数是衡量相关性的最佳整体尺度 =. 在排名失去这个信号之前进行演练
分离是故意的 :
| 它捕捉到什么 | * |
|---|---|
| 摄食刺激 作者强调文件有多强调一个概念 | |
| 检索得分 @ | 查询关联性@-内容与用户意图的匹配程度# |
在检索时混合这些功能会将文档意图与用户用意连接起来.}在文件中重复 {5}% 的概念很重要 与该文档对应的,(但可能不相干) 到此查询@. 藉由增加摄取@,, 我们保留作者的信号\ ' 没有偏差查询结果_.
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
| 參數 | 默认MS K2 描述 | ||
|---|---|---|---|
similarityThreshold * |
0.90 * @ | * | |
salienceThreshold -=YTET -伊甸园字幕组=- 翻译: |
|||
boostPerNearDuplicate @ |
@ @ 0.15 @ @ * | # 盐碱度在靠近@ - @ dplical 合并 @MS K4} @ I | @ |
精确复制@( @ no boost @ ) @
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)
**近端 - 复制 * * Boost Application *MS K2 ***
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)
| 參數 | 默认MS K2 描述 | ||
|---|---|---|---|
similarityThreshold “ |
”“0.90”“ | ”“Consine 类似阈值”,横跨“MS K3”“doc dedup”“Z | ” |
RRF “(”对等阵营结合了四个信号“:”
在RRF 之后进行应用意味着我们保留与所有维度查询最匹配的部分 “,”不只是语义相似性“.”
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.
| “ | 失败模式”“ | ”描述“MS K2 缓解 ” |
|---|---|---|
| 假正 ( @ over@ -}dedup) “ | 两种不同但密切相关的概念可能超过“0.90 相似性”或“MS K2 接受贸易” 或“- 倾向于减少冗余” | |
| 假的负数@( @under @-_dedup}) 短片段可能会嵌入错误的语义相似性 @ | @ hash-}基于精确重复检测, | |
| 内嵌漂移 变换嵌入模型将失效退出假设 @ | }需要完全重新恢复-inchoduction@;}嵌入器一旦存储 *# | }就不可更改 |
| 秩序灵敏度 “ | 贪婪选择”意指第一个高端“-萨利安部分”赢得了“MS K2 ” 通过稳定排序“; 最高端” -萨里部分保留着“{ | ” |
包含多语言内容的解说行为@: @%
| “ | 假想”“ | 行为”“ | 理由”“I | ” |
|---|---|---|---|---|
| 同一语言 | 正常除尘应用 @ | 嵌入式捕捉语义相似性@ | ||
| CrossóM-语句 “ | }没有被拆卸 ” @ | 保存源@- 语言多样性$ | ||
| 混合- 语言文件 在语言群集中的 | Dedup 嵌入相似性自然分离的语言 |
设计选项@: @% Cross- 语言 dedup 明显不支持 @. 这样保留了在用户@' 首选语言中检索相同事实的能力, 或者比较不同来源对事物的表达方式.}
未来提升@: @cross-}语言分解可以按需要通过翻译 @-#invariant 嵌入程序进行分层
重复系统包括隐性保护 :
| 攻击矢量 | 保护MS K2 | |
|---|---|---|
| 重复导致的盐度通胀率 @ | _BARBAR_在 1.0;}精确的复制件don@'#t push *% | * |
| 在文档之间复制-paste垃圾邮件 在检索时 | cross-doc dedup 移除多余的结果 @ | |
| 通过重复注射进行计分处理 “ | Dedup 发生于排名后”“,防止得分通胀 ”“ | ” |
| 锅炉洪水 @ | _ 精确的散列匹配检测滴, 没有振动@ MS K1} @ |
注:: 调试不是安全边界@. @ 恶意内容, 因为通过摄取过滤器将被索引@ . @ 内容过滤会发生在上游 @ MS K2} *
插图和图形RAG是故意垂直的\ :\
| 系统 @ | 在 @MS K2目的上的操作@ | |
|---|---|---|
| 调解 | 片段 @(文本块@) @# | 删除多余的检索结果 @MS K4 |
| 图图RAG 建立知识图 , 解决参考文献 |
为何分开?
摄取@:
[dim]Deduplication: 150 → 98 segments[/]
检索@: @%
Post-ranking deduplication: 50 → 42 segments (removed 8 cross-doc duplicates)
为了监测生产情况 , 考虑追踪: *
| Metric | 描述 * | 健康距离* | |
|---|---|---|---|
dedup_ratio_ingestion @ |
} @ 10-40% @ @ I | # | |
dedup_ratio_retrieval @ |
}%}在检索中移除的片段 *{ | }\ 5-20%{MSC4@ | }* |
avg_salience_boost * |
* 根据文件应用的平均升降率* *{ | } @0.05-0.20 * | * |
max_salience_boost @ |
文档中最高振动 *{ | }\fn< 0.60 _( 一种概念主宰着 MS K5 NSK6 | |
dedup_by_doc_type |
Dedup比率按文档类型 @ | Vories { | }分隔 |
通过 DocSummarizerConfig.Deduplication 节内 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
}
}
}
}
| 參數 | 默认MS K2 描述 | ||
|---|---|---|---|
Enabled |
true |
启用/ disable 食用过量重复 * | |
SimilarityThreshold |
0.90 “ |
” 重复检测的相近阈值“ | ” |
SalienceThreshold |
0.05 -=YTET -伊甸园字幕组=- 翻译: |
||
EnableSalienceBoost |
true |
BARBAR 靠近-的亮点 重复_ | } |
BoostPerNearDuplicate |
0.15 @ |
_Base supplement per near@-}重复的 (+15%) MS K3 | |
MaxSalienceBoost |
1.0 最大亮度上限 |
||
BoostDecayMode |
Logarithmic |
Linear 或 Logarithmic 衰变@ |
@% |
LogBase |
2.0 |
对数衰变基 |
| 參數 | 默认MS K2 描述 | ||
|---|---|---|---|
Enabled |
true |
启用/ 残疾检索重复 * | |
SimilarityThreshold |
0.90 @ |
_Consocial 相似的阈值@ | _Q# |
MinRelevanceScore |
0.25 最低RRF分数包括 |
| 參數 | 默认MS K2 描述 | ||
|---|---|---|---|
EnableLogging |
true |
日志重复操作 @ | |
EnableMetrics |
true “ |
”收集监测指标“ | ” |
HighIngestionDedupThreshold |
0.50 |
Warn 如果@>50%在摄取时被切除 | |
HighRetrievalDedupThreshold |
0.30 @ |
_ 警告@ MS K1} 在检索时解码@ I | |
HighSalienceBoostThreshold |
0.60 @ |
@ 警告, 如果推力超过 @ @ 60% @ @ * | # |
线性模式 @(_sproo@,}可预见=):
boost = boostPerNearDuplicate × count
靠近@- @dupes @×} @0.15# =_ @#+45%#促进
对对数模式 @ (_ diminishing recorrunts *% 1} 默认@ MS K2\ {
boost = boostPerNearDuplicate × log₂(1 + count)
靠近@- @dupes @ →} @0.15 @ ×log_₂(4){=#+30%
推荐对数模式是因为 @:
-=YTET -伊甸园字幕组=- 翻译: |-------|------------|--------------|--------| @| | @OQ( @nQ²)}#|# 50-500#片段 @MS K6_ @ @<#%100#ms @MSC9# @|#20-100}片段: | @ < @ZK8 @| @
用于非常大文档的 & M(10,000+ @ section@ ):
目前对典型文档大小的当前实施进行优化,使 LSH 增加复杂性,而对大多数使用的案例没有好处@.
| 源於 @ | |||
|---|---|---|---|
| =清晰的RAG @ | [email protected]}# | =本次执行={ | } |
| NVIDIA NEMO Crator | MS K2 NSK3 SemDeup 文档 | ||
| MinHash LSH(标准}) MS K3 NSK4 计分卡 | Google C4,GPTMPK1纸 | ||
| {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080} 吉特胡布 |
我们的“0.90”阈值与关于语义重复的行业最佳做法相一致。
@| 内容类型@|}原因#| |--------------|--------| -来源分辨率和属性 类似内容 @(<0.90)}#|_ @| 不同的片段类型\ |}标题与段落具有不同的结构角色 “| cross- 语言副句子”“| 保留了语言多样性 ” @|
-=YTET -伊甸园字幕组=- 翻译:
|---------|--------|----------|
“|”可配置阈值“|” 已执行“MSC3” DeduplicationConfig 类中 @| @%
@|BARBAR 鼠标衰变=%(_log 缩放=#)}|}{✅}已执行 *|} BoostDecayMode.Logarithmic |
|Dedup分析仪/ 度量| MSSK3已执行 @| DeduplicationResult<T> 记录@| @%
|DI服务整合 IDeduplicationService |
此重复策略@ : @
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.