对话流训练短语中未识别的会话实体

时间:2019-05-14 08:07:59

标签: php dialogflow actions-on-google api-ai

我已经设置了一个Google Actions会话项目,其中对话框流和webhook意图由我的服务器在PHP中提供。

在新的dialogflow对话启动时,例如在回复欢迎意图之前,php代码正在将一些会话实体推送到dialogflow引擎。

直到两个星期前,dialogflowflow引擎正确识别了会话实体的单词,直到它突然停止工作(我在代码中未进行任何更改),并且现在仍然无法工作。

创建的会话实体没有错误(我在创建对话框后添加了代码以查询dialogflow api并列出会话实体,并且Google用我发送的所有单词进行了回复)。

但是,该Intent无法识别也不填充实体参数。

这是我用来推送实体的代码(使用google dialogflow v2库):

$names = [....array of strings....];
$parent = 'projects/inim-prova/agent/sessions/' . $sessionId;
$client = new SessionEntityTypesClient(['credentials' => $keyfile]]);
$entities = array_map(function($item) { return new Entity(['value' => $item, 'synonyms' => [$item]]); }, array_unique($names));
$entityType = new SessionEntityType([
    'name' => $parent . "/entityTypes/$displayName",
    'entity_override_mode' => EntityOverrideMode::ENTITY_OVERRIDE_MODE_SUPPLEMENT,
    'entities' => $entities
]);
$client->createSessionEntityType($parent, $entityType);

此代码运行无异常。

几行后,我正在查询服务器以查看一切是否正常:

$req = $client->listSessionEntityTypes($this->webhookRequest->getSession());
foreach ($req as $element) {
    Logger::log(Logger::DEV, __METHOD__, "SessionEntityType: " . $element->getName());
    $entities = $element->getEntities();
    foreach ($entities as $entity) {
        $synonyms = [];
        foreach ($entity->getSynonyms() as $synonym) $synonyms[] = $synonym;
        Logger::log(Logger::DEV, __METHOD__, ">> " . $entity->getValue() . ": " . implode(', ', $synonyms));
    }
}

这是调试日志的摘录:

SessionEntityType: projects/inim-prova/agent/sessions/ABwppHHhgwxi5OGznpUtUq2D7BQrOKWB5Y5UYr20HRKI14iASKugPw2dL2VKMwfvZ193Mq_DUb2emQ/entityTypes/NomiLuoghiUscite
>> sala: sala
>> cucina: cucina
>> giardino: giardino
SessionEntityType: projects/inim-prova/agent/sessions/ABwppHHhgwxi5OGznpUtUq2D7BQrOKWB5Y5UYr20HRKI14iASKugPw2dL2VKMwfvZ193Mq_DUb2emQ/entityTypes/NomiUscite
>> luci: luci
>> irrigazione: irrigazione
>> cappa: cappa

因此,所有实体似乎都位于正确的位置。

这是意图培训短语:

Intent

(请注意,ArticoliDeterminativiPreposizioni是我忽略的静态实体)。

这些是我说Accendi le luci in cucina时在webhook请求中得到的参数:

'parameters' => array (
    'NomiUscite.original' => '',
    'Preposizioni.original' => '',
    'NomiLuoghiUscite' => '',
    'NomiUscite' => '',
    'Preposizioni' => '',
    'ArticoliDeterminativi.original' => 'le',
    'NomiLuoghiUscite.original' => '',
    'ArticoliDeterminativi' => 'il',
)

如您所见,NomiUsciteNomiLuoghiUscite为空。我希望它们分别是lucicucina

我真的很笨。

2 个答案:

答案 0 :(得分:0)

您应在会话实体中添加单词“ uscita”和“ luogo”。如果您注释不属于实体的单词,我可以将参数设为空。

您也可以尝试将“ Accudi le luci in cucina”添加为训练短语。

答案 1 :(得分:0)

它看起来确实是一个dialogflow错误,而不是我的代码中的缺陷。 几周后,Google的支持人员回答说,问题已解决。

我再次运行了测试,完全没有修改任何代码,现在它可以正常工作了。