在LlamaIndex中向已有GPTVectorStoreIndex添加文档时遇属性错误
解决GPTVectorStoreIndex插入文档时的AttributeError错误
错误原因
SimpleDirectoryReader.load_data()返回的是文档列表(list类型),但index.insert()方法的document参数要求传入单个Document对象。直接把列表传给insert(),会导致方法试图调用列表的get_text()方法,而列表没有这个属性,因此抛出AttributeError: 'list' object has no attribute 'get_text'。
修复方案
方案1:遍历列表逐个插入文档
循环遍历documents列表,将每个文档单独传入insert()方法:
max_input_size = 4096 num_outputs = 5000 max_chunk_overlap = 256 chunk_size_limit = 3900 prompt_helper = PromptHelper(max_input_size, num_outputs, max_chunk_overlap, chunk_size_limit=chunk_size_limit) llm_predictor = LLMPredictor(llm=OpenAI(temperature=0, model_name="gpt-3.5-turbo", max_tokens=num_outputs)) service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor, prompt_helper=prompt_helper) directory_path = "./trial_docs" file_metadata = lambda x : {"filename": x} reader = SimpleDirectoryReader(directory_path, file_metadata=file_metadata) documents = reader.load_data() # 遍历文档列表逐个插入 for doc in documents: index.insert(document=doc, service_context=service_context)
方案2:使用insert_nodes()批量插入(更高效)
如果需要批量插入,直接使用index.insert_nodes()方法,它支持传入文档列表:
max_input_size = 4096 num_outputs = 5000 max_chunk_overlap = 256 chunk_size_limit = 3900 prompt_helper = PromptHelper(max_input_size, num_outputs, max_chunk_overlap, chunk_size_limit=chunk_size_limit) llm_predictor = LLMPredictor(llm=OpenAI(temperature=0, model_name="gpt-3.5-turbo", max_tokens=num_outputs)) service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor, prompt_helper=prompt_helper) directory_path = "./trial_docs" file_metadata = lambda x : {"filename": x} reader = SimpleDirectoryReader(directory_path, file_metadata=file_metadata) documents = reader.load_data() # 使用insert_nodes批量插入文档列表 index.insert_nodes(nodes=documents, service_context=service_context)
内容的提问来源于stack exchange,提问作者Vivek
相关产品推荐
相关产品推荐

