本页还没有译文
本页 85 段还没译成简体中文,下面显示的是英文原文。Vector store integrations
还没翻译译自英文(docs.langchain.com)本页 85 段都还没译
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:
npmyarnpnpm
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
npmyarnpnpm
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:
npmyarnpnpm
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:
npmyarnpnpm
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:
npmyarnpnpm
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:
npmyarnpnpm
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:
npmyarnpnpm
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:
npmyarnpnpm
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:
npmyarnpnpm
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
bashyarnpnpm
npm i langchainyarn add langchainpnpm add langchainimport { MemoryVectorStore } from "@langchain/classic/vectorstores/memory";
const vectorStore = new MemoryVectorStore(embeddings);MongoDB
Manual embeddingAutomated embedding
npmyarnpnpm
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",
});npmyarnpnpm
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
npmyarnpnpm
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
npmyarnpnpm
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
npmyarnpnpm
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
npmyarnpnpm
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
npmyarnpnpm
npm install @langchain/weaviate @langchain/core weaviate-clientyarn add @langchain/weaviate @langchain/core weaviate-clientpnpm add @langchain/weaviate @langchain/core weaviate-clienttypescript
import { 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: