gpt4 book ai didi

javascript - wit.ai + 基于插槽的机器人 + 在客户端保存实体值

转载 作者:行者123 更新时间:2023-12-03 16:45:30 24 4
gpt4 key购买 nike

我正在 wit.ai 中试用一个示例,这里是链接:https://wit.ai/Nayana-Manchi/CreditCardApp/stories

第一个故事“BalanceEnquiry”是一个基于插槽的故事。happy 场景运行良好。要测试“cardnumbermissing”分支,我会输入“我想要卡上的信用卡余额,我的名字是 Nayana”。在这里卡号的最后 4 位数字丢失。它要求提供卡的最后 4 位数字,然后我会输入卡的最后 4 位数字。但是这里它没有得到在之前的消息中发送的名称实体。

如何保存上一步发送的实体值“name”?它应该保留实体值名称,它应该从当前对话中获取输入的最后 4 位数字,然后显示硬编码的余额。

代码和附上的图片。

如果您分享食谱的客户端代码 (javascript) 将会很有帮助 - 构建一个基于插槽的机器人。

demo image

'use strict';

let Wit = null;
let interactive = null;
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/creditcardbalance.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();
});
},
getBalance({context, entities}) {
return new Promise(function(resolve, reject) {
var name = firstEntityValue(entities, "name");
var last4digit = firstEntityValue(entities, "Last4digits");

if (name && last4digit) {
context.name = name;
context.last4digit = last4digit;
context.balance = 'Rs.10000' + name + last4digit; // we should call a credit card API here
delete context.cardnumbermissing;
}
else {
context.cardnumbermissing = true;
context.name = name;
delete context.balance;
}
return resolve(context);
});
},
};

const client = new Wit({accessToken, actions});
interactive(client);
// JavaScript source code

最佳答案

我有一个类似的问题,发生的事情是 firstEntityValue 只从初始对话中提取,所以我每次调用它来设置变量时实际上都在删除以前的变量。我必须让函数知道上下文,如果已经有上下文,则不要使用 firstEntityValue 设置这些变量。

关于javascript - wit.ai + 基于插槽的机器人 + 在客户端保存实体值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39446666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com