Dialog Rails#

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

定义#

对话轨道 是一种强制用户和 Bot 之间对话应遵循的路径的轨道类型。 通常,它们涉及三个组件

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

  2. Bot 消息的定义,包括规范形式,例如 bot express greeting 和潜在的表达。

  3. “连接”用户消息和 Bot 消息的流的定义。

注意

用户和 Bot 消息的定义本身就是使用其他预定义流的流,例如 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!"

注意

推荐的做法是对匹配外部操作(例如用户说了一些话)使用过去时,对必须执行的 Bot 动作使用现在时。 有关更多详细信息,请参见 流命名约定

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 对话轨道也封装为在 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 描述多模态轨道。