know-engine

向量维度如何设置?

在构建 RAG系统的索引时,向量维度的设置是一个非常关键的环节。简单来说,维度的选择并非一个可以随意调整的参数,而是由你所选用的 Embedding模型直接决定的。 在我们的项目中,我们的配置如下:

TL;DR

在构建 RAG系统的索引时,向量维度的设置是一个非常关键的环节。简单来说,维度的选择并非一个可以随意调整的参数,而是由你所选用的 Embedding模型直接决定的。 在我们的项目中,我们的配置如下:

在构建 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维,这个后面我们还会做评测,然后根据实际的检索效果(精度)与系统成本(性能)之间找到一个相对的平衡点。 如果召回效果比较好,但是性能比较差,则可以考虑降低维度。 如果性能比较好,但是召回效果很差,则可以考虑提升维度。

版本提示

模型、框架与接口会持续变化。涉及版本号、参数与生产配置时,请在实践前对照对应官方文档。

LLMentor系统化学习大模型应用工程

内容来自个人课程知识库备份,并经过结构化整理。技术版本持续演进,生产使用前请结合官方文档验证。