我正在使用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制造者门户中的更改,这使我认为没有做任何更改。
因此,我的问题是,在不删除所有源的情况下,如何更新和/或删除问题和回答对?
提前谢谢你!
发布于 2019-01-04 10:51:48
删除问答对
我用相同的值测试了您的案例,然后删除。
在您的情况下,问题是在添加项时,您在add
阶段提供的id值发生了更改:即使我放置"id": 123456789
,创建的项也有一个值,即我的知识库中存在的当前id的增量。
然后,当我想要删除时,如果我指定正确的id,则删除操作是成功的。
要确保您有相同的问题,请通过下载KB (GET To https://westus.api.cognitive.microsoft.com/qnamaker/v4.0/knowledgebases/:kbId/:environment/qna,其中:kbId
是您的知识库id,:environment
是Test
或Prod
)检查添加项的id。
更新现有的问答对
我想这里也是一样的:您可能正在尝试更新一个id,而这个id实际上不是正确的。
发布于 2019-10-07 09:09:10
要删除所需的问题,您可以在知识库中添加“源”和“元数据”。然后,您必须进行API调用才能下载知识库,一旦得到响应,使用源和键的值解析响应json (在元数据中定义的值),在这种情况下,您可以提取问题id并删除它。
https://stackoverflow.com/questions/54035745
复制相似问题