事情本身不复杂,线索都在日志里。ragas 0.2.6,answer_relevancy 用自建 bge-m3 的 1024 维 embedding 接口,报 expected 1536 got 1024,默认配置在偷偷用 OpenAI。
第一反应是「批量接口返回顺序与输入不一致」,验证下来不成立。
原因不止一个,得分开看。自定义 embeddings 没注入,走了默认 OpenAI 后端。也可能是接口返回的向量被服务端截断到 1024。
不容易想到的是,缓存里存着上一次 1536 维的结果。
动手时先确认本地向量的实际维度
python -c "import numpy as np;v=np.load('emb.npy');print(v.shape)"
显式注入自定义 embeddings
python -c "from ragas.embeddings import LangchainEmbeddingsWrapper;print('wrapped')"
然后清掉评测缓存再跑
rm -rf .ragas_cache; python eval_rag.py --config local.yaml
末了核对评测侧模型配置
grep -r 'embedding' eval_config.yaml
这台环境是别人交接的,不少默认值被动过,只能一项项核。
同事提醒我看一下最近一次发布,时间点确实对得上。
怎么算真的好了,看的是同一批现象。评测跑完没有维度报错,answer_relevancy 分数在 0.7 以上且与人工抽检方向一致。
这里还有个坑。评测框架的默认模型和线上模型经常不是一套,换 embedding 后评测侧要一起改。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
