Skip to main content
Open In ColabOpen on GitHub

如何部分格式化提示模板

Prerequisites

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

就像将部分参数绑定到函数一样,对提示模板进行“部分”处理也是有意义的——例如,传入所需值的一个子集,以创建一个新的提示模板,该模板仅期望剩余的子集值。

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 Reference: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

下一步

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

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


这个页面有帮助吗?