向量维度
文档向量、查询向量和数据库向量字段,必须使用同一个 Embedding 模型并保持相同维度
- 维度越高通常成本越大,但检索效果不一定单纯越高越好
- 文档向量和查询向量、数据库向量字段维度
- 文档向量:把知识库中的文档内容转换成向量
- 查询向量:用户提问时,把用户的问题转换成向量
- 文档向量和查询向量,在同一个向量索引中的数据必须保持维度一致
- 不能出现混合向量维度,例如文档向量512,查询向量768,这是不行的,会导致向量检索会有问题,维度不同,就无法一一对应
- 更换Embedding模型或者修改输出维度后,通常需要把原来的文档重新生成向量并重建索引
固定长度数组
- 长度固定,不管输入里的是一个字还是多个字,生成的向量长度也就是维度,是向量模型决定的,都是生成一样的长度
- 长度由 Embedding 向量模型决定,不由输入文本长度决定
“猫”
→ [0.12, -0.36, 0.08, ..., 0.51] // 固定 768 个数字
“猫是一种常见的家庭宠物”
→ [0.21, -0.15, 0.32, ..., 0.43] // 仍然是 768 个数字
常见的向量维度
- 常见的向量维度:384、512、768、1024、1536、3072、4096
- 一般企业知识库,通常优先考虑中等维度:
- 512 / 768 / 1024 / 1536
- 检索效果与存储成本比较均衡
- 高维向量
- 2560、3072、4096
- 可以表达更丰富的语义信息
- 存储空间更大
- 本地Demo可以使用512来调试测试
- 大部分的通用 RAG 任务, 768 维到 1536 维是目前最常⻅且性能与成本平衡得最好的选择。如果你的数据非常专业、上下文极度复杂,可以考虑使用 3072 维的超大模型
| 向量维度 | 常见定位 | 代表模型 |
|---|---|---|
| 384 | 轻量级、速度快、占用小 | all-MiniLM-L6-v2 输出384维。(Hugging Face) |
| 512 | 中文轻量级模型 | bge-small-zh-v1.5 输出512维。(Hugging Face) |
| 768 | 最常见的中等维度之一 | bge-base-zh-v1.5 输出768维;Gemini也推荐使用768维。(Hugging Face) |
| 1024 | 较大的开源Embedding模型 | bge-large-zh-v1.5 输出1024维;Qwen3-Embedding-0.6B也是1024维。(Hugging Face) |
| 1536 | 云端Embedding模型常见维度 | OpenAI text-embedding-3-small默认1536维;Gemini也推荐1536维。(OpenAI) |
| 2560 | 新一代较大Embedding模型 | Qwen3-Embedding-4B输出2560维。(Hugging Face) |
| 3072 | 高维、高质量模型常见 | OpenAI text-embedding-3-large最高3072维;Gemini默认3072维。(OpenAI) |
| 4096 | 大型Embedding模型 | Qwen3-Embedding-8B最高4096维。(Hugging Face) |
探测向量维度
- 探测向量维度的目的,是确认 Embedding 模型实际输出多少维,避免模型、配置和向量数据库不一致
- 探测就是在系统启动、初始化知识库或创建向量表之前,先调用一次 Embedding 模型来获取向量维度
# 探测向量
vector = embedding_model.embed_query("测试向量维度")
# 向量维度
dimension = len(vector)
print(dimension)
- 为什么不推荐直接指定维度
- 模型和维度配置可能不一致。例如更换成 1024 维模型,却忘记修改配置
- 通过启动时自动探测维度,缺点是系统启动时会多调用一次模型;如果使用收费的远程 Embedding API,会产生一次很小的调用成本
向量维度越多越好吗
- 向量维度越多,不一定越好;高维只代表有更大的信息表示空间,不代表模型一定能有效利用这些维度
- 维度越多,通常语义表达能力越强
- 在复杂语义任务上的 召回率更高
- 注意这里用召回率,而不是准确率
- 召回率:检索出来文档结果
- 维度越高,成本越高
- 存储成本: 存储 3072 维的向量,占用的空间是存储 768 维向量的 4 倍。
- 计算成本:维度越高,计算时间越⻓
注意问题
- Chroma 会在第一次写入向量时自动确认向量维度;pgvector 通常需要在建表时通过
VECTOR(n)提前声明。更换 Embedding 模型后,无论维度是否变化,都需要重新文档向量,只有新模型维度发生变化时,pgvector 才需要调整向量字段- 模型变、维度不变:重新生成向量,字段维度不用改。
- 模型变、维度也变:重新生成向量,同时新建向量字段、表或 Collection。