Skip to main content

OpenAI tools

Compatibility

OpenAI tool calling is new and only available on OpenAI's latest models.

Certain OpenAI models have been finetuned to work with tool calling. This is very similar but different from function calling, and thus requires a separate agent type.

While the goal of more reliably returning valid and useful function calls is the same as the functions agent, the ability to return multiple tools at once results in both fewer roundtrips for complex questions.

Setup

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

npm install @langchain/openai

This demo also uses Tavily, but you can also swap in another built in tool. You'll need to sign up for an API key and set it as TAVILY_API_KEY.

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

import { AgentExecutor, createOpenAIToolsAgent } 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-tools-agent
const prompt = await pull<ChatPromptTemplate>("hwchase17/openai-tools-agent");

const llm = new ChatOpenAI({
model: "gpt-3.5-turbo-1106",
temperature: 0,
});

const agent = await createOpenAIToolsAgent({
llm,
tools,
prompt,
});

Run Agent

Now, let's run our agent!

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 a platform that offers a complete set of powerful building blocks for building context-aware, reasoning applications with flexible abstractions and an AI-first toolkit. It provides tools for chatbots, Q&A over docs, summarization, copilots, workflow automation, document analysis, and custom search. LangChain is used by global corporations, startups, and tinkerers to build applications powered by large language models (LLMs). You can find more information on their website: [LangChain](https://www.langchain.com/)'
}
*/

Using with chat history

For more details, see this section of the agent quickstart.

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

Help us out by providing feedback on this documentation page: