代码改变世界

切换 Embedding 模型时,千万别忽略历史向量维度

2026-08-19 07:08  AlfredZhao  阅读(69)  评论(0)    收藏  举报

笔者最近在测试知识库系统时,因原 Embedding 模型不可用而切换了新模型。看似只是更换模型,却因为历史向量仍在数据库中,导致文档重新解析后依然报错。

01 | 问题关键:向量维度不一致

不同 Embedding 模型输出的向量维度可能不同。例如,笔者测试的旧模型输出过 2560 维,新模型为 1536 维;而最终排查发现,历史记忆表中还存有 2048 维向量。

当新旧向量混在同一套问答链路中,就可能触发维度不匹配错误。

02 | 重新解析文档为何无效

笔者多次重新解析文档仍报错。原因是重新解析仅影响文本向量表 kbot_biz_txt_embedding,但旧的记忆向量还保存在 kbot_md_memory_entry 中。

可先检查两张表的向量维度:

SELECT
 VECTOR_DIMENSION_COUNT(memory_vector) AS dimensions,
 VECTOR_DIMENSION_FORMAT(memory_vector) AS element_format,
 COUNT(*) AS row_count
FROM kbot_md_memory_entry
WHERE memory_vector IS NOT NULL
GROUP BY
 VECTOR_DIMENSION_COUNT(memory_vector),
 VECTOR_DIMENSION_FORMAT(memory_vector)
ORDER BY dimensions, element_format;
SELECT
 VECTOR_DIMENSION_COUNT(embedding) AS dimensions,
 VECTOR_DIMENSION_FORMAT(embedding) AS element_format,
 COUNT(*) AS row_count
FROM kbot_biz_txt_embedding
WHERE kb_id = 41
GROUP BY
 VECTOR_DIMENSION_COUNT(embedding),
 VECTOR_DIMENSION_FORMAT(embedding)
ORDER BY dimensions, element_format;

03 | 清理旧记忆前务必确认

还可以直接查看两张表:

select * from kbot_biz_txt_embedding;
select * from kbot_md_memory_entry;

确认 kbot_md_memory_entry 存在过时维度的历史向量后,才谨慎清理:

truncate table kbot_md_memory_entry;

笔者清空该表中的旧信息后,问答恢复正常,不再报错。

切换 Embedding 模型时,除了重新解析文件,更要检查历史记忆向量是否仍使用旧维度。只有相关向量维度统一,知识库问答才能稳定运行。

关注我,和AI一起成长~