llama_index [Bug]:

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

Bug描述

在现有的Weaviate向量存储中使用矢量存储索引时出现错误。
https://docs.llamaindex.ai/en/stable/examples/vector_stores/existing_data/weaviate_existing_data/
错误:

ValueError: Node content not found in metadata dict.

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
Cell In[28], [line 13](vscode-notebook-cell:?execution_count=28&line=13)
      [1](vscode-notebook-cell:?execution_count=28&line=1) # set Logging to DEBUG for more detailed outputs
      [2](vscode-notebook-cell:?execution_count=28&line=2) # question = "Effect of etafenone on total and regional myocardial blood flow."
      [3](vscode-notebook-cell:?execution_count=28&line=3) 
   (...)
      [9](vscode-notebook-cell:?execution_count=28&line=9) # pprint_source_node(nodes[0])
     [10](vscode-notebook-cell:?execution_count=28&line=10) # nodes[0].node.metadata
     [12](vscode-notebook-cell:?execution_count=28&line=12) query_engine = loaded_index.as_query_engine(similarity_top_k=2)
...
    [133](https://file+.vscode-resource.vscode-cdn.net/Users/learn_AL_ML/~/Documents/Workspace/github/general/.conda/lib/python3.10/site-packages/llama_index/vector_stores/weaviate/utils.py:133)         embedding=embedding,
    [134](https://file+.vscode-resource.vscode-cdn.net/Users/learn_AL_ML/~/Documents/Workspace/github/general/.conda/lib/python3.10/site-packages/llama_index/vector_stores/weaviate/utils.py:134)     )
    [135](https://file+.vscode-resource.vscode-cdn.net/Users/learn_AL_ML/~/Documents/Workspace/github/general/.conda/lib/python3.10/site-packages/llama_index/vector_stores/weaviate/utils.py:135) return node

KeyError: 'id'

我的代码

index_name = "MedicalArticle"
vector_store = WeaviateVectorStore(weaviate_client=client, index_name=index_name, text_key="abstract")
loaded_index = VectorStoreIndex.from_vector_store(vector_store)

query_engine = loaded_index.as_query_engine(similarity_top_k=2)
response = query_engine.query("Effect of etafenone on total and regional myocardial blood flow?")

print(response)

版本

0.10.56

重现步骤

尝试这个链接
https://docs.llamaindex.ai/en/stable/examples/vector_stores/existing_data/weaviate_existing_data/

相关日志/回溯

  • 无响应*
eyh26e7m

eyh26e7m1#

要解决在使用Vector Store Index查询现有Weaviate向量存储时出现的KeyError: 'id'问题,请确保被查询的每个节点都正确设置了'id'属性。这种错误通常发生在响应中缺少预期的'id'键或正在处理的数据结构中。
以下是确保node_id正确设置的解决方案:

  1. 确保节点具有node_id属性:
    当向Weaviate向量存储添加节点时,请确保每个BaseNode示例都有一个有效的node_id属性。
from llama_index.legacy.schema import BaseNode

# Example node creation
node1 = BaseNode(node_id="123", embedding=[0.1, 0.2, 0.3], text="Example text 1")
node2 = BaseNode(node_id="456", embedding=[0.4, 0.5, 0.6], text="Example text 2")

# Add nodes to the Weaviate vector store
weaviate_vector_store = WeaviateVectorStore(weaviate_client=client, index_name="MedicalArticle", text_key="abstract")
weaviate_vector_store.add([node1, node2])
  1. 查询向量存储:
    确保在查询中正确指定node_ids
query_engine = loaded_index.as_query_engine(similarity_top_k=2)
response = query_engine.query("Effect of etafenone on total and regional myocardial blood flow?")
print(response)
  1. 加载索引:
    当从向量存储加载索引时,请确保生成并正确存储嵌入。
def retrieve_index_from_vector_store(index_name: str) -> VectorStoreIndex:
    client = weaviate.Client("http://localhost:8080")
    model_name = "sentence-transformers/all-MiniLM-L6-v2"
    embed_model = LangchainEmbedding(HuggingFaceEmbeddings(model_name=model_name))
    service_context = ServiceContext.from_defaults(embed_model=embed_model)
    vector_store = WeaviateVectorStore(weaviate_client=client, index_name=index_name, text_key="abstract")
    storage_context = StorageContext.from_defaults(vector_store=vector_store)
    documents = WeaviateReader("http://localhost:8080").load_data(
        class_name=index_name + "_Node",
        properties=["id", "text", "embedding"]
    )
    return VectorStoreIndex.from_documents(documents=documents, storage_context=storage_context, service_context=service_context)

loaded_index = retrieve_index_from_vector_store("MedicalArticle")

通过确保在节点添加和查询中正确设置和使用node_id,你应该能够解决KeyError: 'id'问题。

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

相关问题