llama_index [Bug]:RAPTOR由于重复的文档ID而失败

pn9klfpd  于 4个月前  发布在  其他
关注(0)|答案(8)|浏览(53)

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
 )

相关日志/回溯

vlju58qv

vlju58qv1#

嘿,@mw19930312!🚀好久不见,有bug吗?😄我记得我们以前一起讨论过代码!现在深入研究你的问题,很快就会给你一些见解。耐心等待!

pkwftd7m

pkwftd7m2#

我认为这可能是由于RAPTOR如何使节点属于多个集群(将解释为什么它只偶尔发生)

u0njafvf

u0njafvf3#

也许在这里色度并不是一个好的选择,呵呵。

13z8s7eq

13z8s7eq4#

Will be very... tedious to fix this, but will take a look

flseospp

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开始你的回复。

41ik7eoe

41ik7eoe6#

我认为这可能是由于RAPTOR如何使节点属于多个集群(这将解释为什么它只偶尔发生)
这种方式对我来说是有道理的,因为我的文档变得更短时,错误就会消失。无论如何,如果你发现了什么,请告诉我。感谢所有的帮助!

lymgl2op

lymgl2op7#

我也有同样的问题,希望能有一个解决方案/建议来使用除chroma之外的其他矢量存储。

amrnrhlw

amrnrhlw8#

放弃chromadb并切换到不同的矢量存储(例如faiss)解决了我的问题。

相关问题