langchain-rag
INVOKE THIS SKILL when building ANY retrieval-augmented generation (RAG) system. Covers document loaders, RecursiveCharacterTextSplitter, embeddings (OpenAI), and vector stores (Chroma, FAISS, Pinecone).
By langchain-ai · 14,678 installs
npx skills add langchain-ai/langchain-skills --skill langchain-rag
Source repository · Upstream listing
<overview
Retrieval Augmented Generation (RAG) enhances LLM responses by fetching relevant context from external knowledge sources.
Pipeline:
1. Index : Load → Split → Embed → Store
2. Retrieve : Query → Embed → Search → Return docs
3. Generate : Docs + Query → LLM → Response
Key Components:
Document Loaders : Ingest data from files, web, databases
Text Splitters : Break documents into chunks
Embeddings : Convert text to vectors
Vector Stores : Store and search embeddings
</overview
<vectorstore selection
Vector Store Use Case Persistence
InMemory Testing Memory only
FAISS Local, high performance Disk
Chroma Development Disk
Pinecone Production, managed Cloud
</vectorstore selection
Complete RAG Pipeline
<ex basic rag setup
<python
End to end RAG pipeline: load documents, split into chunks, embed, store, retrieve, and generate a response.
</python
<typescript
End to end RAG pipeline: load documents, split into chunks, embed, store, retrieve, and generate a response.
</typescript
</ex basic rag setup
Document Loaders
<ex loading pdf
<python
Load a PDF file and extract each page as a separate document.
</python
<typescript
Load a PDF file and extract each page as a separate document.
</typescript
</ex loading pdf
<ex loading web pages
<python
Fetch and parse content from a web URL into a document.
</python
<typescript
Fetch and parse content from a web URL into a document using Cheerio.
</typescript
</ex loading web pages
<ex loading directory
<python
Load all text files from a directory using a glob pattern.
</python
</ex loading directory
Text Splitting
<ex text splitting
<python
Split documents into chunks using RecursiveCharacterTextSplitter with configurable size and overlap.
</python
</ex text splitting
Vector Stores
<ex chroma vectorstore
<python
Create a persistent Chroma vector store and reload it from disk.
</python
<typescript
Create a Chroma vector store connected to a running Chroma server.
</typescript
</ex chroma vectorstore
<ex faiss vectorstore
<python
Create a FAISS vector store, save it to disk, and reload it.
</python
<typescript
Create a FAISS vector store, save it to disk, and reload it.
</typescript
</ex faiss vectorstore
Retrieval
<ex similarity search
<python
Perform similarity search and retrieve results with relevance scores.
</python
<typescript
Perform similarity search and retrieve results with relevance scores.
</typescript
</ex similarity search
<ex mmr search
<python
Use MMR (Maximal Marginal Relevance) to balance relevance and diversity in search results.
</python
</ex mmr search
<ex metadata filtering
<python
Add metadata to documents and filter search results by metadata properties.
</python
</ex metadata filtering
<ex rag with agent
<python
Create an agent that uses RAG as a tool for answering questions.
</python
<typescript
Create an agent that uses RAG as a tool for answering questions.
</typescript
</ex rag with agent
<boundaries
What You CAN Configure
Chunk size/overlap
Embedding model
Number of results (k)
Metadata filters
Search algorithms: Similarity, MMR
What You CANNOT Configure
Embedding dimensions (per model)
Mix embeddings from different models in same store
</boundaries
<fix chunk size
<python
Chunk size 500 1500 is typically good.
</python
<typescript
Chunk size 500 1500 is typically good.
</typescript
</fix chunk size
<fix chunk overlap
<python
Use overlap (10 20% of chunk size) to maintain context at boundaries.
</python
</fix chunk overlap
<fix persist vectorstore
<python
Use persistent vector store instead of in memory to avoid data loss.
</python
<typescript
Use persistent vector store instead of in memory to avoid data loss.
</typescript
</fix persist vectorstore
<fix consistent embeddings
<python
Use the same embedding model for indexing and querying.
</python
<typescript
Use the same embedding model for indexing and querying.
</typescript
</fix consistent embeddings
<fix faiss deserialization
<python
Only opt in to FAISS deserialization for trusted local indexes. Python FAISS indexes include pickle backed metadata, and untrusted pickle files can execute arbitrary code during loading.
If you cannot guarantee the provenance of a persisted index, do not load it with allow dangerous deserialization=True . Rebuild the index from trusted source documents or use a vector store/backend that does not require pickle deserialization for untrusted files.
</python
</fix faiss deserialization
<fix dimension mismatch
<python
Ensure embedding dimensions match the vector store index dimensions.
</python
</fix dimension mismatch