View Source LangChain.Message (LangChain v0.2.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 :function
to provide the function response.
:is_error
- Boolean value used to track a tool response message as being an error or not. The error state may be returned to an LLM in different ways, whichever is most appropriate for the LLM. When a response is an error, thecontent
explains the error to the LLM and depending on the situation, the LLM may choose try again.
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.
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.
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.