首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QnA Maker -无法以编程方式更新知识库

QnA Maker -无法以编程方式更新知识库
EN

Stack Overflow用户
提问于 2019-01-04 08:57:31
回答 2查看 1.5K关注 0票数 1

我正在使用QnA Maker v4.0,我试图使用C#编程更新我的知识库,并遵循以下文档:

https://westus.dev.cognitive.microsoft.com/docs/services/5a93fcf85b4ccd136866eb37/operations/5ac266295b4ccd1554da7600

我可以添加新的问题和答案对我的知识库,但当我试图删除其中一些,我无法做到这一点。我没有收到消息错误,只是如果我进入QnAMaker门户,我仍然可以看到我试图删除的问题就在那里。

我已经尝试删除一个完整的源代码,这是很好的工作,所以我有点迷茫,我如何才能删除一个给定的问题和答案,而不是整个来源。

到目前为止,我所尝试的是如下所述的文档:

添加新问题--答案对

代码语言:javascript
运行
复制
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删除文档并删除问答对,就不会发生任何事情。为此,我要做的是:

代码语言:javascript
运行
复制
json = "{\"add\":null,\"delete\":{\"ids\":[123456789],\"sources\":null},\"update\":null}"

而且,使用这个json调用UpdateKnowledgeBase方法之后,我将不会得到任何错误,但是我的问答对仍然会出现在QnA Maker门户中。如果我添加了来源,它将删除所有的编辑来源。没关系,但我也想只删除一对,而不是全部删除。这有可能吗?

更新现有的问答对

在更新现有的问答对时,我也遇到了同样的问题,我没有犯任何错误,但我看不到QnA制造者门户中的更改,这使我认为没有做任何更改。

因此,我的问题是,在不删除所有源的情况下,如何更新和/或删除问题和回答对?

提前谢谢你!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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,:environmentTestProd)检查添加项的id。

更新现有的问答对

我想这里也是一样的:您可能正在尝试更新一个id,而这个id实际上不是正确的。

票数 3
EN

Stack Overflow用户

发布于 2019-10-07 09:09:10

要删除所需的问题,您可以在知识库中添加“源”和“元数据”。然后,您必须进行API调用才能下载知识库,一旦得到响应,使用源和键的值解析响应json (在元数据中定义的值),在这种情况下,您可以提取问题id并删除它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54035745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档