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)
相关推荐
北斗落凡尘21 小时前
LangGraph 入门实战(4)
python·langchain
闲猫21 小时前
LangChain / Advanced usage / Long-term memory
langchain
JaydenAI1 天前
[基于OpenEvals的自动化评估-12]Agent执行轨迹评估[无LLM参与]
ai·langchain·agent·evaluation·openevals
北斗落凡尘1 天前
LangGraph 入门实战(3)
python·langchain
lzjava20241 天前
LangChain集成MCP
langchain
前端 贾公子1 天前
LangChain 实战:让 LLM 拥有记忆与结构化输出能力
langchain
chaors1 天前
DeepResearchSystem 0x08:KB 知识记忆
langchain·agent·ai编程
北斗落凡尘2 天前
LangGraph 入门实战(2)
python·langchain
北斗落凡尘2 天前
如何使用LangGraph(1)
python·langchain
JaydenAI2 天前
[基于OpenEvals的自动化评估-11]针对Agent对话的评估[下篇]
ai·langchain·agent·evaluation·openevals