使用Langchain与MongoDB向量搜索返回空数组问题求助
问题排查与解决方法
1. 变量名不一致(最可能的直接原因)
你的代码中创建向量存储实例的变量是vector_search,但调用搜索方法时用的是vector_search1,这会导致调用未定义的变量(若未提前定义vector_search1甚至会触发报错)。修正代码:
# 原代码 results = vector_search1.similarity_search(query) # 修正后 results = vector_search.similarity_search(query)
2. 检查向量索引配置
- 登录MongoDB Atlas控制台,确认目标集合已创建名为
vector_index的向量索引。 - 验证索引的向量维度与OpenAI Embeddings的维度一致(OpenAI ada-002模型的向量维度为1536)。
- 索引配置需包含
embedding字段(Langchain默认存储向量的字段名),且索引类型为vectorSearch。
3. 文本分割器有效性
确认text_splitter1已正确初始化,示例正确初始化方式:
from langchain.text_splitter import RecursiveCharacterTextSplitter text_splitter1 = RecursiveCharacterTextSplitter( chunk_size=1000, chunk_overlap=200, length_function=len, )
若分割后的docs数组存在空文档或过短文档,会导致无效向量存入,建议打印docs检查内容。
4. 验证Embeddings服务可用性
检查OpenAI API密钥是否有效,可单独测试Embeddings生成:
embedding = OpenAIEmbeddings(disallowed_special=()) test_vector = embedding.embed_query("test query") print(len(test_vector)) # 应输出1536
若API调用失败或返回维度不符,需排查密钥、网络或模型配置。
5. 确认集合数据结构
直接在MongoDB Atlas中查看集合文档,确认每个文档包含embedding字段(存储向量数组)和page_content字段(存储分割后的文本)。
内容的提问来源于stack exchange,提问作者Mykhailo Yeromin
相关产品推荐
相关产品推荐

