You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 12:05:11