我有一个操作,用户可以在其中设置不同参数的值。目前,它是这样实现的,并且工作得很好:

现在我想让对话不再像机器人那样灵活,所以我希望允许用户一次设置或更改多个值。他们应该能说出这样的话
将利率改为4%,期限改为15年。
或
将利率改为4%,将期限改为15年,将年改为平均本金为3。
发布于 2018-01-28 17:05:30
有几种方法可以做到这一点,但没有一种是很棒的,而且当你试图扩大它们的规模时,它们都有一些问题。(因此,对于输入的两个或三个参数,它们可能工作得很好,但在更多情况下,它们可能不能很好地工作。)
(值得注意的是,助理最近才开始一次接受不止一项指示,仅供参考。但是它只处理两个命令,而这并不适用于所有命令。)
添加附加参数的短语
使用此解决方案,您将使用收集两个参数的类似短语集来补充收集一个参数的短语。另一组也收集了三个参数。你应该能够将所有这些作为一个单一的意图来完成,并且在你的实践中,确定已经设定了哪些目标。
它看起来可能是这样的:

看起来事情开始变得复杂了,不是吗?您需要列出绝对值和百分比的每个组合。如果您有其他类型,则还需要包括这些组合中的每一个。对于3个可能的参数,这开始变得难以处理,而且肯定在此之上。您还可能会对应该用哪个值设置哪个参数感到困惑(我还没有对此进行测试--这是理论上的问题)。
添加了一个可选的连续短语,并以递归方式处理。
您还可以将此处理为用户说“设置一个值,然后执行其他事情”,并将“做其他事情”部分作为对对话框流的另一个语句。其意图可能如下所示:

您可以使用Dialogflow API实现“对Dialogflow的另一条语句”。对于对话框流V1,您可以使用查询端点。对于对话框流V2,您可以使用detectIntent端点。在这两种情况下,您都会发送查询的additional部分(如果用户说了什么),并从中获得结果。您可以通过设置当前的值集将调用的结果消息添加到消息中,并将整个消息发回。
然而,作为递归调用,这确实需要时间。由于对Dialogflow的初始调用确实需要在5秒内得到响应,所以对Dialogflow的每个附加调用(然后是对您的实现)都需要尽快处理。但即便如此,在前端出现超时之前,您可能还不能处理超过2或3个这样的问题。
除了edit.attribute意图之外,它还具有在“附加”部分中调用的其他意图可能带来的风险(或好处)。如果要限制这一风险,可以设置上下文以确保只调用具有该传入上下文的意图。
摘要
这确实不是一个容易解决的问题。一方面,你有一个问题,必须列出每一个组合。另一方面,递归需要时间,而且您没有太多的时间来处理所有的事情。在这两种情况下,确实有可能不正确地理解这个短语,在某些值已经更改而其他值没有更改的情况下,您需要解决错误处理问题。
你可能需要做大量的实验,结果可能仍然不能令人满意。
发布于 2018-06-27 17:57:41
您可以使用Dialogflow API实现“对Dialogflow的另一条语句”。对于对话框流V1,您可以使用查询端点。对于对话框流V2,您可以使用detectIntent端点。在这两种情况下,您都会发送查询的附加部分(如果用户说了什么),并从中获得结果。您可以通过设置当前的值集将调用的结果消息添加到消息中,并将整个消息发回。 然而,作为递归调用,这确实需要时间。由于对Dialogflow的初始调用确实需要在5秒内得到响应,所以对Dialogflow的每个附加调用(然后是对您的实现)都需要尽快处理。但即便如此,在前端出现超时之前,您可能还不能处理超过2或3个这样的问题。
在阅读这两段之后,首先想到的是批处理请求。批处理请求允许客户端应用程序将多个API调用打包到单个HTTP请求中(这种批处理技术也称为多部分请求)。
许多Google都支持批处理端点,我可以通过检查DialogFlow的API发现文档来验证它是否有批处理端点。这个批处理端点以前没有记录在DialogFlow的API引用中,但是您可以利用其他API (就像这个)的文档来了解它的工作方式。既然不再支持全局批处理端点,这个链接也应该具有指导性。。
假设您的查询是独立的(即。它们不依赖于其他查询的结果)您应该能够使用批处理请求来获取更多数据。
https://stackoverflow.com/questions/48488991
复制相似问题