在Bot框架中自动部署(Bot + LUIS + QnA +表存储)

时间:2017-04-03 18:36:36

标签: asp.net-web-api botframework azure-table-storage luis azure-deployment

我们在Azure上部署了一个机器人,但我们希望将它提供给客户端,以便他可以使用自己的资源来部署它。我们需要为他们提供一个Powershell脚本,该脚本可以神奇地创建和部署机器人工作所需的所有资源。我的bot架构包含以下部分:

  • Bot的逻辑(通过 Azure应用服务部署的ASP.NET Web API项目
  • LUIS模型(通过认知服务帐户发布)
  • 使用QnA Maker完成的QnA服务知识库(直接从QnaMaker Portal发布(不知道它在何处部署
  • Azure表存储

我的问题是:

1)如何将bots web api配置为连接字符串参数? (表存储,luis和qna服务在重新部署时会有所不同)目前我正在定义conn。在web.config上有字符串和api键,但正如我所说,这需要是动态的。

2)如何自动部署LUIS? Luis需要首先创建认知服务帐户的密钥。我假设我有导出的模型json文件。我正在考虑使用LUIS API来执行应用程序导出和发布部分。那就够了吗?

3)如何部署qna服务?我认为目前部署在神奇的地方,所以也许我不需要做任何事情。

谢谢!

2 个答案:

答案 0 :(得分:1)

也许有点晚了,但是我只需要执行同样的事情,所以这里是您的问题的答案,希望它们对其他人有用:

1)正如上面提到的JoyrexJ9一样,您可以通过设置应用服务的应用设置来覆盖ARM.Web.config中的值,并通过ARM模板进行此操作。有关此here的更多信息。

  • 您可以像这样在ARM模板中放在一起并设置存储帐户的连接字符串:

{
  "type": "Microsoft.Web/sites",
  "kind": "app",
  "name": "MyWebApp",
  "apiVersion": "2015-08-01",
  "location": "westeurope",
  "properties": {
    "name": "MyWebApp",
    "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', 'MyAppServicePlanName')]",
    "siteConfig": {
      "appSettings": [{
        "name": "StorageConnectionString",
        "value": "[concat('DefaultEndpointsProtocol=https;AccountName=','MyStorageAccountName',';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', 'MyStorageAccountName'), '2017-10-01').keys[0].value,';EndpointSuffix=core.windows.net')]"
      }],
      "cors": {
        "allowedOrigins": [
          "*"
        ]
      }
    }
  },
  "dependsOn": [
    "[resourceId('Microsoft.Storage/storageAccounts/', 'MyStorageAccountName')]",
    "[resourceId('Microsoft.Web/serverfarms', 'MyAppServicePlanName')]"
  ]
}

  • 对于LUIS和QnA制造商,您需要手动从相应的门户获取值,或者在手动部署ARM之后更新应用程序设置,或者使用传递给它的手动获取值作为参数重新运行ARM部署。后者之所以有效,是因为您第一次可以在ARM模板中将这些值保留为空,而在第二次使用适当的参数值进行部署时,ARM只会更新这些“应用程序设置”值。有关此主题here的更多信息。 (提示:如果通过程序的API-s以编程方式配置QnA Maker和LUIS应用,则只需手动获取LUIS的订阅密钥,因为您将从QnA Maker的API获取知识库的凭据。)< / li>

2)不幸的是,您目前无法完全自动完成LUIS应用的配置。您可以通过ARM模板在Azure中创建资源,并且可以通过LUIS API完成其余的大部分工作,但是例如,您不能以编程方式将ARM模板创建的订阅密钥分配给LUIS应用程序,因为{ {3}}。

3)自您提交问题以来,QnA Maker服务及其托管模式发生了重大变化。我写了完整的that API method is deprecated关于如何在新系统中进行配置。

如上面的JoyrexJ9所述,非常重要的一点是要指出,即使使用脚本也无法完全自动执行机器人注册,因为在blog post上没有用于注册应用程序的API。您还必须手动执行此操作。可以通过ARM模板或脚本完全自动化其他所有东西(除了我上面提到的东西)。

答案 1 :(得分:0)

其中一些可以使用ARM模板自动执行,您可以使用listKeys()之类的函数来查询一个资源的连接键,并将其用作另一个资源的参数。 如果您使用Azure App Services,则可以使用所谓的App Settings覆盖web.config中的设置,这些设置可以在ARM模板中设置

Check out this ARM template which deploys a bot and dynamically links it to a newly deployed cognitive service

bot和app-id注册我认为你现在无法自动化,没有API或CLI