You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 11:49:57