防护栏流程

本指南概述了 NeMo Guardrails 中支持的主要防护栏类型以及调用它们的过程。

概述

NeMo Guardrails 支持五种主要类别的防护栏:输入、对话、输出、检索和执行。下图概述了通过这些类别流程的高级流程。

防护栏类别

NeMo Guardrails 支持五种类型的防护栏

  1. 输入防护栏:应用于来自用户的输入;输入防护栏可以拒绝输入(停止任何额外的处理)或更改输入(例如,掩盖潜在的敏感数据,重新措辞)。

  2. 对话防护栏:影响对话如何演变以及如何提示 LLM;对话防护栏对规范形式的消息进行操作(更多详细信息请参阅此处),并确定是否应执行操作,是否应调用 LLM 来生成下一步或响应,是否应使用预定义的响应等。

  3. 检索防护栏:应用于 RAG(检索增强生成)场景中检索到的块;检索防护栏可以拒绝一个块,阻止其用于提示 LLM,或更改相关的块(例如,掩盖潜在的敏感数据)。

  4. 执行防护栏:应用于需要调用的自定义操作(也称为工具)的输入/输出。

  5. 输出防护栏:应用于 LLM 生成的输出;输出防护栏可以拒绝输出,阻止其返回给用户或更改它(例如,删除敏感数据)。

防护栏流程

下图详细描述了防护栏流程

防护栏流程包含用户消息经历的多个阶段

  1. 输入验证阶段:用户输入首先由输入防护栏处理。输入防护栏决定是否允许输入,是否应更改或拒绝输入。

  2. 对话阶段:如果允许输入且配置包含对话防护栏(即,至少定义了一条用户消息),则用户消息将由对话流程处理。这最终将产生机器人消息。

  3. 输出验证阶段:在对话防护栏生成机器人消息后,它将由输出防护栏处理。输出防护栏决定是否允许输出,是否应更改或拒绝输出。

对话防护栏流程

下图详细描述了对话防护栏流程

对话防护栏流程包含用户消息经历的多个阶段

  1. 用户意图生成:首先,必须通过计算规范形式(也称为用户意图)来解释用户消息。这是通过搜索已定义用户消息中最相似的示例,然后请求 LLM 生成当前的规范形式来完成的。

  2. 下一步预测:在计算出用户消息的规范形式后,需要预测下一步。如果存在与规范形式匹配的 Colang 流程,则将使用该流程来决定。否则,将要求 LLM 使用已定义流程中最相似的示例来生成下一步。

  3. 机器人消息生成:最终,需要基于规范形式生成机器人消息。如果存在预定义的消息,将使用该消息。否则,将要求 LLM 使用最相似的示例来生成机器人消息。

单次 LLM 调用

single_llm_call.enabled 设置为 True 时,对话防护栏流程将简化为单次 LLM 调用,一次性预测所有步骤。下图描述了简化的对话防护栏流程