nent 
  * [ Force calling a tool first ](https://github.com/langchain-ai/langgraph/blob/main/examples/chat_agent_executor_with_function_calling/force-calling-a-tool-first.ipynb) : How to always call a specific tool first 
  * [ Respond in a specific format ](https://github.com/langchain-ai/langgraph/blob/main/examples/chat_agent_executor_with_function_calling/respond-in-format.ipynb) : How to force the agent to respond in a specific format 
  * [ Dynamically returning tool output directly ](https://github.com/langchain-ai/langgraph/blob/main/examples/chat_agent_executor_with_function_calling/dynamically-returning-directly.ipynb) : How to dynamically let the agent choose whether to return the result of a tool directly to the user 
  * [ Managing agent steps ](https://github.com/langchain-ai/langgraph/blob/main/examples/chat_agent_executor_with_function_calling/managing-agent-steps.ipynb) : How to more explicitly manage intermediate steps that an agent takes 

###  AgentExecutor  ​

This agent executor uses existing LangChain agents.

  * [ Getting Started Notebook ](https://github.com/langchain-ai/langgraph/blob/main/examples/agent_executor/base.ipynb) : Walks through creating this type of executor from scratch 
  * [ High Level Entrypoint ](https://github.com/langchain-ai/langgraph/blob/main/examples/agent_executor/high-level.ipynb) : Walks through how to use the high level entrypoint for the chat agent executor. 

**Modifications**

We also have a lot of examples highlighting how to slightly modify the base
chat agent executor. These all build off the [ getting started notebook
](https://github.com/langchain-
ai/langgraph/blob/main/examples/agent_executor/base.ipynb) so it is
recommended you start with that first.

  * [ Human-in-the-loop ](https://github.com/langchain-ai/langgraph/blob/main/examples/agent_executor/human-in-the-loop.ipynb) : How to add a human-in-the-loop component 
  * [ Force calling a tool first ](https://github.com/langchain-ai/langgraph/blob/main/examples/agent_executor/force-calling-a-tool-first.ipynb) : How to always call a specific tool first 
  * [ Managing agent steps ](https://github.com/langchain-ai/langgraph/blob/main/examples/agent_executor/managing-agent-steps.ipynb) : How to more explicitly manage intermediate steps that an agent takes 

###  Planning Agent Examples  ​

The following notebooks implement agent architectures prototypical of the
"plan-and-execute" style, where an LLM planner decomposes a user request into
a program, an executor executes the program, and an LLM synthesizes a response
(and/or dynamically replans) based on the program outputs.

  * [ Plan-and-execute ](https://github.com/langchain-ai/langgraph/blob/main/examples/plan-and-execute/plan-and-execute.ipynb) : a simple agent with a **planner** that generates a multi-step task list, an **executor** that invokes the tools in the plan, and a **replanner** that responds or generates an updated plan. Based on the [ Plan-and-solve ](https://arxiv.org/abs/2305.04091) paper by Wang, et. al. 
  * [ Reasoning without Observation ](https://github.com/langchain-ai/langgraph/blob/main/examples/rewoo/rewoo.ipynb) : planner generates a task list whose observations are saved as **variables** . Variables can be used in subsequent tasks to reduce the need for further re-planning. Based on the [ ReWOO ](https://arxiv.org/abs/2305.18323) paper by Xu, et. al. 
  * [ LLMCompiler ](https://github.com/langchain-ai/langgraph/blob/main/examples/llm-compiler/LLMCompiler.ipynb) : planner generates a **DAG** of tasks with variable responses. Tasks are **streamed** and executed eagerly to minimize tool execution runtime. Based on the [ paper ](https://arxiv.org/abs/2312.04511) by Kim, et. al. 

###  Reflection / Self-Critique  ​

When output quality is a major concern, it's common to incorporate some
combination of self-critique or reflection and external validation to refine
your system's outputs. The following examples demonstrate research that
impl