你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:使用 Phi-4 sidecar 扩展在应用服务中运行聊天机器人 (FastAPI)

本教程介绍如何在 Azure 应用服务上部署与 Phi-4 sidecar 扩展集成的基于 FastAPI 的聊天机器人应用程序。 通过执行这些步骤,你将了解如何设置可缩放的 Web 应用、添加 AI 支持的 sidecar 来增强聊天功能,以及测试聊天机器人的功能。

托管自己的小型语言模型(SLM)具有以下优点:

  • 完全掌控您的数据。 敏感信息不会向外部服务公开,这对符合性要求严格的行业至关重要。
  • 可以微调自托管模型以满足特定用例或领域特定要求。
  • 最大程度地减少网络延迟和更快的响应时间,以提供更好的用户体验。
  • 完全控制资源分配,确保应用程序的最佳性能。

先决条件

部署示例应用程序

  1. 在浏览器中,导航到 示例应用程序存储库

  2. 从存储库中启动新的 Codespace。

  3. 使用 Azure 帐户登录:

    az login
    
  4. 在 Codespace 中打开终端并运行以下命令:

    cd use_sidecar_extension/fastapiapp
    az webapp up --sku P3MV3
    az webapp config set --startup-file "gunicorn -w 4 -k uvicorn.workers.UvicornWorker app.main:app"
    

此启动命令是用于将 FastAPI 应用程序部署到 Azure 应用服务的常见设置。 有关详细信息,请参阅 快速入门:将 Python(Django、Flask 或 FastAPI)Web 应用部署到 Azure 应用服务

添加 Phi-4 挎斗扩展

在本部分中,将 Phi-4 sidecar 扩展添加到 Azure 应用服务上托管的 ASP.NET Core 应用程序。

  1. 导航到 Azure 门户并转到应用的管理页。
  2. 在左侧菜单中,选择 “部署>部署中心”。
  3. 在“容器”选项卡上,选择“添加”>“Sidecar 扩展”
  4. 在挎斗扩展选项中,选择“AI:phi-4-q4-gguf (实验)”
  5. 提供 sidecar 扩展的名称。
  6. 选择保存以应用更改。
  7. 请等待几分钟,以便部署 sidecar 扩展。 继续选择 “刷新 ”,直到 状态 列显示 “正在运行”。

此 Phi-4 挎斗扩展使用聊天补全 API(如 OpenAI),可以在 http://localhost:11434/v1/chat/completions 对聊天补全响应做出响应。 有关如何与 API 交互的详细信息,请参阅:

测试聊天机器人

  1. 在应用的管理页的左侧菜单中,选择“ 概述”。

  2. “默认域”下,选择 URL 以在浏览器中打开 Web 应用。

  3. 验证聊天机器人应用程序是否正在运行并响应用户输入。

    显示浏览器中运行的时尚助手应用的屏幕截图。

示例应用程序的工作原理

示例应用程序演示如何将基于 FastAPI 的服务与 SLM sidecar 扩展集成。 该 SLMService 类封装了用于将请求发送到 SLM API 并处理流式响应的逻辑。 此集成使应用程序能够动态生成对话响应。

查看 use_sidecar_extension/fastapiapp/app/services/slm_service.py,可以看到:

  • 服务将 POST 请求发送到 SLM 终结点 http://localhost:11434/v1/chat/completions

    self.api_url = 'http://localhost:11434/v1/chat/completions'
    
  • POST 有效负载包括系统消息以及从所选产品和用户查询生成的提示。

    request_payload = {
        "messages": [
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": prompt}
        ],
        "stream": True,
        "cache_prompt": False,
        "n_predict": 2048  # Increased token limit to allow longer responses
    }
    
  • POST 请求将响应逐行流式传输。 将分析每行以提取生成的内容(或令牌)。

    async with httpx.AsyncClient() as client:
        async with client.stream(
            "POST", 
            self.api_url,
            json=request_payload,
            headers={"Content-Type": "application/json"},
            timeout=30.0
        ) as response:
            async for line in response.aiter_lines():
                if not line or line == "[DONE]":
                    continue
    
                if line.startswith("data: "):
                    line = line.replace("data: ", "").strip()
    
    
                try:
                    json_obj = json.loads(line)
                    if "choices" in json_obj and len(json_obj["choices"]) > 0:
                        delta = json_obj["choices"][0].get("delta", {})
                        content = delta.get("content")
                        if content:
                            yield content
    

常见问题


定价层如何影响 SLM sidecar 的性能?

由于 AI 模型会消耗大量资源,请选择一个合适的定价层,以便有足够的 vCPU 和内存来运行特定模型。 因此,仅当应用处于合适的定价层时,才会显示内置的 AI sidecar 扩展。 如果生成自己的 SLM sidecar 容器,则还应使用 CPU 优化模型,因为应用服务定价层是仅限 CPU 的层。

例如,来自 Hugging Face 的 Phi-3 微型模型配有 4K 上下文长度,旨在以有限的资源运行,并为许多常见场景提供强大的数学和逻辑推理。 它还提供 CPU 优化版本。 在应用服务中,我们在所有高级层上测试了模型,并发现它在 P2mv3 层或更高版本中表现良好。 如果要求允许,可以在较低层上运行它。


如何使用我自己的 SLM sidecar?

示例存储库包含一个可用作 sidecar 的示例 SLM 容器。 它运行一个侦听端口 8000 的 FastAPI 应用程序,端口在 Dockerfile 中指定。 应用程序使用 ONNX 运行时加载 Phi-3 模型,然后将 HTTP POST 数据转发到模型,并将模型的响应流式传输回客户端。 有关详细信息,请参阅 model_api.py

若要自行生成边车映像,需要在计算机上本地安装 Docker Desktop。

  1. 以本地方式克隆存储库。

    git clone https://github.com/Azure-Samples/ai-slm-in-app-service-sidecar
    cd ai-slm-in-app-service-sidecar
    
  2. 切换到 Phi-3 映像的源目录,并使用 Huggingface CLI 将模型下载到本地。

    cd bring_your_own_slm/src/phi-3-sidecar
    huggingface-cli download microsoft/Phi-3-mini-4k-instruct-onnx --local-dir ./Phi-3-mini-4k-instruct-onnx
    

    Dockerfile 配置为从 ./Phi-3-mini-4k-instruct-onnx 复制模型。

  3. 生成 Docker 映像。 例如:

    docker build --tag phi-3 .
    
  4. 使用 Docker CLI 将生成的映像上传到 Azure 容器注册表,并将 第一个映像推送到 Azure 容器注册表

  5. “部署中心>容器”选项卡中 ,选择“ 添加>自定义容器 ”,然后配置新容器,如下所示:

    • 名称:phi-3
    • 映像源Azure 容器注册表
    • 注册表:你的注册表
    • 图像:上传的图像
    • 标记:所需的图像标记
    • 端口8000
  6. 选择应用

有关与此自定义 sidecar 容器交互的示例应用程序,请参阅 bring_your_own_slm/src/webapp

后续步骤

教程:在 Azure 应用服务中为 Linux 应用配置 sidecar 容器