Skip to main content

部分提示模板 Partial prompt templates

与其他方法一样,部分提示模板也是有意义的,例如传递所需值的子集,以创建一个只期望剩余值的新提示模板。

LangChain以两种方式支持这种部分格式化:

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

这两种不同的方式支持不同的用例。在下面的示例中,我们将介绍两种用例的动机以及如何在LangChain中实现。

使用字符串进行部分格式化

部分提示模板的常见用例之一是在获取某些变量之前获取其他变量。例如,假设您有一个需要两个变量foobaz的提示模板。如果您在链中的早期获取了foo值,但稍后获取了baz值,那么等到将这两个变量都放在同一个位置传递给提示模板可能会很麻烦。相反,您可以使用foo值对提示模板进行部分格式化,然后将部分格式化的提示模板传递并仅使用它。以下是一个示例:

from langchain.prompts import PromptTemplate

prompt = PromptTemplate(template="{foo}{bar}", input_variables=["foo", "bar"])
partial_prompt = prompt.partial(foo="foo")
print(partial_prompt.format(bar="baz"))

输出结果为:

foobaz

您还可以使用部分变量初始化提示模板。

prompt = PromptTemplate(template="{foo}{bar}", input_variables=["bar"], partial_variables={"foo": "foo"})
print(prompt.format(bar="baz"))

输出结果为:

foobaz

使用函数进行部分格式化

另一个常见的用例是使用函数进行部分格式化。这种情况下的用例是,当您知道您总是希望以常见方式获取某个变量时。一个典型的例子是日期或时间。想象一下,您有一个提示,您总是希望其中包含当前日期。您不能在提示中硬编码它,并且将其与其他输入变量一起传递有点麻烦。在这种情况下,使用始终返回当前日期的函数对提示进行部分格式化非常方便。

from datetime import datetime

def _get_datetime():
now = datetime.now()
return now.strftime("%m/%d/%Y, %H:%M:%S")

prompt = PromptTemplate(
template="Tell me a {adjective} joke about the day {date}",
input_variables=["adjective", "date"]
)
partial_prompt = prompt.partial(date=_get_datetime)
print(partial_prompt.format(adjective="funny"))

输出结果为:

Tell me a funny joke about the day 02/27/2023, 22:15:16

您还可以使用部分变量初始化提示模板,这在这种工作流中通常更有意义。

prompt = PromptTemplate(
template="Tell me a {adjective} joke about the day {date}",
input_variables=["adjective"],
partial_variables={"date": _get_datetime}
)
print(prompt.format(adjective="funny"))

输出结果为:

Tell me a funny joke about the day 02/27/2023, 22:15:16