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)
相关推荐
是上好佳佳佳呀1 小时前
【LangChain|Day02】LangChain Prompt 提示词工程笔记
笔记·langchain·prompt
喵叔哟2 小时前
Week 3 --Day 2:LangGraph 进阶
python·langchain
OceanBase数据库官方博客2 小时前
借助OceanBase与LangChain,实现Agent快速投入生产的系统方案
langchain·oceanbase
颜酱3 小时前
LangChain上手 MCP:从用别人工具到自己写工具
langchain
颜酱15 小时前
LangChain使用RAG 入门:让大模型读懂你的私有文档
python·langchain
质造者18 小时前
LangChain + Ollama + Tavily 实现旅游问答系统
linux·人工智能·python·langchain·rag
Solis程序员18 小时前
LangChain从入门到精通(1)
langchain
leeyi19 小时前
Workflow 编排:字段映射、数据流分离
langchain·workflow·graphql