趋近智
尽管可以使用 Python 的 f-字符串手动格式化字符串来构建提示词 (prompt),但随着应用程序的复杂度提升,这种方式会变得难以处理。需要一种更有组织的方法来处理多个输入变量,确保其可重复使用性,并将提示词的逻辑与应用程序代码明确分开。LangChain 提供了 PromptTemplate 对象,通过规范化提示词的创建来解决这个问题。
PromptTemplate 是一个可重复使用的对象,用于生成提示词。它包含一个模板字符串和在格式化提示词时所需的一组输入变量。
最简单的 PromptTemplate 接受一个模板字符串和一组变量。模板字符串使用 Python 的 f-字符串语法作为其占位符。
我们来为简单的语言翻译器创建一个模板。
from langchain_core.prompts import PromptTemplate
template_string = "Translate the following text from {input_language} to {output_language}: {text}"
prompt_template = PromptTemplate(
input_variables=["input_language", "output_language", "text"],
template=template_string,
)
# 也可以使用便捷的 from_template 类方法
# prompt_template = PromptTemplate.from_template(template_string)
formatted_prompt = prompt_template.format(
input_language="English",
output_language="Spanish",
text="Hello, how are you?"
)
print(formatted_prompt)
# 输出:Translate the following text from English to Spanish: Hello, how are you?
这个格式化后的字符串可以直接传递给 LLM。这里的主要优点是清晰性和安全性。如果您尝试在未提供所有 input_variables 的情况下格式化 PromptTemplate,它将引发错误,从而防止不完整的提示词 (prompt)发送给模型。
使用 PromptTemplate 为模型生成最终提示词的流程。
聊天模型与标准 LLM 的运行方式不同。它们不期望单个字符串,而是期望一系列聊天消息,每条消息都有特定的角色(如 system、human 或 ai)。为了适应这一点,LangChain 提供了 ChatPromptTemplate。
ChatPromptTemplate 是从消息模板列表中创建的。这使您能够构建多轮对话,并为提示词 (prompt)的不同部分分配独特的角色。
以下是如何为我们的翻译器创建 ChatPromptTemplate 的方法。
from langchain_core.prompts import ChatPromptTemplate
chat_template = ChatPromptTemplate.from_messages(
[
("system", "You are an expert translator. Translate the user's text from {input_language} to {output_language}."),
("human", "{text}"),
]
)
formatted_messages = chat_template.format_messages(
input_language="English",
output_language="Japanese",
text="This is a test."
)
print(formatted_messages)
# 输出:
# [
# SystemMessage(content='You are an expert translator. Translate the user's text from English to Japanese.'),
# HumanMessage(content='This is a test.')
# ]
输出是一个包含 SystemMessage 和 HumanMessage 对象的列表,这正是像 ChatOpenAI 这样的聊天模型所期望的格式。这种有组织的方法比手动创建消息对象列表更规范,并且不易出错。
有时,您可能希望通过预先填充一些变量,从通用模板创建一个更专业的模板。这被称为提示词 (prompt)的“部分化”。它有助于创建可重复使用的组件,或者当您事先知道某些输入值时非常有用。
比如,我们可以使用我们通用的 chat_template 来创建一个专用的英德翻译器。
# 沿用上一个例子
# 通过部分化原始模板来创建一个专用模板
german_translator_template = chat_template.partial(
input_language="English",
output_language="German"
)
# 现在,您只需提供剩余的变量:`text`
german_messages = german_translator_template.format_messages(
text="That is a wonderful idea."
)
print(german_messages)
# 输出:
# [
# SystemMessage(content="You are an expert translator. Translate the user's text from English to German."),
# HumanMessage(content='That is a wonderful idea.')
# ]
通过使用 partial,我们创建了一个新的、更具体的 ChatPromptTemplate,它只需要 text 变量。这项技术通过减少冗余,并允许您以模块化的方式组合提示词模板,从而简化了您的代码。
使用 PromptTemplate 和 ChatPromptTemplate 对构建可扩展的 LangChain 应用程序是不可或缺的。它们提供了有效处理提示词所需的结构,使您的代码更整洁、更具可重用性,并且更易于调试。随着我们继续,您会发现这些模板是您构建几乎每个链和代理的起点。
简洁的语法。内置调试功能。从第一天起就可投入生产。
为 ApX 背后的 AI 系统而构建
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•