Устранение неполадок с использованием модуля 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»