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

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

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

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

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

先决条件

部署示例应用程序

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

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

  3. 使用 Azure 帐户登录:

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

    cd use_sidecar_extension/dotnetapp
    az webapp up --sku P3MV3 --os-type linux
    

此启动命令是将 ASP.NET Core 应用程序部署到 Azure 应用服务的常见设置。 有关详细信息,请参阅快速入门:部署 ASP.NET Web 应用

添加 Phi-4 挎斗扩展

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

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

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

测试聊天机器人

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

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

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

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

示例应用程序的工作原理

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

查看 use_sidecar_extension/dotnetapp/Services/SLMService.cs,可看到:

  • 服务从 fashion.assistant.api.url 读取 URL,这是在 appsettings.json 中设置的,其值为 http://localhost:11434/v1/chat/completions

    public SLMService(HttpClient httpClient, IConfiguration configuration)
    {
        _httpClient = httpClient;
        _apiUrl = configuration["FashionAssistantAPI:Url"] ?? "httpL//localhost:11434";
    }
    
  • POST 有效负载包括系统消息以及从所选产品和用户查询生成的提示。

    var requestPayload = new
    {
        messages = new[]
        {
            new { role = "system", content = "You are a helpful assistant." },
            new { role = "user", content = prompt }
        },
        stream = true,
        cache_prompt = false,
        n_predict = 150
    };
    
  • POST 请求以流的方式逐行传输响应数据。 将分析每行以提取生成的内容(或令牌)。

    var response = await _httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
    response.EnsureSuccessStatusCode();
    
    var stream = await response.Content.ReadAsStreamAsync();
    using var reader = new StreamReader(stream);
    
    while (!reader.EndOfStream)
    {
        var line = await reader.ReadLineAsync();
        line = line?.Replace("data: ", string.Empty).Trim();
        if (!string.IsNullOrEmpty(line) && line != "[DONE]")
        {
            var jsonObject = JsonNode.Parse(line);
            var responseContent = jsonObject?["choices"]?[0]?["delta"]?["content"]?.ToString();
            if (!string.IsNullOrEmpty(responseContent))
            {
                yield return responseContent;
            }
        }
    }
    

常见问题


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

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

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


如何使用我自己的 SLM 伴随?

示例存储库包含一个可用作伴随的示例 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. 选择应用

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

后续步骤

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