Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
在 Azure 门户中创建语言资源时,需要指定要在其中创建它的区域。 此后,资源及其相关的所有操作都发生在指定的 Azure 服务器区域中。 有时我们会遇到影响整个区域的网络问题,这种情况比较罕见,但也不是没有可能。 如果你的解决方案需要始终可用,则应将其设计为故障转移到另一个区域。 此过程需要不同区域中的两个 Azure 语言资源,并且能够跨区域同步业务流程工作流模型。
如果应用或业务依赖于业务流程工作流模型的使用,建议将项目副本创建到另一个受支持的区域。 这样,如果发生区域性中断,则可以在复制项目的其他故障转移区域中访问模型。
复制项目意味着要导出项目元数据和资产,并将其导入到新项目中。 此步骤仅复制项目设置、意图和语句。 在使用运行时 API 来查询模型之前,仍需要训练和部署模型。
本文介绍如何使用导出和导入 API 将项目从一个资源复制到其他受支持的地理区域中的现有资源。
先决条件
- 不同 Azure 区域中的两个语言资源,每个资源位于不同的区域中。
获取资源密钥终结点
执行以下步骤获取主要资源和辅助资源的密钥与终结点。
在 Azure 门户中,转到资源概述页面。 在左侧菜单中,选择"密钥和终结点”。 你将为 API 请求使用终结点和密钥。
小窍门
请记下主要资源和辅助资源的密钥和终结点。 使用这些值替换以下占位符: {PRIMARY-ENDPOINT}、 {PRIMARY-RESOURCE-KEY}、 {SECONDARY-ENDPOINT}和 {SECONDARY-RESOURCE-KEY}。
另请记下项目名称、模型名称和部署名称。 使用这些值替换以下占位符: {PROJECT-NAME}、 {MODEL-NAME}和 {DEPLOYMENT-NAME}。
导出主要项目资产
首先,从主要资源中的项目导出项目资产。
提交导出作业
将以下请求中的占位符替换为在第一步中获取的 {PRIMARY-ENDPOINT} 和 {PRIMARY-RESOURCE-KEY}。
使用以下 URL、标头和 JSON 正文创建 POST 请求,以导出项目。
请求的 URL
创建 API 请求时,请使用以下 URL。 将占位符中的值替换为您自己的值。
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/:export?stringIndexType=Utf16CodeUnit&api-version={API-VERSION}
| Placeholder | 价值 | Example |
|---|---|---|
{ENDPOINT} |
用于对 API 请求进行身份验证的终结点。 | https://<your-custom-subdomain>.cognitiveservices.azure.cn |
{PROJECT-NAME} |
项目名称。 此值区分大小写。 | EmailApp |
{API-VERSION} |
要调用的 API 的版本。 | 2023-04-01 |
Headers
使用以下标头对请求进行身份验证。
| Key | 价值 |
|---|---|
Ocp-Apim-Subscription-Key |
资源的键。 用于对 API 请求进行身份验证。 |
发送 API 请求后,会收到指示 202 成功的响应。 在响应标头中,提取 operation-location 格式如下的值:
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/jobs/{JOB-ID}?api-version={API-VERSION}
JOB-ID 用于标识请求,因为此操作是异步操作。 使用此 URL 可以通过相同的身份验证方法获取导出的项目 JSON。
获取导出作业状态
将以下请求中的占位符替换为在第一步中获取的 {PRIMARY-ENDPOINT} 和 {PRIMARY-RESOURCE-KEY}。
使用以下 GET 请求来查询导出作业的状态。 可以使用在上一步中收到的 URL,或者将占位符值替换为自己的值。
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/export/jobs/{JOB-ID}?api-version={API-VERSION}
| Placeholder | 价值 | Example |
|---|---|---|
{ENDPOINT} |
用于对 API 请求进行身份验证的终结点。 | https://<your-custom-subdomain>.cognitiveservices.azure.cn |
{PROJECT-NAME} |
项目名称。 此值区分大小写。 | myProject |
{JOB-ID} |
用于查找导出作业状态的 ID。 它位于 location 上一步收到的标头值中。 |
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx |
{API-VERSION} |
要调用的 API 的版本。 | 2023-04-01 |
Headers
使用以下标头对请求进行身份验证。
| Key | Description | 价值 |
|---|---|---|
Ocp-Apim-Subscription-Key |
资源的键。 用于对 API 请求进行身份验证。 | {YOUR-PRIMARY-RESOURCE-KEY} |
响应体
{
"resultUrl": "{Endpoint}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/export/jobs/xxxxxx-xxxxx-xxxxx-xx/result?api-version={API-VERSION}",
"jobId": "xxxx-xxxxx-xxxxx-xxx",
"createdDateTime": "2022-04-18T15:23:07Z",
"lastUpdatedDateTime": "2022-04-18T15:23:08Z",
"expirationDateTime": "2022-04-25T15:23:07Z",
"status": "succeeded"
}
使用 resultUrl 密钥中的 URL 来查看此作业中导出的资源。
获取导出结果
使用你从上一步骤收到的 提交 GET 请求,以查看导出作业的结果{RESULT-URL}。
Headers
使用以下标头对请求进行身份验证。
| Key | Description | 价值 |
|---|---|---|
Ocp-Apim-Subscription-Key |
资源的键。 用于对 API 请求进行身份验证。 | {PRIMARY-RESOURCE-KEY} |
复制响应正文以用作下一个导入作业的正文。
导入到新项目
现在继续,在次要区域的新项目中导入已导出的项目资产,以便可以复制该资产。
提交导入作业
将以下请求中的占位符替换为你的 {SECONDARY-ENDPOINT} 和你在第一步中获取的 {SECONDARY-RESOURCE-KEY}。
使用以下 URL、标头和 JSON 正文提交 POST 请求,以导入项目。
请求的 URL
创建 API 请求时,请使用以下 URL。 将占位符中的值替换为您自己的值。
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/:import?api-version={API-VERSION}
| Placeholder | 价值 | Example |
|---|---|---|
{ENDPOINT} |
用于对 API 请求进行身份验证的终结点。 | https://<your-custom-subdomain>.cognitiveservices.azure.cn |
{PROJECT-NAME} |
项目名称。 此值区分大小写。 | myProject |
{API-VERSION} |
要调用的 API 的版本。 | 2023-04-01 |
Headers
使用以下标头对请求进行身份验证。
| Key | 价值 |
|---|---|
Ocp-Apim-Subscription-Key |
资源的键。 用于对 API 请求进行身份验证。 |
Body
注释
每个意向只能是一种类型(CLU、LUIS 和 qna 中的一种)
使用以下示例 JSON 作为正文。
{
"projectFileVersion": "{API-VERSION}",
"stringIndexType": "Utf16CodeUnit",
"metadata": {
"projectKind": "Orchestration",
"settings": {
"confidenceThreshold": 0
},
"projectName": "{PROJECT-NAME}",
"description": "Project description",
"language": "{LANGUAGE-CODE}"
},
"assets": {
"projectKind": "Orchestration",
"intents": [
{
"category": "string",
"orchestration": {
"kind": "luis",
"luisOrchestration": {
"appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"appVersion": "string",
"slotName": "string"
},
"cluOrchestration": {
"projectName": "string",
"deploymentName": "string"
},
"qnaOrchestration": {
"projectName": "string"
}
}
}
],
"utterances": [
{
"text": "Trying orchestration",
"language": "{LANGUAGE-CODE}",
"intent": "string"
}
]
}
}
| Key | Placeholder | 价值 | Example |
|---|---|---|---|
api-version |
{API-VERSION} |
要调用的 API 的版本。 此处使用的版本必须与 URL 中的 API 版本相同。 | 2022-03-01-preview |
projectName |
{PROJECT-NAME} |
项目名称。 此值区分大小写。 | EmailApp |
language |
{LANGUAGE-CODE} |
指定项目中所用语句的语言代码的字符串。 如果您的项目是多语言项目,请为大多数话语选择语言代码。 | en-us |
获取导入作业状态
将以下请求中的占位符替换为你的 {SECONDARY-ENDPOINT} 和你在第一步中获取的 {SECONDARY-RESOURCE-KEY}。
使用以下 GET 请求来查询导入作业的状态。 可以使用在上一步中收到的 URL,或者将占位符值替换为自己的值。
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/import/jobs/{JOB-ID}?api-version={API-VERSION}
| Placeholder | 价值 | Example |
|---|---|---|
{ENDPOINT} |
用于对 API 请求进行身份验证的终结点。 | https://<your-custom-subdomain>.cognitiveservices.azure.cn |
{PROJECT-NAME} |
项目名称。 此值区分大小写。 | myProject |
{JOB-ID} |
用于查找导出作业状态的 ID。 它位于 location 上一步收到的标头值中。 |
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx |
{API-VERSION} |
要调用的 API 的版本。 | 2023-04-01 |
Headers
使用以下标头对请求进行身份验证。
| Key | Description | 价值 |
|---|---|---|
Ocp-Apim-Subscription-Key |
资源的键。 用于对 API 请求进行身份验证。 | {YOUR-PRIMARY-RESOURCE-KEY} |
响应体
发送请求后,会收到以下响应。 继续轮询此终结点,直到“状态”参数变为“已成功”。
{
"jobId": "xxxxx-xxxxx-xxxx-xxxxx",
"createdDateTime": "2022-04-18T15:17:20Z",
"lastUpdatedDateTime": "2022-04-18T15:17:22Z",
"expirationDateTime": "2022-04-25T15:17:20Z",
"status": "succeeded"
}
训练模型
导入项目后,仅复制了项目的资产和元数据和资产。 你仍然需要训练你的模型,这会在你的帐户上产生消耗。
提交训练作业
将以下请求中的占位符替换为你的 {SECONDARY-ENDPOINT} 和你在第一步中获取的 {SECONDARY-RESOURCE-KEY}。
使用以下 URL、标头和 JSON 正文创建 POST 请求以提交训练作业。
请求的 URL
创建 API 请求时,请使用以下 URL。 将占位符中的值替换为您自己的值。
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/:train?api-version={API-VERSION}
| Placeholder | 价值 | Example |
|---|---|---|
{ENDPOINT} |
用于对 API 请求进行身份验证的终结点。 | https://<your-custom-subdomain>.cognitiveservices.azure.cn |
{PROJECT-NAME} |
项目名称。 此值区分大小写。 | EmailApp |
{API-VERSION} |
要调用的 API 的版本。 | 2023-04-01 |
Headers
使用以下标头对请求进行身份验证。
| Key | 价值 |
|---|---|
Ocp-Apim-Subscription-Key |
资源的键。 用于对 API 请求进行身份验证。 |
请求主体
在请求中使用以下对象。 完成训练后,该模型将被命名为 MyModel。
{
"modelLabel": "{MODEL-NAME}",
"trainingMode": "standard",
"trainingConfigVersion": "{CONFIG-VERSION}",
"evaluationOptions": {
"kind": "percentage",
"testingSplitPercentage": 20,
"trainingSplitPercentage": 80
}
}
| Key | Placeholder | 价值 | Example |
|---|---|---|---|
modelLabel |
{MODEL-NAME} |
模型名称。 | Model1 |
trainingMode |
standard |
训练模式。 业务流程中只有一种可用的训练模式,即 standard。 |
standard |
trainingConfigVersion |
{CONFIG-VERSION} |
训练配置模型版本。 默认情况下将使用最新的模型版本。 | 2022-05-01 |
kind |
percentage |
拆分方法。 可能的值为 percentage 或 manual。 有关详细信息,请参阅如何训练模型。 |
percentage |
trainingSplitPercentage |
80 |
要包含在训练集中的已标记数据的百分比。 建议的值为 80。 |
80 |
testingSplitPercentage |
20 |
要包含在测试集中的已标记数据的百分比。 建议的值为 20。 |
20 |
注释
仅当 trainingSplitPercentage 设置为 testingSplitPercentage 时 Kind 和 percentage 才是必需的,并且两个百分比的总和应等于 100。
发送 API 请求后,会收到指示 202 成功的响应。 在响应标头中,提取 operation-location 格式如下的值:
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/train/jobs/{JOB-ID}?api-version={API-VERSION}
可以使用此 URL 获取训练作业状态。
获取定型状态
将以下请求中的占位符替换为你的 {SECONDARY-ENDPOINT} 和你在第一步中获取的 {SECONDARY-RESOURCE-KEY}。
使用以下 GET 请求来获取模型在训练过程中的状态。 将占位符中的值替换为您自己的值。
请求的 URL
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/train/jobs/{JOB-ID}?api-version={API-VERSION}
| Placeholder | 价值 | Example |
|---|---|---|
{YOUR-ENDPOINT} |
用于对 API 请求进行身份验证的终结点。 | https://<your-custom-subdomain>.cognitiveservices.azure.cn |
{PROJECT-NAME} |
项目名称。 此值区分大小写。 | EmailApp |
{JOB-ID} |
用于查找模型训练状态的 ID。 它位于 location 提交训练作业时收到的标头值中。 |
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx |
{API-VERSION} |
要调用的 API 的版本。 | 2023-04-01 |
Headers
使用以下标头对请求进行身份验证。
| Key | 价值 |
|---|---|
Ocp-Apim-Subscription-Key |
资源的键。 用于对 API 请求进行身份验证。 |
响应正文
发送请求后,会收到以下响应。 继续轮询该端点,直到状态参数变为“已成功”。
{
"result": {
"modelLabel": "{MODEL-LABEL}",
"trainingConfigVersion": "{TRAINING-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": "xxxxxx-xxxxx-xxxxxx-xxxxxx",
"createdDateTime": "2022-04-18T15:44:44Z",
"lastUpdatedDateTime": "2022-04-18T15:45:48Z",
"expirationDateTime": "2022-04-25T15:44:44Z",
"status": "running"
}
| Key | 价值 | Example |
|---|---|---|
modelLabel |
模型名称 | Model1 |
trainingConfigVersion |
训练配置版本。 默认使用最新版本。 | 2022-05-01 |
startDateTime |
开始训练的时间 | 2022-04-14T10:23:04.2598544Z |
status |
训练作业的状态 | running |
estimatedEndDateTime |
预计的训练作业完成时间 | 2022-04-14T10:29:38.2598544Z |
jobId |
训练作业 ID | xxxxx-xxxx-xxxx-xxxx-xxxxxxxxx |
createdDateTime |
训练作业创建日期和时间 | 2022-04-14T10:22:42Z |
lastUpdatedDateTime |
训练作业上次更新日期和时间 | 2022-04-14T10:23:45Z |
expirationDateTime |
训练作业过期日期和时间 | 2022-04-14T10:22:42Z |
部署你的模型
此步骤通过 运行时预测 API 使训练的模型可供使用。
小窍门
使用与主要项目相同的部署名称,以便更轻松地进行维护以及对系统进行最少的更改,从而处理重定向流量。
提交部署作业
将以下请求中的占位符替换为你的 {SECONDARY-ENDPOINT} 和你在第一步中获取的 {SECONDARY-RESOURCE-KEY}。
使用以下 URL、标头和 JSON 正文创建 PUT 请求,开始部署业务流程工作流模型。
请求的 URL
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/deployments/{DEPLOYMENT-NAME}?api-version={API-VERSION}
| Placeholder | 价值 | Example |
|---|---|---|
{ENDPOINT} |
用于对 API 请求进行身份验证的终结点。 | https://<your-custom-subdomain>.cognitiveservices.azure.cn |
{PROJECT-NAME} |
项目名称。 此值区分大小写。 | myProject |
{DEPLOYMENT-NAME} |
部署名称。 此值区分大小写。 | staging |
{API-VERSION} |
要调用的 API 的版本。 | 2023-04-01 |
Headers
使用以下标头对请求进行身份验证。
| Key | 价值 |
|---|---|
Ocp-Apim-Subscription-Key |
资源的键。 用于对 API 请求进行身份验证。 |
请求主体
{
"trainedModelLabel": "{MODEL-NAME}",
}
| Key | Placeholder | 价值 | Example |
|---|---|---|---|
| trainedModelLabel | {MODEL-NAME} |
分配给您部署的模型名称。 只能分配已成功训练的模型。 此值区分大小写。 | myModel |
发送 API 请求后,会收到指示 202 成功的响应。 在响应标头中,提取 operation-location 格式如下的值:
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/deployments/{DEPLOYMENT-NAME}/jobs/{JOB-ID}?api-version={API-VERSION}
可使用此 URL 获取部署作业状态。
获取部署状态
将以下请求中的占位符替换为你的 {SECONDARY-ENDPOINT} 和你在第一步中获取的 {SECONDARY-RESOURCE-KEY}。
使用以下 GET 请求来获取部署作业的状态。 将占位符中的值替换为您自己的值。
请求的 URL
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/deployments/{DEPLOYMENT-NAME}/jobs/{JOB-ID}?api-version={API-VERSION}
| Placeholder | 价值 | Example |
|---|---|---|
{ENDPOINT} |
用于对 API 请求进行身份验证的终结点。 | https://<your-custom-subdomain>.cognitiveservices.azure.cn |
{PROJECT-NAME} |
项目名称。 此值区分大小写。 | myProject |
{DEPLOYMENT-NAME} |
部署名称。 此值区分大小写。 | staging |
{JOB-ID} |
用于查找模型训练状态的 ID。 它位于 location 头信息中,这是您从 API 收到的响应,针对您的模型部署请求而提供。 |
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx |
{API-VERSION} |
要调用的 API 的版本。 | 2023-04-01 |
Headers
使用以下标头对请求进行身份验证。
| Key | 价值 |
|---|---|
Ocp-Apim-Subscription-Key |
资源的键。 用于对 API 请求进行身份验证。 |
响应正文
发送请求后,会收到以下响应。 继续轮询该端点,直到状态参数变为“已成功”。
{
"jobId":"{JOB-ID}",
"createdDateTime":"{CREATED-TIME}",
"lastUpdatedDateTime":"{UPDATED-TIME}",
"expirationDateTime":"{EXPIRATION-TIME}",
"status":"running"
}
调用运行时方面的更改
在系统中,在调用 运行时 API 时检查提交的任务 API 返回的响应代码。 如果在提交请求时观察到持续的失败,这可能表示您的主要区域发生了中断。 一次故障并不意味着就是中断,可能只是暂时性问题。 通过创建的辅助资源重试提交作业。 对于第二个请求,使用你的{YOUR-SECONDARY-ENDPOINT}密钥和辅助密钥,如果你按照步骤操作,{PROJECT-NAME}和{DEPLOYMENT-NAME}会相同,因此不需要对请求正文进行更改。
如果还原为使用辅助资源,可能会发现延迟略有增加,因为部署模型的区域存在差异。
检查项目是否不同步
这两个项目保持同步是过程的重要一环。 你需要经常检查主要项目是否进行了任何更新,以便将它们移动到辅助项目。 这样一来,如果主要区域发生故障并且你迁移到了次要区域,你应该会预料到模型性能类似,因为它已包含最新更新。 设置针对项目是否同步的检查频率是个重要选择,建议每天进行此检查,以确保辅助模型中数据的同步刷新。
获取项目详细信息
使用以下 URL 获取项目详细信息,正文中返回的键之一表示项目的最后修改日期。 对主项目重复以下步骤两次,对辅助项目重复一次。 比较两个返回的时间戳,以检查它们是否不同步。
使用以下 GET 请求获取项目详细信息。 可以使用在上一步中收到的 URL,或者将占位符值替换为自己的值。
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}?api-version={API-VERSION}
| Placeholder | 价值 | Example |
|---|---|---|
{ENDPOINT} |
用于对 API 请求进行身份验证的终结点。 | https://<your-custom-subdomain>.cognitiveservices.azure.cn |
{PROJECT-NAME} |
项目名称。 此值区分大小写。 | myProject |
{API-VERSION} |
要调用的 API 的版本。 | 2023-04-01 |
Headers
使用以下标头对请求进行身份验证。
| Key | Description | 价值 |
|---|---|---|
Ocp-Apim-Subscription-Key |
资源的键。 用于对 API 请求进行身份验证。 | {YOUR-PRIMARY-RESOURCE-KEY} |
响应体
{
"createdDateTime": "2022-04-18T13:53:03Z",
"lastModifiedDateTime": "2022-04-18T13:53:03Z",
"lastTrainedDateTime": "2022-04-18T14:14:28Z",
"lastDeployedDateTime": "2022-04-18T14:49:01Z",
"projectKind": "Orchestration",
"projectName": "{PROJECT-NAME}",
"description": "This is a sample Orchestration project.",
"language": "{LANGUAGE-CODE}"
}
将相同的步骤应用于你的复制项目,使用{SECONDARY-ENDPOINT}和{SECONDARY-RESOURCE-KEY}。 比较从两个项目返回的 lastModifiedDateTime。 如果主要项目修改时间早于辅助项目,则需要重复 导出、 导入、 训练和 部署 模型的步骤。
后续步骤
本文介绍了如何使用导出和导入 API 将项目复制到其他区域中的辅助语言资源。 接下来请浏览 API 参考文档,以了解“创作 API”的其他作用。