对 azure 函数中使用 python 模块进行故障排除

问题描述 投票:0回答:1

我的 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

地点:

  • venv
    - 已安装
    requirements.json
    的虚拟环境目录依赖于
    root
    azure_functions
    文件夹
  • azure_functions
    - 包含与 azure 功能相关的文件的文件夹(http 触发器)
  • function_app.py
    - 有问题的 http 触发器,无法从
    llm_call
     调用 
    main.py
  • 函数

郑重声明,如果azure_functions目录中的触发器仅将输出打印为字符串,则可以成功部署和调用,因此azure函数相关配置是正确的。

  • azure_functions/requirements.json
    - 由单行
    azure-functions
    组成。

  • src/__init__.py
    (空文件)/
    src/main.py
    - 模块及其定义,
    llm_call
    内的方法(如
    main.py
    )可以从
    tests
    文件夹成功调用,但不能从
    azure_functions
    目录

    调用
  • requirements.txt
    - 与 main.py 文件相关的 deps

  • 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())
    

我遇到的问题是当我通过以下方式使用main

中的
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: No HTTP triggers found.

 之外,我在日志中没有看到任何错误)。我从 VS code 部署它,看到我的函数在 Azure 资源 UI 中立即消失(
Function App
 => 
Functions
):
enter image description here 并且在 azure UI 中不可见。

一旦我从触发器中删除这一行

from 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" ..
    
python azure azure-functions python-module
1个回答
0
投票
根文件夹中应该有

host.json

local.settings.json
 文件。

更改文件夹结构如下:

**ROOT** -- .venv -- function_app.py -- host.json -- local.settings.json -- requirements.json -- src |-- __init__.py |-- main.py -- tests |-- test_action.py -- .gitignore -- requirements.txt -- setup.py

需求.txt:

azure-functions setuptools langchain langchain-chat-prompt langchain_community

  • OPENAI_API_KEY
    下添加
    FunctionApp=>Settings=>Environment Variables
    应用程序设置。
我已经使用上述文件夹结构部署了您的函数代码,并且能够在门户中的Azure函数应用程序概述下同步触发器。

部署日志:

Number of duplicate files found 789 Number of inodes 15160 Number of files 13456 Number of fragments 1028 Number of symbolic links 0 Number of device nodes 0 Number of fifo nodes 0 Number of socket nodes 0 Number of directories 1704 Number of ids (unique uids + gids) 1 Number of uids 1 root (0) Number of gids 1 root (0) Creating placeholder blob for linux consumption function app... SCM_RUN_FROM_PACKAGE placeholder blob scm-latest-rkfn.zip located Uploading built content /home/site/artifacts/functionappartifact.squashfs for linux consumption function app... Resetting all workers for rkfn.azurewebsites.net Deployment successful. deployer = Push-Deployer deploymentPath = Functions App ZipDeploy. Extract zip. Remote build. Remote build succeeded! [2024-12-05T11:09:46.919Z] Syncing triggers... Functions in rkfn: llmhttptrigger - [httpTrigger] Invoke url: https://rkfn.azurewebsites.net/api/llm_httptrigger

传送门:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.