# RAG 图形式RAG证据段在 ***清晰*RAG 区域包**

<datetime class="hidden">2026-01-17T14:00</datetime>

<!-- category -- C#, lucidRAG, Vector Search, Machine Learning, Knowledge Graphs -->
> **注: 备注** 这不是传统博客文章 @._# **技术规格** 写为具体特征的 ***清晰*RAG 区域包**.
> 在开发过程中,我反复将本文件输入代码- 专注的LMS, 以解释交易情况 ~- offs\ ,}验证假设=,\ 并集中到合理执行上.

本文件描述一个子系统。 ***清晰*RAG 区域包**@, @ a project I’_m 积极开发@.}

一项核心要求 ***清晰*RAG 区域包** 是提取的能力 **证据的各部分** -}句子 @,}段落,}标题_,}字幕@,}框架{,}或构件块{MS K6}并确保这些部分是 **已拆除** 不销毁有用的信号@. @%

***清晰*RAG 区域包** 通过分析和提取 *最佳* 从文件<,}图像> ,}音频{,}和结构化数据*.}提供的现有证据 **否** LLM- 生成摘要,作为主要的亚麻末 . 在许多情况下,进食需要完全不使用LLM {(虽然当升级有正当理由时可以使用*).

取代, ***清晰*RAG 区域包** 运用广泛的确定性和概率技术

* 抽取候选部分
* 评估其信息值
* 并且只保留最强有力的代表

**解码是此进程的关键部分 @. @%**

简单的字符串等同是不够的@.}这个概念经常用不同的措辞表达,使用不同的用词 @,_ 结构,或方式{.将两者作为导致多余的存储和下游不良行为的明显原因}.

**检索时间的问题化合物@. @%**

当获取结果时 {(}%via SQL,矢量嵌入=,}BM25,}或混合体MPK4}喂养一个表示相同基本想法的LLM多个区块, 产生沉闷\,}重复解答 *.5个来自不同文档的接近@-的同质块 不会增加清晰度 @-}它们会稀释它□.}

要解决这个问题 @ , @ @ ***清晰*RAG 区域包** 将重复作为 **第一次-类汇编问题**@,_* 不是一个文章@-} @hoc过滤器 @MS K2

本文件的其余部分说明如何设计这一脱重复战略,这是我如何与《守则》合作的一部分。 ['AGIE SCPCING MS K1](https://www.mostlylucid.net/blog/writingfeaturespecs) 适应代码LLMS=.}需要

这是确保LLM的第一个阶段。 *建设正确的东西*.

[更多信息 ***清晰*RAG 区域包** 这里 . ](https://www.lucidrag.com)

# 刺激战略

***清晰*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}只选择和突出分数 @|
| **确定性** *|* 依据相同的输入和配置 , * 重复产生相同的输出 * @| 

---


## 非- 目标

这一制度明确 **否** 尝试\:

- **查明事实矛盾** -
- **揭露真相** - 我们选择了不同源的版本
- **在摄入时在文档间折叠参数句式** -每份文件都有自己的部分
- **统一术语** “- "ML"和“"机器学习MS K4”在不同文档中分别保存。
- **替换实体分辨率** -,在不同的级别上工作

---


## C. 可复制性

应用是完全决定性的 @: @%

- **内嵌是不可改变的** 在抽取时间计算一次
- **排序稳定** 具有同等显著度的-部分保持原有顺序
- **无随机** 无采样无近似ANN,无概率阈值
- **无外部状态** - 卸载决定只取决于当前段设置

**为什么这重要?** 用户调试检索结果的用户可以相信,使用相同输入的 re- 运行能够产生相同的输出@ .% 此匹配 ***清晰*RAG 区域包**“'”和“确定性行为”相匹配的模糊

---


## 为什么两个阶段?

### 阶段 *1:摄取

**目标#:** 减少储存并预防在@-}文件冗余 *.

**问题M:** 文件通常包含重复的内容 @: @%

- 绝版文字@(_headers @,}脚#,}拒绝声明{)}
- 复制@- @pasted 区域
- 同一概念解释了多种方式

**解答@: @** 在索引前在每文档中复制@. @%

**密钥 Insight @ :** 在接近- 的重复处理中, *重要独立证据*“,”不是多余的“.” 如果作者用三种不同的方式解释一个概念, 这个概念很重要, 我们通过提升突出度来捕捉这个信号 。

### 阶段 *2: retretval 调试

**目标#:** 防止LLM通过文件接收多余信息

**问题M:** 当在多个文档中查询时 ,\ 类似段落可能出现在不同来源 .}LLM should{'t 描述相同信息多次@.}

**解答@: @** 由 RRF {(} 排序后, 它结合了语义相似性},关键词 匹配MS K2} 突出\ ,}\ 和新鲜@), 在保持最高比例的文档中进行翻版。 <-\ scolring cluction ♪.

**为什么在RRFZ?之后?** RRF分数是衡量相关性的最佳整体尺度 =. 在排名失去这个信号之前进行演练

### 为何只在摄食时才提高盐度

分离是故意的 :

它捕捉到什么 | *
|-------|------------------|
| **摄食刺激** 作者强调文件有多强调一个概念
| **检索得分** @|查询关联性@-内容与用户意图的匹配程度#|

在检索时混合这些功能会将文档意图与用户用意连接起来\.}在文件中重复 {5}% 的概念很重要 *与该文档对应的*,(但可能不相干) *到此查询*@. 藉由增加摄取@,, 我们保留作者的信号\ ' 没有偏差查询结果_.

---


## 阶段 *1:摄取

### 地点位置地

`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 support@example.com" [hash: abc123]
Segment B: "Contact us at support@example.com" [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)
```

### 临界阈值的理由

- **-=YTET -伊甸园字幕组=- 翻译:** 在研究的基础上,NeMo在语义分解中使用了 0.90-0.92, 工业标准
- **-=YTET -伊甸园字幕组=- 翻译:** 过滤器非常低@ - @ value 区块, 同时保留大多数内容
- **- -** 不带超@- 加权重复概念的有意义的信号

---


## 阶段 *2: retretval 调试

### 地点位置地

`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 “(”对等阵营结合了四个信号“:”

1. **高分=:** 语义与查询相似
2. **BM=25 得分 : *** 校法=/}关键字匹配
3. **盐分=:** 文件在文件中的重要性
4. **新鲜分数:** 反应增强

在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 K1_ 关闭

### 已知限制

“| 失败模式”“|”描述“MS K2 缓解 ” |
|--------------|-------------|------------|
| **假正 ( @ over@ -}dedup)** “| 两种不同但密切相关的概念可能超过“0.90 相似性”或“MS K2 接受贸易” 或“- 倾向于减少冗余”
| **假的负数@( @under @-_dedup})** 短片段可能会嵌入错误的语义相似性 @ | @ hash-}基于精确重复检测,
| **内嵌漂移** 变换嵌入模型将失效退出假设 @ |}需要完全重新恢复-inchoduction@;}嵌入器一旦存储 *#|}就不可更改
| **秩序灵敏度** “| 贪婪选择”意指第一个高端“-萨利安部分”赢得了“MS K2 ” 通过稳定排序“; 最高端” -萨里部分保留着“{| ”

### 接受贸易

- **有关回想的精度*:** 我们更喜欢偶尔保持近@-+_dplications 而非意外删除不同内容
- **存储于精确度@: @%** 我们储存每-% document 而不是全球降排,以保存来源归属
- **优化的简单度@: @%** O(n ²) 对于典型的文档大小可以接受 LSH 增加复杂性

---


## 多种语文的考虑

包含多语言内容的解说行为@: @%

“| 假想”“| 行为”“| 理由”“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} *

---


## 与 GragraG 的相互作用

插图和图形RAG是故意垂直的\ :\ {}

|系统 @|在 @MS K2目的上的操作@|
|--------|-------------|---------|
| **调解** |片段 @(文本块@) @#|删除多余的检索结果 @MS K4
| **图图RAG** 建立知识图 , 解决参考文献

**为何分开?**

- 提到“"Apple"”和“MS K2这家公司"可能以类似文字表示,
- Dedup does' 不需要实体意识\ ; 它纯粹靠语义相似性运作
- 实体-aware dedup可稍后添加,作为增强@,}不能替换

---


## 度量计

### 当前日志

摄取@:

```
[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 {|}分隔

### 调试提示

- **高摄氏消化率** 文档可能有过量的锅炉板或自动@ - @% 生成
- **低摄氏消化** 文档有不同内容 @(@good_)}或嵌入功能差 #( @investiguate@)#
- **高调检索 ddup @ (>30%): @** 查询范围可能太宽@, @% 或实体有许多类似的文件
- **盐碱接近1.0:** 概念被高度强调@;验证它#'}合法{,}不是垃圾邮件

---


## 配置配置

通过 `DocSummarizerConfig.Deduplication` 节内 `appsettings.json`:

```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@ ):

1. **LSH ( 地方性 MS K1 敏感散列 NSK2** O(n ) 近似丁度
2. **批量比较@: @%** 用于减少内存的块中进程
3. **早期过滤@: @%** 更具侵略性的显著阈值

目前对典型文档大小的当前实施进行优化,使 LSH 增加复杂性,而对大多数使用的案例没有好处@.

---


## 与研究的比较

| 源於 @|
|----------|-----------|--------|
|=清晰的RAG @|=@0.90}#|=本次执行={|}
|NVIDIA NEMO Crator | MS K2 NSK3 [SemDeup 文档](https://docs.nvidia.com/nemo/curator/latest/curate-text/process-data/deduplication/semdedup.html) |
| MinHash LSH(标准}) MS K3 NSK4 计分卡| [Google C4,GPTMPK1纸](https://huggingface.co/blog/dedup) |
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080} [吉特胡布](https://github.com/MinishLab/semhash) |

我们的“0.90”阈值与关于语义重复的行业最佳做法相一致。

---


## 哪些非重复

@| 内容类型@|}原因#|
|--------------|--------|
-来源分辨率和属性
类似内容 @(<0.90)}#|_
@| 不同的片段类型\ |}标题与段落具有不同的结构角色
“| cross- 语言副句子”“| 保留了语言多样性 ” @|

---


## 实施情况执行情况

-=YTET -伊甸园字幕组=- 翻译:
|---------|--------|----------|
“|”可配置阈值“|” 已执行“MSC3” `DeduplicationConfig` 类中 @| @%
@|_BARBAR_ 鼠标衰变=%(_log 缩放=#)}|}{✅}已执行 *|} `BoostDecayMode.Logarithmic` |
|Dedup分析仪/ 度量| MSSK3已执行 @| `DeduplicationResult<T>` 记录@| @%
|DI服务整合 `IDeduplicationService` |

## 未来增强能力

1. **Dedup 分析仪表板@: @** 每个文件类型比率的目视跟踪
2. **Crossó- 语言选项@: @%** 译文-不易嵌入多语种脱丁字
3. **实体- - 知情的didup - :** 使用 GraphRAG 实体作为附加信号@ ( @ non replace\ )
4. **普罗米修斯 / 开放远程测量 MS K1 *** 监测仪表板的出口指标

---


## 摘要摘要

此重复策略@ : @

- **保存信号** @ - @ near@-# 重复会提高重要性而不是被丢弃
- **尊重边界** -文件保持独立部分集
- **排级然后过滤器** - 使用完整的 RRF 信号
- **安全失灵** -prefers保持内容超过攻击性清除
- **保持确定性** *-* 同样的投入总是产生相同的产出