对话轨道#

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

定义#

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

  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 对话轨道也被封装为一个在 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 护栏 CLI 时使用 --verbose 标志来显示所有预处理的事件

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

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