llama_index [问题]:更新现有的pinecone索引中的元数据和文本

vsikbqxv  于 2个月前  发布在  其他
关注(0)|答案(1)|浏览(29)

问题验证

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

问题

我使用了分层解析器进行分块,并将pinecone作为向量存储,mongodb作为文档存储。现在我想更新一些块的元数据和文本。如何做到这一点,以便在pinecone索引中的两个节点以及mongodb文档存储中的父节点上都得到反映。

uubf1zoe

uubf1zoe1#

要确保对某些数据块的元数据和文本的更新反映在Pinecone索引中的节点以及MongoDB docstore中的父节点中,你需要执行以下步骤:

  1. 使用upsert方法更新Pinecone索引中的节点
  2. 使用相应的元数据和文本更改更新MongoDB docstore中的父节点
    以下是如何实现这一点的示例:
def update_nodes_in_pinecone_and_mongodb(pinecone_vector_store, mongodb_docstore, nodes):
    # Update nodes in Pinecone index
    ids = []
    entries = []
    for node in nodes:
        node_id = node.node_id

        metadata = node_to_metadata_dict(
            node,
            remove_text=pinecone_vector_store.remove_text_from_metadata,
            flat_metadata=pinecone_vector_store.flat_metadata,
        )

        entry = {
            ID_KEY: node_id,
            VECTOR_KEY: node.get_embedding(),
            METADATA_KEY: metadata,
        }
        if pinecone_vector_store.add_sparse_vector and pinecone_vector_store._tokenizer is not None:
            sparse_vector = generate_sparse_vectors(
                [node.get_content(metadata_mode=MetadataMode.EMBED)],
                pinecone_vector_store._tokenizer,
            )[0]
            entry[SPARSE_VECTOR_KEY] = sparse_vector

        ids.append(node_id)
        entries.append(entry)
    
    pinecone_vector_store._pinecone_index.upsert(
        entries,
        namespace=pinecone_vector_store.namespace,
        batch_size=pinecone_vector_store.batch_size,
        **pinecone_vector_store.insert_kwargs,
    )

    # Update parent nodes in MongoDB docstore
    for node in nodes:
        node_id = node.node_id
        metadata = node_to_metadata_dict(
            node,
            remove_text=pinecone_vector_store.remove_text_from_metadata,
            flat_metadata=pinecone_vector_store.flat_metadata,
        )
        mongodb_docstore.update_document(
            node_id,
            {"metadata": metadata, "text": node.get_content()}
        )

    return ids

在这个例子中,pinecone_vector_storePineconeVectorStore的一个示例,mongodb_docstoreMongoDocumentStore的一个示例,其中存储了父节点,而nodes是要更新的节点列表。函数update_nodes_in_pinecone_and_mongodb同时更新Pinecone索引和MongoDB docstore 1(https://github.com/run-llama/llama_index/blob/main/llama-index-integrations/vector_stores/llama-index-vector-stores-pinecone/llama_index/vector_stores/pinecone/base.py)2(https://github.com/run-llama/llama_index/blob/main/llama-index-legacy/llama_index/legacy/vector_stores/pinecone.py)3(https://github.com/run-llama/llama_index/blob/main/llama-index-legacy/tests/storage/docstore/test_mongo_docstore.py)4(https://github.com/run-llama/llama_index/blob/main/llama-index-integrations/storage/docstore/llama-index-storage-docstore-mongodb/llama_index/storage/docstore/mongodb/base.py)中的节点。

  • 要继续与Dosu交谈,请提及@dosu。*

相关问题