Weaviate混合查询报TypeError: isinstance()参数类型错误求助
问题排查与解决思路
1. 核心报错分析
TypeError: isinstance() arg 2 must be a type or tuple of types 本质是代码调用isinstance()时,第二个参数不是合法的类型/类型元组。结合Weaviate混合查询场景,问题大概率出在查询参数格式错误或客户端与服务端版本不兼容上。
2. 针对性排查步骤
(1)检查测试向量的格式
确保测试向量是Python原生列表/数组类型,而非字符串、自定义对象等非序列类型:
# 正确格式:768位数值组成的列表 test_vector = [0.1 for _ in range(768)] # 错误示例:序列化字符串或非序列类型会触发类型检查报错 test_vector = "[0.1, 0.2, ...]"
Hybrid查询的vector参数仅接收原生数值序列,非标准格式会导致客户端内部类型校验失败。
(2)核对客户端与服务端版本一致性
版本不匹配是隐性高发问题,不同版本的API参数格式存在差异:
# 查看服务端版本 curl http://localhost:8080/v1/meta # 查看客户端版本 pip show weaviate-client
若版本差超过1个大版本,建议将客户端升级/降级至与服务端一致的版本。
(3)检查混合查询的API语法
Weaviate的Hybrid查询语法在不同版本中有变更,确保代码符合当前版本要求:
from weaviate import Client client = Client("http://localhost:8080") test_vector = [0.1 for _ in range(768)] # 标准Hybrid查询写法(适配新版客户端) response = client.query.get( "AutomotiveFinance", ["title", "content"] ).with_hybrid( query="", # 调试时可留空文本查询部分 vector=test_vector ).do()
若使用旧版客户端(v3.x及更早),需用with_near_vector结合with_bm25模拟混合查询,而非直接调用with_hybrid。
(4)验证嵌入代码的向量输出类型
确保嵌入模型生成的向量为标准Python列表,避免返回NumPy数组或自定义对象:
def generate_embedding(text): embedding = model.encode(text) return embedding.tolist() # 转为列表,避免客户端无法解析NumPy类型
部分旧版Weaviate客户端无法直接处理NumPy数组,会触发内部类型检查错误。
3. 快速验证方法
- 简化查询代码,仅保留核心Hybrid查询+测试向量,排查是否由多余参数导致报错。
- 用Weaviate控制台(
http://localhost:8080/console)执行相同查询,验证服务端是否正常响应:
{ Get { AutomotiveFinance( hybrid: { query: "", vector: [0.1, 0.1, ...] # 填入完整768位测试向量 } ) { title content } } }
若控制台能正常返回结果,说明问题出在客户端代码的参数传递或版本兼容性上。
内容的提问来源于stack exchange,提问作者Inkyu Kim
相关产品推荐
相关产品推荐

