View Source LangChain.Message (LangChain v0.3.0-rc.0)
Models a complete Message
for a chat LLM.
Roles
:system
- a system message. Typically just one and it occurs first as a primer for how the LLM should behave.:user
- The user or application responses. Typically represents the "human" element of the exchange.:assistant
- Responses coming back from the LLM. This includes one or more "tool calls", requesting that the system execute a tool on behalf of the LLM and return the response.:tool
- A message for returning the result of executing atool
request.
Tools
A tool_call
comes from the :assistant
role. The tool_id
identifies which
of the available tool's to execute.
Create a message of role :tool
to provide the system responses for one or
more tool requests. A ToolResult
handles the response back to the LLM.
User Content Parts
Some LLMs support multi-modal messages. This means the user's message content can be text and/or image data. Within the LLMs, these are often referred to as "Vision", meaning you can provide text like "Please identify the what this is an image of" and provide an image.
User Content Parts are implemented through LangChain.Message.ContentPart
. A
list of them can be supplied as the "content" for a message. Only a few LLMs
support it, and they may require using specific models trained for it. See the
documentation for the LLM or service for details on their level of support.
Examples
A basic system message example:
alias LangChain.Message
Message.new_system!("You are a helpful assistant.")
A basic user message:
Message.new_user!("Who is Prime Minister of the moon?")
A multi-part user message: alias LangChain.Message.ContentPart
Message.new_user!([
ContentPart.text!("What is in this picture?"),
ContentPart.image_url!("https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg")
]
Summary
Functions
Append a ToolResult
to a message. A result can only be added to a :tool
role message.
Return if a Message is a tool_call.
Return if a Message is tool related. It may be a tool call or a tool result.
Build a new message and return an :ok
/:error
tuple with the result.
Build a new message and return it or raise an error if invalid.
Create a new assistant message which represents a response from the AI or LLM.
Create a new assistant message which represents a response from the AI or LLM.
Create a new system message which can prime the AI/Assistant for how to respond.
Create a new system message which can prime the AI/Assistant for how to respond.
Create a new tool
message to represent the result of a tool's execution.
Create a new tool response message to return the result of an executed tool.
Create a new user message which represents a human message or a message from the application.
Create a new user message which represents a human message or a message from the application.
Return true
if the message is a tool
response and any of the ToolResult
s
ended in an error. Returns false
if not a tool
response or all
ToolResult
s succeeded.
Types
@type status() :: :complete | :cancelled | :length
Functions
@spec append_tool_result(t(), LangChain.Message.ToolResult.t()) :: t() | no_return()
Append a ToolResult
to a message. A result can only be added to a :tool
role message.
Return if a Message is a tool_call.
@spec new(attrs :: map()) :: {:ok, t()} | {:error, Ecto.Changeset.t()}
Build a new message and return an :ok
/:error
tuple with the result.
Build a new message and return it or raise an error if invalid.
@spec new_assistant(attrs :: map()) :: {:ok, t()} | {:error, Ecto.Changeset.t()}
Create a new assistant message which represents a response from the AI or LLM.
Create a new assistant message which represents a response from the AI or LLM.
@spec new_system(content :: String.t()) :: {:ok, t()} | {:error, Ecto.Changeset.t()}
Create a new system message which can prime the AI/Assistant for how to respond.
Create a new system message which can prime the AI/Assistant for how to respond.
@spec new_tool_result(attrs :: map()) :: {:ok, t()} | {:error, Ecto.Changeset.t()}
Create a new tool
message to represent the result of a tool's execution.
Attributes
:tool_results
- a list of toolToolResult
structs.:content
- Text content returned from the LLM.
Create a new tool response message to return the result of an executed tool.
Attributes
:tool_results
- a list of toolToolResult
structs.:content
- Text content returned from the LLM.
@spec new_user(content :: String.t() | [LangChain.Message.ContentPart.t()]) :: {:ok, t()} | {:error, Ecto.Changeset.t()}
Create a new user message which represents a human message or a message from the application.
@spec new_user!(content :: String.t() | [LangChain.Message.ContentPart.t()]) :: t() | no_return()
Create a new user message which represents a human message or a message from the application.
Return true
if the message is a tool
response and any of the ToolResult
s
ended in an error. Returns false
if not a tool
response or all
ToolResult
s succeeded.