Dialog Rails

本节介绍如何使用 Colang 创建对话 rails。

定义

对话 Rails 是一种 rails,用于强制执行用户和机器人之间对话应采取的路径。 通常,它们涉及三个组件

  1. 用户消息的定义,包括规范形式,例如 user expressed greeting,以及潜在的表达方式。

  2. 机器人消息的定义,包括规范形式,例如 bot express greeting,以及潜在的表达方式。

  3. “连接”用户消息和机器人消息的流程的定义。

注意

用户和机器人消息的定义本身就是使用其他预定义流程的流程,例如 user saidbot say

下面的示例通过创建 user expressed greetingbot express greeting 消息扩展了 Hello World 示例

examples/v2_x/tutorial/hello_world_2/main.co
 1import core
 2
 3flow main
 4  user expressed greeting
 5  bot express greeting
 6
 7flow user expressed greeting
 8  user said "hi" or user said "hello"
 9
10flow bot express greeting
11  bot say "Hello world!"

注意

推荐的做法是对匹配外部操作(如用户说话)使用过去时,对必须执行的机器人操作使用现在时。 有关更多详细信息,请参阅 流程命名约定

LLM 集成

虽然上面的示例具有更多结构,但它仍然是刚性的,因为它仅适用于精确输入 “hi” 和 “hello”。

要使 LLM 能够驱动与流程不完全匹配的输入的交互,您必须激活 llm continuation 流程,它是 Colang 标准库 (CSL)llm 模块的一部分。

examples/v2_x/tutorial/hello_world_3/main.co
 1import core
 2import llm
 3
 4flow main
 5  activate llm continuation
 6  activate greeting
 7
 8flow greeting
 9  user expressed greeting
10  bot express greeting
11
12flow user expressed greeting
13  user said "hi" or user said "hello"
14
15flow bot express greeting
16  bot say "Hello world!"

流程激活 是 Colang 2.0 中的核心机制。 在上面的示例中,greeting 对话 rail 也被封装为一个在 main 流程中激活的流程。 如果流程未激活(或未被另一个流程显式调用),则不会使用它。

注意

当流程被激活时,它将开始监视事件流,并在有匹配项时驱动交互。

测试

$ nemoguardrails chat --config=examples/v2_x/tutorial/hello_world_3

> hello there!

Hello world!

> how are you?

I am an AI, so I don't have feelings like humans do. But thank you for asking! Is there something specific you would like to know or talk about?

首先,您可以看到用户话语 “hello there!” 如何根据其与预期用户答案的相似性匹配到流程 user expressed greeting。 其次,任何意外的用户话语(如 “how are you?”)都将触发 LLM 生成合适的响应。 这一切都由流程 llm continuation 自动处理和负责。 要更明确地控制交互循环,请查看 交互循环 示例。

提示

为了更好地了解底层发生了什么,您可以在启动 NeMo Guardrails CLI 时使用 --verbose 标志来显示所有预处理的事件

$ nemoguardrails chat --config=examples/v2_x/tutorial/hello_world_3 --verbose

下一个示例 将向您展示如何使用 Colang 描述多模态 rails。