Skip to content

概述 (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",
  },
});

使用 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/openai
bash
yarn add @langchain/openai
bash
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/openai
bash
yarn add @langchain/openai
bash
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/aws
bash
yarn add @langchain/aws
bash
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-genai
bash
yarn add @langchain/google-genai
bash
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-vertexai
bash
yarn add @langchain/google-vertexai
bash
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/mistralai
bash
yarn add @langchain/mistralai
bash
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/cohere
bash
yarn add @langchain/cohere
bash
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/ollama
bash
yarn add @langchain/ollama
bash
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 langchain
bash
yarn add langchain
bash
pnpm add langchain
typescript
import { MemoryVectorStore } from "@langchain/classic/vectorstores/memory";

const vectorStore = new MemoryVectorStore(embeddings);
Chroma
bash
npm i @langchain/community
bash
yarn add @langchain/community
bash
pnpm add @langchain/community
typescript
import { Chroma } from "@langchain/community/vectorstores/chroma";

const vectorStore = new Chroma(embeddings, {
  collectionName: "a-test-collection",
});
FAISS
bash
npm i @langchain/community
bash
yarn add @langchain/community
bash
pnpm add @langchain/community
typescript
import { FaissStore } from "@langchain/community/vectorstores/faiss";

const vectorStore = new FaissStore(embeddings, {});
MongoDB
bash
npm i @langchain/mongodb
bash
yarn add @langchain/mongodb
bash
pnpm add @langchain/mongodb
typescript
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/community
bash
yarn add @langchain/community
bash
pnpm add @langchain/community
typescript
import { PGVectorStore } from "@langchain/community/vectorstores/pgvector";

const vectorStore = await PGVectorStore.initialize(embeddings, {});
Pinecone
bash
npm i @langchain/pinecone
bash
yarn add @langchain/pinecone
bash
pnpm add @langchain/pinecone
typescript
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/qdrant
bash
yarn add @langchain/qdrant
bash
pnpm add @langchain/qdrant
typescript
import { QdrantVectorStore } from "@langchain/qdrant";

const vectorStore = await QdrantVectorStore.fromExistingCollection(embeddings, {
  url: process.env.QDRANT_URL,
  collectionName: "langchainjs-testing",
});
Weaviate
bash
npm i @langchain/weaviate
bash
yarn add @langchain/weaviate
bash
pnpm add @langchain/weaviate
typescript
import { WeaviateStore } from "@langchain/weaviate";

const vectorStore = new WeaviateStore(embeddings, {
    client: weaviateClient,
    indexName: "Langchainjs_test",
});

LangChain.js 集成了多种向量存储。您可以在下方查看完整列表:

所有向量存储 (All vector stores)

LangChain 中文文档