概述
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 process
接口
LangChain 为向量存储提供了统一接口,允许你:
- -
addDocuments- 向存储添加文档。 - -
delete- 按 ID 删除存储的文档。 - -
similaritySearch- 查询语义相似的文档。
这种抽象让你可以在不更改应用逻辑的情况下切换不同的实现。
初始化
LangChain 中的大多数向量存储在初始化时接受嵌入模型作为参数。
const embeddings = new OpenAIEmbeddings({
model: "text-embedding-3-small",
});
const vectorStore = new MemoryVectorStore(embeddings);
添加文档
你可以使用以下方式向向量存储添加文档: addDocuments function.
const document = new Document({
pageContent: "Hello world",
});
await vectorStore.addDocuments([document]);
删除文档
你可以使用以下方式从向量存储中删除文档: delete function.
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" });
热门集成
选择嵌入模型:
OpenAI
安装依赖:
npm install @langchain/openai @langchain/core
yarn add @langchain/openai @langchain/core
pnpm add @langchain/openai @langchain/core
添加环境变量:
OPENAI_API_KEY=your-api-key
实例化模型:
const embeddings = new OpenAIEmbeddings({
model: "text-embedding-3-large"
});
Azure
安装依赖
npm install @langchain/openai @langchain/core
yarn add @langchain/openai @langchain/core
pnpm add @langchain/openai @langchain/core
添加环境变量:
AZURE_OPENAI_API_INSTANCE_NAME=
AZURE_OPENAI_API_KEY=
AZURE_OPENAI_API_VERSION="2024-02-01"
实例化模型:
const embeddings = new AzureOpenAIEmbeddings({
azureOpenAIApiEmbeddingsDeploymentName: "text-embedding-ada-002"
});
AWS
安装依赖:
npm i @langchain/aws
yarn add @langchain/aws
pnpm add @langchain/aws
添加环境变量:
BEDROCK_AWS_REGION=your-region
实例化模型:
const embeddings = new BedrockEmbeddings({
model: "amazon.titan-embed-text-v1"
});
Google Gemini
安装依赖:
npm i @langchain/google-genai
yarn add @langchain/google-genai
pnpm add @langchain/google-genai
添加环境变量:
GOOGLE_API_KEY=your-api-key
实例化模型:
const embeddings = new GoogleGenerativeAIEmbeddings({
model: "text-embedding-004"
});
Google Vertex
安装依赖:
npm i @langchain/google-vertexai
yarn add @langchain/google-vertexai
pnpm add @langchain/google-vertexai
添加环境变量:
GOOGLE_APPLICATION_CREDENTIALS=credentials.json
实例化模型:
const embeddings = new VertexAIEmbeddings({
model: "gemini-embedding-001"
});
MistralAI
安装依赖项:
npm install @langchain/mistralai @langchain/core
yarn add @langchain/mistralai @langchain/core
pnpm add @langchain/mistralai @langchain/core
添加环境变量:
MISTRAL_API_KEY=your-api-key
实例化模型:
const embeddings = new MistralAIEmbeddings({
model: "mistral-embed"
});
Cohere
安装依赖项:
npm i @langchain/cohere
yarn add @langchain/cohere
pnpm add @langchain/cohere
添加环境变量:
COHERE_API_KEY=your-api-key
实例化模型:
const embeddings = new CohereEmbeddings({
model: "embed-english-v3.0"
});
Ollama
安装依赖项:
npm install @langchain/ollama @langchain/core
yarn add @langchain/ollama @langchain/core
pnpm add @langchain/ollama @langchain/core
实例化模型:
const embeddings = new OllamaEmbeddings({
model: "llama2",
baseUrl: "http://localhost:11434", // Default value
});
选择向量存储:
Memory
npm i langchain
yarn add langchain
pnpm add langchain
const vectorStore = new MemoryVectorStore(embeddings);
MongoDB
Manual embedding
npm install @langchain/mongodb mongodb @langchain/core
yarn add @langchain/mongodb mongodb @langchain/core
pnpm add @langchain/mongodb mongodb @langchain/core
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",
});
Automated embedding
npm install @langchain/mongodb mongodb @langchain/core
yarn add @langchain/mongodb mongodb @langchain/core
pnpm add @langchain/mongodb mongodb @langchain/core
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/pinecone
yarn add @langchain/pinecone @langchain/core @pinecone-database/pinecone
pnpm add @langchain/pinecone @langchain/core @pinecone-database/pinecone
const pinecone = new PineconeClient();
const vectorStore = new PineconeStore(embeddings, {
pineconeIndex,
maxConcurrency: 5,
});
Redis
npm install @langchain/redis @langchain/core redis
yarn add @langchain/redis @langchain/core redis
pnpm add @langchain/redis @langchain/core redis
const vectorStore = new RedisVectorStore(embeddings, {
redisClient: client,
indexName: "langchainjs-testing",
});
Qdrant
npm install @langchain/qdrant @langchain/core
yarn add @langchain/qdrant @langchain/core
pnpm add @langchain/qdrant @langchain/core
const vectorStore = await QdrantVectorStore.fromExistingCollection(embeddings, {
url: process.env.QDRANT_URL,
collectionName: "langchainjs-testing",
});
Oracle AI Database
npm i @oracle/langchain-oracledb @langchain/core
yarn add @oracle/langchain-oracledb @langchain/core
pnpm add @oracle/langchain-oracledb @langchain/core
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-client
yarn add @langchain/weaviate @langchain/core weaviate-client
pnpm add @langchain/weaviate @langchain/core weaviate-client
const vectorStore = new WeaviateStore(embeddings, {
client: weaviateClient,
indexName: "Langchainjs_test",
});
LangChain.js 与多种向量存储集成。您可以在下面查看完整列表: