Working through this module?
Module 13 · Page 14 of 20 · 9 sections
LangChain with Vector Databases
What vector databases are, how they work, a comparison of the popular ones, LangChain's common VectorStore interface and examples with FAISS, Chroma and Qdrant.
What are Vector Databases?
- Vector databases store text, images or other data as numerical vectors (embeddings).
- They enable fast similarity search to find semantically relevant data.
- Essential for RAG applications.
- Popular vector databases: FAISS, Chroma, Qdrant, Weaviate, Pinecone, Milvus, etc.
- LangChain provides easy integration with these vector databases.
Why Use Vector Databases?
- Find relevant information based on meaning (semantic search).
- Works better than keyword search.
- Handles large amounts of unstructured data.
- Improves accuracy of LLM responses.
- Supports filtering (metadata-based search).
- Scalable and high-performance for enterprise use.
- Useful for document search, knowledge bases, chatbots and RAG systems.
How a Vector Database Works
DocumentsPDF, TXT, etc.
Split TextChunks
Create EmbeddingsUsing embedding model
Store in Vector Database
Similarity SearchIn vector DB
Relevant ChunksTo LLM
Final ResponseTo user
At query time the user query is converted to an embedding and the top-K relevant documents are returned.
Popular Vector Databases Comparison
| Vector DB | Type | Key Features | Use Case |
|---|---|---|---|
| FAISS | Local (library) | Fast, simple, in-memory | Local development, small to medium data |
| Chroma | Local / server | Easy to use, persistent storage | Prototyping, open-source projects |
| Qdrant | Server / cloud | High performance, filtering, payload | Production, scalable applications |
| Pinecone | Cloud | Managed service, scalable | Enterprise, production use |
| Weaviate | Server / cloud | Hybrid search, metadata filtering | Production, semantic search |
| Milvus | Server / cloud | High scalability, distributed | Large-scale enterprise applications |
LangChain VectorStore Abstractions
- LangChain provides a common VectorStore interface for different databases.
- You can easily switch between databases by changing a few lines of code.
- Supports adding documents, similarity search and metadata filtering.
- Integrates with embedding models and retrievers.
- Works seamlessly with RAG chains.
- add_documents()
- Add documents to the vector store
- similarity_search()
- Search similar documents
- similarity_search_with_score()
- Get results with scores
- as_retriever()
- Create a retriever for RAG
- delete()
- Delete documents
- get()
- Get documents by id
1
2
3
4
5
6
Example 1: FAISS
python
from langchain.document_loaders import PyPDFLoader from langchain.text_splitter import CharacterTextSplitter from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import FAISS # 1. Load and split document loader = PyPDFLoader("data/company_policy.pdf") docs = loader.load() splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50) chunks = splitter.split_documents(docs) # 2. Create embeddings embeddings = OpenAIEmbeddings() # 3. Create FAISS vector store vectorstore = FAISS.from_documents(chunks, embeddings) # 4. Similarity search results = vectorstore.similarity_search("What is the leave policy?", k=3) for doc in results: print(doc.page_content) print("Source:", doc.metadata)
Example 2: Chroma
python
from langchain.document_loaders import DirectoryLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chroma # Load documents loader = DirectoryLoader("data/") # folder with multiple files docs = loader.load() splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50) chunks = splitter.split_documents(docs) # Create embeddings embeddings = OpenAIEmbeddings() # Create Chroma vector store (persistent storage) vectorstore = Chroma.from_documents( documents=chunks, embedding=embeddings, persist_directory="chroma_db" ) # Search results = vectorstore.similarity_search("What is KYC process?", k=3) for doc in results: print(doc.page_content) print("Source:", doc.metadata)
Example 3: Qdrant
python
from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Qdrant embeddings = OpenAIEmbeddings() vectorstore = Qdrant.from_documents( documents=chunks, embedding=embeddings, url="http://localhost:6333", # Qdrant local server collection_name="company_docs" )
Key Takeaways
- Vector databases enable semantic search for better results.
- LangChain provides a unified interface for multiple vector stores.
- Choose the right database based on scale, cost and use case.
- Use proper chunking and embeddings for accurate search.
- Works seamlessly with RAG and agents.
- Supports metadata filtering and hybrid search.
- Essential for building scalable LLM applications.