Резервное копирование и восстановление пользовательских моделей NER

При создании языкового ресурса необходимо указать регион, в котором он будет создан. После этого ресурс и все относящиеся к нему операции выполняются в указанном регионе сервера Azure. В редких случаях можно столкнуться с сетевой проблемой, которая затрагивает весь регион. Если ваше решение должно быть всегда доступно, необходимо разработать его таким образом, чтобы выполнялась отработка отказа в другой регион. Для этого требуется два языковых ресурса Azure в разных регионах и возможность синхронизации пользовательских моделей в них.

Если приложение или компания зависит от использования пользовательской модели NER, рекомендуется создать реплику проекта в другом поддерживаемом регионе. Если произойдет региональный сбой, вы сможете получить доступ к модели в другом регионе отработки отказа, куда вы реплицировали проект.

Под репликацией проекта понимается экспорт метаданных и ресурсов проекта и их импорт в новый проект. При этом создается только копия параметров проекта и данных с тегами. Вам по-прежнему нужно будет обучать и развертывать модели, чтобы они были доступны для использования с API прогнозирования.

В настоящей статье приведена информация о том, как использовать API экспорта и импорта для репликации проекта из одного ресурса в другой, находящийся в другом поддерживаемом географическом регионе, обеспечивать синхронизацию проектов и вносить изменения, необходимые для использования среды выполнения.

Предварительные требования

  • Два языковых ресурса Azure в разных регионах Azure. Создайте ресурсы и подключите их к учетной записи хранения Azure. Рекомендуется подключить оба языковых ресурса к одной и той же учетной записи хранения, хотя из-за этого может немного увеличиться задержка при импорте проекта и обучении модели.

Получение конечной точки ключей ресурсов

Для получения ключей и конечной точки основного и дополнительного ресурсов, выполните следующие действия. Эти значения понадобятся вам на последующих этапах.

  1. Перейдите на страницу обзора ресурса на портале Azure

  2. В меню слева выберите Ключи и конечная точка. Конечная точка и ключ вам понадобятся для запросов API.

    A screenshot showing the key and endpoint page in the Azure portal

Совет

Сохраните заметку о ключах и конечных точках для основного и дополнительного ресурсов. Используйте эти значения для замены следующих заполнителей: {PRIMARY-ENDPOINT}, {PRIMARY-RESOURCE-KEY}, {SECONDARY-ENDPOINT} и {SECONDARY-RESOURCE-KEY}. Кроме того, запишите имя проекта, имя модели и имя развертывания. Используйте эти значения для замены следующих заполнителей: {PROJECT-NAME}, {MODEL-NAME} и {DEPLOYMENT-NAME}.

Экспорт основных ресурсов проекта

Сначала экспортируйте ресурсы из проекта в основной ресурс.

Отправка задания на экспорт

Замените заполнители в следующем запросе своими значениями {PRIMARY-ENDPOINT} и {PRIMARY-RESOURCE-KEY}, полученными на первом шаге.

Создайте запрос POST, используя следующий URL-адрес, заголовки и текст JSON, чтобы экспортировать проект.

URL-адрес запроса

При создании запроса API используйте следующий URL-адрес. Замените значения заполнителей ниже собственными значениями.

{ENDPOINT}/language/authoring/analyze-text/projects/{PROJECT-NAME}/:export?stringIndexType=Utf16CodeUnit&api-version={API-VERSION}
Заполнитель Значение Пример
{ENDPOINT} Конечная точка для проверки подлинности запроса API. https://<your-custom-subdomain>.cognitiveservices.azure.com
{PROJECT-NAME} Имя проекта. Это значение учитывает регистр. MyProject
{API-VERSION} Версия вызываемого API. Значение, указанное здесь, является последней выпущенной версией модели. 2022-05-01

Заголовки

Используйте следующий заголовок для проверки подлинности запроса.

Клавиши Значение
Ocp-Apim-Subscription-Key Ключ к ресурсу. Используется для проверки подлинности запросов API.

Текст

Используйте следующий код JSON в тексте запроса, указав, что требуется экспортировать все ресурсы.

{
  "assetsToExport": ["*"]
}

После отправки запроса API вы получите ответ 202, указывающий, что задание было отправлено правильно. Извлеките значение operation-location из заголовков ответа. Оно будет иметь следующий формат:

{ENDPOINT}/language/authoring/analyze-text/projects/{PROJECT-NAME}/export/jobs/{JOB-ID}?api-version={API-VERSION}

{JOB-ID} используется для распознавания запроса, так как эта операция является асинхронной. Этот URL-адрес будет использоваться для получения состояния задания экспорта.

Получение сведений о состоянии задания на экспорт

Замените заполнители в следующем запросе своими значениями {PRIMARY-ENDPOINT} и {PRIMARY-RESOURCE-KEY}, полученными на первом шаге.

Используйте следующий запрос GET, чтобы получить состояние экспорта ресурсов проекта. Замените значения заполнителей ниже собственными значениями.

URL-адрес запроса

{ENDPOINT}/language/authoring/analyze-text/projects/{PROJECT-NAME}/export/jobs/{JOB-ID}?api-version={API-VERSION}
Заполнитель Значение Пример
{ENDPOINT} Конечная точка для проверки подлинности запроса API. https://<your-custom-subdomain>.cognitiveservices.azure.com
{PROJECT-NAME} Имя проекта. Это значение учитывает регистр. myProject
{JOB-ID} Идентификатор для поиска состояния обучения модели. Это значение находится в заголовке location, полученном на предыдущем шаге. xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx
{API-VERSION} Версия вызываемого API. Указанное здесь значение определяет последнюю выпущенную версию модели. Дополнительные сведения о других доступных версиях API см. в статье Жизненный цикл модели. 2022-05-01

Заголовки

Используйте следующий заголовок для проверки подлинности запроса.

Клавиши Значение
Ocp-Apim-Subscription-Key Ключ к ресурсу. Используется для проверки подлинности запросов API.

Текст ответа

{
  "resultUrl": "{RESULT-URL}",
  "jobId": "string",
  "createdDateTime": "2021-10-19T23:24:41.572Z",
  "lastUpdatedDateTime": "2021-10-19T23:24:41.572Z",
  "expirationDateTime": "2021-10-19T23:24:41.572Z",
  "status": "unknown",
  "errors": [
    {
      "code": "unknown",
      "message": "string"
    }
  ]
}

Вставьте в текст URL-адрес из ключа resultUrl, чтобы просмотреть экспортированные ресурсы из этого задания.

Получение результатов экспорта

Отправьте запрос GET, используя {RESULT-URL} (получено на предыдущем шаге), чтобы просмотреть результаты задания экспорта.

Заголовки

Используйте следующий заголовок для проверки подлинности запроса.

Клавиши Значение
Ocp-Apim-Subscription-Key Ключ к ресурсу. Используется для проверки подлинности запросов API.

Скопируйте текст ответа — он будет использоваться в качестве текста для следующего задания на импорт.

Импорт в новый проект

Теперь импортируйте экспортированные ресурсы проекта в новый проект в дополнительном регионе, чтобы можно было выполнить его репликацию.

Отправка задания на импорт

Замените заполнители в следующем запросе своими значениями {SECONDARY-ENDPOINT} и {SECONDARY-RESOURCE-KEY}, полученными на первом шаге.

Отправьте запрос POST, используя следующий URL-адрес, заголовки и текст JSON, чтобы импортировать файл меток. Убедитесь, что файл меток соответствует допустимому формату.

Если проект с таким именем уже существует, данные этого проекта заменяются.

{Endpoint}/language/authoring/analyze-text/projects/{projectName}/:import?api-version={API-VERSION}
Заполнитель Значение Пример
{ENDPOINT} Конечная точка для проверки подлинности запроса API. https://<your-custom-subdomain>.cognitiveservices.azure.com
{PROJECT-NAME} Имя проекта. Это значение учитывает регистр. myProject
{API-VERSION} Версия вызываемого API. Указанное здесь значение определяет последнюю выпущенную версию модели. Дополнительные сведения о других доступных версиях API см. в статье Жизненный цикл модели. 2022-05-01

Заголовки

Используйте следующий заголовок для проверки подлинности запроса.

Клавиши Значение
Ocp-Apim-Subscription-Key Ключ к ресурсу. Используется для проверки подлинности запросов API.

Текст

Используйте следующий код JSON в запросе. Замените значения заполнителей ниже собственными значениями.

{
    "projectFileVersion": "{API-VERSION}",
    "stringIndexType": "Utf16CodeUnit",
    "metadata": {
        "projectName": "{PROJECT-NAME}",
        "projectKind": "CustomEntityRecognition",
        "description": "Trying out custom NER",
        "language": "{LANGUAGE-CODE}",
        "multilingual": true,
        "storageInputContainerName": "{CONTAINER-NAME}",
        "settings": {}
    },
    "assets": {
    "projectKind": "CustomEntityRecognition",
        "entities": [
            {
                "category": "Entity1"
            },
            {
                "category": "Entity2"
            }
        ],
        "documents": [
            {
                "location": "{DOCUMENT-NAME}",
                "language": "{LANGUAGE-CODE}",
                "dataset": "{DATASET}",
                "entities": [
                    {
                        "regionOffset": 0,
                        "regionLength": 500,
                        "labels": [
                            {
                                "category": "Entity1",
                                "offset": 25,
                                "length": 10
                            },
                            {
                                "category": "Entity2",
                                "offset": 120,
                                "length": 8
                            }
                        ]
                    }
                ]
            },
            {
                "location": "{DOCUMENT-NAME}",
                "language": "{LANGUAGE-CODE}",
                "dataset": "{DATASET}",
                "entities": [
                    {
                        "regionOffset": 0,
                        "regionLength": 100,
                        "labels": [
                            {
                                "category": "Entity2",
                                "offset": 20,
                                "length": 5
                            }
                        ]
                    }
                ]
            }
        ]
    }
}
Клавиши Заполнитель Значение Пример
api-version {API-VERSION} Версия вызываемого API. Используемая здесь версия должна совпадать с версией API в URL-адресе. Узнайте больше о других доступных версиях API. 2022-03-01-preview
projectName {PROJECT-NAME} Имя проекта. Это значение учитывает регистр. myProject
projectKind CustomEntityRecognition Тип проекта. CustomEntityRecognition
language {LANGUAGE-CODE} Строка, указывающая код языка для документов, используемых в проекте. Если проект является многоязычным, выберите код языка большинства документов. en-us
multilingual true Логическое значение, которое позволяет иметь документы на нескольких языках в наборе данных. После развертывания модели вы можете отправить к ней запрос на любом поддерживаемом языке (не обязательно включенном в обучающие документы). Сведения о многоязычной поддержке см. в разделе Поддержка языков. true
storageInputContainerName {ИМЯ_КОНТЕЙНЕРА} Имя контейнера хранилища Azure, в который вы отправили документы. myContainer
entities Массив, содержащий все типы сущностей в проекте. Это типы сущностей, которые будут извлекаться из документов.
documents Массив, содержащий все документы в проекте и список сущностей, помеченных в каждом документе. []
location {DOCUMENT-NAME} Расположение документов в контейнере хранилища. Так как все документы находятся в корне контейнера, здесь содержится просто имя документа. doc1.txt
dataset {DATASET} Тестовый набор, в который будет перемещен этот файл при разделении перед обучением. Дополнительные сведения о разделении данных см. в разделе Обучение модели. Возможные значения для этого поля: Train и Test. Train

После отправки запроса API вы получите ответ 202, указывающий, что задание было отправлено правильно. Извлеките значение operation-location из заголовков ответа. Оно будет иметь следующий формат:

{ENDPOINT}/language/authoring/analyze-text/projects/{PROJECT-NAME}/import/jobs/{JOB-ID}?api-version={API-VERSION}

{JOB-ID} используется для распознавания запроса, так как эта операция является асинхронной. Этот URL-адрес будет использоваться для получения состояния задания импорта.

Возможные сценарии ошибок для этого запроса:

  • выбранный ресурс не имеет необходимых разрешений для учетной записи хранения;
  • указанный storageInputContainerName не существует;
  • используется недопустимый код языка или тип кода языка не является строковым;
  • Значение multilingual является строкой, а не логическим значением.

Получение сведений о состоянии задания на импорт

Замените заполнители в следующем запросе своими значениями {SECONDARY-ENDPOINT} и {SECONDARY-RESOURCE-KEY}, полученными на первом шаге.

Используйте следующий запрос GET, чтобы получить состояние импорта проекта. Замените значения заполнителей ниже собственными значениями.

URL-адрес запроса

{ENDPOINT}/language/authoring/analyze-text/projects/{PROJECT-NAME}/import/jobs/{JOB-ID}?api-version={API-VERSION}
Заполнитель Значение Пример
{ENDPOINT} Конечная точка для проверки подлинности запроса API. https://<your-custom-subdomain>.cognitiveservices.azure.com
{PROJECT-NAME} Имя проекта. Это значение учитывает регистр. myProject
{JOB-ID} Идентификатор для поиска состояния обучения модели. Значение заголовка location, полученное на предыдущем шаге. xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx
{API-VERSION} Версия вызываемого API. Указанное здесь значение определяет последнюю выпущенную версию модели. Дополнительные сведения о других доступных версиях API см. в статье Жизненный цикл модели. 2022-05-01

Заголовки

Используйте следующий заголовок для проверки подлинности запроса.

Клавиши Значение
Ocp-Apim-Subscription-Key Ключ к ресурсу. Используется для проверки подлинности запросов API.

Обучение модели

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

Отправка задания обучения

Замените заполнители в следующем запросе своими значениями {SECONDARY-ENDPOINT} и {SECONDARY-RESOURCE-KEY}, полученными на первом шаге.

Отправьте запрос POST, используя следующий URL-адрес, заголовки и текст JSON, чтобы отправить задание обучения. Замените значения заполнителей ниже собственными значениями.

{ENDPOINT}/language/authoring/analyze-text/projects/{PROJECT-NAME}/:train?api-version={API-VERSION}
Заполнитель Значение Пример
{ENDPOINT} Конечная точка для проверки подлинности запроса API. https://<your-custom-subdomain>.cognitiveservices.azure.com
{PROJECT-NAME} Имя проекта. Это значение учитывает регистр. myProject
{API-VERSION} Версия вызываемого API. Указанное здесь значение определяет последнюю выпущенную версию модели. Дополнительные сведения о других доступных версиях API см. в статье Жизненный цикл модели. 2022-05-01

Заголовки

Используйте следующий заголовок для проверки подлинности запроса.

Клавиши Значение
Ocp-Apim-Subscription-Key Ключ к ресурсу. Используется для проверки подлинности запросов API.

Текст запроса

Используйте следующий код JSON в тексте запроса. После завершения обучения модель получит имя {MODEL-NAME}. Модели создаются только в результате успешных заданий обучения.

{
	"modelLabel": "{MODEL-NAME}",
	"trainingConfigVersion": "{CONFIG-VERSION}",
	"evaluationOptions": {
		"kind": "percentage",
		"trainingSplitPercentage": 80,
		"testingSplitPercentage": 20
	}
}
Клавиши Заполнитель Значение Пример
modelLabel {MODEL-NAME} Имя модели, которое будет назначено ей после успешного обучения. myModel
trainingConfigVersion {CONFIG-VERSION} Это версия модели, которая будет использоваться для обучения модели. 2022-05-01
evaluationOptions Возможность разделять данные по наборам для обучения и тестирования. {}
kind percentage Методы разделения. Возможные значения: percentage или manual. Дополнительные сведения см. в разделе Обучение модели. percentage
trainingSplitPercentage 80 Процент помеченных тегами данных, которые будут включены в набор для обучения. Рекомендуемое значение — 80. 80
testingSplitPercentage 20 Процент помеченных тегами данных, которые будут включены в набор для тестирования. Рекомендуемое значение — 20. 20

Примечание

trainingSplitPercentage и testingSplitPercentage требуются только в том случае, если для Kind задано значение percentage, а сумма процентных значений должна быть равна 100.

После отправки запроса API вы получите ответ 202, указывающий, что задание было отправлено правильно. Извлеките значение location из заголовков ответа. Оно будет иметь следующий формат:

{ENDPOINT}/language/authoring/analyze-text/projects/{PROJECT-NAME}/train/jobs/{JOB-ID}?api-version={API-VERSION}

{JOB-ID} используется для распознавания запроса, так как эта операция является асинхронной. Этот URL-адрес можно использовать для получения состояния обучения.

Получение состояния обучения

Замените заполнители в следующем запросе своими значениями {SECONDARY-ENDPOINT} и {SECONDARY-RESOURCE-KEY}, полученными на первом шаге.

Используйте следующий запрос GET, чтобы получить состояние хода обучения модели. Замените значения заполнителей ниже собственными значениями.

URL-адрес запроса

{ENDPOINT}/language/authoring/analyze-text/projects/{PROJECT-NAME}/train/jobs/{JOB-ID}?api-version={API-VERSION}
Заполнитель Значение Пример
{ENDPOINT} Конечная точка для проверки подлинности запроса API. https://<your-custom-subdomain>.cognitiveservices.azure.com
{PROJECT-NAME} Имя проекта. Это значение учитывает регистр. myProject
{JOB-ID} Идентификатор для поиска состояния обучения модели. Значение заголовка location, полученное на предыдущем шаге. xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx
{API-VERSION} Версия вызываемого API. Указанное здесь значение определяет последнюю выпущенную версию модели. Дополнительные сведения о других доступных версиях API см. в статье Жизненный цикл модели. 2022-05-01

Заголовки

Используйте следующий заголовок для проверки подлинности запроса.

Клавиши Значение
Ocp-Apim-Subscription-Key Ключ к ресурсу. Используется для проверки подлинности запросов API.

Текст ответа

После отправки запроса вы получите следующий ответ.

{
  "result": {
    "modelLabel": "{MODEL-NAME}",
    "trainingConfigVersion": "{CONFIG-VERSION}",
    "estimatedEndDateTime": "2022-04-18T15:47:58.8190649Z",
    "trainingStatus": {
      "percentComplete": 3,
      "startDateTime": "2022-04-18T15:45:06.8190649Z",
      "status": "running"
    },
    "evaluationStatus": {
      "percentComplete": 0,
      "status": "notStarted"
    }
  },
  "jobId": "{JOB-ID}",
  "createdDateTime": "2022-04-18T15:44:44Z",
  "lastUpdatedDateTime": "2022-04-18T15:45:48Z",
  "expirationDateTime": "2022-04-25T15:44:44Z",
  "status": "running"
}

Развертывание модели

На этом шаге вы делаете свою обученную модель доступной для использования через API прогнозирования среды выполнения.

Совет

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

Отправка задания развертывания

Замените заполнители в следующем запросе своими значениями {SECONDARY-ENDPOINT} и {SECONDARY-RESOURCE-KEY}, полученными на первом шаге.

Отправьте запрос PUT, используя следующий URL-адрес, заголовки и текст JSON, чтобы отправить задание развертывания. Замените значения заполнителей ниже собственными значениями.

{Endpoint}/language/authoring/analyze-text/projects/{projectName}/deployments/{deploymentName}?api-version={API-VERSION}
Заполнитель Значение Пример
{ENDPOINT} Конечная точка для проверки подлинности запроса API. https://<your-custom-subdomain>.cognitiveservices.azure.com
{PROJECT-NAME} Имя проекта. Это значение учитывает регистр. myProject
{DEPLOYMENT-NAME} Имя развертывания. Это значение учитывает регистр. staging
{API-VERSION} Версия вызываемого API. Указанное здесь значение определяет последнюю выпущенную версию модели. Дополнительные сведения о других доступных версиях API см. в статье Жизненный цикл модели. 2022-05-01

Заголовки

Используйте следующий заголовок для проверки подлинности запроса.

Клавиши Значение
Ocp-Apim-Subscription-Key Ключ к ресурсу. Используется для проверки подлинности запросов API.

Текст запроса

Используйте следующий код JSON в тексте запроса. Используйте имя модели, назначаемое развертыванию.

{
  "trainedModelLabel": "{MODEL-NAME}"
}
Клавиши Заполнитель Значение Пример
trainedModelLabel {MODEL-NAME} Имя модели, которое будет назначено развертыванию. Имена можно назначить только успешно обученным моделям. Это значение учитывает регистр. myModel

После отправки запроса API вы получите ответ 202, указывающий, что задание было отправлено правильно. Извлеките значение operation-location из заголовков ответа. Оно будет иметь следующий формат:

{ENDPOINT}/language/authoring/analyze-text/projects/{PROJECT-NAME}/deployments/{DEPLOYMENT-NAME}/jobs/{JOB-ID}?api-version={API-VERSION}

{JOB-ID} используется для распознавания запроса, так как эта операция является асинхронной. Этот URL-адрес можно использовать для получения состояния развертывания.

Получение состояния развертывания

Замените заполнители в следующем запросе своими значениями {SECONDARY-ENDPOINT} и {SECONDARY-RESOURCE-KEY}, полученными на первом шаге.

Используйте следующий запрос GET для запроса состояния задания развертывания. Используйте URL-адрес, полученный на предыдущем шаге, или замените приведенные ниже значения заполнителей собственными значениями.

{ENDPOINT}/language/authoring/analyze-text/projects/{PROJECT-NAME}/deployments/{DEPLOYMENT-NAME}/jobs/{JOB-ID}?api-version={API-VERSION}
Заполнитель Значение Пример
{ENDPOINT} Конечная точка для проверки подлинности запроса API. https://<your-custom-subdomain>.cognitiveservices.azure.com
{PROJECT-NAME} Имя проекта. Это значение учитывает регистр. myProject
{DEPLOYMENT-NAME} Имя развертывания. Это значение учитывает регистр. staging
{JOB-ID} Идентификатор для поиска состояния обучения модели. Это значение находится в заголовке location, полученном на предыдущем шаге. xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx
{API-VERSION} Версия вызываемого API. Указанное здесь значение определяет последнюю выпущенную версию модели. Дополнительные сведения о других доступных версиях API см. в статье Жизненный цикл модели. 2022-05-01

Заголовки

Используйте следующий заголовок для проверки подлинности запроса.

Клавиши Значение
Ocp-Apim-Subscription-Key Ключ к ресурсу. Используется для проверки подлинности запросов API.

Текст ответа

После отправки запроса вы получите следующий ответ. Продолжайте опрос этой конечной точки до тех пор, пока значение параметра Состояние не изменится на "Выполнено". Необходимо получить код 200, указывающий на успешное выполнение запроса.

{
    "jobId":"{JOB-ID}",
    "createdDateTime":"{CREATED-TIME}",
    "lastUpdatedDateTime":"{UPDATED-TIME}",
    "expirationDateTime":"{EXPIRATION-TIME}",
    "status":"running"
}

Изменения при вызове среды выполнения

В системе на этапе вызова API прогнозирования среды выполнения проверьте код ответа, возвращаемого с API отправки задачи. Если вы наблюдаете постоянный сбой при отправке запроса, возможной причиной этому может быть нарушение работоспособности в основном регионе. Однократный сбой не указывает на нарушение работоспособности и может быть временной проблемой. Попробуйте отправить задание через созданный дополнительный ресурс. Для второго запроса используйте {SECONDARY-ENDPOINT} и {SECONDARY-RESOURCE-KEY}. Если вы выполнили описанные выше действия, {PROJECT-NAME} и {DEPLOYMENT-NAME} будут одинаковыми, поэтому изменять текст запроса не потребуется.

Если вы вернетесь к использованию дополнительного ресурса, задержка немного увеличится из-за разницы в регионах, где развернута модель.

Убедитесь, что ваши проекты синхронизированы

Поддержание актуальности обоих проектов является важной частью процесса. Необходимо регулярно проверять, вносились ли какие-нибудь обновления в основной проект, чтобы перемещать их в дополнительный проект. Таким образом, если в основном регионе произойдет сбой и вы перейдете в дополнительный регион, вы сможете рассчитывать на схожую производительность модели, так как она уже содержит последние обновления. Настройка частоты проверки синхронизации проектов требует особого внимания. Мы рекомендуем выполнять такую проверку ежедневно, чтобы гарантировать актуальность данных в дополнительной модели.

Получение сведений о проекте

Используйте следующий URL-адрес, чтобы получить сведения о проекте. Один из ключей, возвращаемых в тексте, указывает дату последнего изменения проекта. Повторите следующий шаг дважды — один раз для основного проекта и второй для дополнительного проекта. Сравните полученные для них метки времени и убедитесь, что проекты синхронизированы.

Используйте следующий запрос GET для получения сведений о проекте. Замените значения заполнителей ниже собственными значениями.

{ENDPOINT}/language/authoring/analyze-text/projects/{PROJECT-NAME}?api-version={API-VERSION}
Заполнитель Значение Пример
{ENDPOINT} Конечная точка для проверки подлинности запроса API. https://<your-custom-subdomain>.cognitiveservices.azure.com
{PROJECT-NAME} Имя проекта. Это значение учитывает регистр. myProject
{API-VERSION} Версия вызываемого API. Указанное здесь значение определяет последнюю выпущенную версию модели. Дополнительные сведения о других доступных версиях API см. в статье Жизненный цикл модели. 2022-05-01

Заголовки

Используйте следующий заголовок для проверки подлинности запроса.

Клавиши Значение
Ocp-Apim-Subscription-Key Ключ к ресурсу. Используется для проверки подлинности запросов API.

Текст ответа

    {
        "createdDateTime": "2021-10-19T23:24:41.572Z",
        "lastModifiedDateTime": "2021-10-19T23:24:41.572Z",
        "lastTrainedDateTime": "2021-10-19T23:24:41.572Z",
        "lastDeployedDateTime": "2021-10-19T23:24:41.572Z",
        "projectKind": "CustomEntityRecognition",
        "storageInputContainerName": "{CONTAINER-NAME}",
        "projectName": "{PROJECT-NAME}",
        "multilingual": false,
        "description": "Project description",
        "language": "{LANGUAGE-CODE}"
    }

Повторите те же шаги для реплицируемого проекта с помощью {SECONDARY-ENDPOINT} и {SECONDARY-RESOURCE-KEY}. Сравните возвращенный lastModifiedDateTime из обоих проектов. Если ваш основной проект был изменен раньше, чем дополнительный, необходимо повторить шаги по экспорту, импорту, обучению и развертыванию.

Дальнейшие действия

Из этой статьи вы узнали, как с помощью API экспорта и импорта реплицировать проект в дополнительный языковой ресурс в другом регионе. Далее предлагаем изучить справочную документацию по API, чтобы узнать о других возможностях API разработки.