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类型传入:
- 安装pgvector包:
pip install pgvector
- 修改代码注册适配器:
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
相关产品推荐
相关产品推荐

