我的 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
):并且在 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"
..
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
应用程序设置。
部署日志:
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
传送门: