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

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. 快速验证方法

  1. 简化查询代码,仅保留核心Hybrid查询+测试向量,排查是否由多余参数导致报错。
  2. 用Weaviate控制台(http://localhost:8080/console)执行相同查询,验证服务端是否正常响应:
{
  Get {
    AutomotiveFinance(
      hybrid: {
        query: "",
        vector: [0.1, 0.1, ...]  # 填入完整768位测试向量
      }
    ) {
      title
      content
    }
  }
}

若控制台能正常返回结果,说明问题出在客户端代码的参数传递或版本兼容性上。

内容的提问来源于stack exchange,提问作者Inkyu Kim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:32:04