## 5.3 暗号 >本节主要介绍了暗号的相关内容。其中包含暗号的两项作用:传递重要参数值以及连接上下文意图。另外介绍了暗号周期:如果在流程中需要使暗号在多轮对话中生效,就必须设置暗号周期来规定暗号有效轮数。 人跟人之间会通过特殊信号、也就是“暗号”来交流,意图和意图之间也可以通过暗号来连接。所以,暗号有两个作用:连接意图和传递信息。下面我们来看一下怎么使用暗号。 ### 5.3.1 暗号传递参数值 案例:你喜欢周杰伦吗 任务:完成一个主题的上下文聊天 以下面的对话为例。 ![](https://box.kancloud.cn/216dad4a27570473bffff97c217a97ee_1364x728.png) 我们看到第二句用户并没有说周杰伦,但是机器人却能准确的回答出,这就是通过暗号传递了歌手的信息。 ![](https://box.kancloud.cn/d764749c3c13ea58d6c5394517c04e77_1355x734.png) ![](https://box.kancloud.cn/8dd1cae9889c6840e7d9c42b8bb6bf45_1363x734.png) * 牢记:接受暗号参数值=#暗号名称.参数名称,这里的参数名称一定是发出暗号的意图的参数名称 再举一个案例:订机票 任务:完成机票预订信息的收集 流程:订机票——>出发地——>目的地——>出发日期——>机票 首先,建立四个意图,并依次传输暗号,连接起意图。 ![](https://box.kancloud.cn/df57a97b828a2cb9ef0cc9f3581189b3_342x155.png) ![](https://box.kancloud.cn/11116a25e9e05e20137f03e020652f7d_554x161.png) ![](https://box.kancloud.cn/8cbb338644ee0a99bfb9691895e0ed4c_554x230.png) ![](https://box.kancloud.cn/0ded692fbfaddaa9787ca543dc558e2c_554x404.png) 这里意图处理与普通意图相同,都是系统自动生成 ![](https://box.kancloud.cn/560d148f9aae6fc124c569c67ef3f310_679x664.png) ![](https://box.kancloud.cn/d430f0c61d4a4e3ebd0019312ebe2489_676x469.png) 这里需要传递上一条意图收集的“出发地”信息,就需要在意图处理增加一条"from",此处的值为:#目的地(暗号).from(上一条意图需要传递的参数值)。如此便实现了跨意图传参数。 ![](https://box.kancloud.cn/ba1acbfe2617f051d8df847ed6f73df6_692x524.png) 这里需要把刚刚收集到的两条信息“出发地”“目的地”,就需要在意图处理增加两条,同样是值为:#出发日期(暗号).to(上一条意图需要传递的参数值)、#出发日期(暗号).from(上一条意图需要传递的参数值),;连同当前意图获得的"date",我们收集到了订机票需要的全部三个参数。 ![](https://box.kancloud.cn/b4c05aa920782041ceaf05fbe52663f2_689x521.png) 试一试: ![](https://box.kancloud.cn/35c6eb69066116a7da7faf0bb6a7d269_1053x615.png) 可以看到最后一条意图虽然只在用户说收集了一个日期信息,但JSON包含了全部出发地和目的地的信息,这些都是通过暗号传递和意图处理实现的。 ### 5.3.2 暗号连接上下文 案例:暗号对话:你喜欢周杰伦吗、你喜欢苹果吗 任务:完成多主题的上下文聊天 我们再来看一组对话 ![](https://box.kancloud.cn/208c78ce4bc87e5d5b8c5128d66a9545_1356x731.png) 在上面的对话中用户问到了两次“为什么”,但是机器人能准确的知道用户问的是苹果还是周杰伦,这也是通过暗号实现的。 ![](https://box.kancloud.cn/d79eed0e715914d39fae8da243dee7f6_1363x733.png) ![](https://box.kancloud.cn/83e8df45b0ce67fe809ba78722b6e411_1361x732.png) 所以我们可以看到,暗号是一对一的,即使用户说重复也不会有冲突。这就实现了上下文的联系。 ### 5.3.3 暗号的周期 案例:暗号对话:对诗 任务:完成对诗,允许错误三次。 设置好的发出暗号,点击即可进行周期设定。所谓周期就是意图发出的暗号在多少轮对话内是有效的,如果希望暗号在N对话内都有效,那就设置周期为N,默认情况下暗号周期是1,则第二轮对话时暗号就失效了。 为了完成对诗任务,首先,建立意图,并设置暗号周期为3: ![](https://box.kancloud.cn/449e10aba71d40809e553a06f32b0aa5_684x731.png) 接收暗号的意图分为两个(也可以只用一个意图,通过一个意图内JS判断诗句对错,这里先用两个意图),一个是正确答案、一个是非正确答案。 ![](https://box.kancloud.cn/14963601952bba28b0a16fdb5e7d5908_553x215.png) ![](https://box.kancloud.cn/28df1f25d68040722e09ebde2a1a9875_563x205.png) 设置非正确答案的意图优先级低于正确答案意图: ![](https://box.kancloud.cn/5be3094ff50d7718b94f9da3d9c2387e_681x696.png) ![](https://box.kancloud.cn/e3108a31c238fef58cda5ca59c43c41f_687x701.png) 如此可实现以下对话: 错误三次,自动退出对诗。图中红框内的对话在暗号周期,第四次回答即使正确,也超出了暗号周期,不再属于对诗上下文的范围。 ![](https://box.kancloud.cn/4a22886003625d9ae4635410c6edd612_511x561.png) 未错满三次,在周期内答对题: ![](https://box.kancloud.cn/4140f6113b68e6b583cd4b810f05495b_510x249.png) ### 5.3.4暗号总结 暗号在流程管理任务上是非常好的工具,比如订咖啡、订酒店。大家可以试试看。 温馨提示: * 一个意图可以发出多个暗号,暗号之间是或的关系;一个意图也可以接收多个暗号,但暗号之间是与的关系。所以意图尽量不要接收大于1个数量的暗号。 * 优先级大于暗号。两个相同用户说的意图B1、B2,其中B1接收来自A的暗号、优先级为0,B2不接收任何暗号、优先级为1,那么当进行完意图A后,发出下一句用户说,优先进入优先级更高的B2,而不是有暗号连接的B1。