-4

我是这项技术的新手,但我想在 .NET 应用程序中使用 Watson 的 API 对话。如何在 .NET 中调用 Watson Cloud 服务?

4

2 回答 2

1

我认为 IBM 对“简单”的理解相当遥远。他们的示例应用程序相当晦涩。最重要的是,他们最近烧毁/弃用了他们的旧 API。这是新的 API 描述。您需要先获得一些 watsone 凭据。

您应该能够像使用任何其他 RESTful API 一样使用v1 Converstaions API。我喜欢Flurl来完成这项任务。

namespace WhatsOn
{
    using System;
    using System.Text;
    using System.Linq;
    using System.Threading.Tasks;
    using Flurl;
    using Flurl.Http;
    using Newtonsoft.Json;

    public class Program
    {
        public static void Main()
        {
            TalkToWatson().Wait();
        }

        public static async Task TalkToWatson()
        {
            var baseurl = "https://gateway.watsonplatform.net/conversation/api";
            var workspace = "25dfa8a0-0263-471b-8980-317e68c30488";
            var username = "...get your own...";
            var password = "...get your own...";
            var context = null as object;
            var input = Console.ReadLine();
            var message = new { input = new { text = input }, context };

            var resp = await baseurl
                .AppendPathSegments("v1", "workspaces", workspace, "message")
                .SetQueryParam("version","2016-11-21")
                .WithBasicAuth(username, password)
                .AllowAnyHttpStatus()
                .PostJsonAsync(message);

            var json = await resp.Content.ReadAsStringAsync();

            var answer = new
            {
                intents = default(object),
                entities = default(object),
                input = default(object),
                output = new
                {
                    text = default(string[])
                },
                context = default(object)
            };

            answer = JsonConvert.DeserializeAnonymousType(json, answer);

            var output = answer?.output?.text?.Aggregate(
                new StringBuilder(),
                (sb,l) => sb.AppendLine(l),
                sb => sb.ToString());

            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine($"{resp.StatusCode}: {output}");

            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine(json);
            Console.ResetColor();
        }        
    }
}
于 2016-11-21T10:52:54.717 回答
1

您可以使用 REST 接口调用任何 Watson Cloud 服务,如上一个答案所示。请确保正确格式化 JSON 有效负载,您需要的所有信息都在Conversation API Reference中。

话虽如此,有一个适用于 .NET 的 SDK,尽管它可能还不成熟。您可以在 GitHub 上的Watson Developer Cloud上查看所有当前的 SDK 和实用程序。

于 2017-01-12T15:53:17.827 回答