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

Postgres pgvector搜索嵌入向量报错:无法适配ndarray类型

解决psycopg无法适配ndarray到pgvector的问题

错误原因:SentenceTransformer.encode()返回的是numpy ndarray类型,psycopg默认不支持将该类型直接转换为PostgreSQL的vector类型。

解决方案

方案一:将ndarray转为Python列表

直接把向量数组转换成列表传入SQL,pgvector会自动识别为vector类型:

conn = psycopg.connect(autocommit=True)
model = SentenceTransformer('multi-qa-MiniLM-L6-cos-v1')
embedding = model.encode(query)
# 将ndarray转为列表
results = conn.execute("SELECT * FROM search ORDER BY embedding <-> %s LIMIT 5", (embedding.tolist(),))
for result in results:
    print(result)

注:如果你的embedding列已经定义为vector(384),无需再用::vector(384)做类型转换。

方案二:使用pgvector官方适配器

通过pgvector提供的psycopg适配器,直接支持ndarray类型传入:

  1. 安装pgvector包:
pip install pgvector
  1. 修改代码注册适配器:
import psycopg
from pgvector.psycopg import register_vector
from sentence_transformers import SentenceTransformer

conn = psycopg.connect(autocommit=True)
register_vector(conn)  # 注册适配器,让psycopg能识别ndarray

model = SentenceTransformer('multi-qa-MiniLM-L6-cos-v1')
embedding = model.encode(query)
# 直接传入ndarray即可
results = conn.execute("SELECT * FROM search ORDER BY embedding <-> %s LIMIT 5", (embedding,))
for result in results:
    print(result)

内容的提问来源于stack exchange,提问作者Vincent Claes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 22:12:36