问题验证
问题
from weaviate.classes.config import Configure, Property, DataType
import time
import weaviate
import chromadb
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.vector_stores.chroma import ChromaVectorStore
from llama_index.vector_stores.weaviate import WeaviateVectorStore
from llama_index.core.node_parser import SentenceSplitter
from llama_index.core.ingestion import IngestionPipeline
from llama_index.readers.file import PyMuPDFReader
from llama_index.core import Settings
from llama_index.core import StorageContext
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.core.postprocessor import SentenceTransformerRerank
from llama_index.core.retrievers import QueryFusionRetriever
from llama_index.retrievers.bm25 import BM25Retriever
from llama_index.core.query_engine import RetrieverQueryEngine
from llama_index.core.chat_engine import CondenseQuestionChatEngine
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.openai import OpenAIEmbedding
from dotenv import load_dotenv, find_dotenv
# 加载环境变量
_ = load_dotenv(find_dotenv())
import nest_asyncio
nest_asyncio.apply() # 只在Jupyter笔记环境中需要此操作,否则会报错
# 连接到local,需要启动docker
weaviate_client = weaviate.connect_to_local(host="localhost", port=8080, grpc_port=50051, skip_init_checks=True)
# weaviate_client = weaviate.connect_to_local(host="localhost", port=8080, grpc_port=50051)
# 指定全局llm与embedding模型
Settings.llm = OpenAI(temperature=0, model="gpt-4o")
Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-small", dimensions=512)
# Settings.embed_model = HuggingFaceEmbedding(model_name=r"C:\Users\79033\.cache\huggingface\hub\models--BAAI--bge-m3\snapshots\5617a9f61b028005a4858fdac845db406aefb181", )
splitter = SentenceSplitter(chunk_size=512, chunk_overlap=100)
# 加载 pdf 文档
documents = SimpleDirectoryReader("./data1", file_extractor={".pdf": PyMuPDFReader()}).load_data()
# 切分nodes
nodes = splitter.get_nodes_from_documents(documents)
# 创建 Vector Store
# vector_store = ChromaVectorStore(chroma_collection=chroma_collection)
vector_store = WeaviateVectorStore(weaviate_client=weaviate_client, index_name="LlamaIndex1")
# 指定 Vector Store 用于 index
storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = VectorStoreIndex(
nodes, storage_context=storage_context
)
print(index.index_struct)
query_engine = index.as_query_engine()
while True:
question = input("User:")
if question.strip() == "":
break
start_time = time.time()
response = query_engine.query(question)
for node in response.source_nodes:
print(f"Text: {node.node.text}")
print(f"Score: {node.score}")
print(f"Metadata: {node.node.metadata}")
print("---")
end_time = time.time()
print(end_time-start_time)
print(f"AI: {response}")
3条答案
按热度按时间nwlqm0z11#
VectorStoreIndex
存储输入文本块的嵌入表示以及诸如文档ID和节点ID等元数据。可以通过查询索引或直接检查底层向量存储来查看此信息。命令
print(index.index_struct)
仅输出index_id
,因为index_struct
是索引结构的最小表示形式,主要用于识别目的。详细嵌入和其他存储信息由向量存储后端管理,不直接通过index_struct
暴露。要查看详细信息,通常会直接与向量存储交互,或使用
VectorStoreIndex
提供的查询功能。查询索引的示例:
此外,
index_struct
不仅包含index_id
。它还包括一个将节点IDMap到其相应嵌入的nodes_dict
Map,一个将文档IDMap到其关联节点ID的doc_id_dict
Map,以及一个存储实际嵌入的embeddings_dict
。然而,默认情况下,这些详细信息不会通过print(index.index_struct)
打印。以下是结构示例:
LlamaIndex框架中的
VectorStoreIndex
类旨在与现有的向量存储一起工作,并包括用于嵌入节点、将节点添加到索引以及查询索引的方法。有关节点及其嵌入的详细信息由向量存储管理,可以通过向量存储的API或使用提供的查询方法 1(https://github.com/run-llama/llama_index/blob/main/docs/docs/community/integrations/vector_stores.md)2(https://github.com/run-llama/llama_index/blob/main/docs/docs/examples/vector_stores/index_simple.json)3(https://github.com/run-llama/llama_index/blob/main/llama-index-legacy/llama_index/legacy/indices/vector_store/base.py) 访问。cidc1ykv2#
存储分为结构化存储、文档存储和向量存储。这些都包含在存储上下文中。
如果你使用向量数据库集成,只使用向量存储(所有内容都放在里面)以简化存储。
u59ebvdq3#
通过向量存储,如果我想要使用index.delete_nodes()方法删除一些特定的节点,我该如何获取相应的节点id?希望你能再次帮助我解答这个问题。