跳到主要内容
Open In ColabOpen on GitHub

如何部分格式化提示模板

先决条件

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

就像部分绑定函数参数一样,"部分"一个提示词模板也可能是有意义的——例如,传入所需值的一个子集,从而创建一个只期望剩余值子集的新提示词模板。

LangChain 以两种方式支持这一点

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

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

用字符串进行部分格式化

部分格式化提示词模板的一个常见用例是,如果您在获取其他变量之前就获得了提示词中的一些变量。例如,假设您有一个提示词模板需要两个变量,foobaz。如果您在链的早期就获得了 foo 值,但 baz 值是后来才获得的,那么将这两个变量一路传递到链的末端可能会很不方便。相反,您可以用 foo 值对提示词模板进行部分格式化,然后将部分格式化后的提示词模板传递下去并直接使用它。下面是这样做的示例:

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 参考:PromptTemplate
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 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

下一步

您现在已经学会了如何部分应用变量到您的提示词模板中。

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