使用模型优化提示的智能回退

Portkey 可以帮助您轻松创建从一个 LLM 到另一个 LLM 的回退,使您的应用程序更可靠。虽然回退确保了可靠性,但这也意味着您将在另一个 LLM 上运行针对一个 LLM 优化的提示,这通常会导致最终输出存在显著差异。

使用 Portkey 提示模板,您可以针对特定模型进行优化,并确保最终输出最佳适应用例,即使在回退链中存在不同模型。

在本食谱中,我们将探索如何在模型优化提示模板之间设置回退,而不是对不同模型使用相同的提示。

让我们开始吧

1. 导入并认证 Portkey SDK

首先通过 npm 将 Portkey SDK 导入到您的 NodeJS 项目中,并通过传递 Portkey API 密钥进行认证。

import { Portkey } from 'portkey-ai';

const portkey = new Portkey({
  apiKey: process.env.PORTKEYAI_API_KEY
});

您现在可以访问 portkey 实例上的方法以触发提示完成 API。

2. 传统后备方案的局限性

为您希望模型执行的任务准备提示。我们希望我们的模型将一个目标分解为可操作的步骤,以便于烹饪书。根据在游乐场中令人满意的响应,我能够提出的良好版本是使用以下提示和默认模型参数:

You are a productivity expert. When given a task, you can smartly suggest possible subtasks. You list the subtasks in less than 10 items, keeping each as actionable.

系统:

您是一位生产力专家。当给定一个任务时,您可以聪明地建议可能的子任务。您将子任务列出在少于10项中,每项保持简短且可操作。

用户:

以下是我想要实现的目标:

我想在6个月内变得健康

GPT4:

1. 访问医生进行健康检查。

2. 设置具体的健身目标(如减重、力量等)。

...

9. 保持水分,根据需要进行调整。

Claude:

以下是一些建议的子任务,帮助您在六个月内实现六块腹肌:

1. 制定一个均衡且营养丰富的饮食计划,专注于瘦肉蛋白、蔬菜和健康脂肪,同时限制加工食品和含糖饮料。

2. 通过跟踪每日食物摄入量来创建可持续的卡路里赤字,确保您消耗的卡路里多于摄入的卡路里。

...

9. 通过设定短期目标、为进步奖励自己以及寻求朋友、家人或健身教练的支持来保持动力。

这意味着从GPT4获得令人满意输出的提示可能无法在Claude中获得最佳质量。从上述示例中,Claude的响应比我们想要的要详细一些——短小且可操作。

我们将通过模型优化的提示模板来解决这个问题。

3. 创建模型优化的提示模板

使用 Portkey 提示模板,您可以在一个地方编写提示和指令,然后在调用时只需输入变量,而无需再次传递整个指令。

创建提示模板的步骤:

  1. 登录到 Portkey 仪表板

  2. 导航到 Prompts

    1. 点击 Create 打开提示创建页面

以下页面应打开:

我正在使用 Anthropic 的 claude-3-opus-20240229 模型来指示它为用户的目标生成子任务。您可以使用大括号语法声明一个变量,以便在提示触发时替换一个值。例如,{{goal}} 在游乐场中被替换为“我想在六个月内拥有六块腹肌”。

现在,创建另一个可以作为后备的提示模板。

您可以这次创建相同的提示,但使用不同的模型,例如 gpt-4。到目前为止,您已经创建了两个提示模板。您一定注意到每个提示的 system 消息根据模型略有不同。在尝试每个模型后,以上提示最适合建议可行的步骤以实现目标。

此页面上的模型要求您将 OpenAI 和 Anthropic API 密钥保存到 Portkey Vault。有关 Portkey Vault 的更多信息,请 阅读虚拟密钥的更多内容

为了进一步探索,尝试了解 OpenAI SDK 以使用提示模板。

使用提示模板的后备配置

您需要准备请求以应用后备策略。为此,请使用之前创建的提示模板,一个用于 Anthropic,另一个用于 OpenAI,结构如下:

targets 是一个按偏好顺序排列的对象数组,优先考虑 Anthropic,然后是 OpenAI

在从 Portkey 创建实例时传递这些 config

完成此步骤后,portkey 上的方法将在每个通过 portkey 发送的请求中具有上述网关配置的上下文。

了解更多关于与网关配置一起工作的不同方式。

触发提示完成以激活智能回退

提示模板已准备好在 Portkey 客户端 SDK 等待触发提示完成 API 时被触发。

promptID 调用您希望在提示完成 API 上触发的提示模板。由于我们在客户端实例创建期间已将网关配置作为参数传递给 configs 参数,因此 promptID 对应的值将被忽略,task_to_subtasks_anthropic 将被视为请求路由的第一个目标,然后根据 targets 中的定义回退到 task_to_subtasks_openai

请注意,variables 包含在运行时替换提示模板的信息。此外,即使 promptID 有效,网关配置也将优先考虑。

请参阅 参考 以了解更多信息。

在日志中查看回退状态

Portkey 提供了 日志 以无缝检查和监控所有请求。它提供了有关每个请求的宝贵信息,包括日期/时间、模型、请求、响应等。

以下是日志的截图:

参见日志文档

干得好!您已经学习了如何在 Portkey 中创建提示模板,并为来自您的应用程序的数千个请求设置回退,所有这些仅需几行代码。

奖励:启用负载均衡

负载均衡可以将请求的数量分别分配给两个提示,遵循weight。结果是,你有更少的机会触及速率限制,并且不会使模型过载。

以下是如何更新网关配置:

权重将流量分配为90%给OpenAI,10%给Anthropic提示模板。

干得好!你学会了如何在Portkey中创建提示模板,并为来自你应用的数千个请求设置后备和负载均衡,所有这些仅需几行代码。

快乐编码!

查看完整代码:

Last updated