路易士Azure DevOps管道,如何创建任何样本?

问题描述 投票:2回答:1

有一个需求,创建Azure Devops管道,它可以支持版本,添加文件到应用程序,培训,测试和amp; 发布应用程序到阶段和amp; 生产。

如何通过Azure Devops管道来完成。任何文档或步骤可能是有帮助的。

谢谢A.Prabhuram

azure-devops luis azure-devops-rest-api
1个回答
1
投票

我已经通过Azure CLI(PowerShell 2.X版)任务做了类似的事情,但它不是直接的。我还没有完成你上面提到的所有步骤,但希望这将为你提供你需要的东西,以进一步建立它。

作为基线,你所需要的功能概述于 路易士程序化API. 你将需要LUIS密钥和应用程序ID来处理大多数请求,你可以通过以下方式获得。

$LUISKEY= & az cognitiveservices account keys list -g "resourceGroupName" --name "LUISauthoringKeyName" --query key1 -o tsv

$header = @{"Ocp-Apim-Subscription-Key"="$LUISKEY"}

$res = Invoke-RestMethod -Uri "https://westus.api.cognitive.microsoft.com/luis/authoring/v3.0-preview/apps/?take=1" -Method 'Get' -Headers $header

$appid = $res.id

为了简洁起见,我不重复这段代码。但是,如果你在你的流水线中有单独的任务或代理工作(而不是作为一个脚本来做,我不推荐这样做),你将需要为每个任务重复这些语句。请注意区域,并根据你的创作资源的需要进行修改。

很明显,要更新你的LUIS版本,你需要有模型定义。我不经常这样做,因为我们被设置为在QA和PROD中使用相同的LUIS应用程序。因此,如果我需要通过DevOps运行它,我只是将一个新版本添加到项目repo中。然后我将repo添加为发布管道的一个工件。但你应该能够使用 导出应用版本API 来获得它的程序,虽然我个人还没有尝试过。下面是我添加新版本的方法。

$body = Get-Content '$(System.DefaultWorkingDirectory)/_AveryCreek_OEM_CSC_Bot/models/luis/AveryCreek OEM_CSC Team.json' | Out-String

Invoke-RestMethod -Uri "https://westus.api.cognitive.microsoft.com/luis/authoring/v3.0-preview/apps/$appid/versions/import" -Method 'Post' -Body $body -Headers $header

注意,这个版本不是加法的 将完全取代您以前的版本 (尽管您可以恢复)。换句话说,如果你对以前的版本进行了修改,但没有纳入到你正在导入的版本中,它们将丢失。这是我们不在每个环境中使用单独的LUIS应用程序的主要原因之一(侧边栏--你可以使用单独的LUIS应用程序)。预测 资源,这样你在测试时就不会使用生产能力,但所有的终端语句仍然会通向一个应用程序)。)

一旦导入版本,你需要训练和发布它。我个人没有内置任何测试,但我相信你可以通过建立一些调用 路易士预测API 并检查预期的结果。要进行训练,首先需要抓取版本,然后调用训练端点。

$res = Invoke-RestMethod -Uri "https://westus.api.cognitive.microsoft.com/luis/authoring/v3.0-preview/apps/$appid/versions" -Method 'Get' -Headers $header

$version = $res[0].version

Invoke-RestMethod -Uri "https://westus.api.cognitive.microsoft.com/luis/authoring/v3.0-preview/apps/$appid/versions/$version/train" -Method 'Post' -Headers $header

接下来的部分是最棘手的。在应用程序完成训练之前,你不能发布它。为了减少在准备好之前尝试发布的风险,我在 "训练和发布 "任务中创建了一个单独的代理工作来延迟它。

Agent jobs for Train and Publish

这通常是足够的延迟,但我也有一个对训练状态的检查,如果它还没有准备好,就会抛出一个错误。下面是获取和检查状态,然后发布的片段。

$status = Invoke-RestMethod -Uri "https://westus.api.cognitive.microsoft.com/luis/authoring/v3.0-preview/apps/$appid/versions/$version/train" -Method 'Get' -Headers $header

if ($status.details[0].status -ne "Success" -and $status.details[0].status -ne "UpToDate") { throw }

Invoke-RestMethod -Uri "https://westus.api.cognitive.microsoft.com/luis/authoring/v3.0-preview/apps/$appid/publish" -Method 'Post' -Body $body -Headers $header

这样应该就可以了! 正如我所提到的,注意确保你在每个任务中定义LUIS Key和App ID等内容,因为我没有在这里重复所有这些值。而且你可以添加额外的任务来编程导出版本(确保你的源应用程序得到正确的密钥),并根据需要测试模型。

© www.soinside.com 2019 - 2024. All rights reserved.