ConversationChain sends malformatted requests to server
Labels: name: area: memory, name: auto:bug, name: auto:improvement, name: area: models

### System Info

LangChain version 0.0.273
Python version 3.8.10
Ubuntu 20.04.5 LTS

### Who can help?

@hwchase17

### Information

- [ ] The official example notebooks/scripts
- [X] My own modified scripts

### Related Components

- [X] 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

Run the following code:

```
MY_MODEL_NAME="SUBSTITUTE_THIS_WITH_YOUR_OWN_MODEL_FOR_REPRODUCTION"

from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory

llm = ChatOpenAI(temperature=0.1, model=MY_MODEL_NAME)
memory = ConversationBufferMemory(return_messages=True)
conversation = ConversationChain(llm=llm, memory=memory) 

message1 = "Howdy there"
response1 = conversation(message1)
print(response1)
message2 = "How's it going?"
response2 = conversation(message2)
print(response2)
```

Inspect the requests sent to the server. They will resemble the following packets received by my own server:

request1:
```
'messages': [{'role': 'user', 'content': 'The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.\n\nCurrent conversation:\n[]\nHuman: Howdy there\nAI:'}]
```

request2:
```
'messages': [{'role': 'user', 'content': "The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.\n\nCurrent conversation:\n[HumanMessage(content='Howdy there', additional_kwargs={}, example=False), AIMessage(content='Howdy! How can I help you today?\\n', additional_kwargs={}, example=False)]\nHuman: How's it going?\nAI:"}]
```

Note that these requests are malformatted.

### Expected behavior

There are two issues.

First, the `messages` packet is clearly malformatted, containing HumanMessage and AIMessage strings.

Second, the `messages` packet only has one conversation turn, and there appears to be no options within the ConversationChain class to allow for multiple turns.
This is particularly problematic as the ConversationChain class requires the user to know what turn tokens are appropriate to use. The user cannot and should not be expected to have knowledge of how the model was trained: there should be an option to leave this up to the server to decide.

My expected (and required for my product) behavior is for the two requests to be formatted as follows.
request1:
```
'messages': [{'role': 'user', 'content': 'Howdy there'}]
```

request2:
```
'messages': [{'role': 'user', 'content': 'Howdy there'}, {'role': 'assistant', 'content': 'Howdy! How can I help you today?\\n'}, {'role': 'user', 'content': "How's it going?"}]
```

Ultimately it is confusing why `conversation(message1); conversation(message2);` sends a different request to the server back-end than `llm([HumanMessage(content=message1), AIMessage(content=response1), HumanMessage(content=message2)])` does.