LUIS Azure DevOps管道,如何创建任何示例?

时间:2020-04-22 12:14:27

标签: azure-devops azure-language-understanding azure-devops-rest-api

有一个要求,即创建可以支持版本的Azure Devops管道,将文件添加到应用程序中,对应用程序进行培训,测试并将其发布到Stage&Production中。

如何通过Azure Devops Pipeline完成它。任何文档或步骤都可能会有所帮助。

谢谢 巴拉胡拉姆

1 个答案:

答案 0 :(得分:1)

我已经通过Azure CLI(PowerShell版本2.X)任务完成了类似的操作,但这不是直接的。我没有按照您上面提到的那样完成所有步骤,但是希望这会给您进一步发展的基础。

LUIS Programmatic 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版本,您需要具有模型定义。由于我们已设置为在质量检查和PROD中使用相同的LUIS应用程序,因此我不经常这样做。因此,如果需要通过DevOps运行它,我只是将新版本添加到项目仓库中。然后,将回购作为发布管道的工件添加。但是您应该可以使用Export Application Version 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应用程序的主要原因之一(边栏-您可以使用单独的 predicition 资源,因此您在测试时不使用生产能力,但是所有端点说明仍然进入一个应用程序。)

一旦导入了版本,就需要对其进行培训和发布。我个人没有内置任何测试,但是我敢肯定您可以通过LUIS Prediction 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之类的内容,因为在此我没有重复所有这些值。而且,您可以添加其他任务以编程方式导出版本(确保为源应用程序获取正确的密钥)并根据需要测试模型。