保存的对话在 Dialogflow 中如何运作?

How does saved conversation works in Dialogflow?

我正在尝试了解 conv.dataconv.user.storage 的工作原理。 据我所知,conv.data 用于临时存储,conv.user.storage 用于对话之间的更长时间。当我在本地测试时,我注意到 conv.data 并没有真正保存到下一个回合,而是只保存了同一回合。那么它与上下文相关吗?

另一方面,用户存储非常简单,您保存数据并将其保存在用户中,它限制为 10 000 字节,仅此而已。

但是我不明白的是这部分:

当智能助理无法将身份与用户匹配时,用户存储的内容会在对话结束时被清除。智能助理无法将身份与用户匹配的情况示例如下:

这是否意味着如果用户现在正在使用该应用程序,然后同一对话中的其他人加入测试它,它会清除数据吗?

TLDR - 上下文是否与 conv.data 相关,当上下文过期时 conv.data 被删除? - 当其他用户尝试使用您的帐户交谈时,您的应用数据是否会被删除?

你说的大部分都是正确的。让我们看看你说的或问的一些事情。

为什么 conv.data 不为下一回合保存?

这取决于你所说的 "turn" 是什么意思。 conv.data 在单次对话中保存 - 从调用您的操作到您的操作 "closes the microphone" 与 conv.close() 或等效操作。 AoG 将此作为一致的对话模型维护。

(当您使用媒体响应并播放很长的音频文件时会出现一些错误。但这些都是例外。)

conv.data 是使用 Dialogflow 上下文实现的吗?

如果您将 AoG 与 Dialogflow 结合使用 - 是。

您可以将 conv.data 与 Action SDK 一起使用,它不使用 Dialogflow 上下文。

但是当上下文结束时它不会过期吗?

是也不是。 conv.data 的上下文被创建为一个持久的上下文(生命周期为 99),因此在上下文过期之前还有一段时间。该库还每回合刷新上下文,因此它将生命周期保持在 99 并重置上下文的 20 分钟计时器。

对于 conv.user.storage,如果用户现在正在使用该应用程序,然后同一对话中的其他人加入测试它,它会清除数据吗?

没有。当用户说出热词 - "OK Google" 或 "Hey Google" 时,将确定用户身份。之后,多个用户可以在对话中发言,设备将其视为同一个帐户。

Google 助理不会尝试弄清楚对话中谁在说什么 - 只是最初。

因此,如果它在对话开始时识别用户,就会使用他们的 storage 对象。如果没有,它会创建一个新的 storage 对象,在对话结束时(当它在 conv.close() 之后关闭麦克风时)处理该对象。