create_openai_fn_chain throws an error when not providing input not related to a function
Labels: name: auto:bug, name: area: models

### System Info

langchain 0.0.285 on Windows. Reproduceable script is attached

### Who can help?

_No response_

### Information

- [ ] The official example notebooks/scripts
- [X] My own modified scripts

### Related Components

- [ ] LLMs/Chat Models
- [ ] Embedding Models
- [ ] Prompts / Prompt Templates / Prompt Selectors
- [ ] Output Parsers
- [ ] Document Loaders
- [ ] Vector Stores / Retrievers
- [ ] Memory
- [ ] Agents / Agent Executors
- [ ] Tools / Toolkits
- [X] Chains
- [ ] Callbacks/Tracing
- [ ] Async

### Reproduction

```
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains.openai_functions import create_openai_fn_chain

from dotenv import load_dotenv, find_dotenv

load_dotenv(find_dotenv())

database = [
    {"name": "Salami", "price": 9.99},
    {"name": "Margherita", "price": 8.99},
    {"name": "Pepperoni", "price": 10.99},
    {"name": "Hawaiian", "price": 11.49},
    {"name": "Veggie Supreme", "price": 10.49},
]


def get_pizza_info(pizza_name: str) -> dict:
    """Retrieve information about a specific pizza from the database.

    Args:
        pizza_name (str): Name of the pizza.

    Returns:
        dict: A dictionary containing the pizza's name and price or a message indicating the pizza wasn't found.
    """
    for pizza in database:
        if pizza["name"] == pizza_name:
            return pizza
    return {"message": f"No pizza found with the name {pizza_name}."}


def add_pizza(pizza_name: str, price: float) -> dict:
    """Add a new pizza to the database.

    Args:
        pizza_name (str): Name of the new pizza.
        price (float): Price of the new pizza.

    Returns:
        dict: A message indicating the result of the addition.
    """
    for pizza in database:
        if pizza["name"] == pizza_name:
            return {"message": f"Pizza {pizza_name} already exists in the database."}

    database.append({"name": pizza_name, "price": price})
    return {"message": f"Pizza {pizza_name} added successfully!"}


llm = ChatOpenAI(model="gpt-3.5-turbo-0613", temperature=0)

template = """You are an AI chatbot having a conversation with a human.

Human: {human_input}
AI: """
prompt = PromptTemplate(input_variables=["human_input"], template=template)


chain = create_openai_fn_chain(
    [get_pizza_info, add_pizza], llm, prompt, verbose=True
)


result1 = chain.run("I want to add the pizza 'Jumbo' for 13.99")
print(result1)
result2 = chain.run("Who are the main characters of the A-Team?") <- that code does not work
print(result2)
```

Traceback:
Traceback:

Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\langchain\output_parsers\openai_functions.py", line 28, in 
parse_result
    func_call = copy.deepcopy(message.additional_kwargs["function_call"])
                              ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
KeyError: 'function_call'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\User\Desktop\LangChain\07_OpenAI_Functions\pizza_store.py", line 63, in <module>
    result1 = chain.run("Who are the main characters of the A-Team?")
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\langchain\chains\base.py", line 487, in run
    return self(args[0], callbacks=callbacks, tags=tags, metadata=metadata)[
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\langchain\chains\base.py", line 292, in __call__
    raise e
  File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\langchain\chains\base.py", line 286, in __call__
    self._call(inputs, run_manager=run_manager)
  File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\langchain\chains\llm.py", line 92, in _call
    return self.create_outputs(response)[0]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\langchain\chains\llm.py", line 220, in create_outputs
    result = [
             ^
  File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\langchain\chains\llm.py", line 223, in <listcomp>
    self.output_key: self.output_parser.parse_result(generation),
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\langchain\output_parsers\openai_functions.py", line 49, in 
parse_result
    function_call_info = super().parse_result(result)
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\langchain\output_parsers\openai_functions.py", line 30, in 
parse_result
    raise OutputParserException(f"Could not parse function call: {exc}")
langchain.schema.output_parser.OutputParserException: Could not parse function call: 'function_call'


### Expected behavior

I would expect the similar behaviour to using the vanilla API.

```
def chat(query):
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo-0613",
        messages=[{"role": "user", "content": query}],
        functions=functions, # this is new
    )
    message = response["choices"][0]["message"]
    return message
    
   chat("What is the capital of france?")
```
   
  If I run a query not related to the function, I will or will not add "function_call" to the output. I can handle this as follows:
  
```
  if message.get("function_call"):
    pizza_name = json.loads(message["function_call"]["arguments"]).get("pizza_name")
    print(pizza_name)
    function_response = get_pizza_info(
        pizza_name=pizza_name
    )
    print(function_response)
```

Is there a workaround, does it work as intended or is that an unknown bug? I would normally just expect it to work without creating a workaround :)