Проблема с лямбда-функцией: «Невозможно импортировать модуль «embedding_search_handler»: попытка относительного импорта Python

Программы на Python
Гость
Проблема с лямбда-функцией: «Невозможно импортировать модуль «embedding_search_handler»: попытка относительного импорта

Сообщение Гость »


У меня есть экземпляр Elasticsearch, и я использую API Gateway + Lambda для настройки небольшого бэкэнда. ES содержит вставки некоторых документов Word, которые я создал для LLM-программы «чат с вашими документами».

Это embedding_search_handler.py:

импортировать ОС импортировать JSON запросы на импорт из импорта elasticsearch Elasticsearch, RequestsHttpConnection из Request_aws4auth импортировать AWS4Auth из конфигурации импорта отделения импортировать систему sys.path.append('./') # Настройка Elasticsearch хост = 'https://myhost.us-east-1.es.amazonaws.com' регион = 'нас-восток-1' # Извлекаем ключи из файла .env с помощью python-decouple ACCESS_KEY = конфигурация('ACCESS_KEY') SECRET_KEY = конфигурация('SECRET_KEY') OPENAI_API_KEY = конфигурация('OPENAI_API_KEY') awsauth = AWS4Auth(ACCESS_KEY, SECRET_KEY, регион, 'es') es = Elasticsearch( хосты=[{'хост': хост, 'порт': 443}], http_auth=авсаут, use_ssl = Правда, verify_certs=Истина, Connection_class = RequestsHttpConnection ) Защиту query_elasticsearch (встраивание): пытаться: тело = { «размер»: 5, "запрос": { "script_score": { "запрос": {"match_all": {}}, "скрипт": { "source": "cosineSimilarity(params.query_vector, 'embedding_vector') + 1.0", "params": {"query_vector": встраивание} } } } } ответ = es.search(index="document_embeddings", body=body) вернуть ответ['хит']['хит'] кроме исключения как e: print(f"Ошибка запроса Elasticsearch: {e}") возвращаться [] Защиту лямбда_handler (событие, контекст): query_text = событие['запрос'] query_embedding = Convert_query_to_embedding(query_text) если не query_embedding: возвращаться { «Код статуса»: 500, "body": json.dumps({"error": "Не удалось получить встраивание запроса"}) } результаты = query_elasticsearch(query_embedding) возвращаться { «Код статуса»: 200, «тело»: json.dumps(результаты) } защита Convert_query_to_embedding (запрос): заголовки = { «Авторизация»: f «Носитель {OPENAI_API_KEY}», «Тип контента»: «приложение/json» } пытаться: ответ = запросы.пост( "https://api.openai.com/v1/embed", заголовки = заголовки, json={ "модель": "text-embedding-ada-002", "данные": [запрос] } ) response.raise_for_status() # Вызывает ошибку HTTPError, если HTTP-запрос вернул неудачный код состояния данные = ответ.json() встраивание = данные['данные'][0]['встраивание'] возвратное встраивание кроме запросов.RequestException как e: print(f"Ошибка вызова OpenAI API: {e}") возврат Нет Когда я пытаюсь запустить этот тест внутри Lambda:

{ "query": "что это?" } Я получаю следующую ошибку:

START Идентификатор запроса: 5cdd60ba-562b-4cb5-a5f9-b02bbbb26a97 Версия: $LATEST [ОШИБКА] Runtime.ImportModuleError: невозможно импортировать модуль «embedding_search_handler»: попытка относительного импорта за пределами пакета верхнего уровня Обратная трассировка (последний вызов):END RequestId: 5cdd60ba-562b-4cb5-a5f9-b02bbbb26a97 REPORT RequestID: 5cdd60ba-562b-4cb5-a5f9-b02bbbb26a97 Продолжительность: 1,10 мс Оплачиваемая продолжительность: 2 мс Размер памяти: 128 МБ Максимальный объем используемой памяти: 50 МБ Вот как выглядит мой каталог:
Изображение


Когда я нахожусь в каталоге «lambda_package» и запускаю zip -r ../lambda_package.zip, он также выглядит правильно. Это скриншот архивирования и распаковки содержимого:
Изображение


Когда я перехожу к «Изменить настройки времени выполнения», для моего обработчика установлено значение «embedding_search_handler.lambda_handler»

Я не понимаю, что делаю не так.

Вернуться в «Python»