跳到主要内容

概览

向量存储存储嵌入数据并执行相似性搜索。

接口

LangChain 为向量存储提供了一个统一接口,允许您
  • addDocuments - 将文档添加到存储中。
  • delete - 按 ID 删除存储的文档。
  • similaritySearch - 查询语义相似的文档。
此抽象允许您在不更改应用程序逻辑的情况下切换不同的实现。

初始化

LangChain 中的大多数向量存储在初始化向量存储时都接受嵌入模型作为参数。
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);

添加文档

您可以使用 addDocuments 函数将文档添加到向量存储中。
import { Document } from "@langchain/core/documents";
const document = new Document({
  pageContent: "Hello world",
});
await vectorStore.addDocuments([document]);

删除文档

您可以使用 delete 函数从向量存储中删除文档。
await vectorStore.delete({
  filter: {
    pageContent: "Hello world",
  },
});
使用 similaritySearch 发出语义查询,它返回最接近的嵌入文档
const results = await vectorStore.similaritySearch("Hello world", 10);
许多向量存储支持以下参数:
  • k — 要返回的结果数量
  • filter — 基于元数据的条件过滤

相似性度量和索引

嵌入相似性可以使用以下方法计算:
  • 余弦相似性
  • 欧几里得距离
  • 点积
高效搜索通常采用 HNSW(分层可导航小世界)等索引方法,但具体细节取决于向量存储。

元数据过滤

按元数据(例如,来源、日期)过滤可以优化搜索结果
vectorStore.similaritySearch("query", 2, { source: "tweets" });

热门集成

选择嵌入模型
安装依赖项
npm i @langchain/openai
添加环境变量
OPENAI_API_KEY=your-api-key
实例化模型
import { OpenAIEmbeddings } from "@langchain/openai";

const embeddings = new OpenAIEmbeddings({
  model: "text-embedding-3-large"
});
安装依赖项
npm i @langchain/openai
添加环境变量
AZURE_OPENAI_API_INSTANCE_NAME=<YOUR_INSTANCE_NAME>
AZURE_OPENAI_API_KEY=<YOUR_KEY>
AZURE_OPENAI_API_VERSION="2024-02-01"
实例化模型
import { AzureOpenAIEmbeddings } from "@langchain/openai";

const embeddings = new AzureOpenAIEmbeddings({
  azureOpenAIApiEmbeddingsDeploymentName: "text-embedding-ada-002"
});
安装依赖项
npm i @langchain/aws
添加环境变量
BEDROCK_AWS_REGION=your-region
实例化模型
import { BedrockEmbeddings } from "@langchain/aws";

const embeddings = new BedrockEmbeddings({
  model: "amazon.titan-embed-text-v1"
});
安装依赖项
npm i @langchain/google-genai
添加环境变量
GOOGLE_API_KEY=your-api-key
实例化模型
import { GoogleGenerativeAIEmbeddings } from "@langchain/google-genai";

const embeddings = new GoogleGenerativeAIEmbeddings({
  model: "text-embedding-004"
});
安装依赖项
npm i @langchain/google-vertexai
添加环境变量
GOOGLE_APPLICATION_CREDENTIALS=credentials.json
实例化模型
import { VertexAIEmbeddings } from "@langchain/google-vertexai";

const embeddings = new VertexAIEmbeddings({
  model: "gemini-embedding-001"
});
安装依赖项
npm i @langchain/mistralai
添加环境变量
MISTRAL_API_KEY=your-api-key
实例化模型
import { MistralAIEmbeddings } from "@langchain/mistralai";

const embeddings = new MistralAIEmbeddings({
  model: "mistral-embed"
});
安装依赖项
npm i @langchain/cohere
添加环境变量
COHERE_API_KEY=your-api-key
实例化模型
import { CohereEmbeddings } from "@langchain/cohere";

const embeddings = new CohereEmbeddings({
  model: "embed-english-v3.0"
});
安装依赖项
npm i @langchain/ollama
实例化模型
import { OllamaEmbeddings } from "@langchain/ollama";

const embeddings = new OllamaEmbeddings({
  model: "llama2",
  baseUrl: "https://:11434", // Default value
});
选择向量存储
npm i langchain
import { MemoryVectorStore } from "@langchain/classic/vectorstores/memory";

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

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

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

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

const vectorStore = await QdrantVectorStore.fromExistingCollection(embeddings, {
  url: process.env.QDRANT_URL,
  collectionName: "langchainjs-testing",
});
LangChain.js 集成了各种向量存储。您可以在下面查看完整列表

所有向量存储


以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。
© . This site is unofficial and not affiliated with LangChain, Inc.