我在Dialogflow上创建了一个非常简单的代理,它只包含两个额外的意图以及Default Welcome Intent
和Default Fallback Intent
。第一个意图称为Car_size
,它仅包含训练短语Do you know that I have a big car?
。第二个意图称为Car_colour
,它仅包含培训短语I have a blue car
。我还定义了两个实体。
第一个名为@size
,其中包含big
,small
等词语,第二个名称为@colour
,其中包含{{1}等字词}},blue
,black
等。因此,在green
意图中,Car_size
一词被标识为big
实体的参数,并且在{ {1}}意图单词@size
被标识为Car_colour
实体的参数。我已根据需要设置了这两个参数,以便通过webhook在后端获取正确的信息。
从Dialogflow接收POST请求(webhook)的php脚本如下:
blue
在这个简单的演示中使用webhook可能没用,但我的最终目标明显大于此,并且使用webhook连接数据库对此至关重要。
我的问题如下。当我对代理@colour
说,那么这会触发<?php
$dbServername = 'localhost';
$dbUsername = 'root';
$dbPassword = '';
$dbName = 'Questions';
$conn = mysqli_connect($dbServername, $dbUsername, $dbPassword, $dbName);
header('Content-Type: application/json');
$method = $_SERVER['REQUEST_METHOD'];
if($method == 'POST'){
$requestBody = file_get_contents('php://input');
$json = json_decode($requestBody, TRUE);
$action = $json["result"]["action"];
$sql = "SELECT * FROM cars WHERE id = $action;";
$result = mysqli_query($conn, $sql);
$resultCheck = mysqli_num_rows($result);
if ($resultCheck > 0) {
while ($row = mysqli_fetch_assoc($result)) {
$answer = $row["answer"];
}
}
else {
$speech = "Sorry, no answer for this.";
}
$response = new \stdClass();
$response->speech = $answer;
$response->displayText = $answer;
$response->source = "agent";
echo json_encode($response);
}
else
{
echo "Method not allowed";
}
?>
意图而不是I have a big car
意图。显然,短语Car_colour
在语法上更接近于Car_size
意图的I have a big car
训练短语,而不是I have a blue car
意图的Car_colour
训练短语。但是,我认为完全是因为我定义了不同的实体Do you know that I have a big car?
和Car_size
,并将它们设置为上述两种意图中的必需参数,然后这将优先考虑@size
和{{ 1}}用于训练然后触发时各自的意图。因此,我认为启动意图的Dialogflow ML训练和算法将首先关注这些词(@colour
,big
)以决定触发哪个意图,然后决定触发意图的整体语法和形式每个意图的训练短语。
因此,我的问题如下:参数和实体在意图短语的ML训练中起任何作用,因此触发了意图或者它们只存在以提供给“后端”(之后)意图是独立于它们触发的)关于用户问题的一些具体信息吗?