llama_index 无法在包含分层节点解析器和自动合并检索器的自动合并RAG中使用mongodb向量搜索,

4c8rllxm  于 3个月前  发布在  Go
关注(0)|答案(5)|浏览(55)

问题验证

  • 我已经在文档和discord上寻找答案。

问题

这是我的代码

vector_store = MongoDBAtlasVectorSearch(client, db_name=db_name, collection_name=collection_name, index_name="autoprod_index", embeddings = embed_model)

for url in urls:
    company_name = extract_company_name(url)
    #AHL_loader = AsyncHtmlLoader(url)
    #AHL_docs = AHL_loader.load()
    url = os.path.join('/content/html_files',url)
    loader = UnstructuredHTMLLoader(url)
    data = loader.load()
    #AHL_docs_HTML2TEXT = htmlTotext.transform_documents(AHL_docs)
    doc = Document(text = data[0].page_content)
    #doc = Document(text=AHL_docs_HTML2TEXT[0].page_content)
    parser = HierarchicalNodeParser.from_defaults(chunk_sizes=[2048, 512, 128])
    nodes = parser.get_nodes_from_documents([doc])
    for node in nodes:
        node_embedding = embed_model.get_text_embedding(
            node.get_content(metadata_mode=MetadataMode.ALL))
        node.embedding = node_embedding
        node.metadata['company_name'] = company_name
        node.metadata['url'] = url

    vector_store.add(nodes)
index = VectorStoreIndex.from_vector_store(vector_store)#, storage_context = storage_context)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
postproc = None
reranker = SentenceTransformerRerank(top_n=3)
base_retriever = index.as_retriever(similarity_top_k = 3, filters = MetadataFilters(
        filters=[
            ExactMatchFilter(key="metadata.company_name", value="grail"),
            ExactMatchFilter(key="metadata.url", value="/content/html_files/https.grail.com.html")
        ]))
retriever = AutoMergingRetriever(base_retriever, storage_context=storage_context, verbose=True)
#response_synthesizer = get_response_synthesizer(response_mode='tree_summarize')
node_postprocessors = [postproc, reranker]
node_postprocessors = [processor for processor in node_postprocessors if processor is not None]
query_engine = RetrieverQueryEngine(retriever, node_postprocessors=node_postprocessors)

summary_whole = query_engine.query("Who is the CEO of grail? Answer if you are 100 % sure.")
print(summary_whole)

它给出了这个错误
ValueError: doc_id 7109edf3-cbda-4c55-9c34-a5a18c14aea1 not found.
其中doc id在实际的mongodb集合中存在

hvvq6cgz

hvvq6cgz1#

嘿,GildeshAbhay!😄很高兴再次在这里与你相遇。我现在正在研究你的问题,并将在不久后给你一些见解!

yc0p9oo0

yc0p9oo02#

@logan-markewich can you help please
b4qexyjb

b4qexyjb3#

我也有同样的问题。

isr3a4wc

isr3a4wc4#

你遇到的问题,即抛出 ValueError: doc_id not found 的原因,可能是由于在你的 MongoDBAtlasVectorSearch 类中处理文档 ID( doc_id )的方式存在不一致性。具体来说,当添加或删除文档时,这些操作之间的 doc_id 必须完全匹配。确保用于将文档添加到 MongoDB 集合的 doc_id 与尝试删除或查询这些文档时使用的 doc_id 相匹配。这需要仔细审查你的代码中如何分配和管理 doc_id 值,特别是与 MongoDBAtlasVectorSearch 类的操作有关。
如果 doc_id 得到正确管理,问题仍然存在,那么检查特定的 MongoDB 查询可能是有益的,并确保它们与你的 MongoDB 集合中的预期文档结构和 ID 管理相一致。这可能包括调试 MongoDBAtlasVectorSearch 类的方法,以验证所有相关查询中使用的正确 doc_id 值。
鉴于问题的复杂性和可能需要对你的 MongoDBAtlasVectorSearch 类及其与 MongoDB 的交互进行更详细的审查,咨询那些直接参与你正在使用的具体工具或库的开发或维护的人也可能是有帮助的。

详细信息

来源

这个响应旨在提供帮助并节省时间。它不是 精确的解决方案,而是你自己研究的一个起点。
请帮助我变得更有用!如果你觉得这个回答有帮助,请留下一个赞👍;如果无关紧要,请留下一个踩👎。

  • 要继续对话,请提及 @dosu。*
daolsyd0

daolsyd05#

我已经解决了这个问题,具体如下:

使用MongoDB:

  • 创建了一个名为MongoDBAtlasVectorSearch的向量存储。
  • 创建了一个名为MongoDocumentStore的文档存储。
    **注意:**当使用带有搜索索引Atlas的MongoDB时,您需要手动使用doc向量创建索引向量。对于Cluster M10,您可以简单地编写这个过程。

之后:

index = VectorStoreIndex.from_vector_store(vector_store=vector_store)

base_retriever = index.as_retriever(similarity_top_k=...)

storage_context = StorageContext.from_defaults(index_store=index, docstore=docstore)

retriever = AutoMergingRetriever(
    vector_retriever=base_retriever,
    storage_context=storage_context
)

query_engine = RetrieverQueryEngine.from_args(
    retriever=retriever,
    node_postprocessors=[rerank_model],
    llm=...
)

相关问题