!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())

[Skip to main content](#__docusaurus_skipToContent_fallback)

LangChain v0.2 is coming soon! Preview the new docs [here](/v0.2/docs/introduction/).

[

![🦜️🔗 Langchain](/v0.1/img/brand/wordmark.png)![🦜️🔗 Langchain](/v0.1/img/brand/wordmark-dark.png)

](/v0.1/)[Docs](/v0.1/docs/get_started/introduction/)[Use cases](/v0.1/docs/use_cases/)[Integrations](/v0.1/docs/integrations/platforms/)[API Reference](https://api.js.langchain.com)

[More](#)

*   [People](/v0.1/docs/people/)
*   [Community](/v0.1/docs/community/)
*   [Tutorials](/v0.1/docs/additional_resources/tutorials/)
*   [Contributing](/v0.1/docs/contributing/)

[v0.1](#)

*   [v0.2](https://js.langchain.com/v0.2/docs/introduction)
*   [v0.1](/v0.1/docs/get_started/introduction/)

[🦜🔗](#)

*   [LangSmith](https://smith.langchain.com)
*   [LangSmith Docs](https://docs.smith.langchain.com)
*   [LangChain Hub](https://smith.langchain.com/hub)
*   [LangServe](https://github.com/langchain-ai/langserve)
*   [Python Docs](https://python.langchain.com/)

[Chat](https://chatjs.langchain.com)[](https://github.com/langchain-ai/langchainjs)

Search

*   [Get started](/v0.1/docs/get_started/)
    
    *   [Introduction](/v0.1/docs/get_started/introduction/)
    *   [Installation](/v0.1/docs/get_started/installation/)
    *   [Quickstart](/v0.1/docs/get_started/quickstart/)
*   [LangChain Expression Language](/v0.1/docs/expression_language/)
    
    *   [Get started](/v0.1/docs/expression_language/get_started/)
    *   [Why use LCEL?](/v0.1/docs/expression_language/why/)
    *   [Interface](/v0.1/docs/expression_language/interface/)
    *   [Streaming](/v0.1/docs/expression_language/streaming/)
    *   [How to](/v0.1/docs/expression_language/how_to/routing/)
        
    *   [Cookbook](/v0.1/docs/expression_language/cookbook/)
        
    *   [LangChain Expression Language (LCEL)](/v0.1/docs/expression_language/)
*   [Modules](/v0.1/docs/modules/)
    
    *   [Model I/O](/v0.1/docs/modules/model_io/)
        
    *   [Retrieval](/v0.1/docs/modules/data_connection/)
        
    *   [Chains](/v0.1/docs/modules/chains/)
    *   [Agents](/v0.1/docs/modules/agents/)
        
        *   [Quick start](/v0.1/docs/modules/agents/quick_start/)
        *   [Concepts](/v0.1/docs/modules/agents/concepts/)
        *   [Agent Types](/v0.1/docs/modules/agents/agent_types/)
            
            *   [Tool calling](/v0.1/docs/modules/agents/agent_types/tool_calling/)
            *   [OpenAI tools](/v0.1/docs/modules/agents/agent_types/openai_tools_agent/)
            *   [OpenAI functions](/v0.1/docs/modules/agents/agent_types/openai_functions_agent/)
            *   [XML Agent](/v0.1/docs/modules/agents/agent_types/xml/)
            *   [Conversational](/v0.1/docs/modules/agents/agent_types/chat_conversation_agent/)
            *   [OpenAI Assistant](/v0.1/docs/modules/agents/agent_types/openai_assistant/)
            *   [Plan and execute](/v0.1/docs/modules/agents/agent_types/plan_and_execute/)
            *   [ReAct](/v0.1/docs/modules/agents/agent_types/react/)
            *   [Structured chat](/v0.1/docs/modules/agents/agent_types/structured_chat/)
            *   [XML Agent](/v0.1/docs/modules/agents/agent_types/xml_legacy/)
        *   [How-to](/v0.1/docs/modules/agents/how_to/custom_agent/)
            
        *   [Agents](/v0.1/docs/modules/agents/)
        *   [Tools](/v0.1/docs/modules/agents/tools/)
            
    *   [More](/v0.1/docs/modules/memory/)
        
*   [Security](/v0.1/docs/security/)
*   [Guides](/v0.1/docs/guides/)
    
*   [Ecosystem](/v0.1/docs/ecosystem/)
    
*   [LangGraph](/v0.1/docs/langgraph/)
*   * * *
    

*   [](/v0.1/)
*   [Modules](/v0.1/docs/modules/)
*   [Agents](/v0.1/docs/modules/agents/)
*   [Agent Types](/v0.1/docs/modules/agents/agent_types/)
*   Tool calling

Tool calling agent
==================

info

Tool calling is only available with [supported models](/v0.1/docs/integrations/chat/).

[Tool calling](/v0.1/docs/modules/model_io/chat/function_calling/) allows a model to respond to a given prompt by generating output that matches a user-defined schema. By supplying the model with a schema that matches up with a [LangChain tool’s](/v0.1/docs/modules/agents/tools/) signature, along with a name and description of what the tool does, we can get the model to reliably generate valid input.

We can take advantage of this structured output, combined with the fact that [tool calling chat models](/v0.1/docs/integrations/chat/) can choose which tool to call in a given situation, to create an agent that repeatedly calls tools and receives results until a query is resolved.

This is a more generalized version of the [OpenAI tools agent](/v0.1/docs/modules/agents/agent_types/openai_tools_agent/), which was designed for OpenAI’s specific style of tool calling. It uses LangChain’s [ToolCall](https://api.js.langchain.com/types/langchain_core_messages_tool.ToolCall.html) interface to support a wider range of provider implementations, such as [Anthropic](/v0.1/docs/integrations/chat/anthropic/), [Google Gemini](/v0.1/docs/integrations/chat/google_vertex_ai/), and [Mistral](/v0.1/docs/integrations/chat/mistral/) in addition to [OpenAI](/v0.1/docs/integrations/chat/openai/).

Setup[​](#setup "Direct link to Setup")
---------------------------------------

Most models that support tool calling can be used in this agent. See [this list](/v0.1/docs/integrations/chat/) for the most up-to-date information.

This demo also uses [Tavily](https://app.tavily.com), but you can also swap in another [built in tool](/v0.1/docs/integrations/platforms/). You’ll need to sign up for an API key and set it as `process.env.TAVILY_API_KEY`.

### Pick your chat model:

*   Anthropic
*   OpenAI
*   MistralAI
*   FireworksAI

#### Install dependencies

tip

See [this section for general instructions on installing integration packages](/docs/get_started/installation#installing-integration-packages).

*   npm
*   yarn
*   pnpm

    npm i @langchain/anthropic @langchain/community

    yarn add @langchain/anthropic @langchain/community

    pnpm add @langchain/anthropic @langchain/community

#### Add environment variables

    ANTHROPIC_API_KEY=your-api-key

#### Instantiate the model

    import { ChatAnthropic } from "@langchain/anthropic";const llm = new ChatAnthropic({  model: "claude-3-sonnet-20240229",  temperature: 0});

#### Install dependencies

tip

See [this section for general instructions on installing integration packages](/docs/get_started/installation#installing-integration-packages).

*   npm
*   yarn
*   pnpm

    npm i @langchain/openai @langchain/community

    yarn add @langchain/openai @langchain/community

    pnpm add @langchain/openai @langchain/community

#### Add environment variables

    OPENAI_API_KEY=your-api-key

#### Instantiate the model

    import { ChatOpenAI } from "@langchain/openai";const llm = new ChatOpenAI({  model: "gpt-3.5-turbo-0125",  temperature: 0});

#### Install dependencies

tip

See [this section for general instructions on installing integration packages](/docs/get_started/installation#installing-integration-packages).

*   npm
*   yarn
*   pnpm

    npm i @langchain/mistralai @langchain/community

    yarn add @langchain/mistralai @langchain/community

    pnpm add @langchain/mistralai @langchain/community

#### Add environment variables

    MISTRAL_API_KEY=your-api-key

#### Instantiate the model

    import { ChatMistralAI } from "@langchain/mistralai";const llm = new ChatMistralAI({  model: "mistral-large-latest",  temperature: 0});

#### Install dependencies

tip

See [this section for general instructions on installing integration packages](/docs/get_started/installation#installing-integration-packages).

*   npm
*   yarn
*   pnpm

    npm i @langchain/community @langchain/community

    yarn add @langchain/community @langchain/community

    pnpm add @langchain/community @langchain/community

#### Add environment variables

    FIREWORKS_API_KEY=your-api-key

#### Instantiate the model

    import { ChatFireworks } from "@langchain/community/chat_models/fireworks";const llm = new ChatFireworks({  model: "accounts/fireworks/models/firefunction-v1",  temperature: 0});

Initialize Tools[​](#initialize-tools "Direct link to Initialize Tools")
------------------------------------------------------------------------

We will first create a tool that can search the web:

    import { TavilySearchResults } from "@langchain/community/tools/tavily_search";// Define the tools the agent will have access to.const tools = [new TavilySearchResults({ maxResults: 1 })];

Create Agent[​](#create-agent "Direct link to Create Agent")
------------------------------------------------------------

Next, let’s initialize our tool calling agent:

    import { createToolCallingAgent } from "langchain/agents";import { ChatPromptTemplate } from "@langchain/core/prompts";// Prompt template must have "input" and "agent_scratchpad input variables"const prompt = ChatPromptTemplate.fromMessages([  ["system", "You are a helpful assistant"],  ["placeholder", "{chat_history}"],  ["human", "{input}"],  ["placeholder", "{agent_scratchpad}"],]);const agent = await createToolCallingAgent({  llm,  tools,  prompt,});

Run Agent[​](#run-agent "Direct link to Run Agent")
---------------------------------------------------

Now, let’s initialize the executor that will run our agent and invoke it!

    import { AgentExecutor } from "langchain/agents";const agentExecutor = new AgentExecutor({  agent,  tools,});const result = await agentExecutor.invoke({  input: "what is LangChain?",});console.log(result);

    {  input: "what is LangChain?",  output: "LangChain is an open-source framework for building applications with large language models (LLMs). S"... 983 more characters}

tip

[LangSmith trace](https://smith.langchain.com/public/2f956a2e-0820-47c4-a798-c83f024e5ca1/r)

Using with chat history[​](#using-with-chat-history "Direct link to Using with chat history")
---------------------------------------------------------------------------------------------

This type of agent can optionally take chat messages representing previous conversation turns. It can use that previous history to respond conversationally. For more details, see [this section of the agent quickstart](/v0.1/docs/modules/agents/quick_start/#adding-in-memory).

    import { AIMessage, HumanMessage } from "@langchain/core/messages";const result2 = await agentExecutor.invoke({  input: "what's my name?",  chat_history: [    new HumanMessage("hi! my name is cob"),    new AIMessage("Hello Cob! How can I assist you today?"),  ],});console.log(result2);

    {  input: "what's my name?",  chat_history: [    HumanMessage {      lc_serializable: true,      lc_kwargs: {        content: "hi! my name is cob",        additional_kwargs: {},        response_metadata: {}      },      lc_namespace: [ "langchain_core", "messages" ],      content: "hi! my name is cob",      name: undefined,      additional_kwargs: {},      response_metadata: {}    },    AIMessage {      lc_serializable: true,      lc_kwargs: {        content: "Hello Cob! How can I assist you today?",        tool_calls: [],        invalid_tool_calls: [],        additional_kwargs: {},        response_metadata: {}      },      lc_namespace: [ "langchain_core", "messages" ],      content: "Hello Cob! How can I assist you today?",      name: undefined,      additional_kwargs: {},      response_metadata: {},      tool_calls: [],      invalid_tool_calls: []    }  ],  output: "You said your name is Cob."}

tip

[LangSmith trace](https://smith.langchain.com/public/e21ececb-2e60-49e5-9f06-a91b0fb11fb8/r)

* * *

#### Help us out by providing feedback on this documentation page:

[

Previous

Agent Types

](/v0.1/docs/modules/agents/agent_types/)[

Next

OpenAI tools

](/v0.1/docs/modules/agents/agent_types/openai_tools_agent/)

Community

*   [Discord](https://discord.gg/cU2adEyC7w)
*   [Twitter](https://twitter.com/LangChainAI)

GitHub

*   [Python](https://github.com/langchain-ai/langchain)
*   [JS/TS](https://github.com/langchain-ai/langchainjs)

More

*   [Homepage](https://langchain.com)
*   [Blog](https://blog.langchain.dev)

Copyright © 2024 LangChain, Inc.