主题
概述 (Overview)
向量存储 (vector store) 用于存储嵌入 (embedded)数据并执行相似性搜索。
mermaid
flowchart LR
subgraph "📥 索引阶段 (Indexing phase)"
A[📄 文档] --> B[🔢 嵌入模型]
B --> C[🔘 嵌入向量]
C --> D[(向量存储)]
end
subgraph "📤 查询阶段 (Query phase)"
E[❓ 查询文本] --> F[🔢 嵌入模型]
F --> G[🔘 查询向量]
G --> H[🔍 相似性搜索]
H --> D
D --> I[📄 Top-k 结果]
end接口 (Interface)
LangChain 为向量存储提供了统一的接口,允许您:
addDocuments- 向存储中添加文档。delete- 根据 ID 删除已存储的文档。similaritySearch- 查询语义相似的文档。
这种抽象让您可以在不同的实现之间切换,而无需更改应用程序逻辑。
初始化 (Initialization)
LangChain 中的大多数向量存储在初始化时接受一个嵌入模型作为参数。
typescript
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)
您可以使用 addDocuments 函数向向量存储添加文档。
typescript
import { Document } from "@langchain/core/documents";
const document = new Document({
pageContent: "Hello world",
});
await vectorStore.addDocuments([document]);删除文档 (Deleting documents)
您可以使用 delete 函数从向量存储中删除文档。
typescript
await vectorStore.delete({
filter: {
pageContent: "Hello world",
},
});相似性搜索 (Similarity search)
使用 similaritySearch 发出语义查询,它将返回最接近的嵌入文档:
typescript
const results = await vectorStore.similaritySearch("Hello world", 10);许多向量存储支持以下参数:
k— 要返回的结果数量filter— 基于元数据的条件过滤
相似性度量与索引 (Similarity metrics & indexing)
嵌入相似性可以使用以下方法计算:
- 余弦相似度 (Cosine similarity)
- 欧几里得距离 (Euclidean distance)
- 点积 (Dot product)
高效的搜索通常使用索引方法,例如 HNSW(分层可导航小世界),但具体细节取决于向量存储。
元数据过滤 (Metadata filtering)
通过元数据(例如来源、日期)进行过滤可以优化搜索结果:
typescript
vectorStore.similaritySearch("query", 2, { source: "tweets" });主要集成 (Top integrations)
选择嵌入模型:
OpenAI
安装依赖项:
bash
npm i @langchain/openaibash
yarn add @langchain/openaibash
pnpm add @langchain/openai添加环境变量:
bash
OPENAI_API_KEY=your-api-key实例化模型:
typescript
import { OpenAIEmbeddings } from "@langchain/openai";
const embeddings = new OpenAIEmbeddings({
model: "text-embedding-3-large"
});Azure
安装依赖项:
bash
npm i @langchain/openaibash
yarn add @langchain/openaibash
pnpm add @langchain/openai添加环境变量:
bash
AZURE_OPENAI_API_INSTANCE_NAME=<YOUR_INSTANCE_NAME>
AZURE_OPENAI_API_KEY=<YOUR_KEY>
AZURE_OPENAI_API_VERSION="2024-02-01"实例化模型:
typescript
import { AzureOpenAIEmbeddings } from "@langchain/openai";
const embeddings = new AzureOpenAIEmbeddings({
azureOpenAIApiEmbeddingsDeploymentName: "text-embedding-ada-002"
});AWS
安装依赖项:
bash
npm i @langchain/awsbash
yarn add @langchain/awsbash
pnpm add @langchain/aws添加环境变量:
bash
BEDROCK_AWS_REGION=your-region实例化模型:
typescript
import { BedrockEmbeddings } from "@langchain/aws";
const embeddings = new BedrockEmbeddings({
model: "amazon.titan-embed-text-v1"
});Google Gemini
安装依赖项:
bash
npm i @langchain/google-genaibash
yarn add @langchain/google-genaibash
pnpm add @langchain/google-genai添加环境变量:
bash
GOOGLE_API_KEY=your-api-key实例化模型:
typescript
import { GoogleGenerativeAIEmbeddings } from "@langchain/google-genai";
const embeddings = new GoogleGenerativeAIEmbeddings({
model: "text-embedding-004"
});Google Vertex
安装依赖项:
bash
npm i @langchain/google-vertexaibash
yarn add @langchain/google-vertexaibash
pnpm add @langchain/google-vertexai添加环境变量:
bash
GOOGLE_APPLICATION_CREDENTIALS=credentials.json实例化模型:
typescript
import { VertexAIEmbeddings } from "@langchain/google-vertexai";
const embeddings = new VertexAIEmbeddings({
model: "gemini-embedding-001"
});MistralAI
安装依赖项:
bash
npm i @langchain/mistralaibash
yarn add @langchain/mistralaibash
pnpm add @langchain/mistralai添加环境变量:
bash
MISTRAL_API_KEY=your-api-key实例化模型:
typescript
import { MistralAIEmbeddings } from "@langchain/mistralai";
const embeddings = new MistralAIEmbeddings({
model: "mistral-embed"
});Cohere
安装依赖项:
bash
npm i @langchain/coherebash
yarn add @langchain/coherebash
pnpm add @langchain/cohere添加环境变量:
bash
COHERE_API_KEY=your-api-key实例化模型:
typescript
import { CohereEmbeddings } from "@langchain/cohere";
const embeddings = new CohereEmbeddings({
model: "embed-english-v3.0"
});Ollama
安装依赖项:
bash
npm i @langchain/ollamabash
yarn add @langchain/ollamabash
pnpm add @langchain/ollama实例化模型:
typescript
import { OllamaEmbeddings } from "@langchain/ollama";
const embeddings = new OllamaEmbeddings({
model: "llama2",
baseUrl: "http://localhost:11434", // Default value
});选择向量存储:
Memory
bash
npm i langchainbash
yarn add langchainbash
pnpm add langchaintypescript
import { MemoryVectorStore } from "@langchain/classic/vectorstores/memory";
const vectorStore = new MemoryVectorStore(embeddings);Chroma
bash
npm i @langchain/communitybash
yarn add @langchain/communitybash
pnpm add @langchain/communitytypescript
import { Chroma } from "@langchain/community/vectorstores/chroma";
const vectorStore = new Chroma(embeddings, {
collectionName: "a-test-collection",
});FAISS
bash
npm i @langchain/communitybash
yarn add @langchain/communitybash
pnpm add @langchain/communitytypescript
import { FaissStore } from "@langchain/community/vectorstores/faiss";
const vectorStore = new FaissStore(embeddings, {});MongoDB
bash
npm i @langchain/mongodbbash
yarn add @langchain/mongodbbash
pnpm add @langchain/mongodbtypescript
import { 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",
});PGVector
bash
npm i @langchain/communitybash
yarn add @langchain/communitybash
pnpm add @langchain/communitytypescript
import { PGVectorStore } from "@langchain/community/vectorstores/pgvector";
const vectorStore = await PGVectorStore.initialize(embeddings, {});Pinecone
bash
npm i @langchain/pineconebash
yarn add @langchain/pineconebash
pnpm add @langchain/pineconetypescript
import { PineconeStore } from "@langchain/pinecone";
import { Pinecone as PineconeClient } from "@pinecone-database/pinecone";
const pinecone = new PineconeClient();
const vectorStore = new PineconeStore(embeddings, {
pineconeIndex,
maxConcurrency: 5,
});Qdrant
bash
npm i @langchain/qdrantbash
yarn add @langchain/qdrantbash
pnpm add @langchain/qdranttypescript
import { QdrantVectorStore } from "@langchain/qdrant";
const vectorStore = await QdrantVectorStore.fromExistingCollection(embeddings, {
url: process.env.QDRANT_URL,
collectionName: "langchainjs-testing",
});Weaviate
bash
npm i @langchain/weaviatebash
yarn add @langchain/weaviatebash
pnpm add @langchain/weaviatetypescript
import { WeaviateStore } from "@langchain/weaviate";
const vectorStore = new WeaviateStore(embeddings, {
client: weaviateClient,
indexName: "Langchainjs_test",
});LangChain.js 集成了多种向量存储。您可以在下方查看完整列表:
所有向量存储 (All vector stores)
AnalyticDB
View guide →
Astra DB
View guide →
Azion EdgeSQL
View guide →
Azure AI Search
View guide →
Azure Cosmos DB for MongoDB vCore
View guide →
Azure Cosmos DB for NoSQL
View guide →
Cassandra
View guide →
Chroma
View guide →
ClickHouse
View guide →
CloseVector
View guide →
Cloudflare Vectorize
View guide →
Convex
View guide →
Couchbase Query
View guide →
Couchbase Search
View guide →
Elasticsearch
View guide →
Faiss
View guide →
Google Cloud SQL for PostgreSQL
View guide →
Google Vertex AI Matching Engine
View guide →
SAP HANA Cloud Vector Engine
View guide →
HNSWLib
View guide →
LanceDB
View guide →
libSQL
View guide →
MariaDB
View guide →
In-memory
View guide →
Milvus
View guide →
Momento Vector Index (MVI)
View guide →
MongoDB Atlas
View guide →
MyScale
View guide →
Neo4j Vector Index
View guide →
Neon Postgres
View guide →
OpenSearch
View guide →
PGVector
View guide →
Pinecone
View guide →
Prisma
View guide →
Qdrant
View guide →
Redis
View guide →
Rockset
View guide →
SingleStore
View guide →
Supabase
View guide →
Tigris
View guide →
Turbopuffer
View guide →
TypeORM
View guide →
Typesense
View guide →
Upstash Vector
View guide →
USearch
View guide →
Vectara
View guide →
Vercel Postgres
View guide →
Voy
View guide →
Weaviate
View guide →
Xata
View guide →
Zep Open Source
View guide →
Zep Cloud
View guide →