`Chroma.from_documents` adds docs to same collection creating duplicates
Labels: name: area: vector store, name: auto:bug, name: integration: chroma

### System Info

langchain==0.0.306
chromadb==0.4.13

Python 3.11.5

### Who can help?

@hwchase17 @atroyn

### 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
- [X] Vector Stores / Retrievers
- [ ] Memory
- [ ] Agents / Agent Executors
- [ ] Tools / Toolkits
- [ ] Chains
- [ ] Callbacks/Tracing
- [ ] Async

### Reproduction

```python
from langchain.vectorstores import Chroma
from langchain.docstore.document import Document
from langchain.embeddings import GPT4AllEmbeddings

docs = [
    Document(page_content="This is a demo document"),
    Document(page_content="This is another demo document"),

]

other_docs = [
    Document(page_content="Unrelated document"),
    Document(page_content="Another unrelated document"),
]

# Create two (independent) vector stores
vectorstore = Chroma.from_documents(documents=docs, embedding=GPT4AllEmbeddings())
other_vectorstore = Chroma.from_documents(documents=other_docs, embedding=GPT4AllEmbeddings())

# Expect two stores to be independent
assert len(vectorstore.similarity_search("document", k=999)) == len(docs)  # OK
assert len(other_vectorstore.similarity_search("document", k=999)) == len(other_docs)  # FAILS

# Documents from the first vector store are actually retrieved in the `other_vectorstore`
print(other_vectorstore.similarity_search("document"))

# Actually the two vector stores contain the union of `docs` and `other_docs`
assert len(vectorstore.get()["documents"]) == 2  # FAILS
assert len(other_vectorstore.get()["documents"]) == 2  # FAILS

```

### Expected behavior

When I initialize two separate Chroma in-memory vectorstores with `Chroma.from_documents` using two distinct groups of documents, the vector store that was initialized last will contain the union of the two groups of documents.

In summary, running this code:
```python
vectorstore = Chroma.from_documents(documents=documents, …)
other_vectorstore = Chroma.from_documents(documents=other_documents, …)
```
the `other_vectorstore` will contain both `documents` and `other_documents`.

---
It seems that the two vectorstores are sharing the same chroma client & collection.

This could be a side effect of commit https://github.com/langchain-ai/langchain/commit/822cdb161b6631d8255e341f3321d8f0b9e28e8a which made the `chromadb.Client` shared among all instances of the `Chroma` class.

One can avoid the bug by explicitly passing two different `collection_name` values when initializing the vector store, but I thought this would have been the default behaviour (or at least I expected a warning telling that the new vectorstore was reusing an existing collection).

Moreover, it is not clear to me why the first vector store will return the documents it was initialized with if I use `vectorstore.similarity_search(…)`, but shows the union of all documents if I use `vectorstore.get()`.

If you confirm what is the intended behaviour I am available to to work a PR to fix this.