DSPy结合ChromaDB使用文本嵌入检索段落时维度不匹配报错问题
原因分析
这个报错的核心是嵌入向量维度不匹配:
- 存入ChromaDB时,
get_embedding函数生成的是384维向量 - DSPy的
ChromadbRM检索时,默认使用的嵌入模型生成的是768维向量 - 若ChromaDB集合创建时用的是768维嵌入,后续存入384维嵌入会触发维度校验报错;移除嵌入后,检索时ChromaDB会自动调用
ChromadbRM的嵌入模型生成对应维度的向量,因此能正常检索。
解决办法
- 统一嵌入模型:确保存入和检索阶段使用同一个嵌入模型,固定向量维度:
- 修改
get_embedding函数,使其使用和ChromadbRM一致的模型(比如384维的all-MiniLM-L6-v2或768维的all-mpnet-base-v2) - 初始化
ChromadbRM时显式指定嵌入模型,示例代码:from langchain.embeddings import HuggingFaceEmbeddings # 指定384维的嵌入模型 embedding_model = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2") retriever_model = ChromadbRM("contracts_collection", 'db/', k=2, embedding=embedding_model)
- 修改
- 重建ChromaDB集合:如果旧集合是用768维模型创建的,直接删除旧集合,使用统一的嵌入模型重新创建并存入文本块数据。
内容的提问来源于stack exchange,提问作者Anandu Aji
相关产品推荐
相关产品推荐

