- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用wit.ai quickstart example 。该示例适用于硬编码值,但当我使用第三方天气 API 并尝试向用户提供响应时,它不起作用。
工作代码:
const actions = {
send(request, response) {
const {sessionId, context, entities} = request;
const {text, quickreplies} = response;
console.log('sending...', JSON.stringify(response));
},
getForecast({context, entities}) {
var location = firstEntityValue(entities, 'location');
if (location) {
context.forecast = 'sunny in ' + location; // we should call a weather API here
delete context.missingLocation;
} else {
context.missingLocation = true;
delete context.forecast;
}
return context;
},
};
现在我编写了函数 getWeather({ context,Entity }, location) 来调用第三方天气 API 并获取用户给定位置的天气信息。
非工作代码:
var getWeather = function ({ context, entities }, location) {
console.log('Entities: ',entities)
var url = 'http://api.openweathermap.org/data/2.5/weather?q=' + location + '&appid=myAppID';
request.get(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(typeof body)
var weatherObj = JSON.parse(body);
console.log('weather api res: ', weatherObj.weather[0].description);
context.forecast = weatherObj.weather[0].description + ' ' + location; // we should call a weather API here
delete context.missingLocation;
}
})
}
const actions = {
send(request, response) {
const {sessionId, context, entities} = request;
const {text, quickreplies} = response;
console.log('sending...', JSON.stringify(response));
},
getForecast({context, entities}) {
var location = firstEntityValue(entities, 'location');
if (location) {
//Call a function which calls the third party weather API and then handles the response message.
getWeather({ context, entities }, location);
} else {
context.missingLocation = true;
delete context.forecast;
}
return context;
},
};
此外,如果我稍微更改 getWeather() 函数并移动 context.forecast = 'sunny in ' + location;删除 context.missingLocation; 在 request.get() 调用的回调函数之外,它将再次工作,但此时我没有来自第 3 方 api 的天气信息:
工作代码:
var getWeather = function ({ context, entities }, location) {
//Keeping context.forecast outside the request.get() callback function is useless as we yet to get the weather info from the API
context.forecast = 'sunny in ' + location;
delete context.missingLocation;
console.log('Entities: ',entities)
var url = 'http://api.openweathermap.org/data/2.5/weather?q=' + location + '&appid=myAppID';
request.get(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(typeof body)
var weatherObj = JSON.parse(body);
console.log('weather api res: ', weatherObj.weather[0].description);
}
})
}
那么如何使 context.forecast = apiRes + location; 线路在 http 调用的回调中工作?我在这里做错了什么?
注意:我从 wit.ai 得到的错误响应:
Error: Oops, I don't know what to do.
at F:\..\node-wit\lib\wit.js:87:15
at process._tickCallback (internal/process/next_tick.js:103:7)
我正在使用 npm 包 request在 Node 内进行 http 调用。
最佳答案
通过正确解决 promise 解决了问题。完整代码如下:
'use strict';
let Wit = null;
let interactive = null;
var getWeather = function ( location) {
var url = 'http://api.openweathermap.org/data/2.5/weather?q=' + location + '&appid=myAppID';
return fetch(url, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
}
})
.then(rsp => {
var res = rsp.json();
return res;
})
.then(json => {
if (json.error && json.error.message) {
throw new Error(json.error.message);
}
return json;
});
}
try {
// if running from repo
Wit = require('../').Wit;
interactive = require('../').interactive;
} catch (e) {
Wit = require('node-wit').Wit;
interactive = require('node-wit').interactive;
}
const accessToken = (() => {
if (process.argv.length !== 3) {
console.log('usage: node examples/quickstart.js <wit-access-token>');
process.exit(1);
}
return process.argv[2];
})();
// Quickstart example
// See https://wit.ai/ar7hur/quickstart
const firstEntityValue = (entities, entity) => {
const val = entities && entities[entity] &&
Array.isArray(entities[entity]) &&
entities[entity].length > 0 &&
entities[entity][0].value;
if (!val) {
return null;
}
return typeof val === 'object' ? val.value : val;
};
const actions = {
send(request, response) {
const {sessionId, context, entities} = request;
const {text, quickreplies} = response;
return new Promise(function (resolve, reject) {
console.log('sending...', JSON.stringify(response));
return resolve();
});
},
getForecast({context, entities}) {
var location = firstEntityValue(entities, 'location');
if (location) {
return new Promise(function (resolve, reject) {
return getWeather(location).then(weatherJson => {
context.forecast = weatherJson.weather[0].description + ' in the ' + location;
delete context.missingLocation;
return resolve(context);
})
});
} else {
context.missingLocation = true;
delete context.forecast;
return Promise.reject(context);
}
return context;
},
};
const client = new Wit({ accessToken, actions });
interactive(client);
关于javascript - wit.ai 和 Node.js 入门,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41674303/
我知道 Wit.ai 引擎可以通过手动验证案例来训练,但是有没有办法用一组定义的输入和输出来训练它? 最佳答案 您可能可以查看其中一个应用程序的导出格式并对其进行调整以导入新应用程序。 https:/
来自 wit.ai 团队的一些人请回答这个 我们计划将 wit.ai 用于商业目的。有使用政策吗?请提供一些注意事项指南。此外,这项服务将来是否也是免费的,还是您计划推出企业版? 主要是 API 命中
我正在尝试训练我的 Wit.ai 机器人以识别某人的名字。我不太确定我是否完全理解 NLP 的工作原理,所以我会给你一个例子。 我定义了很多表达,比如“我的名字是XXXX”、“大家都叫我XXXX” 在
我似乎无法让这个请求生效: https://wit.ai/docs/http/20160526#delete--entities-:entity-id-values-link 我已经设置了一个值为“C
我正在尝试在 wit.ai 中编写示例应用程序。我使用在 https://wit.ai/docs/quickstart 中显示的 node.js 客户端跟随快速启动应用程序。 .那里显示的示例只有一个
我目前正在与 Wit.ai 合作 webpage in CodePen.io .我想知道是否可以使用 HTTP API 检索 Wit.ai 机器人的文本响应(“Bot says”)。 例如:如果用户要
我使用以下方法 ( https://wit.ai/docs/http/20160526#post--entities-:entity-id-values-link ) 将关键字添加到用户定义的实体,并
Wit AI project 在他们的 Converse 功能中添加了一个名为 Story 的新概念。有没有办法通过 HTTP API 管理(创建/编辑/验证)这些 Wit AI 故事? 最佳答案 W
例如,我正在尝试制作一款可以随机向您推荐电影的应用。您应该能够通过按下按钮与应用程序对话。然后该应用程序会将您的语音发送到后端( Node 应用程序),然后后端将运行逻辑,然后将随机电影标题发回给您。
我正在尝试开发一个天气机器人,但遇到了一些问题。 我用故事和理解标签来训练系统。机智的行为对我来说似乎是不可预测的 - 它结合了故事(我猜它应该这样做),所以看起来随机交谈。 意图值也不一致,即使使用
一、什么是 Protocol Witness Table? 我们都知道 C 函数调用是静态派发,简单来说可以理解为是用汇编命令 call $address 来实现,这种方式效率最高,但是灵活性不够。
我有以下问题。 我在对话中有几个要点,我必须捕获“自由”文本。 例如:你对 xyz 有什么看法?你为什么想要 xyz ?...它们是开放的问题,用户可以回答他们想要的任何问题。 如何启用此功能?因为我
针对自身实体有三种搜索策略:trait、free-text 和 keywords,如 explained in the documentation 。我无法理解的是这些选项允许的组合。我可以选择: 特
我正在尝试使用 Wit.ai 语音识别。我已经成功地能够将波形文件发送到网站以转换为文本,但现在我正尝试分 block 发送它以减少延迟,但每当我尝试这样做时,它都会给我错误 "content-typ
见证服务器有什么用?为什么要使用它? 最佳答案 见证人是将第三次投票纳入其中以创建法定人数的人。校长和镜像各有一票,因此可以 1:1 平局,无法做出决定。有了见证人,就可以建立 2:1 或 1:2 的
更新:下面提到的stackoverflow给出了另一种解决方案,即导入json并用正确格式的数据替换文本。我现在试图看看如何适应给定的格式,它看起来像这样: { "text" : "use
关于如何将日期/时间引用传递给基本的 Vanilla 小鸭服务器的任何指示? 我正在使用小鸭来解析文本。在查找时间表达式时,我需要传入一个引用日期/时间。 引用日期/时间为我提供了“昨天”和“今天”等
我试图以无形的方式理解单例类型,并面临对单例类型编译时类型的误解。下面是一个例子: val x: Witness.`120`.T = 120.narrow 它工作正常,但这种结构看起来很不寻常。什么是
我正在使用 wit ai 和 facebook messenger 开发一个应用程序,一切都按预期工作,但我被困在一个总是返回错误角色的表达式上。 我已经为该意图添加了类似的表达,但是当我测试同一个句
我在 GitHub 上修改 wit.ai 的 messenger.js 时遇到一些问题。我添加了一些 API 调用来获取实时天气,但我无法将结果输入机器人的回复(context.forecast)。
我是一名优秀的程序员,十分优秀!