LUIS Azure DevOps конвейер, как создавать какие-либо образцы? - PullRequest
2 голосов
/ 22 апреля 2020

Требуется создать Azure конвейер Devops, который мог бы поддерживать версию, добавить файл в приложение, обучить, протестировать и опубликовать приложение sh в рабочей области и производстве.

Как это можно сделать через Azure Девопс Трубопровод. Любая документация или шаги могут быть полезны.

Спасибо A.Prabhuram

1 Ответ

2 голосов
/ 22 апреля 2020

Я сделал нечто подобное с помощью Azure CLI (PowerShell version 2.X), но это не так просто. Я не выполнил все шаги, как вы упомянули выше, но, надеюсь, это даст вам то, что вам нужно для дальнейшего развития на нем.

В качестве основы, необходимые вам функции описаны в LUIS Programmati c API . Для большинства запросов вам понадобятся ключ LUIS и идентификатор приложения, которые вы можете получить через

$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, вам нужно иметь определение модели. Я делаю это не часто, так как мы настроены на использование одного и того же приложения LUIS в QA и PROD. Поэтому я просто добавляю новую версию в репозиторий проекта, если мне нужно запустить ее через DevOps. Затем я добавляю репозиторий в качестве артефакта для конвейера выпуска. Но вы должны быть в состоянии использовать 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 для каждой среды (боковая панель - вы можете использовать отдельные ресурсы предсказание , чтобы не использовать производственную мощность во время тестирования, но все же высказывания конечной точки все еще go до одного приложения).

Как только версия импортирована, вам нужно обучить и опубликовать ее sh. Лично у меня нет встроенного тестирования, но я уверен, что вы могли бы создать некоторые вызовы с помощью 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

Следующая часть самая сложная. Вы не можете опубликовать sh приложение, пока оно не закончило обучение. Чтобы снизить риск попытки опубликовать sh до его готовности, я создал отдельное задание агента в своей задаче «Поезд и публикация sh», чтобы отложить его.

Agent jobs for Train and Publish

Обычно это достаточно для задержки, но у меня также есть проверка состояния тренировки и выдается ошибка, если она не готова. Вот фрагмент, чтобы получить и проверить статус, а затем опубликовать sh.

$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 и идентификатор приложения, так как здесь я не повторил все эти значения. И вы можете добавить дополнительные задачи, чтобы программно экспортировать версию (убедитесь, что вы получили правильный ключ для вашего исходного приложения) и протестировать модель по желанию.

...