我是这项技术的新手,但我想在 .NET 应用程序中使用 Watson 的 API 对话。如何在 .NET 中调用 Watson Cloud 服务?
问问题
2338 次
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 回答