以编程方式使用文档

概述

嵌入模型将原始文本(如句子、段落或推文)转换为固定长度的数字向量,以捕获其 **语义含义**。这些向量使机器能够根据含义而非精确词汇来比较和搜索文本。

实际上,这意味着语义相近的文本在向量空间中会彼此靠近。例如,不仅匹配短语 *"机器学习"*,嵌入还能找到使用不同措辞但讨论相关概念的文档。

工作原理

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

相似度度量

几种常用度量用于比较嵌入:

  • * **余弦相似度** — 测量两个向量之间的角度。
  • * **欧几里得距离** — 测量点与点之间的直线距离。
  • * **点积** — 测量一个向量在另一个向量上的投影量。

接口

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`);

在生产环境中,您通常会使用更可靠的持久存储,如数据库或云存储。请参阅 存储集成 以获取选项。

所有集成

Azure OpenAI

百度千帆

Amazon Bedrock

Cloudflare Workers AI

Cohere

Google 生成式 AI

Google Vertex AI

MistralAI

Mixedbread AI

Nomic

Ollama

Oracle AI Database

OpenAI

Pinecone

Fireworks

IBM watsonx.ai

TogetherAI