Working through this module?0 of 17 done
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.

13.1

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.
13.2

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.
13.3

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.

13.4

Popular Vector Databases Comparison

Vector DBTypeKey FeaturesUse Case
FAISSLocal (library)Fast, simple, in-memoryLocal development, small to medium data
ChromaLocal / serverEasy to use, persistent storagePrototyping, open-source projects
QdrantServer / cloudHigh performance, filtering, payloadProduction, scalable applications
PineconeCloudManaged service, scalableEnterprise, production use
WeaviateServer / cloudHybrid search, metadata filteringProduction, semantic search
MilvusServer / cloudHigh scalability, distributedLarge-scale enterprise applications
13.5

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.
1
add_documents()
Add documents to the vector store
2
similarity_search()
Search similar documents
3
similarity_search_with_score()
Get results with scores
4
as_retriever()
Create a retriever for RAG
5
delete()
Delete documents
6
get()
Get documents by id
13.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)
13.7

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)
13.8

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"
)
13.9

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.