如何部分格式化提示模板
先决条件
本指南假设您熟悉以下概念
就像将参数部分绑定到函数一样,将提示模板“部分”应用也有意义 - 例如,传入所需值的子集,以创建仅期望剩余值子集的新提示模板。
LangChain 支持两种方法
- 使用字符串值进行部分格式化。
- 使用返回字符串值的函数进行部分格式化。
在下面的示例中,我们将介绍这两种用例的动机,以及如何在 LangChain 中执行操作。
使用字符串进行部分应用
想要部分应用提示模板的一个常见用例是,您在获取其他变量之前先获取了提示中的一些变量。例如,假设您有一个提示模板,它需要两个变量,foo
和 baz
。如果您在链中的早期获取了 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
下一步
您现在已经了解了如何将变量部分应用于提示模板。
接下来,请查看本节中有关提示模板的其他操作指南,例如 向提示模板添加少样本示例。