Azure Function流式返回

最近用azure function做了一个api和llm交互,需要流式返回。但是默认不支持流返回,搜索了一下。记录。

官方文档:
https://techcommunity.microsoft.com/blog/azurecompute/azure-functions-support-for-http-streams-in-python-is-now-in-preview/4146697

根据文档需要以下步骤:

前置条件

  1. Azure Functions runtime version 4.34.1, or a later version.
  2. Python version 3.8, or a later supported version.
  3. Python v2 programming model

首先第一点,这个Azure Functions runtime version版本,可以在local.settings.json或者式环境变量里面设置,如果式本地 func start启动的话也需要加PYTHON_ENABLE_INIT_INDEXING这个变量设置为1,如果线上deploy的话就加到application setting里面。

python 复制代码
{
  "IsEncrypted": false,
  "Values": {
    "PYTHON_ENABLE_INIT_INDEXING": "1",
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_EXTENSION_VERSION":"4.34.1"
  }
}

Azure Functions runtime version这个使用的版本可以用 func start --verbose输出更多参数查看到

第二点python版本不需要多讲。第三点azure programming版本的话就在host.json查看。

python 复制代码
{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  },
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[4.*, 5.0.0)"
  }
}

引入新包

bash 复制代码
pip install azurefunctions-extensions-http-fastapi

编写代码

python 复制代码
from azurefunctions.extensions.http.fastapi import Request, StreamingResponse
python 复制代码
import time
import azure.functions as func
from azurefunctions.extensions.http.fastapi import Request, StreamingResponse

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)

def generate_count():
    """Generate a stream of chronological numbers."""
    count = 0
    while True:
        yield f"counting, {count}\n\n"
        count += 1

@app.route(route="stream", methods=[func.HttpMethod.GET])
async def stream_count(req: Request) -> StreamingResponse:
    """Endpoint to stream of chronological numbers."""
    try:
        req_body = await req.json()
        query = req_body.get('query')
        logging.info('stream_count get parm: {query}')
    except Exception:
        traceback.print_exc()
        return StreamingResponse(content='Request parm error need {"query":str} ',status_code=500, media_type="text/event-stream")

    return StreamingResponse(generate_count(), media_type="text/event-stream")

如果是非流返回的api就不能使用默认的func.HttpResponse作为返回了,需要使用JSONResponse

python 复制代码
from azurefunctions.extensions.http.fastapi import Request,JSONResponse
@app.route(route="all_u_need_create", methods=[func.HttpMethod.GET])
async def all_u_need_create(req: Request) -> JSONResponse:
    
    ...
    return JSONResponse(content=ids,status_code=200)
    

测试

这边有点奇怪的是,我使用postman测试一直显示不了返回的流,我一度以为我代码有问题,找了半天,结果用 curl测试没有任何问题.有知道怎么解决的同学也可以给我讲一下。

bash 复制代码
curl -X GET --data-raw '{"query":"xxxxx"}' -H "Content-Type: application/json" http://localhost:7071/api/all_u_need_search

所以之后的测试就一直用的curl测试了。

相关推荐
William_cl1 天前
【C# MVC 前置】异步编程 async/await:从 “卡界面” 到 “秒响应” 的 Action 优化指南(附微软官方避坑清单)
microsoft·c#·mvc
日日行不惧千万里1 天前
绕过微软联网账号限制:用本地用户安装 Windows 11 的最新 3 种方法
windows·microsoft
KKKlucifer1 天前
自动化漏洞利用技术颠覆传统:微软生态暴露的攻防新变局
运维·microsoft·自动化
Leinwin1 天前
微软 365 迁移解决方案
microsoft
张晓~183399481211 天前
碰一碰发抖音源码技术搭建部署方案
线性代数·算法·microsoft·矩阵·html5
FreeBuf_1 天前
微软数字防御报告:AI成为新型威胁,自动化漏洞利用技术颠覆传统
人工智能·microsoft·自动化
yantuguiguziPGJ2 天前
WPF 联合 Web 开发调试流程梳理(基于 Microsoft.Web.WebView2)
前端·microsoft·wpf
SmartSoftHelp开发辅助优化2 天前
C# WinForm 编程高手:程序,进程,线程。程序,窗体,UI,后台。是如何协调工作的?深度解析>SmartSoftHelp魔法精灵工作室
microsoft·ui·c#
爱编程的鱼2 天前
C# 参数详解:从基础传参到高级应用
开发语言·microsoft·c#