Skip to main content

概述

本概述涵盖基于文本的嵌入模型。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: "http://localhost:11434", // 默认值
});

缓存

嵌入可以存储或临时缓存,以避免重新计算。 可以使用 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,
  }
);

// 示例:缓存查询嵌入
const tic = Date.now();
const queryEmbedding = cacheBackedEmbeddings.embedQuery("Hello, world!");
console.log(`First call took: ${Date.now() - tic}ms`);

// 示例:缓存文档嵌入
const tic = Date.now();
const documentEmbedding = cacheBackedEmbeddings.embedDocuments(["Hello, world!"]);
console.log(`Cached creation time: ${Date.now() - tic}ms`);
在生产环境中,通常会使用更强大的持久存储,例如数据库或云存储。请参阅 stores 集成 了解选项。

所有集成

阿里云通义

Azure OpenAI

百度千帆

Amazon Bedrock

字节跳动豆包

Cloudflare Workers AI

Cohere

DeepInfra

Fireworks

Google Generative AI

Google Vertex AI

Gradient AI

HuggingFace Inference

IBM watsonx.ai

Jina

Llama CPP

Minimax

MistralAI

Mixedbread AI

Nomic

Ollama

Oracle AI Database

OpenAI

Pinecone

Prem AI

腾讯混元

TensorFlow

TogetherAI

HuggingFace Transformers

Voyage AI

智谱AI