!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/)
*   OpenAI functions

OpenAI functions
================

Certain models (like OpenAI's gpt-3.5-turbo and gpt-4) have been fine-tuned to detect when a function should be called and respond with the inputs that should be passed to the function. In an API call, you can describe functions and have the model intelligently choose to output a JSON object containing arguments to call those functions.

The OpenAI Functions Agent is designed to work with these models.

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

Install the OpenAI integration package, retrieve your key, and store it as an environment variable named `OPENAI_API_KEY`:

tip

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

*   npm
*   Yarn
*   pnpm

    npm install @langchain/openai

    yarn add @langchain/openai

    pnpm add @langchain/openai

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 `TAVILY_API_KEY`.

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

We will first create a tool:

    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")
------------------------------------------------------------

    import { AgentExecutor, createOpenAIFunctionsAgent } from "langchain/agents";import { pull } from "langchain/hub";import { ChatOpenAI } from "@langchain/openai";import type { ChatPromptTemplate } from "@langchain/core/prompts";// Get the prompt to use - you can modify this!// If you want to see the prompt in full, you can at:// https://smith.langchain.com/hub/hwchase17/openai-functions-agentconst prompt = await pull<ChatPromptTemplate>(  "hwchase17/openai-functions-agent");const llm = new ChatOpenAI({  model: "gpt-3.5-turbo-1106",  temperature: 0,});const agent = await createOpenAIFunctionsAgent({  llm,  tools,  prompt,});

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

Now, let's run our agent!

tip

[LangSmith trace](https://smith.langchain.com/public/28e915bc-a200-48b8-81a4-4b0f1739524b/r)

    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 project that was launched in October 2022 by Harrison Chase, while working at machine learning startup Robust Intelligence. It is a deployment tool designed to facilitate the transition from LCEL (LangChain Expression Language) prototypes to production-ready applications. LangChain has integrations with systems including Amazon, Google, and Microsoft Azure cloud storage, API wrappers for news, movie information, and weather, Bash for summarization, syntax and semantics checking, and execution of shell scripts, multiple web scraping subsystems and templates, few-shot learning prompt generation support, and more.\n' +      '\n' +      "In April 2023, LangChain incorporated as a new startup and raised over $20 million in funding at a valuation of at least $200 million from venture firm Sequoia Capital, a week after announcing a $10 million seed investment from Benchmark. The project quickly garnered popularity, with improvements from hundreds of contributors on GitHub, trending discussions on Twitter, lively activity on the project's Discord server, many YouTube tutorials, and meetups in San Francisco and London.\n" +      '\n' +      'For more detailed information, you can visit the [LangChain Wikipedia page](https://en.wikipedia.org/wiki/LangChain).'  }*/

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

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 {        content: 'hi! my name is cob',        name: undefined,        additional_kwargs: {}      },      AIMessage {        content: 'Hello Cob! How can I assist you today?',        name: undefined,        additional_kwargs: {}      }    ],    output: 'Your name is Cob. How can I assist you today, Cob?'  }*/

* * *

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

[

Previous

OpenAI tools

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

Next

XML Agent

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

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.