Langchain PromptTemplate纯文本模板、ChatPromptTemplate对话消息模板和MessagesPlaceholder消息占位符

PromptTemplate纯文本模板

PromptTemplate,纯文本模板,普通字符串,单轮文本问答、补全类模型、非对话场景。

复制代码
from langchain_core.prompts import PromptTemplate

# PromptTemplate

# from_template: 自动提取变量名
prompt1=PromptTemplate.from_template("请用{language}写一个关于{topic}的{style}文章,大约{count}字。")
print(prompt1.input_variables)  # ['language', 'topic', 'style', 'count']
formatted1=prompt1.format_prompt(language="中文",topic="外星人",style='科普',count='500')
print(formatted1)

# 构造函数方式
prompt2 = PromptTemplate(
    input_variables=["name", "age"],
    template="你好,我叫{name},今年{age}岁。"
)
print(prompt2.input_variables)
formatted2 = prompt2.format_prompt(name="小离",age=40)
print(formatted2)

# jinja2 模板格式
# pip install jinja2
prompt3 = PromptTemplate(
    input_variables=["items"],
    template="{% for item in items %}- {{ item }}\n{% endfor %}",
    template_format="jinja2",
)
print(prompt3.format(items=["苹果", "香蕉", "橙子"]))

# partial:预填充部分变量
prompt4 = PromptTemplate.from_template("你是一个{role}。请回答:{question}")
translator_prompt4 = prompt4.partial(role="翻译专家")
print(translator_prompt4.format(question="hello 怎么翻译?"))

ChatPromptTemplate对话消息模板

ChatPromptTemplate,对话消息模板,聊天模型(ChatGPT/DeepSeek/ 通义千问等)、多轮对话,角色 + 内容(system/human/ai)。

复制代码
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.messages import HumanMessage,AIMessage

# ChatPromptTemplate

## 元祖格式
prompt1=ChatPromptTemplate.from_messages([
    ("system","你是一个{role},回答要{style}。"),
    ("human","question")
])
messages1=prompt1.format_prompt(role="Python专家",style="通俗",question="什么是装饰器?")
print(messages1)

# 消息类
prompt2=ChatPromptTemplate.from_messages([
    HumanMessage(content="请将以下文本翻译成{language}:{text}")
])
messages2=prompt2.format_prompt(language="中文",text="hello")
print(messages2)

# from_template快捷方法
prompt3 = ChatPromptTemplate.from_template("请解释{concept}")
messages3=prompt3.format_prompt(concept="外星人")
print(messages3)

MessagesPlaceholder消息占位符

MessagesPlaceholder,消息占位符,承接历史对话上下文、动态插入多条消息,嵌入消息列表。

复制代码
# demo_messages_placeholder.py
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.messages import HumanMessage, AIMessage

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个有帮助的 AI 助手。"),
    MessagesPlaceholder(variable_name="chat_history"),  # 插入对话历史
    ("human", "{user_input}"),
])

chat_history = [
    HumanMessage(content="我叫小明"),
    AIMessage(content="你好小明!"),
]

messages1 = prompt.format_messages(
    chat_history=chat_history,
    user_input="我叫什么名字?"
)
# AI 能从历史中知道用户叫小明
print(messages1)

# 可选占位符
prompt2 = ChatPromptTemplate.from_messages([
    ("system", "你是一个客服机器人。"),
    MessagesPlaceholder(variable_name="history", optional=True),
    ("human", "{question}"),
])
messages2 = prompt2.format_messages(question="你好")  # 不提供 history 也可以
print(messages2)

# partial方法
# 创建时预填充
prompt3 = ChatPromptTemplate(
    messages=[
        ("system", "你是一个{role},使用{language}回答。"),
        ("human", "{question}"),
    ],
    partial_variables={"role": "编程专家", "language": "中文"}
)
messages3 = prompt3.format_messages(question="什么是Python?")
print(messages3)

# 运行时预填充
teacher_prompt4 = prompt3.partial(role="老师")
messages4 = teacher_prompt4.format_messages(question="什么是光合作用?")
print(messages4)

完整运行代码

复制代码
import os
from dotenv import load_dotenv
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.messages import HumanMessage, AIMessage
from langchain_deepseek import ChatDeepSeek

load_dotenv()

# 代码审查助手
code_review_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一位资深代码审查专家。请审查代码的质量、安全性和性能。"),
    ("human", "请审查以下 {language} 代码:\n```{language}\n{code}\n```"),
])

model=ChatDeepSeek(
    api_key=os.getenv("DEEPSEEK_API_KEY"),
    base_url=os.getenv("DEEPSEEK_BASE_URL", "https://api.deepseek.com"),
    model="deepseek-chat",
    temperature=0
)
chain = code_review_prompt | model

result = chain.invoke({"language": "Python", "code": "def add(a, b): return a + b"})
print(result.content)


# 带对话历史的翻译助手
translation_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个专业翻译。翻译成{target_language}。只输出翻译结果。"),
    MessagesPlaceholder(variable_name="history", optional=True),
    ("human", "{text}"),
])
chain = translation_prompt | model
result = chain.invoke({"target_language": "英文", "text": "今天天气真好", "history": []})
print(result.content)
相关推荐
bloxed18 小时前
大模型应用-进阶核心技能【13课:第二阶段工程化与部署】
langchain·大模型应用
BraveWang18 小时前
【LangChain 1.x】10、短期记忆|checkpointer 持久化与上下文治理三件套
langchain
zl_dfq21 小时前
LangChain 之 【内存\Redis\Pinecone向量存储原理与实战】
langchain
吃饱了得干活1 天前
别再手动解析 LLM 输出了!LangChain 四种结构化输出方案对比
后端·python·langchain
Oo9201 天前
大模型是怎么随机说话的?—— Temperature、Top-k 与 LangChain 实战
langchain
一碗面4211 天前
LangSmith:LLM 应用调试与评估平台
langchain
中微极客1 天前
Agentic AI 2026学习路径:从LangChain到生产部署
人工智能·学习·langchain
陳陈陳1 天前
Workflow vs Agent:别再被“调包侠”忽悠了,一张图看懂AI工程的“骨架”与“大脑”
langchain·agent·workflow
一只小bit2 天前
LangGraph 记忆、人机交互、时间旅行和核心能力
机器学习·langchain·人机交互·langgraph
早点睡啊Y2 天前
深入学 LangChain 官方文档(十六)Built-in 与 Custom Middleware
langchain