跳至主要内容

如何部分格式化提示模板

先决条件

本指南假设您熟悉以下概念

就像将参数部分绑定到函数一样,将提示模板“部分”应用也有意义 - 例如,传入所需值的子集,以创建仅期望剩余值子集的新提示模板。

LangChain 支持两种方法

  1. 使用字符串值进行部分格式化。
  2. 使用返回字符串值的函数进行部分格式化。

在下面的示例中,我们将介绍这两种用例的动机,以及如何在 LangChain 中执行操作。

使用字符串进行部分应用

想要部分应用提示模板的一个常见用例是,您在获取其他变量之前先获取了提示中的一些变量。例如,假设您有一个提示模板,它需要两个变量,foobaz。如果您在链中的早期获取了 foo 值,但在稍后的时间获取了 baz 值,则将这两个变量一直传递到链中可能会很麻烦。相反,您可以使用 foo 值对提示模板进行部分应用,然后将部分应用的提示模板传递下去,只需使用它即可。下面是执行此操作的示例

import { PromptTemplate } from "langchain/prompts";

const prompt = new PromptTemplate({
template: "{foo}{bar}",
inputVariables: ["foo", "bar"],
});

const partialPrompt = await prompt.partial({
foo: "foo",
});

const formattedPrompt = await partialPrompt.format({
bar: "baz",
});

console.log(formattedPrompt);

// foobaz

您也可以直接使用部分应用的变量初始化提示。

const prompt = new PromptTemplate({
template: "{foo}{bar}",
inputVariables: ["bar"],
partialVariables: {
foo: "foo",
},
});

const formattedPrompt = await prompt.format({
bar: "baz",
});

console.log(formattedPrompt);

// foobaz

使用函数进行部分应用

您也可以使用函数进行部分应用。这种用例适合您知道始终以通用方式获取的变量。一个很好的例子是日期或时间。假设您有一个提示,您始终希望它包含当前日期。您不能在提示中硬编码它,并且与其他输入变量一起传递它会很麻烦。在这种情况下,能够使用始终返回当前日期的函数对提示进行部分应用非常方便。

const getCurrentDate = () => {
return new Date().toISOString();
};

const prompt = new PromptTemplate({
template: "Tell me a {adjective} joke about the day {date}",
inputVariables: ["adjective", "date"],
});

const partialPrompt = await prompt.partial({
date: getCurrentDate,
});

const formattedPrompt = await partialPrompt.format({
adjective: "funny",
});

console.log(formattedPrompt);

// Tell me a funny joke about the day 2023-07-13T00:54:59.287Z

您也可以直接使用部分应用的变量初始化提示

const prompt = new PromptTemplate({
template: "Tell me a {adjective} joke about the day {date}",
inputVariables: ["adjective"],
partialVariables: {
date: getCurrentDate,
},
});

const formattedPrompt = await prompt.format({
adjective: "funny",
});

console.log(formattedPrompt);

// Tell me a funny joke about the day 2023-07-13T00:54:59.287Z

下一步

您现在已经了解了如何将变量部分应用于提示模板。

接下来,请查看本节中有关提示模板的其他操作指南,例如 向提示模板添加少样本示例


此页面是否有帮助?


您也可以留下详细反馈 在 GitHub 上.