원클릭으로
langchain-vector-stores
Guide to using vector store integrations in LangChain including Chroma, Pinecone, FAISS, and memory vector stores
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Guide to using vector store integrations in LangChain including Chroma, Pinecone, FAISS, and memory vector stores
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Using the Deep Agents CLI - terminal interface, persistent memory with AGENTS.md, project conventions, skills directories, and CLI commands.
Understanding Deep Agents framework - what they are, how to create them with createDeepAgent, and the agent harness architecture with built-in middleware for planning, filesystems, and subagents.
Creating and using custom skills with progressive disclosure, SKILL.md format, and the Agent Skills protocol in Deep Agents.
Using the Deep Agents CLI - terminal interface, persistent memory with AGENTS.md, project conventions, skills directories, and CLI commands.
Using FilesystemMiddleware with virtual filesystems, backends (State, Store, Filesystem, Composite), and context management for Deep Agents.
Using FilesystemMiddleware with virtual filesystems, backends (State, Store, Filesystem, Composite), and context management for Deep Agents.
| name | langchain-vector-stores |
| description | Guide to using vector store integrations in LangChain including Chroma, Pinecone, FAISS, and memory vector stores |
| language | js |
Vector stores are databases optimized for storing and searching high-dimensional vectors (embeddings). They enable semantic search by finding documents similar to a query based on vector similarity rather than keyword matching. Essential for RAG (Retrieval-Augmented Generation) systems.
| Vector Store | Best For | Package | Persistence | Scalability | Key Features |
|---|---|---|---|---|---|
| FAISS | Local, high performance | @langchain/community | Disk | Medium | Fast, CPU/GPU support, local |
| Chroma | Development, simplicity | @langchain/community | Disk | Medium | Easy setup, local-first, Python API |
| Pinecone | Production, managed | @langchain/pinecone | Cloud | High | Fully managed, auto-scaling, no ops |
| Memory | Testing, prototyping | langchain/vectorstores/memory | Memory only | Low | Simple, no setup, ephemeral |
| Weaviate | GraphQL, hybrid search | @langchain/weaviate | Cloud/Self-hosted | High | GraphQL, hybrid search, modular |
| Qdrant | High performance, filtering | @langchain/qdrant | Cloud/Self-hosted | High | Fast, advanced filtering, Rust-based |
| Supabase | PostgreSQL users | @langchain/community | Cloud/Self-hosted | High | PostgreSQL extension, familiar tooling |
Choose FAISS if:
Choose Chroma if:
Choose Pinecone if:
Choose Memory Vector Store if:
Choose Weaviate/Qdrant if:
import { MemoryVectorStore } from "langchain/vectorstores/memory";
import { OpenAIEmbeddings } from "@langchain/openai";
// In-memory vector store - great for testing
const vectorStore = new MemoryVectorStore(new OpenAIEmbeddings());
// Add documents
await vectorStore.addDocuments([
{ pageContent: "LangChain is a framework for LLM apps", metadata: { source: "docs" } },
{ pageContent: "Vector stores enable semantic search", metadata: { source: "docs" } },
{ pageContent: "Paris is the capital of France", metadata: { source: "wiki" } },
]);
// Similarity search
const results = await vectorStore.similaritySearch("What is LangChain?", 2);
console.log(results);
// Search with score
const resultsWithScore = await vectorStore.similaritySearchWithScore("LangChain", 2);
resultsWithScore.forEach(([doc, score]) => {
console.log(`Score: ${score}, Content: ${doc.pageContent}`);
});
import { FaissStore } from "@langchain/community/vectorstores/faiss";
import { OpenAIEmbeddings } from "@langchain/openai";
const embeddings = new OpenAIEmbeddings();
// Create from documents
const vectorStore = await FaissStore.fromDocuments(
[
{ pageContent: "Document 1 content", metadata: { id: 1 } },
{ pageContent: "Document 2 content", metadata: { id: 2 } },
],
embeddings
);
// Search
const results = await vectorStore.similaritySearch("query", 3);
// Save to disk
await vectorStore.save("./faiss_index");
// Load from disk
const loadedStore = await FaissStore.load("./faiss_index", embeddings);
import { Chroma } from "@langchain/community/vectorstores/chroma";
import { OpenAIEmbeddings } from "@langchain/openai";
// Requires Chroma server running: docker run -p 8000:8000 chromadb/chroma
const vectorStore = await Chroma.fromDocuments(
[
{ pageContent: "Text 1", metadata: { category: "A" } },
{ pageContent: "Text 2", metadata: { category: "B" } },
],
new OpenAIEmbeddings(),
{
collectionName: "my-collection",
url: "http://localhost:8000", // Chroma server URL
}
);
// Search with metadata filter
const results = await vectorStore.similaritySearch("query", 3, {
category: "A"
});
// Delete collection
await vectorStore.delete({ collectionName: "my-collection" });
import { PineconeStore } from "@langchain/pinecone";
import { Pinecone } from "@pinecone-database/pinecone";
import { OpenAIEmbeddings } from "@langchain/openai";
// Initialize Pinecone client
const pinecone = new Pinecone({
apiKey: process.env.PINECONE_API_KEY,
});
const pineconeIndex = pinecone.Index("my-index");
// Create vector store
const vectorStore = await PineconeStore.fromDocuments(
[
{ pageContent: "Content 1", metadata: { topic: "tech" } },
{ pageContent: "Content 2", metadata: { topic: "science" } },
],
new OpenAIEmbeddings(),
{
pineconeIndex,
maxConcurrency: 5,
}
);
// Search with metadata filter
const results = await vectorStore.similaritySearch("query", 3, {
topic: "tech"
});
// Use as retriever
const retriever = vectorStore.asRetriever({
k: 5,
searchType: "similarity",
});
const docs = await retriever.getRelevantDocuments("query");
import { MemoryVectorStore } from "langchain/vectorstores/memory";
import { OpenAIEmbeddings } from "@langchain/openai";
const vectorStore = new MemoryVectorStore(new OpenAIEmbeddings());
// Add documents one at a time or in batches
await vectorStore.addDocuments([
{ pageContent: "Document 1", metadata: {} },
]);
// Add more later
await vectorStore.addDocuments([
{ pageContent: "Document 2", metadata: {} },
{ pageContent: "Document 3", metadata: {} },
]);
// Or from texts
await vectorStore.addTexts(
["Text 1", "Text 2"],
[{ source: "A" }, { source: "B" }]
);
import { MemoryVectorStore } from "langchain/vectorstores/memory";
import { OpenAIEmbeddings } from "@langchain/openai";
const vectorStore = await MemoryVectorStore.fromDocuments(
documents,
new OpenAIEmbeddings()
);
// Convert to retriever
const retriever = vectorStore.asRetriever({
k: 4, // Return top 4 results
searchType: "similarity", // or "mmr" for maximum marginal relevance
});
// Use in a chain
import { ChatOpenAI } from "@langchain/openai";
import { createRetrievalChain } from "langchain/chains/retrieval";
import { createStuffDocumentsChain } from "langchain/chains/combine_documents";
import { ChatPromptTemplate } from "@langchain/core/prompts";
const llm = new ChatOpenAI();
const prompt = ChatPromptTemplate.fromTemplate(`
Answer based on context:
{context}
Question: {input}
`);
const combineDocsChain = await createStuffDocumentsChain({ llm, prompt });
const chain = await createRetrievalChain({
retriever,
combineDocsChain,
});
const result = await chain.invoke({ input: "What is LangChain?" });
import { MemoryVectorStore } from "langchain/vectorstores/memory";
import { OpenAIEmbeddings } from "@langchain/openai";
const vectorStore = await MemoryVectorStore.fromTexts(
["text1", "text2", "text3"],
[{}, {}, {}],
new OpenAIEmbeddings()
);
// MMR balances relevance and diversity
const results = await vectorStore.maxMarginalRelevanceSearch("query", {
k: 3,
fetchK: 10, // Fetch 10 candidates, return 3 diverse results
lambda: 0.5, // 0 = max diversity, 1 = max relevance
});
✅ Initialize vector stores
✅ Add and query documents
✅ Persist and load
✅ Use as retrievers
✅ Choose appropriate store
❌ Mix embeddings from different models
❌ Bypass provider limits
❌ Modify vector dimensions after creation
❌ Query without proper setup
// ❌ BAD: Different embeddings for indexing and querying
const store1 = await MemoryVectorStore.fromDocuments(
docs,
new OpenAIEmbeddings({ model: "text-embedding-3-small" })
);
const results = await store1.similaritySearch("query"); // Uses same embeddings ✓
// But if you recreate:
const store2 = new MemoryVectorStore(
new OpenAIEmbeddings({ model: "text-embedding-ada-002" }) // Different!
);
// Queries won't work correctly!
// ✅ GOOD: Keep embedding instance
const embeddings = new OpenAIEmbeddings({ model: "text-embedding-3-small" });
const store = await MemoryVectorStore.fromDocuments(docs, embeddings);
// Always use same embeddings instance
Fix: Use the same embedding model instance for creation and queries.
// ❌ Chroma not running
import { Chroma } from "@langchain/community/vectorstores/chroma";
const store = await Chroma.fromDocuments(docs, embeddings, {
url: "http://localhost:8000"
});
// Error: Connection refused!
// ✅ Start Chroma first
// Terminal: docker run -p 8000:8000 chromadb/chroma
// Or: chroma run --path ./chroma_data
const store = await Chroma.fromDocuments(docs, embeddings, {
url: "http://localhost:8000"
}); // Works!
Fix: Ensure Chroma server is running before creating the vector store.
// ❌ Index doesn't exist
import { Pinecone } from "@pinecone-database/pinecone";
const pinecone = new Pinecone({ apiKey: process.env.PINECONE_API_KEY });
const index = pinecone.Index("nonexistent-index"); // Won't create index!
// ✅ Create index first
// Do this in Pinecone dashboard or via API
const pinecone = new Pinecone({ apiKey: process.env.PINECONE_API_KEY });
// Check if index exists, create if needed
const indexList = await pinecone.listIndexes();
if (!indexList.indexes?.some(idx => idx.name === "my-index")) {
await pinecone.createIndex({
name: "my-index",
dimension: 1536, // Must match embedding dimensions
metric: "cosine",
spec: { serverless: { cloud: "aws", region: "us-east-1" } }
});
}
const index = pinecone.Index("my-index");
Fix: Create Pinecone index before using it.
// ❌ Relative path issues
await vectorStore.save("./index"); // May fail depending on cwd
// ✅ Use absolute paths or be explicit
import path from "path";
const indexPath = path.join(process.cwd(), "data", "faiss_index");
await vectorStore.save(indexPath);
// Load with same path
const loadedStore = await FaissStore.load(indexPath, embeddings);
Fix: Use absolute paths or be careful with working directory.
// ❌ Expecting persistence
const vectorStore = new MemoryVectorStore(embeddings);
await vectorStore.addDocuments(docs);
// App restarts...
// All data is lost!
// ✅ Use persistent store for production
import { FaissStore } from "@langchain/community/vectorstores/faiss";
const vectorStore = await FaissStore.fromDocuments(docs, embeddings);
await vectorStore.save("./faiss_index"); // Persists to disk
Fix: Use FAISS, Chroma, or cloud stores (Pinecone) for persistent data.
// Different stores have different filter syntaxes
// Pinecone
const pineconeResults = await pineconeStore.similaritySearch("query", 3, {
category: "tech" // Simple key-value
});
// Chroma
const chromaResults = await chromaStore.similaritySearch("query", 3, {
where: { category: "tech" } // Nested structure
});
// Check each store's documentation for filter syntax!
Fix: Read the specific vector store's documentation for filter syntax.
// ❌ Creating Pinecone index with wrong dimensions
await pinecone.createIndex({
name: "my-index",
dimension: 1536, // OpenAI ada-002 dimensions
});
// But using different embeddings!
const store = await PineconeStore.fromDocuments(
docs,
new OpenAIEmbeddings({ model: "text-embedding-3-small", dimensions: 512 }),
{ pineconeIndex }
); // Error: dimension mismatch!
// ✅ Match dimensions
const embeddings = new OpenAIEmbeddings({ model: "text-embedding-3-small" });
// Default is 1536, matches Pinecone index
Fix: Ensure vector store dimension configuration matches embedding dimensions.
# Community package (includes FAISS, Chroma, etc.)
npm install @langchain/community
# Pinecone
npm install @langchain/pinecone @pinecone-database/pinecone
# Weaviate
npm install @langchain/weaviate weaviate-ts-client
# Qdrant
npm install @langchain/qdrant @qdrant/js-client-rest