【发布时间】:2019-01-04 08:57:31
【问题描述】:
我正在使用 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 门户中看不到更改,是什么让我认为没有进行任何更改.
因此,我的问题是,如何在不删除所有来源的情况下更新和/或删除问题和答案对?
提前谢谢你!
【问题讨论】:
标签: c# botframework microsoft-cognitive programmatically-created qnamaker