你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本教程介绍如何在 Azure 应用服务上部署与 Phi-4 sidecar 扩展集成的 ASP.NET Core 聊天机器人应用程序。 通过执行这些步骤,你将了解如何设置可缩放的 Web 应用、添加 AI 支持的 sidecar 来增强聊天功能,以及测试聊天机器人的功能。
托管自己的小型语言模型(SLM)具有以下优点:
- 完全掌控您的数据。 敏感信息不会向外部服务公开,这对符合性要求严格的行业至关重要。
- 可以微调自托管模型以满足特定用例或领域特定要求。
- 最大程度地减少网络延迟和更快的响应时间,以提供更好的用户体验。
- 完全控制资源分配,确保应用程序的最佳性能。
先决条件
部署示例应用程序
在浏览器中,导航到 示例应用程序存储库。
从存储库中启动新的 Codespace。
使用 Azure 帐户登录:
az login
在 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 应用程序。
- 导航到 Azure 门户并转到应用的管理页。
- 在左侧菜单中,选择 “部署>部署中心”。
- 在“容器”选项卡上,选择“添加”>“伴随扩展”。
- 在挎斗扩展选项中,选择“AI:phi-4-q4-gguf (实验)”。
- 提供伴随扩展的名称。
- 选择保存以应用更改。
- 请等待几分钟,以便部署伴随扩展。 继续选择 “刷新 ”,直到 状态 列显示 “正在运行”。
此 Phi-4 挎斗扩展使用聊天补全 API(如 OpenAI),可以在 http://localhost:11434/v1/chat/completions
对聊天补全响应做出响应。 有关如何与 API 交互的详细信息,请参阅:
测试聊天机器人
在应用的管理页的左侧菜单中,选择“ 概述”。
在 “默认域”下,选择 URL 以在浏览器中打开 Web 应用。
验证聊天机器人应用程序是否正在运行并响应用户输入。
示例应用程序的工作原理
示例应用程序演示如何将 .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。
以本地方式克隆存储库。
git clone https://github.com/Azure-Samples/ai-slm-in-app-service-sidecar cd ai-slm-in-app-service-sidecar
切换到 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 复制模型。
生成 Docker 映像。 例如:
docker build --tag phi-3 .
使用 Docker CLI 将生成的映像上传到 Azure 容器注册表,并将 第一个映像推送到 Azure 容器注册表。
在 “部署中心>容器”选项卡中 ,选择“ 添加>自定义容器 ”,然后配置新容器,如下所示:
- 名称:phi-3
- 映像源:Azure 容器注册表
- 注册表:你的注册表
- 图像:上传的图像
- 标记:所需的图像标记
- 端口: 8000
选择应用。
有关与此自定义伴随容器交互的示例应用程序,请参阅 bring_your_own_slm/src/webapp。