Invalid size for parameter embedding, Expected: N, Actual: M
TL;DR — 你写入的向量与向量索引期望的维度数不一致。索引在创建时就固定了它的 Dimensions,且无法更改;要么按索引的维度数重新生成嵌入,要么新建一个索引。
含义
ValidationException: One or more parameter values were invalid. Invalid size for parameter embedding, Expected: 1024, Actual: 512 IndexName: TicketEmbeddings这是我们在 us-east-1 捕获的服务端原样响应:向一张向量索引以 Dimensions: 1024 创建的表写入一个 512 维的嵌入。写入被直接拒绝;表和索引里都不会落下任何东西。
消息给出了三样东西:向量属性(embedding)、索引期望的维度数,以及你实际发送的维度数。末尾的 IndexName 告诉你是这张表的哪个向量索引(最多 5 个)抛出了它。
为什么会发生
- 你换了嵌入模型。一个输出 512 维的模型替换了原来输出 1,024 维的模型。索引的
Dimensions在创建时就固定了,于是之后的每次新写入都会失败。 - 某个截断或填充步骤消失了。把 Matryoshka 式嵌入切到目标大小的流水线,一旦漏掉这一步切片,就会这样失败。
- 两个索引,一个属性名。一次满足某个索引维度数的写入,仍然可能在另一张表上、定义在同名属性上的另一个索引处失败。
如何修复
按索引的维度数重新生成嵌入,或者删除索引、按模型的维度数新建一个。不存在原地修改:Dimensions 和 DistanceFunction 都是不可变的,所以一次模型迁移意味着一个新索引和一次回填。
如果两个模型在迁移期间必须共存,就把它们写到两个不同的属性上,并给每个属性各建一个向量索引——一张表最多可以有 5 个。
相关内容
完整的计费与限制全貌见 DynamoDB 向量搜索指南。这条消息的通用前缀有它自己的页面:"One or more parameter values were invalid"。