主题
概述
本概述涵盖基于文本的嵌入模型。LangChain 目前暂不支持多模态嵌入。
嵌入模型将原始文本(例如句子、段落或推文)转换为固定长度的数字向量,该向量捕获了文本的语义含义。这些向量使得机器能够基于含义而非精确的词语来比较和搜索文本。
在实践中,这意味着具有相似思想的文本在向量空间中被放置在相近的位置。例如,嵌入不仅可以匹配短语 "机器学习",还可以检索出讨论相关概念的文档,即使这些文档使用了不同的措辞。
工作原理
- 向量化 — 模型将每个输入字符串编码为一个高维向量。
- 相似性评分 — 使用数学度量来比较向量,以衡量底层文本的关联紧密程度。
相似性度量
通常使用以下几种度量来比较嵌入:
- 余弦相似度 — 测量两个向量之间的夹角。
- 欧几里得距离 — 测量点之间的直线距离。
- 点积 — 测量一个向量在另一个向量上的投影程度。
接口
LangChain 通过 Embeddings 接口为文本嵌入模型(例如 OpenAI、Cohere、Hugging Face)提供了一个标准接口。
主要提供两个方法:
embedDocuments(documents: string[]) → number[][]:嵌入一个文档列表。embedQuery(text: string) → number[]:嵌入单个查询。
该接口允许查询和文档使用不同的策略进行嵌入,尽管在实践中大多数提供商以相同的方式处理它们。
安装与使用
OpenAI
安装依赖:
bash
npm i @langchain/openaibash
yarn add @langchain/openaibash
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/openaibash
yarn add @langchain/openaibash
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/awsbash
yarn add @langchain/awsbash
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-genaibash
yarn add @langchain/google-genaibash
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-vertexaibash
yarn add @langchain/google-vertexaibash
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/mistralaibash
yarn add @langchain/mistralaibash
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/coherebash
yarn add @langchain/coherebash
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/ollamabash
yarn add @langchain/ollamabash
pnpm add @langchain/ollama实例化模型:
typescript
import { OllamaEmbeddings } from "@langchain/ollama";
const embeddings = new OllamaEmbeddings({
model: "llama2",
baseUrl: "http://localhost:11434", // 默认值
});缓存
嵌入可以被存储或临时缓存,以避免重复计算。
可以使用 CacheBackedEmbeddings 来缓存嵌入。这个包装器将嵌入存储在键值存储中,其中文本被哈希处理,哈希值用作缓存中的键。
初始化 CacheBackedEmbeddings 的主要支持方式是 fromBytesStore。它接受以下参数:
- underlyingEmbeddings:用于嵌入的底层嵌入器。
- documentEmbeddingStore:用于缓存文档嵌入的任何
BaseStore。 - options.namespace:(可选,默认为
"")用于文档缓存的命名空间。有助于避免冲突(例如,将其设置为嵌入模型名称)。
typescript
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`);在生产环境中,您通常会使用更健壮的持久化存储,例如数据库或云存储。请参阅存储集成了解相关选项。
所有集成
Alibaba Tongyi
查看指南 →
Azure OpenAI
查看指南 →
Baidu Qianfan
查看指南 →
Amazon Bedrock
查看指南 →
ByteDance Doubao
查看指南 →
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
查看指南 →
OpenAI
查看指南 →
Pinecone
查看指南 →
Prem AI
查看指南 →
Tencent Hunyuan
查看指南 →
TensorFlow
查看指南 →
TogetherAI
查看指南 →
HuggingFace Transformers
查看指南 →
Voyage AI
查看指南 →
ZhipuAI
查看指南 →