Устранение неполадок с использованием модуля 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 можно успешно вызывать из тестов code>, но не из каталога 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 и вижу, что моя функция сразу после этого исчезает из пользовательского интерфейса 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.

Для записи1 похоже, что проблема не в структуре папок, поскольку эта структура создано мастером 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 дает ту же ошибку), не знаю, откуда эта ошибка..
UPDATE4:
Очевидно, версия Python 3.12, которую я использовал ранее, не поддерживается Azure, однако переключение на 3.11 устраняет проблемы в UPDATE3, но не помогло и с реальной проблемой

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

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

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

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

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

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