AzureOpenAIEmbeddings
Azure OpenAI 是一项云服务,可帮助您通过 OpenAI、Meta 和其他公司提供的一系列预构建和精选模型,快速开发生成式 AI 体验。
LangChain.js 支持使用 OpenAI SDK 中的新 Azure 集成功能,与 Azure OpenAI 进行集成。
您可以在此页面了解更多有关 Azure OpenAI 及其与 OpenAI API 区别的信息。如果您还没有 Azure 帐户,可以创建一个免费帐户来开始使用。
这将帮助您使用 LangChain 开始使用 AzureOpenAIEmbeddings
嵌入模型。有关
AzureOpenAIEmbeddings 功能和配置选项的详细文档,请参阅 API
参考文档。
以前,LangChain.js 支持通过专用的 Azure OpenAI SDK 与 Azure OpenAI 集成。此 SDK 现已被弃用,取而代之的是 OpenAI SDK 中的新 Azure 集成,它允许在最新 OpenAI 模型和功能发布当天即可访问,并可在 OpenAI API 和 Azure OpenAI 之间无缝切换。
如果您正在使用已弃用的 SDK 与 Azure OpenAI 集成,请参阅迁移指南以更新到新 API。
概述
集成详情
| 类 | 包 | 本地支持 | Python 支持 | 包下载量 | 最新版本 |
|---|---|---|---|---|---|
| AzureOpenAIEmbeddings | @langchain/openai | ❌ | ✅ | ![]() | ![]() |
准备工作
要访问 Azure OpenAI 嵌入模型,您需要创建一个 Azure 帐户,获取一个 API
密钥,并安装 @langchain/openai 集成包。
凭据
您需要部署一个 Azure OpenAI 实例。您可以按照 此指南 在 Azure 门户中部署一个实例。
一旦您的实例运行起来,请确保您拥有实例的名称和密钥。您可以在 Azure 门户中实例的 “密钥和终结点” 部分下找到密钥。
如果您使用的是 Node.js,您可以定义以下环境变量以使用该服务:
AZURE_OPENAI_API_INSTANCE_NAME=<YOUR_INSTANCE_NAME>
AZURE_OPENAI_API_EMBEDDINGS_DEPLOYMENT_NAME=<YOUR_EMBEDDINGS_DEPLOYMENT_NAME>
AZURE_OPENAI_API_KEY=<YOUR_KEY>
AZURE_OPENAI_API_VERSION="2024-02-01"
如果您希望自动追踪您的模型调用,还可以取消以下 LangSmith API 密钥的注释:
# export LANGSMITH_TRACING="true"
# export LANGSMITH_API_KEY="your-api-key"
安装
LangChain AzureOpenAIEmbeddings 集成位于 @langchain/openai 包中:
:::提示 请参阅安装集成包的一般说明部分。 :::
- npm
- yarn
- pnpm
npm i @langchain/openai @langchain/core
yarn add @langchain/openai @langchain/core
pnpm add @langchain/openai @langchain/core
您可以在 Azure OpenAI 文档 中找到支持的 API 版本列表。
如果未定义 AZURE_OPENAI_API_EMBEDDINGS_DEPLOYMENT_NAME,则会回退到 AZURE_OPENAI_API_DEPLOYMENT_NAME 的值作为部署名称。对于 AzureOpenAIEmbeddings 构造函数中的 azureOpenAIApiEmbeddingsDeploymentName 参数,如果未定义,也会回退到 azureOpenAIApiDeploymentName 的值。
实例化
现在我们可以实例化我们的模型对象并嵌入文本:
import { AzureOpenAIEmbeddings } from "@langchain/openai";
const embeddings = new AzureOpenAIEmbeddings({
azureOpenAIApiKey: "<your_key>", // In Node.js defaults to process.env.AZURE_OPENAI_API_KEY
azureOpenAIApiInstanceName: "<your_instance_name>", // In Node.js defaults to process.env.AZURE_OPENAI_API_INSTANCE_NAME
azureOpenAIApiEmbeddingsDeploymentName: "<your_embeddings_deployment_name>", // In Node.js defaults to process.env.AZURE_OPENAI_API_EMBEDDINGS_DEPLOYMENT_NAME
azureOpenAIApiVersion: "<api_version>", // In Node.js defaults to process.env.AZURE_OPENAI_API_VERSION
maxRetries: 1,
});
索引与检索
嵌入模型通常用于检索增强生成(RAG)流程中,既用于数据索引,也用于后续的数据检索。有关更详细的说明,请参阅我们位于使用外部知识教程下的 RAG 教程。
下面展示如何使用我们前面初始化的 embeddings
对象进行数据索引和检索。在此示例中,我们将使用演示版
MemoryVectorStore
来索引和检索一个示例文档。
// Create a vector store with a sample text
import { MemoryVectorStore } from "langchain/vectorstores/memory";
const text =
"LangChain is the framework for building context-aware reasoning applications";
const vectorstore = await MemoryVectorStore.fromDocuments(
[{ pageContent: text, metadata: {} }],
embeddings
);
// Use the vector store as a retriever that returns a single document
const retriever = vectorstore.asRetriever(1);
// Retrieve the most similar text
const retrievedDocuments = await retriever.invoke("What is LangChain?");
retrievedDocuments[0].pageContent;
LangChain is the framework for building context-aware reasoning applications
直接使用
在底层,向量存储和检索器的实现分别通过调用
embeddings.embedDocument(...) 和 embeddings.embedQuery(...) 来为其在
fromDocuments 和检索器的 invoke 操作中使用的文本创建嵌入。
您可以直接调用这些方法,以用于您自己的使用场景。
嵌入单个文本
您可以使用 embedQuery
对查询进行嵌入以用于搜索。这将生成一个专门针对该查询的向量表示:
const singleVector = await embeddings.embedQuery(text);
console.log(singleVector.slice(0, 100));
[
-0.024253517, -0.0054218727, 0.048715446, 0.020580322, 0.03180832,
0.0028770117, -0.012367731, 0.037383243, -0.054915592, 0.032225136,
0.00825818, -0.023888804, -0.01184671, 0.012257014, 0.016294925,
0.009254632, 0.0051353113, -0.008889917, 0.016855022, 0.04207243,
0.00082589936, -0.011664353, 0.00818654, 0.029020859, -0.012335167,
-0.019603407, 0.0013945447, 0.05538451, -0.011625277, -0.008153976,
0.038607642, -0.03811267, -0.0074440846, 0.047647353, -0.00927417,
0.024201415, -0.0069230637, -0.008538228, 0.003910912, 0.052805457,
-0.023159374, 0.0014352495, -0.038659744, 0.017141584, 0.005587948,
0.007971618, -0.016920151, 0.06658646, -0.0016916894, 0.045667473,
-0.042202685, -0.03983204, -0.04160351, -0.011729481, -0.055905532,
0.012543576, 0.0038848612, 0.007919516, 0.010915386, 0.0033117384,
-0.007548289, -0.030427614, -0.041890074, 0.036002535, -0.023771575,
-0.008792226, -0.049444873, 0.016490309, -0.0060568666, 0.040196754,
0.014106638, -0.014575557, -0.0017356506, -0.011234511, -0.012517525,
0.008362384, 0.01253055, 0.036158845, 0.008297256, -0.0010908874,
-0.014888169, -0.020489143, 0.018965157, -0.057937514, -0.0037122732,
0.004402626, -0.00840146, 0.042984217, -0.04936672, -0.03714878,
0.004969236, 0.03707063, 0.015396165, -0.02055427, 0.01988997,
0.030219207, -0.021257648, 0.01340326, 0.003692735, 0.012595678
]
嵌入多个文本
您可以使用 embedDocuments
对多个文本进行索引嵌入。此方法的内部实现可能(但不一定)与嵌入查询的方式不同:
const text2 =
"LangGraph is a library for building stateful, multi-actor applications with LLMs";
const vectors = await embeddings.embedDocuments([text, text2]);
console.log(vectors[0].slice(0, 100));
console.log(vectors[1].slice(0, 100));
[
-0.024253517, -0.0054218727, 0.048715446, 0.020580322, 0.03180832,
0.0028770117, -0.012367731, 0.037383243, -0.054915592, 0.032225136,
0.00825818, -0.023888804, -0.01184671, 0.012257014, 0.016294925,
0.009254632, 0.0051353113, -0.008889917, 0.016855022, 0.04207243,
0.00082589936, -0.011664353, 0.00818654, 0.029020859, -0.012335167,
-0.019603407, 0.0013945447, 0.05538451, -0.011625277, -0.008153976,
0.038607642, -0.03811267, -0.0074440846, 0.047647353, -0.00927417,
0.024201415, -0.0069230637, -0.008538228, 0.003910912, 0.052805457,
-0.023159374, 0.0014352495, -0.038659744, 0.017141584, 0.005587948,
0.007971618, -0.016920151, 0.06658646, -0.0016916894, 0.045667473,
-0.042202685, -0.03983204, -0.04160351, -0.011729481, -0.055905532,
0.012543576, 0.0038848612, 0.007919516, 0.010915386, 0.0033117384,
-0.007548289, -0.030427614, -0.041890074, 0.036002535, -0.023771575,
-0.008792226, -0.049444873, 0.016490309, -0.0060568666, 0.040196754,
0.014106638, -0.014575557, -0.0017356506, -0.011234511, -0.012517525,
0.008362384, 0.01253055, 0.036158845, 0.008297256, -0.0010908874,
-0.014888169, -0.020489143, 0.018965157, -0.057937514, -0.0037122732,
0.004402626, -0.00840146, 0.042984217, -0.04936672, -0.03714878,
0.004969236, 0.03707063, 0.015396165, -0.02055427, 0.01988997,
0.030219207, -0.021257648, 0.01340326, 0.003692735, 0.012595678
]
[
-0.033366997, 0.010419146, 0.0118083665, -0.040441725, 0.0020355924,
-0.015808804, -0.023629595, -0.0066180876, -0.040004376, 0.020053642,
-0.0010797002, -0.03900105, -0.009956073, 0.0027896944, 0.003305828,
-0.034010153, 0.009833873, 0.0061164247, 0.022536227, 0.029147884,
0.017789727, 0.03182342, 0.010869357, 0.031849146, -0.028093107,
0.008283865, -0.0145610785, 0.01645196, -0.029430874, -0.02508313,
0.046178687, -0.01722375, -0.010046115, 0.013101112, 0.0044538635,
0.02197025, 0.03985002, 0.007955855, 0.0008819293, 0.012657333,
0.014368132, -0.014007963, -0.03722594, 0.031617608, -0.011570398,
0.039052505, 0.0020018267, 0.023706773, -0.0046950476, 0.056083307,
-0.08412496, -0.043425974, -0.015512952, 0.015950298, -0.03624834,
-0.0053317733, -0.037251666, 0.0046339477, 0.04193385, 0.023475237,
-0.021378545, 0.013699248, -0.026009277, 0.050757967, -0.0494202,
0.0007874656, -0.07208506, 0.015885983, -0.003259199, 0.015127057,
0.0068946453, -0.035373647, -0.005875241, -0.0032238255, -0.04185667,
-0.022047428, 0.0014326327, -0.0070940237, -0.0027864785, -0.016271876,
0.005097021, 0.034473225, 0.012361481, -0.026498076, 0.0067274245,
-0.026330855, -0.006132504, 0.008180959, -0.049368747, -0.032337945,
0.011049441, 0.00186194, -0.012097787, 0.01930758, 0.07059293,
0.029713862, 0.04337452, -0.0048461896, -0.019976463, 0.011473924
]
使用 Azure 托管标识
如果你正在使用 Azure 托管标识,可以按如下方式配置凭据:
import {
DefaultAzureCredential,
getBearerTokenProvider,
} from "@azure/identity";
import { AzureOpenAIEmbeddings } from "@langchain/openai";
const credentials = new DefaultAzureCredential();
const azureADTokenProvider = getBearerTokenProvider(
credentials,
"https://cognitiveservices.azure.com/.default"
);
const modelWithManagedIdentity = new AzureOpenAIEmbeddings({
azureADTokenProvider,
azureOpenAIApiInstanceName: "<your_instance_name>",
azureOpenAIApiEmbeddingsDeploymentName: "<your_embeddings_deployment_name>",
azureOpenAIApiVersion: "<api_version>",
});
使用不同的域名
如果你的实例托管在非默认的 openai.azure.com
域名下,则需要使用替代的环境变量 AZURE_OPENAI_BASE_PATH。
例如,以下是如何连接到域名
https://westeurope.api.microsoft.com/openai/deployments/{DEPLOYMENT_NAME}
的示例:
import { AzureOpenAIEmbeddings } from "@langchain/openai";
const embeddingsDifferentDomain = new AzureOpenAIEmbeddings({
azureOpenAIApiKey: "<your_key>", // In Node.js defaults to process.env.AZURE_OPENAI_API_KEY
azureOpenAIApiEmbeddingsDeploymentName: "<your_embedding_deployment_name>", // In Node.js defaults to process.env.AZURE_OPENAI_API_EMBEDDINGS_DEPLOYMENT_NAME
azureOpenAIApiVersion: "<api_version>", // In Node.js defaults to process.env.AZURE_OPENAI_API_VERSION
azureOpenAIBasePath:
"https://westeurope.api.microsoft.com/openai/deployments", // In Node.js defaults to process.env.AZURE_OPENAI_BASE_PATH
});
自定义头部
您可以通过传入 configuration 字段来指定自定义头部:
import { AzureOpenAIEmbeddings } from "@langchain/openai";
const embeddingsWithCustomHeaders = new AzureOpenAIEmbeddings({
azureOpenAIApiKey: "<your_key>",
azureOpenAIApiInstanceName: "<your_instance_name>",
azureOpenAIApiEmbeddingsDeploymentName: "<your_embeddings_deployment_name>",
azureOpenAIApiVersion: "<api_version>",
configuration: {
defaultHeaders: {
"x-custom-header": `SOME_VALUE`,
},
},
});
configuration 字段还接受官方 SDK 接受的其他 ClientOptions 参数。
注意: 目前无法通过此方式重写特定标头 api-key,它将传递
azureOpenAIApiKey 中的值。
从 Azure OpenAI SDK 迁移
如果您正在使用已弃用的 Azure OpenAI SDK 和 @langchain/azure-openai
包,您可以通过以下步骤将代码更新为使用新的 Azure 集成:
安装新的
@langchain/openai包,并移除之前的@langchain/azure-openai包:bash npm2yarn npm install @langchain/openai npm uninstall @langchain/azure-openai更新您的导入语句,使用
@langchain/openai包中的新AzureOpenAIEmbeddings类:import { AzureOpenAIEmbeddings } from "@langchain/openai";更新您的代码以使用新的
AzureOpenAIEmbeddings类并传入所需的参数:const model = new AzureOpenAIEmbeddings({
azureOpenAIApiKey: "<your_key>",
azureOpenAIApiInstanceName: "<your_instance_name>",
azureOpenAIApiEmbeddingsDeploymentName:
"<your_embeddings_deployment_name>",
azureOpenAIApiVersion: "<api_version>",
});请注意,现在构造函数需要
azureOpenAIApiInstanceName参数而不是azureOpenAIEndpoint参数,并新增了azureOpenAIApiVersion参数用于指定 API 版本。如果您之前使用的是 Azure 托管身份,现在需要改用构造函数中的
azureADTokenProvider参数代替credentials,更多细节请参见 Azure 托管身份 部分。如果您之前使用的是环境变量,现在需要设置
AZURE_OPENAI_API_INSTANCE_NAME环境变量代替AZURE_OPENAI_API_ENDPOINT,并新增AZURE_OPENAI_API_VERSION环境变量来指定 API 版本。
API 参考文档
有关 AzureOpenAIEmbeddings 所有功能和配置的详细文档,请访问 API 参考页面: https://api.js.langchain.com/classes/langchain_openai.AzureOpenAIEmbeddings.html
Related
- Embedding model conceptual guide
- Embedding model how-to guides

