为Google Action函数中的值创建实体和训练短语

时间:2018-09-27 14:21:16

标签: actions-on-google

我已经使用SDK创建了一个琐事游戏,它需要用户输入,然后将其与数据库中的值进行比较以查看其是否正确。

此刻,我只是通过对话传递一个原始输入变量,这意味着它在给用户留下深刻印象时会经常失败,因为所拾取的确切字符串很少==到数据库中的值。< / p>

具体地说,我希望它仅提取数字,例如,意识到它必须从“我的答案是10”的语音输入中提取“ 10”。

  {
  "actions": [
    {
      "description": "Default Welcome Intent",
      "name": "MAIN",
      "fulfillment": {
        "conversationName": "welcome"
      },
      "intent": {
        "name": "actions.intent.MAIN"
      }
    },
    {
      "description": "response",
      "name": "Raw input",
      "fulfillment": {
        "conversationName": "rawInput"
      },
      "intent": {
        "name": "raw.input",
        "parameters": [{
          "name": "number",
          "type": "org.schema.type.Number"
        }],
        "trigger": {
          "queryPatterns":[
            "$org.schema.type.Number:number is the answer",
            "$org.schema.type.Number:number",
            "My answer is $org.schema.type.Number:number"
          ]
        }
      }
    }
  ],
  "conversations": {
    "welcome": {
      "name": "welcome",
      "url": "https://us-central1-triviagame",
      "fulfillmentApiVersion": 2
    },
    "rawInput": {
      "name": "rawInput",
      "url": "https://us-central1-triviagame",
      "fulfillmentApiVersion": 2
    }
  }
}

app.intent('actions.intent.MAIN', (conv) => {
  conv.data.answers = answersArr;
  conv.data.questions = questionsArr;
  conv.data.counter = answersArr.length;
  var thisQuestion = conv.data.questions;
  conv.ask((conv.data.answers)[0]));
});

app.intent('raw.input', (conv, input) => {

if(input == ((conv.data.answers)[0])){


       conv.ask(nextQuestion());
}


app.intent('actions.intent.TEXT', (conv,input) => {
 //verifying if input and db value are equal
// at the moment input is equal to 'my number is 10' (for example) instead of '10'

//therefore the string verification never works
conv.ask(nextQuestion());

});

在先前的项目中,我使用了dialogflow UI,并使用了此@ system.entities数字参数以及创建一些训练短语,以便它理解不同的语音模式。

我通过input传递的conv参数只是一个原始字符串,我希望使用某种实体模式对其进行过滤。

如何使用JSON文件创建与训练短语/实体相同的效果?

1 个答案:

答案 0 :(得分:2)

您不能仅使用Action SDK来执行此操作。您还需要自然语言处理系统(例如Dialogflow)来处理此问题。 Action SDK本身将执行语音到文本的操作,并将使用actions.json配置帮助确定如何解释文本。但是它只会返回用户的整个文本-不会尝试确定它可能与Intent匹配的方式,也不会尝试确定其中可能包含的参数。

为此,您需要一个NLP / NLU系统。您不需要使用Dialogflow,但是您需要进行解析的内容。尝试使用简单的模式匹配或正则表达式来做会导致噩梦-找到一个好的系统来做。

如果您想坚持自己可以编辑的内容,则Dialogflow确实允许您下载其配置文件(它们只是JSON),进行编辑,并通过UI或API更新或替换配置。