Dialogflow 意图跟进不在正确的意图下

Dialogflow Intents Follow-ups not under right intent

例如,如果您有 IntentA 并添加了 2 个后续意图:IntentB、IntentC,它工作正常,它应该添加一个上下文,因为它还没有输出上下文。但这就是问题所在。有时如果你添加另一个,例如 FallbackIntent,它只会添加另一个上下文(有时),如果你在两个(IntentA 和 FallbackIntent)中删除它,那么它们都有相同的上下文,这意味着它们仍然应该连接,并且层次结构不应该改变,但它仍然如此。它仍然可以完美运行,但这仍然是一种奇怪的行为。知道为什么会发生这种情况以及如何解决它吗?

意向 A

意图 B

回退

解决此问题和组织 dialogflow 代理结构的最佳方法是使用 dialogflow create_intent() 功能上传意图 api。
您可以将根意图指定为 parent_followup_intent_name,所有具有此 根意图 的意图都将归入同一意图。请注意,您需要提供根意图 ID 而不是名称。

您可以阅读有关 create_intent api using python sdk 的更多信息。

intents_client = dialogflow.IntentsClient()
intent = dialogflow.types.Intent(
        display_name=display_name,
        training_phrases=training_phrases_parts,
        messages=response,
        input_context_names=input_contexts,
        output_contexts = output_context_list,
        parent_followup_intent_name=root_intent,
)
intents_client.create_intent(parent, intent)

编辑:
根据要求,这是在没有任何专业知识的情况下执行此操作的第二种更简单的方法。

  • 假设您的代理看起来像之前的屏幕截图,并且您想要 将意向分组在 how to solve 意向

  • 转到设置 -> 导出和导入 -> 导出为 zip 代理

导出后,解压缩文件并转到 intents 文件夹。您的文件将类似于下面的屏幕截图

  • 打开 how to solve.json 文件并复制此意图的 ID
  • 打开您要分组到 how to solve 下的所有 json 个文件 意图(注意我们必须打开没有的文件 _usersays_en 因为它们只包含用户话语
  • 在这些 json 中粘贴 how to solve 意图的 ID 作为 parentId 像下面截图这样的文件(在这种情况下,how to solve 意图的意图 ID 是 b2131b0e-f86d-429d-957c-65c070ddd5df

  • 完成所有更改后,压缩目录
  • 再次转到设置 -> 导出和导入 -> 从 zip 和 select 您刚刚创建的 zip 文件
  • 过程完成后,意图将如下图所示

希望对您有所帮助。

@sid8491 - 这绝对是巧妙的:) 感谢那!就像一个魅力,我可以确认这只是一个视觉表示。无需担心更改代码。

只是一个小补充:当你已经有后续意图时,他们已经携带

"id": "70a48f63-662b-48d4-9a78-dd0af3e0db87",
"parentId": "5a1b5861-fadc-480e-b03b-11bc034df8b9",
"rootParentId": "6c9cb1d6-3efb-4bac-b768-ae3265faa7b6",

确保将 rootParentId 调整为上述根意图的 id,保持 parentId 不变,一切就绪。没有尝试使用 follow-up/follow-up/follow-up 等结构,但我会说它会以某种方式遵循相同的模式。