跳到主要内容

概览

本概述涵盖了基于文本的嵌入模型。LangChain 目前不支持多模态嵌入。
嵌入模型将原始文本(例如句子、段落或推文)转换为固定长度的数字向量,捕捉其语义含义。这些向量允许机器根据含义而非确切单词来比较和搜索文本。 实际上,这意味着具有相似思想的文本在向量空间中彼此靠近。例如,嵌入模型不仅可以匹配短语“机器学习”,还可以找出讨论相关概念的文档,即使使用了不同的措辞。

工作原理

  1. 向量化 — 模型将每个输入字符串编码为高维向量。
  2. 相似性评分 — 使用数学度量比较向量,以衡量底层文本的相关程度。

相似性度量

通常使用多种度量来比较嵌入
  • 余弦相似度 — 测量两个向量之间的角度。
  • 欧几里得距离 — 测量点之间的直线距离。
  • 点积 — 测量一个向量在另一个向量上的投影量。

接口

LangChain 通过 Embeddings 接口为文本嵌入模型(例如 OpenAI、Cohere、Hugging Face)提供了标准接口。 主要有两种方法可用:
  • embedDocuments(documents: string[]) → number[][]:嵌入文档列表。
  • embedQuery(text: string) → number[]:嵌入单个查询。
该接口允许使用不同的策略嵌入查询和文档,尽管大多数提供商在实践中以相同的方式处理它们。

安装和使用

安装依赖项
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
});

缓存

嵌入可以存储或暂时缓存,以避免需要重新计算。 缓存嵌入可以使用 CacheBackedEmbeddings 来完成。此包装器将嵌入存储在键值存储中,其中文本被哈希,哈希用作缓存中的键。 初始化 CacheBackedEmbeddings 的主要支持方式是 fromBytesStore。它接受以下参数:
  • underlyingEmbeddings:用于嵌入的嵌入器。
  • documentEmbeddingStore:任何用于缓存文档嵌入的BaseStore
  • options.namespace:(可选,默认为"")用于文档缓存的命名空间。有助于避免冲突(例如,将其设置为嵌入模型名称)。
import { CacheBackedEmbeddings } from "@langchain/classic/embeddings/cache_backed";
import { InMemoryStore } from "@langchain/core/stores";

const underlyingEmbeddings = new OpenAIEmbeddings();

const inMemoryStore = new InMemoryStore();

const cacheBackedEmbeddings = CacheBackedEmbeddings.fromBytesStore(
  underlyingEmbeddings,
  inMemoryStore,
  {
    namespace: underlyingEmbeddings.model,
  }
);

// Example: caching a query embedding
const tic = Date.now();
const queryEmbedding = cacheBackedEmbeddings.embedQuery("Hello, world!");
console.log(`First call took: ${Date.now() - tic}ms`);

// Example: caching a document embedding
const tic = Date.now();
const documentEmbedding = cacheBackedEmbeddings.embedDocuments(["Hello, world!"]);
console.log(`Cached creation time: ${Date.now() - tic}ms`);
在生产环境中,您通常会使用更强大的持久化存储,例如数据库或云存储。有关选项,请参阅存储集成

所有集成


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