Search vector contains invalid values

TL;DR — 你的 SearchVector 参数形状不对。存储的嵌入住在一个 L 属性里,但查询参数是一个由 {"N": …} 值组成的裸数组。去掉 L 包裹,并确保每个元素都是纯数字。

含义

ValidationException: Search vector contains invalid values. All values in the search vector must be a 32-bit floating-point number attribute

这是我们在 us-east-1 捕获的服务端原样响应:把查询向量包在了 DynamoDB 的 L 类型里。SearchVectors 在触碰索引之前就拒绝了这个请求。

为什么会发生

线上格式是不对称的,几乎每个人都会撞上一次。存储在项上的嵌入是一个 List 属性:

{"embedding": {"L": [{"N": "0.0132"}, {"N": "-0.0475"}]}}

SearchVector 请求参数不是。它是一个由数字值组成的裸 JSON 数组:

[{"N": "0.0132"}, {"N": "-0.0475"}]

把存储的形状当作查询的形状发送,你就会得到这个错误。当数组里的某个元素是字符串、布尔值或嵌套结构而不是 N 值时,它同样会触发。

如何修复

直接传数组。用 CLI 时,file://query-vector.json 的载荷就是那个裸数组;在各 SDK 里,把 SearchVector 构造成一个 AttributeValue 数字的列表,而不是一个 L 值。如果你复用了生成存储属性的那个序列化辅助函数,在查询前先解开它的输出。

维度数是单独检查的,所以一个解开了包裹但长度不对的向量会以另一条消息失败:Invalid size for parameter

相关内容

查询侧端到端如何工作,附带实测的成本模型:见 DynamoDB 向量搜索指南

无需控制台即可使用 DynamoDB

一款快速的 DynamoDB 桌面客户端,可运行 DynamoDB 无法执行的真正 SQL——JOINs、GROUP BY、聚合——并支持可视化编辑和运行在你自己的 Bedrock 密钥上的 AI agent。

30 天免费试用,无需信用卡 — 之后为无时间限制的免费版。