更新内容
本指南概述了 Colang 2.0 中最重要的非全面更改。
术语
为了限制学习曲线,Colang 2.0 尽可能多地借鉴了 Python 的术语
每一段 Colang 代码都称为脚本。
单个
.co
文件称为模块。Colang 文件的文件夹(可能包含子文件夹)称为包。
模块和包可以被导入。
语法变更
删除
define
、execute
关键字。添加
flow
、match
、send
、start
、await
、activate
关键字。支持装饰器。
when
/or when
代替when
/else when
。删除了子 flows。
定义用户和机器人意图
不再支持特殊的 define user ...
和 define bot ...
语法。在 Colang 2.0 中定义示例话语时,您必须使用更明确的语法
flow user expressed greeting
user said "hi" or user said "hello"
flow user expressed greeting
user said "hi"
or user said "hello"
or user said "Good evening!"
or user said "Good afternoon!"
为什么?例如,现在您可以混合其他类型的事件和模态,例如 user gesture "wave"
。
同样,对于机器人意图
flow bot express greeting
bot say "Hello world!"
or bot say "Hi there!"
Flow 命名约定
对来自“系统外部”的事件进行建模的 flows 使用过去时命名,例如 user said
、user expressed greeting
等。在机器人方面,它们表示需要采取的动作,并使用祈使语气,例如 bot say
、bot express greeting
、bot refuse to respond
等。有关更多详细信息,请参阅 Flow 命名约定。
生成运算符
Colang 2.0 引入了 ...
运算符,也称为“生成”运算符。只要 Colang 脚本的一部分需要在运行时动态生成,就可以使用它。通常,这是使用 LLM 完成的。
...
运算符支持使用自然语言 flows,其中 flow 的文档字符串用于生成 flow 的内容。
激活的 Flows
在 Colang 1.0 中,所有 flows 默认都是激活的。在 Colang 2.0 中,flows 必须显式激活。现在还有一个 main
flow 默认激活,并且是入口点。
入口点
在 Colang 1.0 中,Colang 脚本没有明确的入口点。在 Colang 2.0 中,main
flow 是入口点。main
flow 触发 Colang 包中使用的所有其他 flows 的激活。
导入机制
Colang 2.0 添加了类似于 python 的导入机制。可以使用 import
语句导入 COLANGPATH
中存在的任何 Colang 模块或包。与 Python 不同,目前 Colang 2.0 仅提供模块/包级别的导入,即您不能仅导入特定的 flow。这将在未来的版本中添加。
标准库
Colang 2.0 现在有一个标准库
core
:一组与用户和机器人话语相关的核心 flows,例如user said
、bot say
。llm
:与使用 LLM 驱动交互相关的 flows。timing
:时间相关的 flows,例如wait
、user was silent $time_s
。guardrails
:支持添加护栏,即检查用户输入、机器人输出等。avatars
:支持控制交互式头像。utils
:一小组实用程序 flows。
异步操作
在 Colang 1.0 中,操作只能同步执行,阻塞 flow。此外,无法并行启动两个操作。例如,如果您希望多个输入护栏并行运行,这一点尤其重要。
在 Colang 2.0 中,execute
关键字已替换为 await
,类似于 Python。此外,您可以使用 start
启动操作而不会阻塞 flow。
命名约定
Colang 2.0 使用以下命名约定: - Flow 名称:小写,可以有空格,应该自然易读。 - Action 名称:驼峰式,必须以 “Action” 结尾。 - Event 名称:驼峰式。
对于标记操作开始和结束的事件,有一些约定:Start...Action
、...ActionStarted
、...ActionFinished
。
多模态
Colang 2.0 支持对多模态交互进行建模,而不仅仅是基于文本的交互(例如,user gesture
、bot gesture
、bot posture
等)
变量
在 Colang 1.0 中,所有变量默认都是全局的。在 Colang 2.0 中,所有变量默认都是局部的。要使变量成为全局变量,可以使用 global
关键字。
Colang 2.0 中没有默认的全局变量。
字符串格式化
不再支持内联 "Hello there, $name!"
。您必须始终将变量包装在花括号内,类似于 python "Hello there, {$name}!"
。
LLM 调用
在 Colang 1.0 中,一旦您定义了用户意图,对话护栏将自动激活并使用 LLM。在 Colang 2.0 中,要使用 LLM,您必须显式激活该机制
flow main
activate llm continuation
Python API
Colang 2.0 添加了对显式“状态对象”的支持。对于跨多个回合/事件的交互,每次处理后都会返回一个状态对象,并且需要在下一个处理周期中将其传回。