如何部分格式化提示模板
先决条件
本指南假设您熟悉以下概念
就像将参数部分绑定到函数一样,对提示模板进行“部分”绑定是有意义的 - 例如,传递一部分必需的值,以便创建一个新的提示模板,该模板仅期望剩余的子集值。
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
下一步
您现在已经学习了如何将变量部分应用于提示模板。
接下来,查看本节中有关提示模板的其他操作指南,例如 向提示模板添加少样本示例。