.invoke()
/ await .ainvoke()
for full responses, or .stream()
/ .astream()
for incremental streaming output. This section explains how to provide input, interpret output, enable streaming, and control execution limits.
Basic usage
Agents can be executed in two primary modes:- Synchronous using
.invoke()
or.stream()
- Asynchronous using
await .ainvoke()
orasync for
with.astream()
- Sync invocation
- Async invocation
Inputs and outputs
Agents use a language model that expects a list ofmessages
as an input. Therefore, agent inputs and outputs are stored as a list of messages
under the messages
key in the agent state.
Input format
Agent input must be a dictionary with amessages
key. Supported formats are:
Format | Example |
---|---|
String | {"messages": "Hello"} — Interpreted as a HumanMessage |
Message dictionary | {"messages": {"role": "user", "content": "Hello"}} |
List of messages | {"messages": [{"role": "user", "content": "Hello"}]} |
With custom state | {"messages": [{"role": "user", "content": "Hello"}], "user_name": "Alice"} — If using a custom state_schema |
Using custom agent state
You can provide additional fields defined in your agent’s state schema directly in the input dictionary. This allows dynamic behavior based on runtime data or prior tool outputs.
See the context guide for full details.
A string input for
messages
is converted to a HumanMessage. This behavior differs from the prompt
parameter in create_react_agent
, which is interpreted as a SystemMessage when passed as a string.Output format
Agent output is a dictionary containing:messages
: A list of all messages exchanged during execution (user input, assistant replies, tool invocations).- Optionally,
structured_response
if structured output is configured. - If using a custom
state_schema
, additional keys corresponding to your defined fields may also be present in the output. These can hold updated state values from tool execution or prompt logic.
Streaming output
Agents support streaming responses for more responsive applications. This includes:- Progress updates after each step
- LLM tokens as they’re generated
- Custom tool messages during execution
- Sync streaming
- Async streaming
For full details, see the streaming guide.
Max iterations
To control agent execution and avoid infinite loops, set a recursion limit. This defines the maximum number of steps the agent can take before raising aGraphRecursionError
. You can configure recursion_limit
at runtime or when defining agent via .with_config()
:
- Runtime
- .with_config()