原文地址:【LangChain系列 10】Prompt模版——Message的partial用法
本文速读:
-
字符串partial
-
方法partial
partial是什么意思呢?简单来说:将一个prompt模版传入部分变量值而生成一个新的prompt模版,当使用新的prompt模版时,就只需要传入剩下变量的值了。
LangChain提供了两种方式实现"partial":
-
通过字符串实现 partial
-
通过返回字符串的 方法 实现 partial
01 字符串 partial
顾名思义,字符串partial的意思:将字符串传入给prompt模版而生成一个新的prompt模版。一个常见的场景就是有时候我们一开始只能获取到部分变量的值,假设你有一个prompt需要两个变量:foo和bar,但是你在链中一开始只能获取到foo变量的值,bar变量的值要在后面才得获取到,此时你不得不等到两个值都能获取到的时候才能传给prompt模版,那么partial就是解决这个问题,你可以先将foo的值传入得到一个新的、只包含一个bar变量的prompt模版,等你能获取到bar的值时再将这个值传给新的prompt模版。
代码如下所示:
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"))
当然你也可以初始化partial变量,如下所示:
prompt = PromptTemplate(template="{foo}{bar}", input_variables=["bar"], partial_variables={"foo": "foo"})
print(prompt.format(bar="baz"))
02 方法 partial
另一种partial化的方式是通过方法(function),即传入一个返回值为字符串的方法。这种方式的使用场景就是:假设你获取某个变量的值是一种通用、公共的方式,这样你就可以把这些通用、公共的步骤封装成一个方法,然后将这个方法传给prompt模版。比如,你需要将当前时间传给prompt模版,此时你可以将获取当前时间封装成一个方法,然后把方法传给prompt模版即可。
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 02/27/2023, 22:15:16
同样,你也可以初始化partial变量,如下所示:
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 02/27/2023, 22:15:16
本文小结
本文主要介绍了两种方式实现prompt模版的partial:字符串partial化和方法partial化。
更多最新文章,请关注公众号:大白爱爬山