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)
相关推荐
大流星9 小时前
LangChainJs之基础模型(一)
javascript·langchain
AIOps打工人9 小时前
我以为 LangChain 就是调用大模型,直到我写出第一条 Chain
langchain
大模型真好玩1 天前
LangChain DeepAgents 速通指南(十)—— DeepAgents Code 智能体服务核心源码解读
人工智能·langchain·agent
花千树_0102 天前
多工具调用只是开始:用 Regnexe 构建真正会反思的 Java Agent
langchain·agent
大模型真好玩6 天前
LangChain DeepAgents 速通指南(九)—— 生产级智能体框架 DeepAgents Code 源码导读
人工智能·langchain·agent
早点睡啊8 天前
精读 LangChain 官方文档(二)Model 篇:把模型调用升级成工程化推理接口
人工智能·langchain
星始流年10 天前
从 Tool 到 Skill——基于 LangChain 的服务端Skill实现
前端·langchain·agent
codedx10 天前
LangChain 和 LangGraph 构建的 Agent 项目模版
后端·langchain·agent
颜酱11 天前
LangGraph 入门指南
langchain
武子康12 天前
调查研究-186 LangChain 和 LangGraph 的区别:从快速构建 Agent 到生产级工作流编排
人工智能·langchain·llm