记录一下那天晚上的排查过程。Vespa 8 的 schema 里把字段声明成 tensor(x[768]),灌数据时报 dimension mismatch,实际向量是 1024 维,feed 失败但应用状态仍然显示正常。

刚开始盯着「文档里混用了不同模型的向量」,折腾了半个多小时,排掉了。

排查方向其实有限,先把可能性排一排。schema 里维度写死,与模型输出不一致。也可能是feed 时字段名与 schema 不一致,落到了另一个字段。

不容易想到的是,改完 schema 没有重新部署应用包。

先打印一条向量的实际维度

python -c "import json;d=json.load(open('doc.json'));print(len(d['fields']['embedding']))"

然后改 schema 维度后重新部署

vespa deploy --wait 300 app_pkg/

接着重新 feed 一条样本验证

vespa feed doc.json

等前面都确认过,再按向量查询确认能召回

vespa query 'yql=select * from doc where true'

报错是间歇性的,我蹲守了半小时才抓到一次完整现场。

别只看报错消失,验证要多做一步。feed 返回成功计数为一,查询能按向量召回该文档,日志里没有维度不匹配。

提醒一点。维度错误要到 feed 阶段才暴露,schema 里最好用一个变量集中声明维度。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189