我正在使用 Llama Index 创建一个使用 AWS Lambda 的自定义机器人,但是当我尝试创建其层并将其上传到 AWS 层时,我收到不同库的“找不到包”错误。我尝试从 Llama Index 包中删除一些包并使用 Pandas 和 NumPy 等 AWS 包,但出现“最大大小”错误。
我使用 WSL2 Ubuntu 创建了该包。
这是我尝试使用图层时遇到的错误
{
"errorMessage": "Unable to import module 'lambda_handler': Unable to import required dependencies:\nnumpy: \n\nIMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!\n\nImporting the numpy C-extensions failed. This error can happen for\nmany reasons, often due to issues with your setup or how NumPy was\ninstalled.\n\nWe have compiled some common reasons and troubleshooting tips at:\n\n https://numpy.org/devdocs/user/troubleshooting-importerror.html\n\nPlease note and check the following:\n\n * The Python version is: Python3.8 from \"/var/lang/bin/python3.8\"\n * The NumPy version is: \"1.24.2\"\n\nand make sure that they are the versions you expect.\nPlease carefully study the documentation linked above for further help.\n\nOriginal error was: No module named 'numpy.core._multiarray_umath'\n",
"errorType": "Runtime.ImportModuleError",
"stackTrace": []
}
示例代码
import json
from llama_index import GPTSimpleVectorIndex
import os
import boto3
def lambda_handler(event, context):
s3 = boto3.resource('s3')
#added key
try:
event = json.loads(event['body'])
prompt = event.get("prompt", None)
if(prompt is None):
raise Exception("prompt is None")
bucket_name = ''
object_key = ''
index_object = s3.Object(bucket_name, object_key)
index_content = index_object.get()['Body'].read()
index = GPTSimpleVectorIndex.load_from_disk(index_content)
# Query the index
RESPONSE = index.query(prompt)
return {
"headers": {
"Access-Control-Allow-Headers": "Content-Type",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "POST"
},
"statusCode": 200,
"body": json.dumps(
{'message': json.dumps({"message": RESPONSE})}
)
}
except Exception as e:
print(e)
return {
"headers": {
"Access-Control-Allow-Headers": "Content-Type",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "POST"
},
"statusCode": 500,
"body": json.dumps(
{'message': json.dumps(e, default=str)}
)
}
我尝试通过从 Llama Index 包中删除库并使用 AWS 自定义库来解决该问题,但错误不断发生。首先,错误是针对 NumPy 的,我添加了 AWS NumPy 包来修复它。然后,我遇到了 Pandas 错误并尝试使用 AWS Pandas 库,然后尝试使用 numexpr。但是,我开始收到“层的最大尺寸”错误。
更多解释:
Llama-Index 包最初包含 NumPy 包,但我遇到了一个错误(我在问题中提到过)。我从 Llama-Index 包中删除了 NumPy,并尝试使用 AWS 层中的 AWSLambda-Python38-SciPy1x 包,这修复了 NumPy 错误。然而,出现了一个新错误:“没有名为‘pandas._libs.interval’的模块”。为了解决此问题,我添加了 AWS 中的 AWSPandasSDK 层,但合并后的层大小超出了 AWS 的限制。为了克服这个限制,我删除了之前添加的 NumPy 包并添加了 AWSPandasSDK 层,这解决了 NumPy 和 Pandas 问题。但是,我遇到了一个新错误:“没有名为 numexpr 的模块”,即使所有这些库都已存在于 AWS Llama-Index 包中。
您找到答案了吗?正在为同样的事情而奋斗!