概述
Colang 是一种事件驱动的交互建模语言,由 Python 运行时解释执行。NeMo Guardrails 的初始版本,0.1
到 0.7
版本,使用 Colang 1.0。从 0.8
版本开始,NeMo Guardrails 引入了对 Colang 2.0 的支持,同时在 Colang 完成其 beta 阶段之前,仍将 Colang 1.0 作为默认版本。
NeMo Guardrails |
Colang |
---|---|
0.1-0.7 |
1.0 |
0.8 |
2.0-alpha |
0.9 |
2.0-beta |
动机
大型语言模型 (LLM) 越来越多地应用于不同类型的对话和交互式系统中,例如基于聊天的助手、语音助手、多模态交互式头像、游戏中的非玩家角色和完全自主的代理。这些应用程序使用 LLM 不仅仅是为了生成文本响应。它们需要触发操作并遵循复杂的业务流程。

为实现此目的而广泛采用的方法包括:
生成代码并在沙箱环境中执行(例如,生成 Python 代码)。
使用特定模板生成响应,这样可以更轻松地解析机器人响应和应采取的操作(例如,思维链模式)。
对于支持函数调用的模型,可以使用函数调用和约束输出生成(例如,JSON 模式)。
检索增强生成 (RAG) 通过将应用程序级和用户特定的上下文集成到生成中,发挥着至关重要的作用。用于 LLM 的全面 guardrails 工具包应无缝适应所有这些交互模式。
Colang 1.0
当提到 Colang 时,既包含了该语言本身,也包含了它的运行时环境。最初的 Colang 1.0 语言和运行时存在一些限制。
语言限制
主要支持基于文本的交互,并为用户和机器人消息提供了专门的结构。
对自然语言指令的支持有限,例如提取用户提供的值或机器人消息指令。
缺乏对并发执行多个操作或启动多个交互流程的支持。
不允许对并行交互流进行建模,例如在交互式头像系统中同时进行的聊天和头像姿势调整。
缺乏正式的语言描述。
运行时限制
没有显式的状态对象来管理持续的交互。
随着事件数量的增加,性能会下降。
Colang 2.0
Colang 2.0 代表了对语言和运行时的全面改进。主要增强功能包括:
Colang 2.0-alpha
更强大的流程引擎,支持多个并行流程以及对事件流进行高级模式匹配。
用于简化机器人开发的标准库。
更小的一组核心抽象:流程、事件和操作。
通过
main
流程的显式入口点以及流程的显式激活。异步操作执行。
采用类似于 Python 的术语和语法,以降低新开发人员的学习曲线。
Colang 2.0-beta
用于标准库的导入机制,以进一步简化开发。
新的生成运算符 (
...
)。独立和流程参数表达式求值。
当前限制(将在 NeMo Guardrails v0.10.0 中修复)
Guardrails 库尚不能在 Colang 2.0 中使用。
不支持生成选项,例如,记录激活的 rails 等。
交互模型
虽然 Colang 1.0 和 Colang 2.0 之间的语法和底层机制有很多变化,但值得强调的是,一个核心要素保持不变:交互模型。
在 Colang 1.0 和 Colang 2.0 中,应用程序(或用户)与 LLM 之间的交互都是事件驱动的。事件的示例包括:用户说了什么、LLM 生成响应、触发操作、操作的结果、检索其他信息、触发 guardrail 等。换句话说,系统的演变被建模为一系列事件,guardrails 层负责识别和执行事件流中的模式。下图描述了事件流作用的简化版本(黄色背景的框代表事件)。

这种事件驱动的交互模型是使 Colang 成为强大建模语言的一部分,它可以描述任何类型的交互(基于文本、基于语音、多模态、代理、多代理等),并为其添加 guardrails。
如果您之前使用过 Colang 1.0,则应查看 变更内容 页面。如果还没有使用过,您可以从 Hello World 示例开始。