跳到主要内容
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/openaiNPM - DownloadsNPM - Version

设置

要访问 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 install @langchain/openai @langchain/core
您可以在 Azure OpenAI 文档中找到支持的 API 版本列表。
如果未定义 AZURE_OPENAI_API_EMBEDDINGS_DEPLOYMENT_NAME,它将回退到 AZURE_OPENAI_API_DEPLOYMENT_NAME 的值作为部署名称。同样,AzureOpenAIEmbeddings 构造函数中的 azureOpenAIApiEmbeddingsDeploymentName 参数,如果未定义,也将回退到 azureOpenAIApiDeploymentName 的值。

## Instantiation

Now we can instantiate our model object and embed text:

```typescript
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/classic/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 迁移

如果您正在使用带有 @langchain/azure-openai 包的已弃用 Azure OpenAI SDK,您可以按照以下步骤更新您的代码以使用新的 Azure 集成
  1. 安装新的 @langchain/openai 包并删除以前的 @langchain/azure-openai
    npm
    npm install @langchain/openai
    npm uninstall @langchain/azure-openai
    
  2. 更新您的导入以使用 @langchain/openai 包中的新 AzureOpenAIEmbeddings
    import { AzureOpenAIEmbeddings } from "@langchain/openai";
    
  3. 更新您的代码以使用新的 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 参考
以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。
© . This site is unofficial and not affiliated with LangChain, Inc.