这个坑值得记一笔。把数据库里的一批商品标题直接送去算向量,接口返回 400,提示 input 中不能包含空字符串,可那一批里明明只有几十条是空的。
刚开始盯着「单条超长文本被截断成空串」,折腾了半个多小时,排掉了。
这类报错背后常见的原因有几处,逐个排除就行。标题字段存在空串或只有空格;清洗时把表情符号全删完,剩下空内容;从表格读出来的字段带制表符,strip 没处理干净。
过滤空白并在日志里记下原始 id
items = [x for x in items if x['title'].strip()]
随后对空值做占位替换而不是直接丢弃
text = x['title'].strip() or '未命名'
接着分批调用并限制单批 token 总量
python embed_batch.py --batch 64 --max-tokens 6000
末了把空值比例做成指标,长期观察数据质量
print({'empty_ratio': empty / total})
怎么算真的好了,看的是同一批现象。批量向量全部生成成功,条数与清洗后的样本数一致,没有 400 报错,回填进向量库也能一一对应。
容易忽略的是,接口按数组整体校验,只要有一条为空整批都会失败,所以清洗要在分批之前做,别指望服务端自动跳过无效项。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。