在构建 RAG系统的索引时,向量维度的设置是一个非常关键的环节。简单来说,维度的选择并非一个可以随意调整的参数,而是由你所选用的 Embedding模型直接决定的。 在我们的项目中,我们的配置如下:
elasticsearch:
host: http://127.0.0.1:9200
base-url: https://dashscope.aliyuncs.com/compatible-mode/v1
model-name: text-embedding-v4
api-key: @dashscope.api.key@
dimensions: 1536
即1536。
维度的设置,有一个核心原则:向量维度必须与你选择的 Embedding 模型的输出维度完全一致。
每个 Embedding 模型在将文本转换为向量时,都会生成一个固定长度的浮点数数组,这个数组的长度就是向量的维度。例如:
- 如果你使用 OpenAI 的 text-embedding-ada-002 模型,它的输出向量是 1536 维。
- 如果你使用 BAAI/bge-small-zh-v1.5 模型,它的输出向量是 384 维。
在创建向量数据库索引时,你必须将这个固定的维度值作为参数传入。如果设置的维度与模型实际输出的维度不匹配,会导致向量无法正确存储和检索,整个系统将无法工作。
但是,很多模型是支持多种维度的,比如text-embedding-v4,他就支持很多个维度。
更高的维度能保留更丰富的语义信息,但也会相应增加存储和计算成本。比如text-embedding-v4 这个模型:
- 通用场景(推荐):1024 维度是性能与成本的最佳平衡点,适用于绝大多数语义检索任务。
- 追求精度:对于高精度要求领域,可选择 1536 或 2048 维度。这会带来一定的精度提升,但存储和计算开销会显著增加。
- 资源受限:在对成本极其敏感的场景下,可选择 768 及以下维度。这能显著降低资源消耗,但会损失部分语义信息。
| 维度选项 | 适用场景 | 特点 |
| --- | --- | --- |
| 1536 / 2048 | 追求极致精度 | 保留最丰富的语义信息,但存储和计算成本最高。 |
| 1024 (默认) | 通用场景 | 性能与成本的最佳平衡点,适合绝大多数语义检索任务。 |
| 768 及以下 | 资源受限场景 | 显著降低存储和计算开销,但会损失部分语义信息。 |
前面,我们设置的是1536维,这个后面我们还会做评测,然后根据实际的检索效果(精度)与系统成本(性能)之间找到一个相对的平衡点。 如果召回效果比较好,但是性能比较差,则可以考虑降低维度。 如果性能比较好,但是召回效果很差,则可以考虑提升维度。