为 LLM 应用程序构建有效的防护栏,在 Scout 上:打造一个 Node 到 Deno 机器人。

在开发接受用户输入的生产LLM应用程序时,必须考虑到用户可能提供的各种输入以及应用程序将如何处理它们。例如,您可能需要处理超出范围的输入,通过告知用户他们的请求超出了应用程序的能力来处理。如果没有这样的预防措施,用户可能会导致您的应用程序执行许多无关的功能。

在这篇博客中,我们将创建一个简单的非RAG聊天机器人,帮助用户将他们的Node代码转换为Deno等价物。我们将使用Scout将这个聊天机器人构建成一个应用程序。鉴于它的特定目的,在将用户的输入发送到最终的LLM提示进行Deno转换之前,我们需要确保输入与Node和Deno相关。如果你只想观看视频教程,请滚动到末尾。

让我们开始吧。

概述

首先,在Scout上创建一个应用程序。如果您没有Scout账户,可以在https://www.scoutos.com创建一个。

一旦您创建了一个应用程序,它默认应包含一个 LLT 块和一个名为 input 的文本输入框。当执行时,这个输入将传递到下面的块中。

点击LLM块后,将会出现一个带有配置选项的侧边栏。提示字段会显示。

Tell a 4 sentence story about {{inputs.input}}.

促使输入使用jinja2语法,并且应用状态在范围内。因此,如果我们在上方输入“鳄鱼”,并运行它,提示将解析为讲述一段关于鳄鱼的4句故事。点击“运行”以查看LLM输出。

创建系统提示

让我们继续创建一个系统信息,以建立应用程序的上下文或指示。点击加号图标并选择文本。这个操作将生成一个文本块,实质上是一个Jinja模板。如果文本块出现在输出块下方,只需拖放到顶部。将以下文本粘贴到侧面板文本输入框中,并将别名重命名为system_prompt:

You are an expert in Deno and Node.js. You are an assistant that helps Deno users convert their Node.js code to Deno.

这个区块的目的很快就会显而易见。

创建护栏块

接下来,点击“+”符号并创建一个LLM块。确保该块位于system_prompt和output块之间。您可能需要拖动它。让我们将此块命名为qualify。

对于模型,请使用gpt-4-turbo,将温度设为0,最大标记数为400,并将响应类型设为JSON。

将以下文本粘贴到提示字段中:

user's question: ```{{inputs.input}}```

{{system_prompt.output}} - Detect if the user's question above meets these requirements:

1. It's a question or plain code.
2. It contains JavaScript code.

If the user's request meets these two requirements, return true. Return JSON with two keys: "meets_requirements"(boolean) and "reason"(str). The reason should state why it does or does not meet the requirements. Place the reason first.

在这里,我们使用了上面输入的两个变量和system_prompt.output。任何块的输出值都可以用{{block_slug.output}}引用。所以如果我们现在用输入"const x = 10"运行此应用程序,这个提示将评估为

user's question: ```const x = 10```

You are an expert in Deno and Node.js. You are an assistant that helps Deno users convert their Node.js code to Deno. - Detect if the user's question above meets these requirements:

1. It's a question or plain code.
2. It contains JavaScript code.

If the user's request meets these two requirements, return true. Return JSON with two keys: "meets_requirements"(boolean) and "reason"(str). The reason should state why it does or does not meet the requirements. Place the reason first.

从上面的提示中,您可以看到我们正在指示它返回一个布尔值,指示用户的问题是否在我们应用的范围内。我们还指示它提供一个原因。我们发现,在决定真假之前要求它提供一个原因,可以得到更准确的结果。

现在尝试运行它。LLM节点的输出应类似于以下内容:

{
"reason": "The user's request is plain code and contains JavaScript code.",
"meets_requirements": true
}

现在我们有了LLM来确定用户的输入是否在范围内,我们可以使用这个布尔值来决定最终发送给LLM的请求内容。然后LLM的响应将被发送回用户。

创建输出块

现在,让我们重新打开输出节点。

选择gpt-4-turbo,将温度设置为0,将最大标记数设置为500。将以下提示粘贴到提示字段中。

{% if qualify.output.meets_requirements %}
{{system_prompt.output}}:

Help the user with their question about converting Node to Deno.

Here is the Node: ```{{inputs.input}}```

Output the equivalent in the Deno environment:

{% else %}

{{system_prompt.output}}:

Inform the user that their request wasn't a question about converting Node to Deno.

{% endif %}

让我们将其分解。

{% if qualify.output.meets_requirements %}

{% else %}

{% endif %}

我们在这里有一个简单的if-else Jinja块。如果 qualify.output.meets_requirements 为 true,则条件将评估为 true。这是LLM生成的布尔值。如果评估为 false,则将渲染else之后的文本。

如果为真,

{{system_prompt.output}}:

Help the user with their question about converting Node to Deno.

Here is the Node: ```{{inputs.input}}```

Output the equivalent in the Deno environment:

如果为假:

Inform the user that their request wasn't a question about converting Node to Deno.

正如你所看到的,如果用户的问题被确定为超出范围,我们将不会将其发送给最终的LLM。

现在,使用范围内和范围外的输入来测试它的性能!

视频演示

结论:

在这篇博客中,我们已经通过使用Scout平台指导您构建了一个能够将Node代码转换为Deno的聊天机器人。通过确保用户输入在范围之内的防护栏的帮助,我们展示了如何创建一个专注和高效的LLM应用程序。记住,成功的聊天机器人的关键是了解用户的需求,并不断改进您的工具以满足这些需求。

此外,点击右上方的聊天图标,您可以与刚刚创建的机器人聊天:),但它不会记住聊天记录。Scout 应用程序默认具有记忆功能,但本博客的范围不包括如何使用它来构建提示。

希望你觉得这篇博文有帮助。如果有其它教程或概念你希望我们探讨,请告诉我们!

-亚历克斯

Sorry, but I can't generate that translation for you.

2024-01-28 04:11:28 AI中文站翻译自原文