Vector store integrations
Overview
A vector store stores embedded data and performs similarity search.
flowchart LR
subgraph "📥 Indexing phase (store)"
A[📄 Documents] --> B[🔢 Embedding model]
B --> C[🔘 Embedding vectors]
C --> D[(Vector store)]
end
subgraph "📤 Query phase (retrieval)"
E[❓ Query text] --> F[🔢 Embedding model]
F --> G[🔘 Query vector]
G --> H[🔍 Similarity search]
H --> D
D --> I[📄 Top-k results]
end
classDef process fill:#E5F4FF,stroke:#006DDD,stroke-width:2px,color:#030710
class A,B,C,D,E,F,G,H,I processInterface
LangChain provides a unified interface for vector stores, allowing you to:
addDocuments- Add documents to the store.delete- Remove stored documents by ID.similaritySearch- Query for semantically similar documents.
This abstraction lets you switch between different implementations without altering your application logic.
Initialization
Most vectorstores in LangChain accept an embedding model as an argument when initializing the vector store.
import { OpenAIEmbeddings } from "@langchain/openai";
import { MemoryVectorStore } from "@langchain/classic/vectorstores/memory";
const embeddings = new OpenAIEmbeddings({
model: "text-embedding-3-small",
});
const vectorStore = new MemoryVectorStore(embeddings);Adding documents
You can add documents to the vector store by using the addDocuments function.
import { Document } from "@langchain/core/documents";
const document = new Document({
pageContent: "Hello world",
});
await vectorStore.addDocuments([document]);Deleting documents
You can delete documents from the vector store by using the delete function.
await vectorStore.delete({
filter: {
pageContent: "Hello world",
},
});Similarity search
Issue a semantic query using similaritySearch, which returns the closest embedded documents:
const results = await vectorStore.similaritySearch("Hello world", 10);Many vector stores support parameters like:
k— number of results to returnfilter— conditional filtering based on metadata
Similarity metrics & indexing
Embedding similarity may be computed using:
- Cosine similarity
- Euclidean distance
- Dot product
Efficient search often employs indexing methods such as HNSW (Hierarchical Navigable Small World), though specifics depend on the vector store.
Metadata filtering
Filtering by metadata (e.g., source, date) can refine search results:
vectorStore.similaritySearch("query", 2, { source: "tweets" });Support for metadata-based filtering varies between implementations. Check the documentation of your chosen vector store for details.
Top integrations
Select embedding model:
OpenAI
Install dependencies:
npm install @langchain/openai @langchain/coreyarn add @langchain/openai @langchain/corepnpm add @langchain/openai @langchain/coreAdd environment variables:
OPENAI_API_KEY=your-api-keyInstantiate the model:
import { OpenAIEmbeddings } from "@langchain/openai";
const embeddings = new OpenAIEmbeddings({
model: "text-embedding-3-large"
});Azure
Install dependencies
npm install @langchain/openai @langchain/coreyarn add @langchain/openai @langchain/corepnpm add @langchain/openai @langchain/coreAdd environment variables:
AZURE_OPENAI_API_INSTANCE_NAME=<YOUR_INSTANCE_NAME>
AZURE_OPENAI_API_KEY=<YOUR_KEY>
AZURE_OPENAI_API_VERSION="2024-02-01"Instantiate the model:
import { AzureOpenAIEmbeddings } from "@langchain/openai";
const embeddings = new AzureOpenAIEmbeddings({
azureOpenAIApiEmbeddingsDeploymentName: "text-embedding-ada-002"
});AWS
Install dependencies:
npm i @langchain/awsyarn add @langchain/awspnpm add @langchain/awsAdd environment variables:
BEDROCK_AWS_REGION=your-regionInstantiate the model:
import { BedrockEmbeddings } from "@langchain/aws";
const embeddings = new BedrockEmbeddings({
model: "amazon.titan-embed-text-v1"
});Google Gemini
Install dependencies:
npm i @langchain/google-genaiyarn add @langchain/google-genaipnpm add @langchain/google-genaiAdd environment variables:
GOOGLE_API_KEY=your-api-keyInstantiate the model:
import { GoogleGenerativeAIEmbeddings } from "@langchain/google-genai";
const embeddings = new GoogleGenerativeAIEmbeddings({
model: "gemini-embedding-001"
});Gemini Enterprise Agent Platform
Install dependencies:
npm i @langchain/google-vertexaiyarn add @langchain/google-vertexaipnpm add @langchain/google-vertexaiAdd environment variables:
GOOGLE_APPLICATION_CREDENTIALS=credentials.jsonInstantiate the model:
import { VertexAIEmbeddings } from "@langchain/google-vertexai";
const embeddings = new VertexAIEmbeddings({
model: "gemini-embedding-001"
});MistralAI
Install dependencies:
npm install @langchain/mistralai @langchain/coreyarn add @langchain/mistralai @langchain/corepnpm add @langchain/mistralai @langchain/coreAdd environment variables:
MISTRAL_API_KEY=your-api-keyInstantiate the model:
import { MistralAIEmbeddings } from "@langchain/mistralai";
const embeddings = new MistralAIEmbeddings({
model: "mistral-embed"
});Cohere
Install dependencies:
npm i @langchain/cohereyarn add @langchain/coherepnpm add @langchain/cohereAdd environment variables:
COHERE_API_KEY=your-api-keyInstantiate the model:
import { CohereEmbeddings } from "@langchain/cohere";
const embeddings = new CohereEmbeddings({
model: "embed-english-v3.0"
});Ollama
Install dependencies:
npm install @langchain/ollama @langchain/coreyarn add @langchain/ollama @langchain/corepnpm add @langchain/ollama @langchain/coreInstantiate the model:
import { OllamaEmbeddings } from "@langchain/ollama";
const embeddings = new OllamaEmbeddings({
model: "llama2",
baseUrl: "http://localhost:11434", // Default value
});Voyage AI
Install dependencies:
npm install @langchain/mongodb @langchain/coreyarn add @langchain/mongodb @langchain/corepnpm add @langchain/mongodb @langchain/coreAdd environment variables:
VOYAGE_API_KEY=your-api-keyInstantiate the model:
import { VoyageEmbeddings } from "@langchain/mongodb";
const embeddings = new VoyageEmbeddings({
model: "voyage-4"
});Select vector store:
Memory
npm i langchainyarn add langchainpnpm add langchainimport { MemoryVectorStore } from "@langchain/classic/vectorstores/memory";
const vectorStore = new MemoryVectorStore(embeddings);MongoDB
npm install @langchain/mongodb mongodb @langchain/coreyarn add @langchain/mongodb mongodb @langchain/corepnpm add @langchain/mongodb mongodb @langchain/coreimport { MongoDBAtlasVectorSearch } from "@langchain/mongodb"
import { MongoClient } from "mongodb";
const client = new MongoClient(process.env.MONGODB_ATLAS_URI!);
const collection = client
.db(process.env.MONGODB_ATLAS_DB_NAME)
.collection(process.env.MONGODB_ATLAS_COLLECTION_NAME);
const vectorStore = new MongoDBAtlasVectorSearch(embeddings, {
collection,
indexName: "vector_index",
textKey: "text",
embeddingKey: "embedding",
});npm install @langchain/mongodb mongodb @langchain/coreyarn add @langchain/mongodb mongodb @langchain/corepnpm add @langchain/mongodb mongodb @langchain/coreimport { MongoDBAtlasVectorSearch } from "@langchain/mongodb"
import { MongoClient } from "mongodb";
const client = new MongoClient(process.env.MONGODB_ATLAS_URI!);
const collection = client
.db(process.env.MONGODB_ATLAS_DB_NAME)
.collection(process.env.MONGODB_ATLAS_COLLECTION_NAME);
const vectorStore = new MongoDBAtlasVectorSearch({ collection });Pinecone
npm install @langchain/pinecone @langchain/core @pinecone-database/pineconeyarn add @langchain/pinecone @langchain/core @pinecone-database/pineconepnpm add @langchain/pinecone @langchain/core @pinecone-database/pineconeimport { PineconeStore } from "@langchain/pinecone";
import { Pinecone as PineconeClient } from "@pinecone-database/pinecone";
const pinecone = new PineconeClient();
const vectorStore = new PineconeStore(embeddings, {
pineconeIndex,
maxConcurrency: 5,
});Redis
npm install @langchain/redis @langchain/core redisyarn add @langchain/redis @langchain/core redispnpm add @langchain/redis @langchain/core redisimport { RedisVectorStore } from "@langchain/redis";
const vectorStore = new RedisVectorStore(embeddings, {
redisClient: client,
indexName: "langchainjs-testing",
});Qdrant
npm install @langchain/qdrant @langchain/coreyarn add @langchain/qdrant @langchain/corepnpm add @langchain/qdrant @langchain/coreimport { QdrantVectorStore } from "@langchain/qdrant";
const vectorStore = await QdrantVectorStore.fromExistingCollection(embeddings, {
url: process.env.QDRANT_URL,
collectionName: "langchainjs-testing",
});Oracle AI Database
npm i @oracle/langchain-oracledb @langchain/coreyarn add @oracle/langchain-oracledb @langchain/corepnpm add @oracle/langchain-oracledb @langchain/coreimport oracledb from "oracledb";
import { OracleEmbeddings, OracleVS } from "@oracle/langchain-oracledb";
const connection = await oracledb.getConnection({
user: process.env.ORACLE_USER,
password: process.env.ORACLE_PASSWORD,
connectionString: process.env.ORACLE_DSN,
});
const embeddings = new OracleEmbeddings(connection, {
provider: "database",
model: process.env.DEMO_ONNX_MODEL ?? "DEMO_MODEL",
});
const vectorStore = new OracleVS(embeddings, {
client: connection,
tableName: "DEMO_VECTORS",
query: "Find support tickets mentioning service outages.",
distanceStrategy: "DOT",
});
await vectorStore.initialize();Weaviate
npm install @langchain/weaviate @langchain/core weaviate-clientyarn add @langchain/weaviate @langchain/core weaviate-clientpnpm add @langchain/weaviate @langchain/core weaviate-clientimport { WeaviateStore } from "@langchain/weaviate";
const vectorStore = new WeaviateStore(embeddings, {
client: weaviateClient,
indexName: "Langchainjs_test",
});LangChain.js integrates with a variety of vector stores. You can check out a full list below: