首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过QnAMaker v4 API发布知识库

通过QnAMaker v4 API发布知识库
EN

Stack Overflow用户
提问于 2018-06-04 05:08:58
回答 1查看 326关注 0票数 0

我正在尝试将我的机器人从QnAMaker v2 API迁移到QnAMaker v4 API。我能够发送更新到知识库,但发布似乎不需要。这是我用的密码。

代码语言:javascript
复制
    static void Main(string[] args)
    {
        MainAsync(args).Wait();
    }

    static async Task MainAsync(string[] args)
    {
        Console.WriteLine("We're starting.");
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", mySubKey);
        var uri = new Uri($"https://westus.api.cognitive.microsoft.com/qnamaker/v4.0/knowledgebases/{myKBId}");
        var payload = "{\"add\": {\"qnaList\": [{\"id\": 0,\"answer\": \"A woodchuck could chuck all the wood he could chuck if a woodchuck could chuck wood.\",\"source\": \"Custom Editorial\",\"questions\": [\"How much wood could a woodchuck chuck if a woodchuck could chuck wood?\"],\"metadata\": []}]},\"delete\": {},\"update\": {}}";
        var method = new HttpMethod("PATCH");
        var request = new HttpRequestMessage(method, uri);
        request.Content = new StringContent(payload, Encoding.UTF8, "application/json");
        var response = await client.SendAsync(request);
        var responseMessage = await response.Content.ReadAsStringAsync();
        Console.Write(responseMessage);
        Console.ReadLine();
        method = new HttpMethod("POST");
        payload = "";
        request = new HttpRequestMessage(method, uri);
        request.Content = new StringContent(payload, Encoding.UTF8, "application/json");
        response = await client.SendAsync(request);
        responseMessage = await response.Content.ReadAsStringAsync();
        Console.WriteLine(responseMessage);
        Console.ReadLine();

    }

我的测试过程是

  1. 问机器人关于木屑的事。
  2. 运行这段代码。
  3. 验证知识库中有关于木夹的q/a对。
  4. 再问机器人关于木夹的事。

到目前为止,api的响应与预期一样,但我的机器人仍然对关键的土拨鼠知识置之不理,直到我单击qnamaker.ai站点上的发布。我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-05 07:28:58

根据您的代码,您向更新知识库发送第一个请求,将执行一个异步操作,下面的消息将被写入控制台窗口。

我们可以找到NotStarted,是operationState,您需要跟踪operationState并发布知识库,直到operationStateoperationState为止

您可以参考“更新知识库”更新现有知识库,并基于“更新知识库”跟踪operationState

来自https://learn.microsoft.com/en-us/azure/cognitive-services/qnamaker/quickstarts/csharp#update-knowledge-base 的代码片段

代码语言:javascript
复制
var done = false;
while (true != done)
{
    response = await GetStatus(operation);
    Console.WriteLine(PrettyPrint(response.response));

    var fields = JsonConvert.DeserializeObject<Dictionary<string, string>>(response.response);

    String state = fields["operationState"];
    if (state.CompareTo("Running") == 0 || state.CompareTo("NotStarted") == 0)
    {
        var wait = response.headers.GetValues("Retry-After").First();
        Console.WriteLine("Waiting " + wait + " seconds...");
        Thread.Sleep(Int32.Parse(wait) * 1000);
    }
    else
    {
        Console.WriteLine("Press any key to continue.");
        done = true;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50673716

复制
相关文章

相似问题

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