- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我知道这可能看起来很复杂,但我已经花了一个半星期的时间来尝试做这件事,但还是想不通。希望有人能指出我正确的方向。非常感谢!
我正在使用 IBM Watson 和 Node.js 创建一个对话机器人。我已经创建了机器人并使用 IBM 的示例程序之一 (Conversation-Simple) 制作了一个网站来与机器人进行交互。它的一切都有效。我现在正在尝试使用 Watson's Discovery 来搜索文档并使用查询响应回答问题。我在 Discovery 工作,您可以在其中查询它并有一个 Node.js 程序来查询它。
我现在正在尝试将两者联系起来!当 Conversation 准备好查询 Discovery 时,它将移动到名为 query
的意图。
看起来这是 Watson 给出响应的地方,响应的变量是 currentText
。我可能错了,但看起来确实如此。
function buildMessageDomElements(newPayload, isUser) {
var textArray = isUser ? newPayload.input.text : newPayload.output.text;
if (Object.prototype.toString.call( textArray ) !== '[object Array]') {
textArray = [textArray];
}
var messageArray = [];
textArray.forEach(function(currentText) {
if (currentText) {
var messageJson = {
// <div class='segments'>
'tagName': 'div',
'classNames': ['segments'],
'children': [{
// <div class='from-user/from-watson latest'>
'tagName': 'div',
'classNames': [(isUser ? 'from-user' : 'from-watson'), 'latest', ((messageArray.length === 0) ? 'top' : 'sub')],
'children': [{
// <div class='message-inner'>
'tagName': 'div',
'classNames': ['message-inner'],
'children': [{
// <p>{messageText}</p>
'tagName': 'p',
'text': currentText
}]
}]
}]
};
messageArray.push(Common.buildDomElement(messageJson));
}
});
return messageArray;
}
当它在这里(或者如果它在其他地方)响应时,我如何检查意图是否是 query
以及它是否是 query Watson Discovery?
这是我目前查询 Discovery 的方式:
url2 = 'fakeURL'
var request = require("request");
var myJSON = require("JSON");
global var body1;
function getMyBody(url, callback) {
request(
{
url: url,
auth: {'user': 'fakeUsername','pass': 'fakePassword'},
json: true
},
function (error, response, body) {
if (error || response.statusCode !== 200) {
return callback(error || {statusCode: response.statusCode});
}
else{
callback(null, JSON.parse(JSON.stringify(body.results)));
}
});
}
getMyBody(url2, function test8(err, body) {
body1 = body[0];
console.log(body1)
}
);
此代码当前打印:
{ id: 'a3990d05fee380f8d0e9b99fa87188a7',
score: 1.0697575,
os: { OperatingSystem: 'Windows 10 Professional' },
price: '174.99',
text: 'Lenovo ThinkCentre M58 Business Desktop Computer, Intel Core 2 Duo 30 GHz Processor, 8GB RAM, 2TB Hard Drive, DVD, VGA, Display Port, RJ45, Windows 10 Professional (Certified Refurbished)',
url: 'https://www.amazon.com/Lenovo-ThinkCentre-M58-Professional-Refurbished/dp/B01M4MD9C1?SubscriptionId=AKIAJXXNMXU323WLP4SQ&tag=creek0a-20&linkCode=xm2&camp=2025&creative=165953&creativeASIN=B01M4MD9C1',
highlight: { text: [Array] } }
对用户的响应我想是文本的值和URL的值。
这是来自 IBM 的整个程序 https://github.com/watson-developer-cloud/conversation-simple
最佳答案
例如来自 IBM Developers 的示例:conversation-with-discovery .您可以按照相同的逻辑编程。但我真的建议您查看此答案末尾的项目和视频。
总结:
你可以在workspace中看到,对发现的调用是高级 JSON(对话 Node )中一个名为 call_discovery
的action 变量。
"action":{"call_discovery: ""
,
基本上,有一个名为 out_of_scope
的意图,因为 if 用户说出的内容在对话中的意图或某些条件下没有任何答案,发现 的调用将发生并返回一个对象根据用户消息的文档。
在对话服务中创建一个上下文变量:
{
"context": {
"callDiscovery": true
},
"output": {
"text": {
"values": [
"Wait for the response, I'll check out."
],
"selection_policy": "sequential"
}
}
}
在 Advanced JSON 中聊天机器人的 Node 内创建一个上下文变量(示例:"callDiscovery": true
) 以调用发现服务后,您需要使用代码来识别您是否到达了需要调用 Discovery 的部分。类似于在 conversation-simple 中使用函数 updateMessage
示例:
function updateMessage(input, response) {
var callDiscovery ;
if (!response.output) {
response.output = {};
//THE CONTEXT VARIABLE callDiscovery
} else if (response.context.callDiscovery === true){
//CREATE ONE NEW FUNCTION WITH YOUR CODE
getMyBody(url, callback, response); //response parameter for send the message
}
}
并且,在您的函数 getMyBody
(在您的问题 [id, text, url, etc
] 中返回打印的函数)中,您需要发送消息给用户,比如:
url2 = 'fakeURL'
var request = require("request");
var myJSON = require("JSON");
var body1;
function getMyBody(url, callback, response) {
request(
{
url: url,
auth: {'user': 'fakeUsername','pass': 'fakePassword'},
json: true
},
function (error, response, body) {
if (error || response.statusCode !== 200) {
return callback(error || {statusCode: response.statusCode});
}
else{
callback(null, JSON.parse(JSON.stringify(body.results)));
}
});
}
getMyBody(url2, function test8(err, body) {
body1 = body[0];
console.log(body1);
var sendMessage = ("I've find this results: "+ body1.text + "And you can see the url: "+ body1.url)// you said body1.text and body1.url
response.output.text[0] = sendMessage;
return res.json(response);
});
}
注意:根据项目conversation-simple,需要使用response
参数为用户发送消息,然后需要在调用Discovery的函数中设置参数, 并在您的函数中添加上面的以下代码。
关于Node.js - 结合 IBM Watson Discovery 和 Conversation Services,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46144659/
我正在使用 watson-developer-cloud npm 模块调用 IBM Watson 问答 API。我调用服务的代码如下: question_and_answer_healthcare.a
我正在使用我公司想要创建的可能对话来测试 Watson Conversation API。我们正在开发巴西葡萄牙语。鉴于葡萄牙语是一种丰富的语言,有时用户会犯错误,我们希望预测这些可能的错误,主要是使
我正在使用我公司想要创建的可能对话来测试 Watson Conversation API。我们正在开发巴西葡萄牙语。鉴于葡萄牙语是一种丰富的语言,有时用户会犯错误,我们希望预测这些可能的错误,主要是使
有什么方法可以告诉沃森他应该重置对话“在这一点之后,每次询问都会像对话开始一样”? tks 最佳答案 Watson 对话是无状态的。因此,如果没有上下文对象,它对您在对话中的位置一无所知。 要重置对话
我只熟悉Watson Assistant因为我已经用它做了一些工作,但我从未使用过 Watson Assistant Solutions。 它是基于 Watson Assistant 的新 API 还
在许多情况下,将已知信息(例如用户的姓名以呈现个性化问候语)传递到新的 Watson Dialog 对话中可能会有所帮助,以避免向用户询问多余或不必要的问题。在查看 API 文档时,我没有看到这样做的
在我的 Watson Assistant 应用程序中,我想捕获上下文中的多个实体,并且还有一个槽来向用户提问。这是一个例子: 用户:我想从多伦多飞往波士顿 Watson 正确检测到: intent:
嗨,我可以创建一个 watson 对话机器人吗,我有一个上下文变量,可以在某些情况下控制流程...... 我需要测试当时是否已经定义了(存在)上下文变量……有人知道该怎么做吗? 我已经试过了: $in
有没有人有嵌套 Intent 的好例子,尤其是在 #yes 和 #no 是子节点的情况下。我得到的情况是 API 返回的是 Intent 值,但输出文本来自“Anything else”! 最佳答案
在网络研讨会中,它提到了使用多个对话工作区来处理项目的不同主题(例如功能性对话与离题)。我们应该如何实现这个设计? 假设我们有两个工作区,一个是功能主题,另一个是非主题。如何确定请求应该进入哪些工作空
我知道您在创建自然语言分类器时必须提供训练数据(在 csv 文件中)。 如果我想在这些数据可用时为分类器添加更多训练数据,我应该如何进行?我应该用原始数据+新数据重新创建分类器吗?有没有办法将额外的数
从昨天开始,对话服务有时不回复回复。它识别意图和实体,但响应中没有文本。这是我使用 CURL 时得到的结果: {"input":{"text":"soporte"},"context":{"conve
我知道您可以转到 Watson Conversation 界面,右键单击工作区,然后下载工作区的 JSON,其中包含意图,如下所示:Is there any way to export intents
例如:如果用户在 Watson Conversation Service 中写入: “我不想在我的新房子里有游泳池,但我想住在公寓里” 你怎么知道用户不想有游泳池,但他喜欢住在公寓里? 最佳答案 这是
我希望在我的项目中实现 IBM Watson Conversation,但我无法理解的一件事是,如何将它与实时搜索集成。示例 我想为我的客户提供酒店搜索服务,我想从对话中提取城市、日期、客人数量等实体
我刚刚去了 Bluemix,看到有一个名为 Discovery 的新实验服务。显然,它可以提取 PDF、Word 文档和 HTML 页面以及其他文件类型。 该服务与文档转换 (DC) 有何区别?以前,
我想通过我的 Node 应用程序将一些值以 IBM Watson 中的上下文变量的形式传递给前端。我怎样才能实现它? 我尝试将要添加的值添加到当前上下文变量对象并将其发回。仍然没有帮助。有什么办法可以
我刚刚去了 Bluemix,看到有一个名为 Discovery 的新实验服务。显然,它可以提取 PDF、Word 文档和 HTML 页面以及其他文件类型。 该服务与文档转换 (DC) 有何区别?以前,
我正在尝试 IBM Watson Conversations 中的插槽功能,但遇到了一个我不知道如何解决的问题。 我有一个从用户那里收集大量信息的用例,因此使用 Slots 功能是有意义的。不幸的是,
有什么方法可以列出关于属于 Watson Discovery 特定集合的文档的元数据(如 ID、文件名等)? 有些 API 方法需要文档 ID(例如“删除文档”),因此显然应该有一种方法可以获取此 I
我是一名优秀的程序员,十分优秀!