如何将Elixir Nx.Tensor转为JSON以适配Qdrant向量搜索?
解决Nx.Tensor无法编码为JSON用于Qdrant向量搜索的问题
方法1:手动将Nx.Tensor转换为Elixir列表
Qdrant的search_points函数期望接收普通数值数组作为查询向量,而Nx.Tensor本身无法直接被Jason编码为JSON。你可以使用Nx.to_list/1将张量转换为Elixir列表,再传入函数:
# 将Nx.Tensor类型的embedding转为列表 query_vector = Nx.to_list(embedding) # 调用Qdrant搜索 Qdrant.search_points( client, collection_name: "your_collection", query: query_vector, limit: 10 )
如果你的嵌入张量是高维结构,先通过Nx.flatten/1将其转为一维向量再转换:
query_vector = embedding |> Nx.flatten() |> Nx.to_list()
方法2:全局扩展Jason.Encoder协议
如果需要在整个项目中自动处理Nx.Tensor的JSON编码,你可以实现Jason.Encoder协议,这样无需每次手动转换:
defimpl Jason.Encoder, for: Nx.Tensor do def encode(tensor, opts) do tensor |> Nx.to_list() |> Jason.Encoder.encode(opts) end end
实现后,所有需要将Nx.Tensor编码为JSON的场景(包括Qdrant的API调用)都会自动完成转换,直接传入Nx.Tensor即可:
Qdrant.search_points( client, collection_name: "your_collection", query: embedding, limit: 10 )
内容的提问来源于stack exchange,提问作者sooon
相关产品推荐
相关产品推荐

