Opendial中触发Model依赖的是变量,流转,填槽以及赋值都是依靠变量进行传递的,这里描述一下在Opendial中变量的组织形式。

变量存放在哪里

  1. public class BNetwork {
  2. // logger
  3. final static Logger log = Logger.getLogger("OpenDial");
  4. // the set of nodes for the network
  5. Map<String, BNode> nodes;
  6. // the chance nodes
  7. Map<String, ChanceNode> chanceNodes;
  8. // the utility nodes
  9. Map<String, UtilityNode> utilityNodes;
  10. // the action nodes
  11. Map<String, ActionNode> actionNodes;
  12. }

使用Map进行保存,在一次对话/流程的上下文中,这个数据是可以共享的。

产生变量的地方主要有以下几个

  • 初始化的变量
  • 运行过程中产生的变量,例如f44,f44.chen
    • 临时变量,例如f44
    • 最终变量,f44.chen
  • 系统变量
    • model的trigger
    • rule的id
    • 等等

      每一次的更新都要计算变量