Код: Выделить всё
**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
Код: Выделить всё
venv - — папка, содержащая файлы, связанные с функцией Azure (триггеры HTTP).
Код: Выделить всё
azure_functions - – проблемный http-триггер, который не может вызвать функцию llm_call из main.py
Код: Выделить всё
function_app.py
- — состоят из однострочных функций Azure.
Код: Выделить всё
azure_functions/requirements.json - (пустой файл) /src/main.py — модуль и его определение, методы (типа llm_call) внутри main.py можно успешно вызывать из тестов code>, но не из каталога azure_functions
Код: Выделить всё
src/__init__.py - — параметры, связанные с файлами main.py
Код: Выделить всё
requirements.txt - — папка с тестами, test_action.py может успешно вызывать методы из main.py просто при простой настройке:
Код: Выделить всё
testsКод: Выделить всё
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
Код: Выделить всё
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"
..
Спасибо @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 .
ОБНОВЛЕНИЕ3:
Если я начну создавать функцию Azure с нуля, одним из шагов мастера является настройка виртуальной среды:

ранее я пропустил эту часть, теперь пытаюсь ее настроить и вижу следующее ошибка:
Код: Выделить всё
3.12.3Подробнее здесь: https://stackoverflow.com/questions/792 ... e-function
Мобильная версия