c# - 操作返回了无效的状态代码“禁止”。机器人框架 v4
问题描述
所以我在 azure 中创建了一个机器人并下载了它。来自 LUIS 的 1000 次免费通话已达到上限。我在 azure 门户中创建了一个订阅(我确实做了 docker 容器)。遵循本指南直到第 6 步。当我单击端点 url 并直接在浏览器中查询时,它工作正常。
我通过 Bot Emulator 将其添加到机器人中,方法是单击 + 登录服务并在那里添加机器人模型。但是当我运行机器人时,我得到了标题错误。我注意到在 .bot 文件中,机器人模拟器添加的创作密钥和订阅密钥是相同的。
所以我将订阅密钥更改为 azure 生成的密钥之一,但仍然是同样的错误。我尝试重置创作密钥仍然相同并删除我的 luis.ai 帐户并创建一个新帐户。(仍然是相同的电子邮件,因为那是登录 azure 门户的电子邮件。)并且仍然相同。
这里有一些图片供参考和错误。
我还尝试在 luis.ai 中对其进行测试并得到了这个结果。
这是通过 Bot 模拟器添加 luis 后的 bot 文件图片。它具有相同的创作密钥和订阅密钥(仍然被禁止)
以供参考:
这是机器人服务的代码。
using System;
using System.Collections.Generic;
using Microsoft.Bot.Builder.AI.Luis;
using Microsoft.Bot.Configuration;
namespace Microsoft.BotBuilderSamples
{
public class BotServices
{
public BotServices(BotConfiguration botConfiguration)
{
foreach (var service in botConfiguration.Services)
{
switch (service.Type)
{
case ServiceTypes.Luis:
{
var luis = (LuisService)service;
if (luis == null)
{
throw new InvalidOperationException("The LUIS service is not configured correctly in your '.bot' file.");
}
var endpoint = (luis.Region?.StartsWith("https://") ?? false) ? luis.Region : luis.GetEndpoint();
var app = new LuisApplication(luis.AppId, luis.AuthoringKey, endpoint);
var recognizer = new LuisRecognizer(app);
this.LuisServices.Add(luis.Name, recognizer);
break;
}
}
}
}
public Dictionary<string, LuisRecognizer> LuisServices { get; } = new Dictionary<string, LuisRecognizer>();
}
}
我已经尝试解决这个问题 4 天了。谢谢!
解决方案
谢谢你所有的图片。这是一个巨大的帮助!这是问题所在:
默认情况下,您的代码会AuthoringKey
在本节(第二行)中查找:
var endpoint = (luis.Region?.StartsWith("https://") ?? false) ? luis.Region : luis.GetEndpoint();
var app = new LuisApplication(luis.AppId, luis.AuthoringKey, endpoint);
var recognizer = new LuisRecognizer(app);
this.LuisServices.Add(luis.Name, recognizer);
由于您的.bot
文件仍然authoringKey
设置为以 开头的文件ad9c...
,该文件已达到其限制,因此您的机器人不断遇到 403 错误。
因此,在您的.bot
文件中,将其替换authoringKey
为您endpointKey
的 s 之一(它们以12ccc...
or开头b575...
)。
我理解您对此的困惑,特别是因为这需要您endpointKey
在您的authoringKey
财产中放置一个。我知道 LUIS 机器人使用密钥的方式即将发生一些变化,但这些变化可能需要一个月或更长时间。
或者,您可以更改:
var app = new LuisApplication(luis.AppId, luis.AuthoringKey, endpoint);
至:
var app = new LuisApplication(luis.AppId, luis.SubscriptionKey, endpoint);
注意:如果您进行这些更改中的任何一个,LUIS只能查询(这通常很好),因为创作密钥会执行其他所有操作(请参阅下面的参考)
参考
这些对你来说并不像其他可能遇到的那样多。
推荐阅读
- oracle - 如何在 apex 19.2 中使用数据库中的表
- r - 使用多个标准过滤整齐的数据
- python-3.x - 解决两个矩阵的乘法
- typescript - 通过来自另一个组件的事件调用 vue 组件属性设置器
- react-native - 如何使用redux提供者将其与地图状态连接起来
- google-chrome - 在页面加载时,加载 div 内容(html 和 js 和 css)的异步 ajax 调用会导致 chrome 80 中出现不推荐使用的错误
- python - pyenv 使用正确的 python 版本但使用错误的库文件夹
- python - AttributeError:“pyodbc.Cursor”对象没有属性“方言”
- python - 如何从普通函数中向 Python Dask 调度程序提交任务
- virtual-machine - 如何在访客上启用 IOMMU