LangChain 中提示词模板的具体语法是什么?
·
LangChain 中提示词模板(Prompt Template)的语法围绕“定义模板结构”和“动态填充参数”展开,核心是通过占位符实现灵活性。根据模板类型(对话式/字符串式),具体语法略有差异,以下是详细说明:
一、基础语法:占位符定义
所有模板均使用 {占位符名称} 作为动态参数的标记,例如 {role}、{question}、{user_input} 等。
占位符名称需遵循变量命名规则(字母、数字、下划线,首字符不为数字),后续通过 format() 或链式调用传入具体值。
二、两种核心模板类型及语法
1. 对话式模板(ChatPromptTemplate,多角色场景)
用于构建包含“系统提示”“用户输入”“AI 回复”等多角色的对话式提示词,语法通过 from_messages() 方法定义,参数为角色-内容的列表。
语法结构:
from langchain_core.prompts import ChatPromptTemplate
# 格式:[("角色类型", "包含{占位符}的提示词内容"), ...]
chat_prompt = ChatPromptTemplate.from_messages([
("system", "你是{role},请用{style}风格回答。"), # 系统角色提示
("human", "我的问题是:{question}"), # 用户输入提示
# 可选:加入历史对话(AI回复)
("ai", "上次你说:{previous_answer}") # AI回复历史
])
角色类型:
system:定义模型的身份、行为规则(如“你是医生”“回答需简洁”)。human:用户的提问或输入内容。ai:模型之前的回复(用于多轮对话场景)。
2. 字符串式模板(ChatPromptTemplate 或 PromptTemplate,单一场景)
用于构建纯字符串提示词(无角色区分),语法通过 from_template() 方法定义,直接传入包含占位符的字符串。
语法结构:
from langchain_core.prompts import ChatPromptTemplate # 兼容大模型对话接口
# 或 from langchain_core.prompts import PromptTemplate # 通用字符串模板
# 格式:直接传入带{占位符}的字符串
str_prompt = ChatPromptTemplate.from_template(
"请用{language}语言实现{function}功能,要求:{requirements}"
)
三、参数填充语法
定义模板后,需通过 format() 方法或链式调用填充占位符,两种方式等效:
1. 直接调用 format() 填充
# 对话式模板填充
filled_chat = chat_prompt.format(
role="数学老师",
style="通俗",
question="什么是勾股定理?",
previous_answer="我可以帮你解释几何概念"
)
# 字符串式模板填充
filled_str = str_prompt.format(
language="Python",
function="数组去重",
requirements="时间复杂度O(n)"
)
2. 链式调用中填充(与大模型结合)
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="qwen-plus")
chain = chat_prompt | llm # 模板与大模型串联成链
# 调用时传入参数字典,自动填充模板
response = chain.invoke({
"role": "程序员",
"style": "简洁",
"question": "什么是闭包?"
})
四、高级语法:模板组合与动态生成
1. 模板嵌套(复用子模板)
# 定义子模板
sub_prompt = ChatPromptTemplate.from_template("分析{topic}的核心原理")
# 主模板嵌套子模板
main_prompt = ChatPromptTemplate.from_messages([
("system", "你是技术分析师"),
("human", sub_prompt.format(topic="{field}")) # 子模板填充后作为用户输入
])
# 最终填充
filled_main = main_prompt.format(field="机器学习") # 等价于:分析机器学习的核心原理
2. 动态生成占位符(结合变量)
user_input = "推荐一本书"
dynamic_placeholder = "book_type" # 动态定义占位符名称
# 模板中使用动态占位符
prompt = ChatPromptTemplate.from_template(f"根据{dynamic_placeholder}推荐:{user_input}")
# 填充时传入对应参数
filled = prompt.format(book_type="科幻") # 输出:根据科幻推荐:推荐一本书
总结
LangChain 提示词模板的核心语法是:
- 用
{占位符}标记动态参数; - 通过
from_messages()定义多角色对话模板,或from_template()定义字符串模板; - 用
format()或链式调用invoke()传入参数字典填充占位符。
这种语法设计既保证了提示词的灵活性,又通过标准化结构简化了复杂场景(如多轮对话、角色设定)的管理。
更多推荐
所有评论(0)