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. 字符串式模板(ChatPromptTemplatePromptTemplate,单一场景)

用于构建纯字符串提示词(无角色区分),语法通过 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 提示词模板的核心语法是:

  1. {占位符} 标记动态参数;
  2. 通过 from_messages() 定义多角色对话模板,或 from_template() 定义字符串模板;
  3. format() 或链式调用 invoke() 传入参数字典填充占位符。

这种语法设计既保证了提示词的灵活性,又通过标准化结构简化了复杂场景(如多轮对话、角色设定)的管理。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐