Search vector contains invalid values
TL;DR — o seu parâmetro SearchVector tem a forma errada. Embeddings armazenados vivem dentro de um atributo L, mas o parâmetro de consulta é um array puro de valores {"N": …}. Desembrulhe o L e garanta que cada elemento seja um número simples.
O que significa
ValidationException: Search vector contains invalid values. All values in the search vector must be a 32-bit floating-point number attributeEssa é a resposta literal do serviço que capturamos em us-east-1 ao envolver o vetor de consulta no tipo L do DynamoDB. O SearchVectors recusa a requisição antes de tocar no índice.
Por que isso acontece
O formato de transmissão é assimétrico, e quase todo mundo esbarra nisso uma vez. Um embedding armazenado em um item é um atributo List:
{"embedding": {"L": [{"N": "0.0132"}, {"N": "-0.0475"}]}}O parâmetro de requisição SearchVector não é. Ele é um array JSON puro de valores numéricos:
[{"N": "0.0132"}, {"N": "-0.0475"}]Envie a forma armazenada como a forma de consulta e você recebe este erro. Ele também dispara quando um elemento dentro do array é uma string, um booleano ou uma estrutura aninhada em vez de um valor N.
Como corrigir
Passe o array diretamente. Com a CLI, o payload file://query-vector.json é o array puro; nos SDKs, construa SearchVector como uma lista de números AttributeValue, não como um único valor L. Se você reutiliza o helper de marshalling que produziu o atributo armazenado, desembrulhe a saída dele antes de consultar.
A contagem de dimensões é verificada separadamente, então um vetor desembrulhado com o comprimento errado falha com uma mensagem diferente: Invalid size for parameter.
Relacionados
Como o lado da consulta funciona de ponta a ponta, com um modelo de custos medido ao vivo: o guia de pesquisa vetorial do DynamoDB.