一键导入
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 | python |
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-chroma | Disk | Medium | Easy setup, local-first |
| Pinecone | Production, managed | langchain-pinecone | Cloud | High | Fully managed, auto-scaling |
| InMemory | Testing, prototyping | langchain-core | Memory only | Low | Simple, no setup, ephemeral |
| Weaviate | GraphQL, hybrid search | langchain-weaviate | Cloud/Self-hosted | High | GraphQL, hybrid search |
| Qdrant | High performance, filtering | langchain-qdrant | Cloud/Self-hosted | High | Fast, advanced filtering |
| PGVector | PostgreSQL users | langchain-postgres | PostgreSQL | High | PostgreSQL extension |
Choose FAISS if:
Choose Chroma if:
Choose Pinecone if:
Choose InMemory Vector Store if:
from langchain_core.vectorstores import InMemoryVectorStore
from langchain_openai import OpenAIEmbeddings
# In-memory vector store - great for testing
vectorstore = InMemoryVectorStore(OpenAIEmbeddings())
# Add documents
from langchain_core.documents import Document
docs = [
Document(page_content="LangChain is a framework for LLM apps", metadata={"source": "docs"}),
Document(page_content="Vector stores enable semantic search", metadata={"source": "docs"}),
Document(page_content="Paris is the capital of France", metadata={"source": "wiki"}),
]
vectorstore.add_documents(docs)
# Similarity search
results = vectorstore.similarity_search("What is LangChain?", k=2)
for doc in results:
print(doc.page_content)
# Search with score
results_with_score = vectorstore.similarity_search_with_score("LangChain", k=2)
for doc, score in results_with_score:
print(f"Score: {score}, Content: {doc.page_content}")
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain_core.documents import Document
import faiss
embeddings = OpenAIEmbeddings()
# Create from documents
docs = [
Document(page_content="Document 1 content", metadata={"id": 1}),
Document(page_content="Document 2 content", metadata={"id": 2}),
]
vectorstore = FAISS.from_documents(docs, embeddings)
# Search
results = vectorstore.similarity_search("query", k=3)
# Save to disk
vectorstore.save_local("./faiss_index")
# Load from disk
loaded_store = FAISS.load_local(
"./faiss_index",
embeddings,
allow_dangerous_deserialization=True # Required for loading
)
# Alternative: Initialize with specific FAISS index
embedding_dim = len(embeddings.embed_query("test"))
index = faiss.IndexFlatL2(embedding_dim)
docstore = InMemoryDocstore()
vectorstore = FAISS(embeddings, index, docstore, {})
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
# Persistent Chroma (saves to disk)
vectorstore = Chroma.from_documents(
documents=docs,
embedding=OpenAIEmbeddings(),
persist_directory="./chroma_db",
collection_name="my-collection",
)
# Search with metadata filter
results = vectorstore.similarity_search(
"query",
k=3,
filter={"category": "A"}
)
# Load existing collection
vectorstore = Chroma(
persist_directory="./chroma_db",
embedding_function=OpenAIEmbeddings(),
collection_name="my-collection",
)
# Delete collection
vectorstore.delete_collection()
from langchain_pinecone import PineconeVectorStore
from pinecone import Pinecone, ServerlessSpec
from langchain_openai import OpenAIEmbeddings
import os
# Initialize Pinecone
pc = Pinecone(api_key=os.getenv("PINECONE_API_KEY"))
# Create index if it doesn't exist
index_name = "my-index"
if index_name not in pc.list_indexes().names():
pc.create_index(
name=index_name,
dimension=1536, # OpenAI embedding dimensions
metric="cosine",
spec=ServerlessSpec(cloud="aws", region="us-east-1")
)
index = pc.Index(index_name)
# Create vector store
vectorstore = PineconeVectorStore.from_documents(
documents=docs,
embedding=OpenAIEmbeddings(),
index=index,
)
# Search with metadata filter
results = vectorstore.similarity_search(
"query",
k=3,
filter={"topic": "tech"}
)
# Use as retriever
retriever = vectorstore.as_retriever(
search_kwargs={"k": 5}
)
docs = retriever.get_relevant_documents("query")
from langchain_core.vectorstores import InMemoryVectorStore
from langchain_openai import OpenAIEmbeddings
vectorstore = InMemoryVectorStore(OpenAIEmbeddings())
# Add documents
vectorstore.add_documents([
Document(page_content="Document 1", metadata={}),
])
# Add more later
vectorstore.add_documents([
Document(page_content="Document 2", metadata={}),
Document(page_content="Document 3", metadata={}),
])
# Or from texts
vectorstore.add_texts(
texts=["Text 1", "Text 2"],
metadatas=[{"source": "A"}, {"source": "B"}]
)
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain.chains import create_retrieval_chain
# Create vector store
vectorstore = FAISS.from_documents(documents, OpenAIEmbeddings())
# Convert to retriever
retriever = vectorstore.as_retriever(
search_type="similarity", # or "mmr"
search_kwargs={"k": 4}
)
# Use in a chain
llm = ChatOpenAI()
prompt = ChatPromptTemplate.from_template("""
Answer based on context:
{context}
Question: {input}
""")
document_chain = create_stuff_documents_chain(llm, prompt)
retrieval_chain = create_retrieval_chain(retriever, document_chain)
result = retrieval_chain.invoke({"input": "What is LangChain?"})
print(result["answer"])
from langchain_core.vectorstores import InMemoryVectorStore
from langchain_openai import OpenAIEmbeddings
vectorstore = InMemoryVectorStore.from_texts(
texts=["text1", "text2", "text3"],
metadatas=[{}, {}, {}],
embedding=OpenAIEmbeddings()
)
# MMR balances relevance and diversity
results = vectorstore.max_marginal_relevance_search(
"query",
k=3,
fetch_k=10, # Fetch 10 candidates, return 3 diverse results
lambda_mult=0.5 # 0 = max diversity, 1 = max relevance
)
✅ Initialize vector stores
✅ Add and query documents
✅ Persist and load
✅ Use as retrievers
❌ Mix embeddings from different models
❌ Bypass provider limits
❌ Modify vector dimensions after creation
# ❌ Will raise error
loaded_store = FAISS.load_local("./faiss_index", embeddings)
# ✅ Must explicitly allow deserialization
loaded_store = FAISS.load_local(
"./faiss_index",
embeddings,
allow_dangerous_deserialization=True
)
Fix: Add allow_dangerous_deserialization=True when loading FAISS indices.
# ❌ OLD: Using langchain imports
from langchain.vectorstores import FAISS # Deprecated!
from langchain.vectorstores import Chroma
# ✅ NEW: Use specific packages
from langchain_community.vectorstores import FAISS
from langchain_chroma import Chroma
from langchain_pinecone import PineconeVectorStore
Fix: Use provider-specific packages.
# ❌ Index doesn't auto-create
from pinecone import Pinecone
pc = Pinecone(api_key=api_key)
index = pc.Index("nonexistent") # Error!
# ✅ Check and create
if "my-index" not in pc.list_indexes().names():
pc.create_index(
name="my-index",
dimension=1536,
metric="cosine",
spec=ServerlessSpec(cloud="aws", region="us-east-1")
)
Fix: Create Pinecone index before using it.
# ❌ Not persisting
vectorstore = Chroma.from_documents(
docs,
OpenAIEmbeddings()
) # Ephemeral!
# ✅ Persist to disk
vectorstore = Chroma.from_documents(
docs,
OpenAIEmbeddings(),
persist_directory="./chroma_db"
)
Fix: Specify persist_directory for persistence.
# ❌ Pinecone index has 1536 dimensions, using 512-dim embeddings
pc.create_index(name="idx", dimension=1536, metric="cosine")
vectorstore = PineconeVectorStore.from_documents(
docs,
OpenAIEmbeddings(model="text-embedding-3-small", dimensions=512),
index=pc.Index("idx")
) # Error: dimension mismatch!
# ✅ Match dimensions
embeddings = OpenAIEmbeddings() # Default 1536
# Or create index with 512 dimensions
Fix: Ensure vector store and embedding dimensions match.
# FAISS
pip install langchain-community faiss-cpu
# or faiss-gpu for GPU support
# Chroma
pip install langchain-chroma
# Pinecone
pip install langchain-pinecone pinecone-client
# Qdrant
pip install langchain-qdrant qdrant-client