概述
嵌入模型将原始文本(如句子、段落或推文)转换为固定长度的数字向量,以捕获其 **语义含义**。这些向量使机器能够根据含义而非精确词汇来比较和搜索文本。
实际上,这意味着语义相近的文本在向量空间中会彼此靠近。例如,不仅匹配短语 *"机器学习"*,嵌入还能找到使用不同措辞但讨论相关概念的文档。
工作原理
- **向量化** — 模型将每个输入字符串编码为高维向量。
- **相似度评分** — 使用数学度量比较向量,以衡量底层文本之间的关联程度。
相似度度量
几种常用度量用于比较嵌入:
- * **余弦相似度** — 测量两个向量之间的角度。
- * **欧几里得距离** — 测量点与点之间的直线距离。
- * **点积** — 测量一个向量在另一个向量上的投影量。
接口
LangChain 通过 Embeddings 接口为文本嵌入模型(如 OpenAI、Cohere、Hugging Face)提供标准接口。
提供两个主要方法:
- *
embedDocuments(documents: string[]) → number[][]:嵌入文档列表。 - *
embedQuery(text: string) → number[]:嵌入单个查询。
安装和使用
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 install @langchain/aws @langchain/core
yarn add @langchain/aws @langchain/core
pnpm add @langchain/aws @langchain/core
添加环境变量:
BEDROCK_AWS_REGION=your-region
实例化模型:
const embeddings = new BedrockEmbeddings({
model: "amazon.titan-embed-text-v1"
});
Google Gemini
安装依赖:
npm install @langchain/google-genai @langchain/core
yarn add @langchain/google-genai @langchain/core
pnpm add @langchain/google-genai @langchain/core
添加环境变量:
GOOGLE_API_KEY=your-api-key
实例化模型:
const embeddings = new GoogleGenerativeAIEmbeddings({
model: "text-embedding-004"
});
Google Vertex
安装依赖:
npm install @langchain/google-vertexai @langchain/core
yarn add @langchain/google-vertexai @langchain/core
pnpm add @langchain/google-vertexai @langchain/core
添加环境变量:
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 install @langchain/cohere @langchain/core
yarn add @langchain/cohere @langchain/core
pnpm add @langchain/cohere @langchain/core
添加环境变量:
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
});
缓存
嵌入可以存储或临时缓存,以避免需要重新计算它们。
可以使用以下方式缓存嵌入 CacheBackedEmbeddings。此包装器将嵌入存储在键值存储中,其中文本被哈希化,哈希值用作缓存中的键。
初始化 CacheBackedEmbeddings is fromBytesStore的主要支持方式是。它采用以下参数:
- underlyingEmbeddings:要用于嵌入的嵌入器。
- documentEmbeddingStore:任何
BaseStore用于缓存文档嵌入。 - options.namespace:(可选,默认为
"")用于文档缓存的命名空间。有助于避免冲突(例如,将其设置为嵌入模型名称)。 - - 始终设置
namespace参数,以避免使用不同嵌入模型时发生冲突。 - -
CacheBackedEmbeddings默认不缓存查询嵌入。要启用此功能,请指定一个query_embedding_store.
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`);
在生产环境中,您通常会使用更可靠的持久存储,如数据库或云存储。请参阅 存储集成 以获取选项。