Bug Description
我正在尝试使用https://github.com/run-llama/llama_index/blob/main/llama-index-packs/llama-index-packs-raptor/examples/raptor.ipynb自己进行一些RAPTOR类型的实验。然而,在创建索引时,由于重复的文档ID,代码偶尔会失败。我已经提供了以下代码,其中llama_index_document是一个看起来像这样的Document对象列表:
[
Document(id_='dc2247a2-3a75-4fa1-baa0-4ce074cae205', embedding=None, metadata={'header': 'xxx Inc.'}, excluded_embed_metadata_keys=[], excluded_llm_metadata_keys=[], relationships={}, text='TABLE OF CONTENTS\nAccess Control Policy2 Asset Management Policy8 ', start_char_idx=None, end_char_idx=None, text_template='{metadata_str}\n\n{content}', metadata_template='{key}: {value}', metadata_seperator='\n'),
Document(id_='69ca22a5-37d7-4132-b83b-e631d0992ada', embedding=None, metadata={'header': 'Access Control Policy'}, excluded_embed_metadata_keys=[], excluded_llm_metadata_keys=[], relationships={}, text='Policy Owner: \nEffective Date: 01/28/2024', start_char_idx=None, end_char_idx=None, text_template='{metadata_str}\n\n{content}', metadata_template='{key}: {value}', metadata_seperator='\n')
]
然后,在创建RAPTOR索引时会出现错误。
版本
0.10.15
重现步骤
from llama_index.core.schema import Document
def convert_to_llama_index_document(parsed_google_docs):
documents = []
for doc in parsed_google_docs:
if len(doc.metadata['header_structure']) > 0:
header = doc.metadata['header_structure'][-1]
else:
header = ''
documents.append(
Document(
text=doc.content,
metadata={
"header": header
}
)
)
return documents
llama_index_documents = convert_to_llama_index_document(parsed_google_docs)
raptor_pack_google_doc = RaptorPack(
llama_index_documents,
embed_model=OpenAIEmbedding(
model="text-embedding-ada-002"
), # used for embedding clusters
llm=OpenAI(model="gpt-3.5-turbo", temperature=0), # used for generating summaries
vector_store=vector_store, # used for storage
similarity_top_k=5, # top k for each layer, or overall top-k for collapsed
mode="tree_traversal", # sets default mode
transformations=[
SentenceSplitter(chunk_size=400, chunk_overlap=50)
], # transformations applied for ingestion
)
8条答案
按热度按时间vlju58qv1#
嘿,@mw19930312!🚀好久不见,有bug吗?😄我记得我们以前一起讨论过代码!现在深入研究你的问题,很快就会给你一些见解。耐心等待!
pkwftd7m2#
我认为这可能是由于RAPTOR如何使节点属于多个集群(将解释为什么它只偶尔发生)
u0njafvf3#
也许在这里色度并不是一个好的选择,呵呵。
13z8s7eq4#
Will be very... tedious to fix this, but will take a look
flseospp5#
你遇到的错误信息表明,在试图索引的文档集合中存在重复的ID。在LlamaIndex软件中,每个你试图索引的文档或节点都应该有一个唯一的标识符。
从你提供的代码来看,似乎你在创建
Document
对象时没有明确设置id_
参数。LlamaIndex中的Document
类不会自动生成唯一的ID。如果你在创建Document
时没有提供id_
,那么默认值将是None
,如果没有显式ID的情况下创建多个文档,这可能会导致问题。以下是如何修改你的
convert_to_llama_index_document
函数,使用uuid
库为每个文档生成唯一ID的方法:在这个修改后的函数中,
uuid.uuid4()
用于为每个文档生成一个唯一的ID。这应该确保每个文档都有一个唯一的ID,并解决你遇到的问题。请尝试这个修改,并告诉我是否解决了你的问题,或者你有其他任何问题。
来源
关于Dosu
这个响应旨在帮助你节省时间,它是不是精确的解决方案,而是一个你自己研究的起点。
帮我变得更有用!如果这个有帮助的话请给我一个👍,如果不相关的话请给我一个👎。
如果你想继续对话,请以@dosu-bot开始你的回复。
41ik7eoe6#
我认为这可能是由于RAPTOR如何使节点属于多个集群(这将解释为什么它只偶尔发生)
这种方式对我来说是有道理的,因为我的文档变得更短时,错误就会消失。无论如何,如果你发现了什么,请告诉我。感谢所有的帮助!
lymgl2op7#
我也有同样的问题,希望能有一个解决方案/建议来使用除chroma之外的其他矢量存储。
amrnrhlw8#
放弃chromadb并切换到不同的矢量存储(例如faiss)解决了我的问题。