Skip to main content
Open In ColabOpen on GitHub

如何部分格式化提示模板

前置条件

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

类似于部分绑定函数的参数,对 提示模板 进行“部分填充”也是有意义的——例如传入所需值的一个子集,从而创建一个新的提示模板,该模板仅期望剩余的子集值。

LangChain 以两种方式支持此功能:

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

在下面的示例中,我们将介绍这两种用例的动机以及如何在 LangChain 中实现它们。

部分与字符串

一个常见的希望部分应用提示模板的用例是,如果您在提示中比在其他变量之前先获取到某些变量。例如,假设您有一个需要两个变量的提示模板,foobaz。如果您在链的早期就获得了foo的值,但稍后才获得baz的值,那么将这两个变量一直传递下去可能会很不方便。相反,您可以使用foo的值对提示模板进行部分应用(partial),然后将部分应用的提示模板传递下去并直接使用它。下面是一个示例:

from langchain_core.prompts import PromptTemplate

prompt = PromptTemplate.from_template("{foo}{bar}")
partial_prompt = prompt.partial(foo="foo")
print(partial_prompt.format(bar="baz"))
API 参考:提示模板
foobaz

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

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

带有函数的部分

另一种常见用法是结合函数使用 partial。这种用例适用于你有一个变量,希望以固定方式始终获取它的情况。一个典型的例子是日期或时间。假设你有一个提示(prompt),你总是希望在其中包含当前日期。你不能在提示中硬编码日期,而将其与其他输入变量一起传递又不太方便。在这种情况下,能够使用一个始终返回当前日期的函数对提示进行 partial 处理就非常方便。

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 04/21/2024, 19:43:57

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

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 04/21/2024, 19:43:57

下一步

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

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