如何部分格式化提示模板
先决条件
本指南假定读者熟悉以下概念:
与将参数部分绑定到函数类似,对 提示模板 进行“部分”处理也是有意义的——例如,传入所需值的一个子集,以创建一个新的提示模板,该模板仅期望剩余的值子集。
LangChain 通过两种方式支持这一点:
- 使用字符串值进行部分格式化。
- 使用返回字符串值的函数进行部分格式化。
在下面的示例中,我们将介绍两种用例的动机以及如何在 LangChain 中实现。
与字符串部分匹配
想要部分填充提示模板的一个常见用例是,当你在其他变量之前就获得了提示中某些变量的值。例如,假设你有一个需要两个变量 foo 和 baz 的提示模板。如果你在链的早期就获得了 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
下一步
您现在已经学会了如何将变量部分应用到您的提示模板中。
接下来,请查看本部分中关于提示模板的其他操操作指南,例如 在提示模板中添加少样本示例。