基于Milvus与LlamaIndex构建RAG助手报错:向量维度不匹配
Milvus向量维度不匹配导致LlamaIndex RAG查询失败解决方案
核心报错原因
报错信息明确显示 向量维度不匹配(vector dimension mismatch err),同时原代码存在未完成的语法错误,导致无法正确加载Milvus集合执行查询操作。
问题拆解与修复步骤
1. 修复代码语法错误
原代码中index = VectorStoreIndex.语句未完成,正确逻辑是通过StorageContext关联Milvus向量存储,再加载已有集合的索引:
from llama_index.core import StorageContext, VectorStoreIndex from llama_index.vector_stores.milvus import MilvusVectorStore import openai from dotenv import load_dotenv import os load_dotenv() openai.api_key = os.environ["OPENAI_API_KEY"] def chatbot(input_text): # 初始化Milvus向量存储连接 vector_store = MilvusVectorStore( uri="http://localhost:19530", collection_name = "test" ) # 创建存储上下文关联向量存储 storage_context = StorageContext.from_defaults(vector_store=vector_store) # 从已有Milvus集合加载索引 index = VectorStoreIndex.from_vector_store(vector_store, storage_context=storage_context) # 创建查询引擎并执行查询 query_engine = index.as_query_engine() response = query_engine.query(input_text) return response input_text = input('输入查询内容:') print(chatbot(input_text))
2. 解决向量维度不匹配问题
- 先确认Milvus集合的向量字段维度:对照你的集合截图,查看向量字段的维度数值。
- LlamaIndex默认使用OpenAI的
text-embedding-ada-002模型,生成的向量维度为1536。如果Milvus集合维度与此不符,二选一调整:- 重新创建Milvus集合,将向量维度设置为1536;
- 在LlamaIndex中指定与Milvus集合维度匹配的嵌入模型,示例代码如下(假设集合维度为384):
from llama_index.embeddings.openai import OpenAIEmbedding # 指定匹配维度的嵌入模型 embed_model = OpenAIEmbedding(model="text-embedding-3-small", embed_batch_size=10) # 创建查询引擎时传入自定义嵌入模型 query_engine = index.as_query_engine(embed_model=embed_model)
3. 额外检查项
- 确认Milvus服务正常运行,
http://localhost:19530可正常访问; - 确认Milvus集合
test已成功插入向量数据,不存在空集合情况; - 验证OpenAI API密钥有效,可正常调用嵌入模型接口。
内容的提问来源于stack exchange,提问作者Vaibhav Prakash
相关产品推荐
相关产品推荐

