语法说明 凯瑟琳DSL使用和YAML类似的语法来编写逻辑。语法通过规定机器人的多个阶段和在阶段之间的 迁移关系来描述聊天机器人的聊天过程。机器人在启动时处在一个特定的阶段,通过正则表达式匹配用户的输入迁移到下一个阶段 并输出对应的内容。 文法拥有三个顶级属性:
  • robotName 字符串类型,规定了机器人的名称;
  • stages Stage类型的数组,规定了机器人的各个阶段;
  • beginStageName 字符串类型,规定了机器人初始阶段,会自动输出该阶段的输出内容。
Stage类型拥有三个属性:
  • name 阶段的名称,是阶段唯一的标识符
  • transformers Transformer类型的数组,指定该阶段的迁移规则;
  • answer 该阶段的输出内容。
Transformer类型拥有两个属性:
  • pattern 匹配用户输入的正则表达式;
  • nextStageName 匹配成功之后需要迁移到的阶段名。
Stage类型的answer属性中支持两种特殊的语法:
  • 利用上文中设置的迁移正则表达式中提取用户的输入作为输出的一部分,使用$number 作为标识符指定提取到的信息应当插入在何处,number是匹配成功的列表索引。
    例如,使用正则表达式(.*?)迁移到拥有如下 answer: 感谢冒险家完成了“$1”, 这是你的奖励。属性的阶段, 会将用户的输入完全替换到$1所在的位置。
  • 调用系统中预先定义的API作为回答,使用@@module/method调用。
    例如:利用@@weather/text调用weather模块的text方法获得当前北京的天气信息。
当前程序中提供的API模块有:
  • Weather:
    text: 获得当前天气文本
    temp: 获得当前温度
在编译阶段编译器会执行如下检查:
  • transformers 中的 nextStageName指定的阶段是否定义;
  • beginStageName 指定的阶段是否定义。
  • 调用的模块和方法是否存在。
@code { private bool _helpVisible; public void Show() { _helpVisible = true; StateHasChanged(); } }