### 流程：

#### 将文本分割成块：

目的：创建一个**向量索引**，表示文档内容，然后在运行时检索向量

这一步是为了将较长的文本拆分成较小的、便于处理的段落或句子块（chunk）。分块的方式有很多种，如基于句子、段落、固定长度的字符等。就是我们前面提到的**token化**，将文本拆分为Token是这一阶段的关键步骤。通过Token化，文本被转换为模型可以理解的基本单位。

为什么需要分块？

Transformer模型具有固定的输入序列长度，即使输入上下文窗口很大，一个或几个句子的向量也比几页文本的平均向量更好地表示其语义。

块的大小取决于使用的嵌入模型及其token数量。

这就需要权衡是留有足够的上下文供大语言模型进行推理，还是留足够具体的文本表征以便有效地执行检索。

##### 分块方法

1. **固定大小分块（Fixed-size Chunking）**
   - 将文本按固定长度（字符数或 token 数）切分。

   - 简单快速，但可能切断句子或语义。

2. **内容感知分块（Content-aware Chunking）**
   - 利用文本的自然结构或语义信息进行分块：
     - **句子分块**：按句子边界切分
     - **段落分块**：按段落或主题切分
     - **工具辅助**：如 NLTK、spaCy 等进行句子或段落分割
     - **直接分割**：按标点或特定分隔符切分

3. **递归分块（Recursive Chunking）**

   - 对长文本先按大块切分，再对每个大块递归细分，确保每个子块满足大小和语义要求

4. **基于特定标记符的分块**
   - 利用已有结构化标记，如 HTML 标签、Markdown 语法等
   - 优点：可以保留语义结构

##### 分块过程

1. **分块优化策略（Chunking Strategy Optimization）**
   - 根据任务目标和模型限制选择最合适的分块方法
2. **预处理数据（Data Preprocessing）**
   - 清洗文本、去掉无关符号、统一格式
3. **选择块大小（Chunk Size Selection）**
   - 平衡模型输入限制、上下文完整性与效率
   - 可尝试不同大小进行评估
4. **评估块性能（Chunk Performance Evaluation）**
   - 通过下游任务效果（如检索精度、生成质量）评估不同分块策略

#### 使用编码模型将块嵌入向量

在这一阶段，使用预训练的编码模型（如BERT、GPT、RoBERTa等）对文本块进行处理，将每个文本块转换为**嵌入向量**（embeddings）。这些嵌入向量是文本的数字化表示，能够捕捉文本中的语义信息，使得计算机可以有效地进行理解和操作。

**Token ID映射**：在这一阶段，Token被转换为数字ID，这些ID通过编码模型映射到向量空间，生成对应的嵌入向量。就是上文提到的**词嵌入。**将单词或短语映射到一个高维空间的向量形式，表示词语的语义。它是这个步骤的一部分。通过编码模型，将每个文本块映射为一个固定维度的向量，这个向量包含了块的语义信息，便于后续的相似度计算和检索