QnA Maker - 无法以编程方式更新知识库
QnA Maker - Unable to update Knowledge base programmatically
我正在使用 QnA Maker v4.0,我正在尝试使用 C# 并遵循以下提供的文档以编程方式更新我的知识库:
我可以将新的问题和答案对添加到我的知识库中,但是当我尝试删除其中的一些时,我做不到。我没有收到任何消息错误,只是如果我进入 QnAMaker 门户,我仍然可以看到我要删除的问题。
我曾尝试删除一个完整的源代码并且效果很好,所以我有点迷茫如何才能只删除给定的一对问题和答案而不是整个源代码。
到目前为止我已经尝试按照如下文档进行操作:
添加新问题和答案对
string json = "{\"add\":{\"qnaList\":[{\"id\":123456789,\"answer\":\"fooanswer\",\"source\":\"Editorial\",\"questions\":[\"fooquestion\"],\"metadata\":null},{\"id\":987654321,\"answer\":\"fooanswer2\",\"source\":\"Editorial\",\"questions\":[\"fooquestion2\"],\"metadata\":null}],\"urls\":null,\"files\":null},\"delete\":null,\"update\":null}"
public async void UpdateKnowledgeBase(string json)
{
var knowledgebaseid = "<my kb id>";
var client = new HttpClient();
var querystring = HttpUtility.ParseQueryString(string.Empty);
// Request headers
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "QnA Subscription Key>");
var uri = "https://westus.api.cognitive.microsoft.com/qnamaker/v4.0/knowledgebases/"+ this.KnowledgeBaseId + "?" + querystring;
// Request body
byte[] byteData = Encoding.UTF8.GetBytes(json);
using (var content = new ByteArrayContent(byteData))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var method = new HttpMethod("PATCH");
var request = new HttpRequestMessage(method, uri)
{
Content = content
};
HttpResponseMessage response;
response = await client.SendAsync(request);
}
}
这将在我的知识库中创建问答对:
正在删除问答对
但是,如果我现在尝试按照文档删除 ID 为 123456789
的问答对,则不会发生任何事情。为此,我正在做:
json = "{\"add\":null,\"delete\":{\"ids\":[123456789],\"sources\":null},\"update\":null}"
而且,在使用此 json 调用 UpdateKnowledgeBase 方法后,我不会收到任何错误,但我的问题和答案对仍然出现在 QnA Maker 门户中。如果我添加来源,它将删除所有编辑来源。没关系,但我也想只删除一对而不是全部。这可能吗?
正在更新现有的问题和答案对
更新现有问答对时,我遇到了同样的问题,我没有遇到任何错误,但我在 QnA Maker 门户中看不到更改,这让我认为没有任何更改正在做。
因此,我的问题是,如何更新 and/or 删除问题和答案对而不删除所有源?
提前致谢!
正在删除问答对
我用相同的创建值和删除值测试了你的情况。
你的问题是你在 add
阶段提供的 id 值在添加项目时改变了:即使我把 "id": 123456789
, 创建的item 有一个 id
值,它是我知识库中现有 id 的增量。
然后我要删除的时候,如果我指定正确的id,删除操作就成功了。
为确保您遇到同样的问题,请通过下载 KB(GET 到 https://westus.api.cognitive.microsoft.com/qnamaker/v4.0/knowledgebases/:kbId/:environment/qna 检查添加项目的 ID,其中 :kbId
是您的知识库 ID,:environment
是 Test
或 Prod
).
正在更新现有的问题和答案对
我猜这里也是一样的:您可能正在尝试更新一个实际上不正确的 ID。
要删除所需的问题,您可以在知识库中添加问题时为每个问题的答案对添加 'source' 和 'metadata'。然后你必须调用 API 来下载知识库,一旦你得到响应,在这种情况下使用源和键(你在元数据中定义的)的值解析响应 json您可以提取问题 ID 并将其删除。
我正在使用 QnA Maker v4.0,我正在尝试使用 C# 并遵循以下提供的文档以编程方式更新我的知识库:
我可以将新的问题和答案对添加到我的知识库中,但是当我尝试删除其中的一些时,我做不到。我没有收到任何消息错误,只是如果我进入 QnAMaker 门户,我仍然可以看到我要删除的问题。
我曾尝试删除一个完整的源代码并且效果很好,所以我有点迷茫如何才能只删除给定的一对问题和答案而不是整个源代码。
到目前为止我已经尝试按照如下文档进行操作:
添加新问题和答案对
string json = "{\"add\":{\"qnaList\":[{\"id\":123456789,\"answer\":\"fooanswer\",\"source\":\"Editorial\",\"questions\":[\"fooquestion\"],\"metadata\":null},{\"id\":987654321,\"answer\":\"fooanswer2\",\"source\":\"Editorial\",\"questions\":[\"fooquestion2\"],\"metadata\":null}],\"urls\":null,\"files\":null},\"delete\":null,\"update\":null}"
public async void UpdateKnowledgeBase(string json)
{
var knowledgebaseid = "<my kb id>";
var client = new HttpClient();
var querystring = HttpUtility.ParseQueryString(string.Empty);
// Request headers
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "QnA Subscription Key>");
var uri = "https://westus.api.cognitive.microsoft.com/qnamaker/v4.0/knowledgebases/"+ this.KnowledgeBaseId + "?" + querystring;
// Request body
byte[] byteData = Encoding.UTF8.GetBytes(json);
using (var content = new ByteArrayContent(byteData))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var method = new HttpMethod("PATCH");
var request = new HttpRequestMessage(method, uri)
{
Content = content
};
HttpResponseMessage response;
response = await client.SendAsync(request);
}
}
这将在我的知识库中创建问答对:
正在删除问答对
但是,如果我现在尝试按照文档删除 ID 为 123456789
的问答对,则不会发生任何事情。为此,我正在做:
json = "{\"add\":null,\"delete\":{\"ids\":[123456789],\"sources\":null},\"update\":null}"
而且,在使用此 json 调用 UpdateKnowledgeBase 方法后,我不会收到任何错误,但我的问题和答案对仍然出现在 QnA Maker 门户中。如果我添加来源,它将删除所有编辑来源。没关系,但我也想只删除一对而不是全部。这可能吗?
正在更新现有的问题和答案对
更新现有问答对时,我遇到了同样的问题,我没有遇到任何错误,但我在 QnA Maker 门户中看不到更改,这让我认为没有任何更改正在做。
因此,我的问题是,如何更新 and/or 删除问题和答案对而不删除所有源?
提前致谢!
正在删除问答对
我用相同的创建值和删除值测试了你的情况。
你的问题是你在 add
阶段提供的 id 值在添加项目时改变了:即使我把 "id": 123456789
, 创建的item 有一个 id
值,它是我知识库中现有 id 的增量。
然后我要删除的时候,如果我指定正确的id,删除操作就成功了。
为确保您遇到同样的问题,请通过下载 KB(GET 到 https://westus.api.cognitive.microsoft.com/qnamaker/v4.0/knowledgebases/:kbId/:environment/qna 检查添加项目的 ID,其中 :kbId
是您的知识库 ID,:environment
是 Test
或 Prod
).
正在更新现有的问题和答案对
我猜这里也是一样的:您可能正在尝试更新一个实际上不正确的 ID。
要删除所需的问题,您可以在知识库中添加问题时为每个问题的答案对添加 'source' 和 'metadata'。然后你必须调用 API 来下载知识库,一旦你得到响应,在这种情况下使用源和键(你在元数据中定义的)的值解析响应 json您可以提取问题 ID 并将其删除。