我有一个Action,用户可以设置不同参数的值。目前这是实现这样的,它运作良好:
现在我想让对话更像机器人,更灵活,所以我想允许用户一次设置或更改多个值。他们应该能够说出像
这样的话将利率更改为4%,期限更改为15年。
或
将利率更改为4%,期限更改为15年,将平均年数更改为3。
答案 0 :(得分:2)
有几种方法可以做到这一点,但它们都不是很好,当你尝试扩展它们时,它们都有某种问题。 (因此,他们可能会很好地输入两到三个参数,但他们可能不会比那更好地工作。)
(值得注意的是,仅供参考,助手本身最近才开始一次接受多个指令。但它只处理两个,这对所有命令都不起作用。)< / p>
添加包含其他参数的词组
使用此解决方案,您可以使用收集两个参数的类似短语集来补充您收集一个参数的短语。然后另一组也收集三个参数。您应该能够将这些作为一个Intent完成,并且在您的实现中,确定已经设置了哪些。
它可能看起来像这样:
看起来它开始变得复杂,不是吗?您需要列出绝对值和百分比的每个组合。如果您有其他类型,则还需要包含这些组合。这开始变得难以处理3个可能的参数,当然高于这个。你还冒着一个风险,即它可能会混淆哪个参数应该设置哪个值(我没有对此进行测试 - 这是一个理论上的问题)。
添加可选的延续短语并递归处理
您也可以将此视为用户说&#34;设置值,然后执行其他操作&#34;并且对待&#34;做别的事情&#34;另一部分是对Dialogflow的声明。 Intent可能看起来像这样:
您可以实现&#34;另一个对Dialogflow&#34;使用Dialogflow API。使用Dialogflow V1,您可以使用Query endpoint。使用Dialogflow V2,您可以使用detectIntent endpoint。在任何一种情况下,您都要发送查询的additional
部分(如果用户说了什么),并从中获取结果。您可以通过设置当前值集来从调用消息中添加生成的消息,然后将整个事件发回。
然而,作为递归调用,这确实需要时间。由于对Dialogflow的初始调用确实需要在5秒内得到解答,因此需要尽快处理每次对Dialogflow的调用(然后是对您的实现)。但即便如此,在前端超时之前,您可能无法处理超过2或3个。
它还可以运行风险(或利益),除了edit.attribute
意图之外的其他意图可以在&#34;附加&#34;一部分。如果要限制此风险,可以设置上下文以确保只调用具有该传入上下文的Intents。
<强>摘要强>
这真的不是一个容易解决的问题。一方面,你有必须列出每个组合的问题。另一方面,递归需要时间,而且你没有足够的时间来处理所有事情。在这两种情况下,都有可能错误地理解这个短语,并且在某些值已被更改而其他值无法解决的情况下,您需要弄清楚错误处理。
您可能需要进行大量实验,结果可能仍不理想。
答案 1 :(得分:0)
您可以使用以下命令实现“对Dialogflow的另一条语句” Dialogflow API。在Dialogflow V1中,您将使用Query endpoint。 在Dialogflow V2中,您将使用detectIntent endpoint。在任一 情况下,您将发送查询的其他部分(如果用户说 东西),然后会从中获取结果。您将添加 呼叫产生的消息到设置 当前的一组值,然后将整个结果发送回去。
但是,作为递归调用,这确实要花费时间。自从 真的需要在5分钟内回答对Dialogflow的初始调用 秒,再调用Dialogflow(然后再调用 履行)需要尽快处理。但即便如此, 您可能将无法处理其中的2或3个以上 事情在前端超时。
阅读这两段后,想到的第一件事是批处理请求。 批处理请求允许客户端应用程序将多个API调用打包到单个HTTP请求中(此批处理技术也称为多部分请求)。
许多Google API支持批处理终结点,我能够通过检查其API Discovery document来验证DialogFlow是否具有批处理终结点。批处理端点以前没有在DialogFlow的API参考中进行记录,但是您可以利用其他API(like this one)的文档来了解其工作原理。 This link should also be instructive now that the global batch endpoint is no longer supported。
假设您的查询是独立的(即它们不依赖于其他查询的结果),则您应该能够使用批处理请求来获取更多数据。