LangChain 中 Prompt Templates and Values 是什么?
概念角色比喻关键方法蓝图/配方一个蛋糕食谱,上面写着“加入 {水果} 和 {糖量}”具体指令按照食谱做成的具体指令:“加入草莓和100克糖Chain自动化流水线一个机器人,你告诉它“水果=草莓,糖量=100g”,它就能自动执行食谱的每一步,最后把蛋糕(输出)给你。.run(...)通过使用,你实现了提示词的标准化和管理;通过生成,你将抽象模板转化为具体指令;最后通过Chains,你将整个与模型交互
核心概念
在 LangChain 中,Prompt Templates 和 Values 是用于高效、标准化地与语言模型(LLM)进行交互的核心组件。它们解决了直接拼接字符串带来的重复、混乱和难以维护的问题。
1. Prompt Templates(提示模板)
是什么?
提示模板是预定义好的、可复用的“提示词蓝图”。它不是一个简单的字符串,而是一个包含变量(占位符) 的结构化文本。你可以把它想象成一个填空题模板或者一个带有 {变量}
的字符串格式。
为什么需要它?
- 可复用性:写一次模板,可以在多个地方无限次使用。
- 一致性:确保发送给 LLM 的提示结构保持一致,这对于生产环境的可靠性和测试至关重要。
- 可维护性:如果需要修改提示词的逻辑或风格,只需修改模板一处即可,而不需要在整个代码库中查找和替换。
- 组织性:将提示词逻辑与应用程序代码分离,使代码更清晰。
如何工作?
一个模板通常由两部分组成:
- 模板文本:包含指令、上下文、问题和格式要求的固定文本部分。
- 输入变量:在文本中声明的、需要用实际值填充的占位符。
示例:
假设你有一个总结文章的功能,你可以创建一个模板:
from langchain.prompts import PromptTemplate
# 1. 创建一个模板
template = """
请总结以下文章的内容:
文章标题: {title}
文章正文: {content}
请用一句话进行总结:
"""
# 2. 实例化 PromptTemplate 对象,并指明它需要哪些变量
prompt = PromptTemplate(
input_variables=["title", "content"],
template=template,
)
在这个例子中,{title}
和 {content}
就是输入变量。
2. Prompt Values(提示值)
是什么?
提示值是提示模板在填充了实际变量后生成的最终结果。它是一个可以被发送给语言模型的具体字符串。
为什么需要它?
它是模板(蓝图)和模型(执行者)之间的桥梁。模板定义了“怎么做”,而提示值是“具体要做什么”。
如何工作?
你使用 .format()
方法,为模板中声明的所有输入变量提供具体的值,从而生成一个提示值。
示例(接上文):
# 3. 使用实际数据填充模板,生成一个 Prompt Value
final_prompt = prompt.format(
title="人工智能的未来",
content="人工智能正在深刻改变世界...(这里是文章的实际内容)"
)
# 打印最终的提示值,看看它长什么样
print(final_prompt)
输出结果:
请总结以下文章的内容:
文章标题: 人工智能的未来
文章正文: 人工智能正在深刻改变世界...(这里是文章的实际内容)
请用一句话进行总结:
这个 final_prompt
变量所持有的字符串,就是一个 Prompt Value。现在你可以将它直接发送给 LLM。
在 Chain 中的工作流程
Prompt Templates 和 Values 最常与 Chains 结合使用,形成一个自动化的工作流:
- 定义模板:预先创建好
PromptTemplate
。 - 创建链:将模板和 LLM 链接起来。LangChain 提供了
LLMChain
这个便捷的类来完成此事。 - 运行链:只需提供输入变量,链会自动完成“格式化模板 -> 调用模型 -> 获取输出”的全过程。
示例:
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain_openai import OpenAI # 或者来自其他供应商的LLM
# 1. 定义模板和PromptTemplate对象
template = "请给一家生产{product}的公司起一个好听的名字。"
prompt = PromptTemplate.from_template(template) # LangChain可以自动推断输入变量
# 2. 初始化模型
llm = OpenAI(model_name="gpt-3.5-turbo-instruct") # 示例使用OpenAI
# 3. 创建链,将模板和模型绑定在一起
chain = LLMChain(llm=llm, prompt=prompt)
# 4. 运行链!只需提供输入变量,链会处理剩下所有步骤。
# .run() 方法返回的是模型的输出(字符串),而不是Prompt Value。
result = chain.run(product("环保可降解的咖啡杯"))
print(result)
# 输出可能为: "绿源咖啡器具" 或 "大地之杯" 等
总结
概念 | 角色 | 比喻 | 关键方法 |
---|---|---|---|
Prompt Template | 蓝图/配方 | 一个蛋糕食谱,上面写着“加入 {水果} 和 {糖量}” | PromptTemplate(...) |
Prompt Value | 具体指令 | 按照食谱做成的具体指令:“加入 草莓 和 100克糖” | .format(...) |
Chain | 自动化流水线 | 一个机器人,你告诉它“水果=草莓,糖量=100g”,它就能自动执行食谱的每一步,最后把蛋糕(输出)给你。 | .run(...) |
通过使用 Prompt Templates,你实现了提示词的标准化和管理;通过生成 Prompt Values,你将抽象模板转化为具体指令;最后通过 Chains,你将整个与模型交互的过程自动化。
(注:文档部分内容可能由 AI 生成)
更多推荐
所有评论(0)