从 Colang 1 迁移到 Colang 2
NeMo Guardrails CLI 提供了一个工具 (nemoguardrails convert ...),用于将 guardrail 配置从 Colang 1.0 格式转换为 Colang 2.x。它对文件的内容执行多项语法转换,例如转换某些关键字和更改某些标识符的大小写。
警告
转换工具未涵盖某些边缘情况。您应始终在转换后手动审查 guardrail 配置。
工作原理
该工具遍历 path 参数指定的目录,并将转换应用于每个以 .co 结尾的文件。转换包括
将
define flow转换为flow。将
define subflow转换为flow。将
define bot转换为flow bot。将
define user转换为flow user。将
execute转换为await。转换
await之后的 snake_case 标识符为 CamelCase,并在其后附加关键字Action,同时保留使用的任何参数。将
else when转换为or when。将
stop转换为abort。将
bot之后的带引号的字符串转换为bot say或or bot say。将
user之后的带引号的字符串转换为user said或or user said。转换匿名流程。
为根流程(需要激活的流程)使用
active装饰器。将
global关键字添加到全局变量。将
...转换为 Colang 2 中相应的语法。
生成运算符
Colang 1.0 和 2.0 之间,生成操作的语法略有变化。 以下 Colang 1.0 代码段
# some instruction in natural language
$var_name = ...
它被翻译为
$name = ... "some instruction in natural language"
通用匹配
在 Colang 1.0 中,可以使用 user ... 和 bot ... 进行通用匹配。 这些在 Colang 2.0 中具有不同的等效项。 ... 不再用于匹配,仅用于生成。
转换期间应用以下更改
user ...被翻译为user said somethingbot ...被翻译为bot said something
Rail 配置
Colang 1.0 配置可以在 rails 字段中定义某些 rail。
如果在
config.yml中定义了 rail,则会生成一个_rails.co文件,其中包含定义的 rail。
示例流程转换
例如,以下流程
define flow
user express greeting
bot express greeting
被转换为
@active
flow express_greeting
user express greeting
bot express greeting
注意
按照惯例,用户流程使用过去时,而机器人流程使用现在时。但是,迁移工具不强制执行此约定。
该工具跟踪处理的行数和每个文件中所做的更改数。它还会计算更改的文件总数。
警告
该工具修改原始文件。建议使用版本控制来跟踪工具所做的更改。它还可以让您查看原始文件和修改后文件之间的差异。
用法
要使用转换工具,请使用以下命令
nemoguardrails convert /path/to/directory
convert 命令有几个选项
--verbose或--no-verbose:是否应详细迁移并输出详细日志。默认为no-verbose。--validate或--no-validate:迁移是否应使用 Colang Parser 验证输出。默认为no-validate。--use-active-decorator或--no-use-active-decorator:迁移是否应使用active装饰器。默认为use-active-decorator。
假设和限制
该工具假定输入文件格式正确。如果文件格式不正确,则该工具可能无法按预期工作。
该工具使用正则表达式来查找和替换文本中的某些模式。如果输入文件包含与这些模式匹配但不应替换的文本,则该工具可能会产生不正确的结果。
该工具重命名原始文件,并将转换后的内容写入具有原始名称的新文件。使用版本控制来跟踪工具所做的更改。
该工具不处理文件读取和写入操作期间可能发生的错误。如果发生错误,该工具会记录错误并继续处理下一个文件。
流程定义中不支持使用
-、+等字符以及or、and等标记,迁移工具不处理此转换。更好的做法是在流程开始时定义全局变量。但是,迁移工具不强制执行此操作。