MessagePromptTemplate Types in LangChain

MessagePromptTemplate Types in LangChain (Simplified Guide)

This guide explains the different types of MessagePromptTemplate in LangChain, using exact code examples and outputs from the original source. It breaks down how each type works---with no added content or modifications---to make learning easier.

1. Overview of MessagePromptTemplate Types

LangChain provides MessagePromptTemplate variants to create structured chat messages for different roles. The most commonly used types are:

  • AIMessagePromptTemplate: Creates messages from the AI assistant (e.g., the model's responses).
  • SystemMessagePromptTemplate: Creates system messages that define the AI's role, rules, or instructions (e.g., "You are a helpful translator").
  • HumanMessagePromptTemplate: Creates messages from the human user (e.g., the user's questions or inputs).

For more flexibility (e.g., custom roles or dynamic messages), LangChain also offers two additional types: ChatMessagePromptTemplate and MessagesPlaceholder.

2. ChatMessagePromptTemplate: For Custom Roles

When your chat model supports arbitrary roles (not just "AI", "system", or "human"), use ChatMessagePromptTemplate to define a custom role name.

Original Code Example

python 复制代码
from langchain.prompts import ChatMessagePromptTemplate

# Define a prompt template with a placeholder ({subject})
prompt = "May the {subject} be with you"

# Create a ChatMessagePromptTemplate with a custom role ("Jedi")
chat_message_prompt = ChatMessagePromptTemplate.from_template(
    role="Jedi", 
    template=prompt
)

# Fill in the placeholder and generate the message
formatted_message = chat_message_prompt.format(subject="force")
print(formatted_message)

Original Output

复制代码
ChatMessage(content='May the force be with you', additional_kwargs={}, role='Jedi')

Simple Explanation

  • Import : We load ChatMessagePromptTemplate from LangChain.
  • Custom Role : The role="Jedi" parameter lets us assign a unique role (not just the default ones).
  • Placeholder : {subject} in the prompt is replaced with "force" when we call .format(subject="force").
  • Output : The result is a ChatMessage object labeled with the custom "Jedi" role.

3. MessagesPlaceholder: For Dynamic Message Lists

MessagesPlaceholder gives you full control over the messages included in a prompt. Use it when:

  • You're unsure which roles to use for messages.
  • You want to insert a pre-defined list of messages (e.g., a past conversation) during formatting.

Original Code Example

Step 1: Import Tools and Create Templates
python 复制代码
from langchain.prompts import MessagesPlaceholder, HumanMessagePromptTemplate
from langchain.prompts.chat import ChatPromptTemplate
from langchain.schema import HumanMessage, AIMessage

# 1. Create a human prompt template (asks to summarize a conversation)
human_prompt = "Summarize our conversation so far in {word_count} words."
human_message_template = HumanMessagePromptTemplate.from_template(human_prompt)

# 2. Create a ChatPromptTemplate with MessagesPlaceholder
# "variable_name='conversation'" lets us pass a message list later
chat_prompt = ChatPromptTemplate.from_messages([
    MessagesPlaceholder(variable_name="conversation"), 
    human_message_template
])
Step 2: Define a Sample Conversation and Format the Prompt
python 复制代码
# Create a sample past conversation (human + AI messages)
human_message = HumanMessage(content="What is the best way to learn programming?")
ai_message = AIMessage(content="""\
1. Choose a programming language: Decide on a programming language that you want to learn.
2. Start with the basics: Familiarize yourself with the basic programming concepts such as variables, data types and control structures.
3. Practice, practice, practice: The best way to learn programming is through hands-on experience\
""")

# Fill in the placeholder (conversation list + word count) and get messages
formatted_messages = chat_prompt.format_prompt(
    conversation=[human_message, ai_message], 
    word_count="10"
).to_messages()

print(formatted_messages)

Original Output

复制代码
[
    HumanMessage(content='What is the best way to learn programming?', additional_kwargs={}), 
    AIMessage(content='1. Choose a programming language: Decide on a programming language that you want to learn. \n\n2. Start with the basics: Familiarize yourself with the basic programming concepts such as variables, data types and control structures.\n\n3. Practice, practice, practice: The best way to learn programming is through hands-on experience', additional_kwargs={}), 
    HumanMessage(content='Summarize our conversation so far in 10 words.', additional_kwargs={})
]

Simple Explanation

  • MessagesPlaceholder : The variable_name="conversation" acts as a "slot" where we can insert a list of messages (e.g., a past chat) later.
  • Dynamic Insertion : When we call .format_prompt(conversation=[human_message, ai_message]), the placeholder is replaced with the sample conversation.
  • Final Prompt: The output combines the past conversation + the new human request (to summarize in 10 words)---perfect for tasks like summarizing chat history.

Key Takeaways (From Original Source)

  • Use the 3 common templates for standard roles: AI, system, human.
  • Use ChatMessagePromptTemplate for custom roles (e.g., "Jedi", "Teacher").
  • Use MessagesPlaceholder to add dynamic message lists (e.g., past conversations) to prompts.
  • All code and outputs match the original source---no changes or additions.
相关推荐
BD_Marathon8 小时前
工具的定义方式2:使用@tool装饰器(推荐)
langchain
爱泡脚的鸡腿9 小时前
langchain学习-D1-了解langchain家族与rag
langchain
读书读傻了哟9 小时前
langfuse部署相关
langchain·language model·langfuse
小易老师AI实战11 小时前
LangChain + MCP 协议:Agent 接入联网搜索(Tavily MCP)完整实践
langchain·agent·ai智能体·大模型应用·mcp·联网搜索
hackchen14 小时前
LangChain 学习第 2 课 - 提示词模板(Prompt Template)
学习·langchain·prompt
for_ever_love__15 小时前
LangChain 1.0 迁移指南:哪些 API 变了,怎么改
chatgpt·langchain·升级·新版本·迁移·变化·1.0
for_ever_love__16 小时前
LangChain 结构化输出:让模型稳定吐出符合 schema 的 JSON
langchain·json
flash俊杰1 天前
给 7B 小模型当 Agent 框架:真机三轮排障,十条失败链逐个补
langchain
打工仔折腾 AI1 天前
LangChain 工具调用实战:从 Tool 定义到 Agent 执行链路拆解
java·前端·人工智能·后端·python·langchain·ai agent 实战
for_ever_love__2 天前
LangChain 上线部署:把链和 Agent 变成能对外服务的 API
langchain·部署·fastapi·rest api·服务·上线·langserve