Langchain文档 部分提示模板

172 阅读2分钟

像其他方法一样,部分化提示模板也是有意义的 - 例如,传递所需值的子集,以创建一个只接受剩余子集值的新提示模板。LangChain支持两种方式实现部分化:

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

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

使用字符串进行部分化

部分化提示模板的一个常见用例是在获取某些变量之前先获取其他变量。例如,假设你有一个需要两个变量foo和baz的提示模板。如果你在链条的早期获取了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="告诉我一个{形容词}关于{日期}的笑话",
    input_variables=["形容词", "日期"]
)
partial_prompt = prompt.partial(date=_get_datetime)
print(partial_prompt.format(形容词="有趣"))

你也可以直接使用部分化的变量来初始化提示,这在这种工作流程中通常更合理。

prompt = PromptTemplate(
    template="告诉我一个{形容词}关于{日期}的笑话",
    input_variables=["形容词"],
    partial_variables={"日期": _get_datetime}
)
print(prompt.format(形容词="有趣"))
Tell me a funny joke about the day 02/27/2023, 22:15:16