MessagesPlaceholder#

class langchain_core.prompts.chat.MessagesPlaceholder[source]#

Bases: BaseMessagePromptTemplate

Prompt template that assumes variable is already list of messages.

A placeholder which can be used to pass in a list of messages.

Direct usage:

from langchain_core.prompts import MessagesPlaceholder

prompt = MessagesPlaceholder("history")
prompt.format_messages() # raises KeyError

prompt = MessagesPlaceholder("history", optional=True)
prompt.format_messages() # returns empty list []

prompt.format_messages(
    history=[
        ("system", "You are an AI assistant."),
        ("human", "Hello!"),
    ]
)
# -> [
#     SystemMessage(content="You are an AI assistant."),
#     HumanMessage(content="Hello!"),
# ]

Building a prompt with chat history:

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "You are a helpful assistant."),
        MessagesPlaceholder("history"),
        ("human", "{question}")
    ]
)
prompt.invoke(
   {
       "history": [("human", "what's 5 + 2"), ("ai", "5 + 2 is 7")],
       "question": "now multiply that by 4"
   }
)
# -> ChatPromptValue(messages=[
#     SystemMessage(content="You are a helpful assistant."),
#     HumanMessage(content="what's 5 + 2"),
#     AIMessage(content="5 + 2 is 7"),
#     HumanMessage(content="now multiply that by 4"),
# ])

Limiting the number of messages:

from langchain_core.prompts import MessagesPlaceholder

prompt = MessagesPlaceholder("history", n_messages=1)

prompt.format_messages(
    history=[
        ("system", "You are an AI assistant."),
        ("human", "Hello!"),
    ]
)
# -> [
#     HumanMessage(content="Hello!"),
# ]
param n_messages: PositiveInt | None = None#

Maximum number of messages to include. If None, then will include all. Defaults to None.

Constraints:
  • exclusiveMinimum = 0

param optional: bool = False#

If True format_messages can be called with no arguments and will return an empty list. If False then a named argument with name variable_name must be passed in, even if the value is an empty list.

param variable_name: str [Required]#

Name of variable to use as messages.

async aformat_messages(**kwargs: Any) List[BaseMessage]#

Async format messages from kwargs. Should return a list of BaseMessages.

Parameters:

**kwargs (Any) – Keyword arguments to use for formatting.

Returns:

List of BaseMessages.

Return type:

List[BaseMessage]

format_messages(**kwargs: Any) List[BaseMessage][source]#

Format messages from kwargs.

Parameters:

**kwargs (Any) – Keyword arguments to use for formatting.

Returns:

List of BaseMessage.

Raises:

ValueError – If variable is not a list of messages.

Return type:

List[BaseMessage]

pretty_print() None#

Print a human-readable representation.

Return type:

None

pretty_repr(html: bool = False) str[source]#

Human-readable representation.

Parameters:

html (bool) – Whether to format as HTML. Defaults to False.

Returns:

Human-readable representation.

Return type:

str

property input_variables: List[str]#

Input variables for this prompt template.

Returns:

List of input variable names.

Examples using MessagesPlaceholder