Устранение неполадок с использованием модуля Python в функции AzurePython

Программы на Python
Ответить
Anonymous
 Устранение неполадок с использованием модуля Python в функции Azure

Сообщение Anonymous »

В моем приложении Python (3.12.3) есть следующая структура кода:

Код: Выделить всё

**ROOT**
-- .venv
-- azure_functions
---- function_app.py
---- host.json
---- local.settings.json
---- requirements.json
-- src
---- __init__.py
---- main.py
-- tests
---- test_action.py
-- .gitignore
-- requirements.txt
-- setup.py
где:
  • — виртуальный каталог env, в котором установлен файл require.json из корневых папок и azure_functions
  • Код: Выделить всё

    azure_functions
    — папка, содержащая файлы, связанные с функцией Azure (триггеры HTTP).
  • Код: Выделить всё

    function_app.py
     — проблемный HTTP-триггер, который не может вызвать функцию llm_call из main.py
Для справки: триггер внутри каталога azure_functions может быть успешно развернут и вызван в случае, если внутри него имеется только вывод на печать в виде строки, поэтому конфигурация, связанная с функцией Azure, правильна.
  • Код: Выделить всё

    azure_functions/requirements.json
    — состоят из однострочных функций Azure.
  • Код: Выделить всё

    src/__init__.py
    (пустой файл) / src/main.py — модуль и его определение, методы (например, llm_call) внутри main.py можно успешно вызывать из папкиtests, но не из каталога azure_functions
  • Код: Выделить всё

    requirements.txt
    — параметры, связанные с файлами main.py
  • — папка с тестами, test_action.py может успешно вызывать методы из main.py просто при простой настройке:

    Код: Выделить всё

    from src.main import llm_call
    
  • Код: Выделить всё

    setup.py:
    # a simple package/module related configuration
    from setuptools import setup, find_packages
    
    setup(name="main", version="1.0", packages=find_packages())
    
У меня проблема заключается в том, что я использую методы из основного пакета в function_app.py через:

Код: Выделить всё

  from src.main import llm_call # just with this single new line, no actual usage of this below
Я не вижу проблем в VS Code (нет выделенных строк), но когда я развертываю приложение в Azure, развертывание кажется неудачным (хотя я не вижу в журнале ошибок, кроме этой строки AM appname-func: HTTP-триггеры не найдены. в выходных данных). Я развертываю его из VS Code и вижу, что моя функция сразу после этого исчезает из пользовательского интерфейса Azure Resources (

Код: Выделить всё

Function App
=> Функции):
Изображение

и не будут видны в пользовательском интерфейсе Azure.
Как только я удалю эту строку из src.main import llm_call из триггера и разверну ее еще раз, вся логика начинает работать, и я снова вижу развернутую функцию на скриншоте выше. Похоже, проблема в том, как я использую методы из модуля main.py в function_app.py, но не знаю, как это устранить.
Обновить
main.py:

Код: Выделить всё

from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
ChatPromptTemplate
)
from typing import Callable
from langchain.chains import LLMChain
from langchain.schema import BaseOutputParser
import os

model_to_use="gpt-4o-mini"

class CustomOutputParser(BaseOutputParser):
def parse(self, text: str):
return text

def llm_call(model, system_template, human_template, param_provider: Callable[[], dict], custom_output_parser) -> str:
try:
api_key = os.environ['OPENAI_API_KEY']
temperature=0.7
max_tokens=2048
chat_model = ChatOpenAI(model=model, api_key=api_key, temperature=temperature, max_tokens=max_tokens)
system_message_prompt = SystemMessagePromptTemplate.from_template(system_template)

human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])

chain = LLMChain(
llm=chat_model,
prompt=chat_prompt,
output_parser=custom_output_parser
)

params = param_provider()
return chain.run(**params)
except Exception as e:
print(f"An error occurred while calling the LLM: {e}")
raise e
Код функции:

Код: Выделить всё

import azure.functions as func
import logging
from src.main import llm_call

app = func.FunctionApp(http_auth_level=func.AuthLevel.FUNCTION)

@app.route(route="llm_httptrigger")
def llmhttptrigger(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request!')
тестовый код:

Код: Выделить всё

import unittest
from src.main import llm_call

class TestCallLLMFunction(unittest.TestCase):
def test_call_llm(self):
category = "category1"
..
Обновление 2
Спасибо @PravallikaKV за предложение переместить код, связанный с функцией, в корневую папку, к сожалению, это не помогло. Я по-прежнему не вижу функции на портале и по-прежнему вижу следующее в результатах развертывания:

17:26:37 appname-func: HTTP-триггеры не найдены.

Для справки, похоже, что проблема не в структуре папок, поскольку эта структура создается мастером VS Code, где я выбрал каталог azure_functions в качестве место, где должен быть сохранен код функции. И если я удалю вызовы функций, взятых из main.py, это будет работать хорошо, и я смогу вызвать этот http-триггер (например, «Привет, мир») через запрос веб-API, т.е. в этом случае он будет успешно развернут.
Для записи2, этот код я использую для создания папки venv:

Код: Выделить всё

1. python -m venv .venv
2. .venv\Scripts\activate
2.1. Configure python interpreter path from .venv in VS Code
3. pip.exe install -r .\requirements.txt
4. pip.exe install -r .\azure_functions\requirements.txt
5. pip install -e .
Я чувствую, что часть конфигурации venv не видна (не знаю, как ее следует настроить) на стороне функции Azure, но не могу понять, как действовать дальше, поскольку во время развертывания не возникает никаких ошибок.
Обновление 3
Если я начну создавать функцию Azure с нуля, одним из шагов мастера будет настройка виртуальной среды:
Изображение

ранее я пропустил эту часть, теперь пытаюсь настроить и вижу следующую ошибку:
Изображение
— это версия Python, которую я использую на своем компьютере и в venv (указанный абсолютный путь к Python в папке .venv дает ту же ошибку), не знаю, откуда эта ошибка.
Обновление 4
Очевидно, версия Python 3.12, которую я использовал ранее, не поддерживается Azure, однако переключение на 3.11 устраняет проблемы в Обновлении 3, но не помогло и с реальной проблемой.

Подробнее здесь: https://stackoverflow.com/questions/792 ... e-function
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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