# create_openai_functions_agent

> **Function** in `langchain_classic`

📖 [View in docs](https://reference.langchain.com/python/langchain-classic/agents/openai_functions_agent/base/create_openai_functions_agent)

Create an agent that uses OpenAI function calling.

## Signature

```python
create_openai_functions_agent(
    llm: BaseLanguageModel,
    tools: Sequence[BaseTool],
    prompt: ChatPromptTemplate,
) -> Runnable
```

## Description

**Example:**

Creating an agent with no memory

```python
from langchain_openai import ChatOpenAI
from langchain_classic.agents import (
    AgentExecutor,
    create_openai_functions_agent,
)
from langchain_classic import hub

prompt = hub.pull("hwchase17/openai-functions-agent")
model = ChatOpenAI()
tools = ...

agent = create_openai_functions_agent(model, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)

agent_executor.invoke({"input": "hi"})

# Using with chat history
from langchain_core.messages import AIMessage, HumanMessage

agent_executor.invoke(
    {
        "input": "what's my name?",
        "chat_history": [
            HumanMessage(content="hi! my name is bob"),
            AIMessage(content="Hello Bob! How can I assist you today?"),
        ],
    }
)
```

Prompt:

The agent prompt must have an `agent_scratchpad` key that is a
    `MessagesPlaceholder`. Intermediate agent actions and tool output
    messages will be passed in here.

Here's an example:

```python
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "You are a helpful assistant"),
        MessagesPlaceholder("chat_history", optional=True),
        ("human", "{input}"),
        MessagesPlaceholder("agent_scratchpad"),
    ]
)
```

## Parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `llm` | `BaseLanguageModel` | Yes | LLM to use as the agent. Should work with OpenAI function calling, so either be an OpenAI model that supports that or a wrapper of a different model that adds in equivalent support. |
| `tools` | `Sequence[BaseTool]` | Yes | Tools this agent has access to. |
| `prompt` | `ChatPromptTemplate` | Yes | The prompt to use. See Prompt section below for more. |

## Returns

`Runnable`

A Runnable sequence representing an agent. It takes as input all the same input
variables as the prompt passed in does. It returns as output either an
AgentAction or AgentFinish.

---

[View source on GitHub](https://github.com/langchain-ai/langchain/blob/9f232caa7a8fe1ca042a401942d5d90d54ceb1a6/libs/langchain/langchain_classic/agents/openai_functions_agent/base.py#L287)