Bug描述
使用llama索引的最新版本,上传到s3后加载失败:
文件 "/Users/ksundaravarathan/Library/Caches/pypoetry/virtualenvs/test-backend-pA5nAHO2-py3.11/lib/python3.11/site-packages/fsspec/spec.py",第373行,_ls_from_cache函数中引发FileNotFoundError(path)异常。
根据调查,上游的注解llamaindex.core.readers.file.base.py
有助于解决问题,但需要一个理想的解决方案:
第211-218行:
if input_files:
self.input_files = []
for path in input_files:
print(input_files)
if not self.fs.isfile(path): #### Comment
raise ValueError(f"File {path} does not exist.") ### Comment
input_file = _Path(path)
self.input_files.append(input_file)
版本
最新版本 0.10.33
重现步骤
从S3获取知识源
- 首先将第一个文件上传到s3 - > 运行正常
- 从s3加载索引 - > 运行正常
- 从s3(知识源)删除文件 - > 运行正常
- 使用S3Reader将新文件上传到s3 - > 运行正常
- document_data = loader.load_data(),抛出异常:
文件 "/Users/kish/Library/Caches/pypoetry/virtualenvs/backend-pA5nAHO2-py3.11/lib/python3.11/site-packages/fsspec/spec.py",第373行,_ls_from_cache函数中引发FileNotFoundError(path)异常。
相关日志/回溯
/Users/ksundaravarathan/Documents/test/backend/src/loader/awsS3Loader.py", line 87, in uploadDocument
document_data = self.loader.load_data()
^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/ksundaravarathan/Library/Caches/pypoetry/virtualenvs/test-backend-pA5nAHO2-py3.11/lib/python3.11/site-packages/llama_index/readers/s3/base.py", line 118, in load_data
documents = self.load_s3_files_as_docs()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/ksundaravarathan/Library/Caches/pypoetry/virtualenvs/test-backend-pA5nAHO2-py3.11/lib/python3.11/site-packages/llama_index/readers/s3/base.py", line 100, in load_s3_files_as_docs
return loader.load_data()
^^^^^^^^^^^^^^^^^^
File "/Users/ksundaravarathan/Library/Caches/pypoetry/virtualenvs/test-backend-pA5nAHO2-py3.11/lib/python3.11/site-packages/llama_index/core/readers/file/base.py", line 484, in load_data
SimpleDirectoryReader.load_file(
File "/Users/ksundaravarathan/Library/Caches/pypoetry/virtualenvs/test-backend-pA5nAHO2-py3.11/lib/python3.11/site-packages/llama_index/core/readers/file/base.py", line 385, in load_file
metadata = file_metadata(str(input_file))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/ksundaravarathan/Library/Caches/pypoetry/virtualenvs/test-backend-pA5nAHO2-py3.11/lib/python3.11/site-packages/llama_index/core/readers/file/base.py", line 117, in __call__
return default_file_metadata_func(file_path, self.fs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/ksundaravarathan/Library/Caches/pypoetry/virtualenvs/test-backend-pA5nAHO2-py3.11/lib/python3.11/site-packages/llama_index/core/readers/file/base.py", line 84, in default_file_metadata_func
stat_result = fs.stat(file_path)
^^^^^^^^^^^^^^^^^^
File "/Users/ksundaravarathan/Library/Caches/pypoetry/virtualenvs/test-backend-pA5nAHO2-py3.11/lib/python3.11/site-packages/fsspec/spec.py", line 1515, in stat
return self.info(path, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/ksundaravarathan/Library/Caches/pypoetry/virtualenvs/test-backend-pA5nAHO2-py3.11/lib/python3.11/site-packages/fsspec/asyn.py", line 118, in wrapper
return sync(self.loop, func, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/ksundaravarathan/Library/Caches/pypoetry/virtualenvs/test-backend-pA5nAHO2-py3.11/lib/python3.11/site-packages/fsspec/asyn.py", line 103, in sync
raise return_result
File "/Users/ksundaravarathan/Library/Caches/pypoetry/virtualenvs/test-backend-pA5nAHO2-py3.11/lib/python3.11/site-packages/fsspec/asyn.py", line 56, in _runner
result[0] = await coro
^^^^^^^^^^
File "/Users/ksundaravarathan/Library/Caches/pypoetry/virtualenvs/test-backend-pA5nAHO2-py3.11/lib/python3.11/site-packages/s3fs/core.py", line 1352, in _info
out = self._ls_from_cache(fullpath)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/ksundaravarathan/Library/Caches/pypoetry/virtualenvs/test-backend-pA5nAHO2-py3.11/lib/python3.11/site-packages/fsspec/spec.py", line 373, in _ls_from_cache
raise FileNotFoundError(path)
FileNotFoundError: test-ks-demo/kiran-test/official-resume-template.pdf
2条答案
按热度按时间cfh9epnr1#
看起来在使用
S3Reader
从 S3 存储桶加载数据时遇到的FileNotFoundError
可能是由于几个因素导致的,包括 AWS S3 的最终一致性、错误的文件路径、权限问题,或者在文件上传或删除后立即尝试读取需要重试机制。要解决这个问题,可以考虑实现一个带有指数退避的重试机制。这种方法可以帮助缓解与 S3 的最终一致性相关的问题,尤其是在上传新文件或删除现有文件之后。以下是一个简化的示例,说明如何实现这样的机制:
这段代码尝试多次加载数据,并在每次尝试之间设置延迟,这在你处理文件上传或删除后的即时影响时可能特别有用。
此外,确保你在
S3Reader
初始化中指定的文件路径与 S3 存储桶中文件的位置完全匹配,因为 S3 路径区分大小写。还要验证你的应用程序使用的 IAM 角色或用户凭据是否具有从 S3 存储桶读取的必要权限,特别是s3:GetObject
。如果问题仍然存在,为你的应用程序和 AWS SDK 启用详细日志记录可以提供进一步的洞察力,帮助识别路径、权限问题或其他异常中的任何潜在不匹配。
这种方法应该帮助你解决
FileNotFoundError
并确保从 S3 更可靠地加载数据。细节
来源
关于 Dosu
这个响应旨在帮助你节省时间并提高效率。它不是 精确的解决方案,而是你自己研究的一个起点。
请帮助我变得更有用!如果你觉得这个回答有帮助,请留下一个 👍 如果没有帮助的话就请留下一个 👎 。
bgtovc5b2#
我认为这个问题不能通过重试逻辑来解决。我可以确认文件确实存在于s3中,甚至在调用reader和load_data()之前尝试获取对象。它在使用simpleDirectoryReader或valueError时与
fs.stat(file_path)
存在问题。复现步骤已经在描述中提到。