**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
где:
- venv — виртуальный каталог env, в котором установлены файлы require.json из корневых папок и azure_functions
- azure_functions — папка, содержащая файлы, связанные с функцией Azure (триггеры HTTP).
- function_app.py – проблемный http-триггер, который не может вызвать функцию llm_call из main.py
- azure_functions/requirements.json — состоят из однострочных функций Azure.
- src/__init__.py (пустой файл) /src/main.py — модуль и его определение, методы (типа llm_call) внутри main.py можно успешно вызывать из тестов code>, но не из каталога azure_functions
- requirements.txt — параметры, связанные с файлами main.py
- tests — папка с тестами, 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())
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"
..
Подробнее здесь: https://stackoverflow.com/questions/792 ... e-function
Мобильная версия