OpenAI tools
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
- Yarn
- pnpm
npm install @langchain/openai
yarn add @langchain/openai
pnpm add @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!'
}
*/