对话护栏#
本节解释如何使用 Colang 创建对话护栏。
定义#
对话护栏 是一种护栏,用于强制规定用户和 bot 之间的对话路径。通常,它们包含三个组件
用户消息的定义,包括规范形式,例如
user expressed greeting
,以及可能的表达。bot 消息的定义,包括规范形式,例如
bot express greeting
,以及可能的表达。定义“连接”用户消息和 bot 消息的流程。
注意
用户和 bot 消息的定义本身就是使用其他预定义流程的流程,例如 user said
和 bot say
。
下面的示例通过创建 user expressed greeting
和 bot express greeting
消息,扩展了 Hello World 示例。
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
模块的一部分。
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 描述多模态护栏。