Azure OpenAI Transcriptions

Azure 的 OpenAI 产品由 ChatGPT 提供支持,超越了传统的 OpenAI 功能,提供具有增强功能的 AI 驱动的文本生成。 Azure 提供了额外的 AI 安全和负责任的 AI 功能,正如其最近更新中所强调的那样。

Azure 为 Java 开发人员提供了通过将 AI 与一系列 Azure 服务集成来充分发挥 AI 潜力的机会,其中包括与 AI 相关的资源,例如 Azure 上的 Vector Stores。

前提条件(Prerequisites)

Azure OpenAI 客户端提供三种连接选项:使用 Azure API 密钥使用 OpenAI API 密钥使用 Microsoft Entra ID

Azure API Key & EndpointAzure API

若要使用 API 密钥访问模型,请从 Azure 门户 上的 Azure OpenAI 服务 获取你的 Azure OpenAI endpointapi-key

Spring AI 定义了两个配置属性:

  • spring.ai.azure.openai.api-key: 将其设置为从 Azure 获取的 API Key 的值。
  • spring.ai.azure.openai.endpoint: 将此设置为在 Azure 中预配模型时获得的 endpoint URL。

可以在 application.properties 或 application.yml 文件中设置这些配置属性:

spring.ai.azure.openai.api-key=<your-azure-api-key>
spring.ai.azure.openai.endpoint=<your-azure-endpoint-url>

为了提高处理 API 密钥等敏感信息时的安全性,可以使用 Spring 表达式语言 (SpEL) 来引用自定义环境变量:

# In application.yml
spring:
  ai:
    azure:
      openai:
        api-key: ${AZURE_OPENAI_API_KEY}
        endpoint: ${AZURE_OPENAI_ENDPOINT}
# In your environment or .env file
export AZURE_OPENAI_API_KEY=<your-azure-openai-api-key>
export AZURE_OPENAI_ENDPOINT=<your-azure-openai-endpoint-url>

OpenAI 密钥

要使用 OpenAI 服务 (而不是 Azure) 进行身份验证,请提供一个 OpenAI API 密钥。这将自动将端点设置为 api.openai.com/v1 。

使用这种方法时,将spring.ai.azure.openai.chat.options.deployment-name 属性设置为要使用的 OpenAI 模型的名称。

spring.ai.azure.openai.openai-api-key=<your-azure-openai-key>
spring.ai.azure.openai.chat.options.deployment-name=<openai-model-name>

在 SpEL 中使用环境变量:

# In application.yml
spring:
  ai:
    azure:
      openai:
        openai-api-key: ${AZURE_OPENAI_API_KEY}
        chat:
          options:
            deployment-name: ${AZURE_OPENAI_MODEL_NAME}
# In your environment or .env file
export AZURE_OPENAI_API_KEY=<your-openai-key>
export AZURE_OPENAI_MODEL_NAME=<openai-model-name>

Microsoft Entra ID

对于使用 Microsoft Entra ID (以前称为 Azure Active Directory) 的无密钥身份验证,请仅设置 spring.ai.azure.openai.endpoint 配置属性,而不要设置上述 api-key 属性。

只找到 endpoint 属性,应用程序将评估几个不同的凭据检索选项,并使用令牌凭据创建 OpenAIClient 实例。

部署名称(Deployment Name)

要运行 Azure AI 应用程序, 需要通过 Azure AI Portal 创建一个 Azure AI Deployment .

要使用 Azure AI 应用程序,需要通过 Azure AI 门户创建 Azure AI 部署。在 Azure 中,每个客户端必须指定一个Deployment Name 来连接 Azure OpenAI 服务。需要注意的是,部署名称与您选择部署的模型不同。例如,可以将名为 “MyAiDeployment” 的部署配置为使用 GPT 3.5 Turbo 模型或 GPT 4.0 模型。

要开始,请按照以下步骤创建具有默认设置的部署:

Deployment Name: `gpt-4o`
Model Name: `gpt-4o`

此 Azure 配置将与 Spring Boot Azure AI Starter 及其自动配置功能的默认配置保持一致。

如果您使用不同的部署名称,请相应地更新配置属性:

spring.ai.azure.openai.chat.options.deployment-name=<my deployment name>

Azure OpenAI 和 OpenAI 的不同部署结构导致 Azure OpenAI 客户端库中有一个名为 deploymentOrModelName 的参数 .这是因为在 OpenAI 中没有Deployment Name,只有 Model Name.

在后续版本中,Spring AI 将该属性重命名 spring.ai.azure.openai.chat.options.modelspring.ai.azure.openai.chat.options.deployment-name 以避免混淆。

访问 OpenAI 模型

您可以将客户端配置为直接使用 OpenAI, 而不是使用 Azure OpenAI 部署的模型。为此,您需要设置 spring.ai.azure.openai.openai-api-key=<Your OpenAI Key>, 而不是 spring.ai.azure.openai.api-key=<Your Azure OpenAI Key>

添加存储库和 BOM

Spring AI 工件发布在 Spring MilestoneSnapshot 存储库中。请参阅存储库部分将这些存储库添加到您的构建系统中。

为了帮助进行依赖管理,Spring AI 提供了 BOM(物料清单),以确保在整个项目中使用一致的 Spring AI 版本。请参阅依赖管理部分将 Spring AI BOM 添加到您的构建系统。

自动配置(Auto-configuration)

Spring AI 为 Azure OpenAI 聊天客户端提供 Spring Boot 自动配置。要启用它,请将以下依赖项添加到项目的 Maven pom.xml 文件中:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-model-azure-openai</artifactId>
</dependency>

或者,在你的 Gradle 构建文件 build.gradle 中添加:

dependencies {
    implementation 'org.springframework.ai:spring-ai-starter-model-azure-openai'
}

Azure OpenAI 聊天客户端是使用 Azure SDK 提供的 OpenAIClientBuilder 创建的。Spring AI 允许通过提供 AzureOpenAIClientBuilderCustomer Bean 来自定义构建器。

例如,可以使用自定义程序来更改默认响应超时:

@Configuration
public class AzureOpenAiConfig {

    @Bean
    public AzureOpenAIClientBuilderCustomizer responseTimeoutCustomizer() {
        return openAiClientBuilder -> {
            HttpClientOptions clientOptions = new HttpClientOptions()
                    .setResponseTimeout(Duration.ofMinutes(5));
            openAiClientBuilder.httpClient(HttpClient.createDefault(clientOptions));
        };
    }

}

自动配置(Auto-configuration)

Spring AI 为 Azure OpenAI 嵌入模型提供了 Spring Boot 自动配置。要启用此功能,请将以下依赖项添加到项目的 Maven pom.xml 文件中:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-model-azure-openai</artifactId>
</dependency>

或者,在你的 Gradle 构建文件 build.gradle 中添加:

dependencies {
    implementation 'org.springframework.ai:spring-ai-starter-model-azure-openai'
}

转录属性(Transcription Properties)

前缀 spring.ai.openai.audio.transcription 是用于配置 OpenAI 的 ImageModel 实现的属性前缀。

属性 描述 默认值
spring.ai.azure.openai.audio.transcription.enabled (已移除且不再有效) 启用Azure OpenAI语音转录模型 true
spring.ai.model.audio.transcription 启用Azure OpenAI语音转录模型 azure-openai
spring.ai.azure.openai.audio.transcription.options.model 使用的模型ID(目前仅支持whisper) whisper
spring.ai.azure.openai.audio.transcription.options.deployment-name 模型部署的名称
spring.ai.azure.openai.audio.transcription.options.response-format 转录输出格式(json、text、srt、verbose_json或vtt) json
spring.ai.azure.openai.audio.transcription.options.prompt 可选文本,用于指导模型风格或继续之前的音频片段(应与音频语言匹配)
spring.ai.azure.openai.audio.transcription.options.language 输入音频的语言(以ISO-639-1格式提供可提高准确性和降低延迟)
spring.ai.azure.openai.audio.transcription.options.temperature 采样温度(0-1),值越高输出越随机,值越低越专注和确定。设为0时模型使用对数概率自动调整温度 0
spring.ai.azure.openai.audio.transcription.options.timestamp-granularities 时间戳粒度(word或segment),response_format必须为verbose_json。词级时间戳会产生额外延迟 segment
连接属性(Connection Properties)

前缀是 spring.ai.azure.openai 的属性,用于配置 Azure OpenAI 的 链接。

属性 描述 默认值
spring.ai.azure.openai.api-key 从Azure AI OpenAI的Keys and Endpoint部分(在Resource Management下)获取的密钥 -
spring.ai.azure.openai.endpoint 从Azure AI OpenAI的Keys and Endpoint部分(在Resource Management下)获取的端点 -

运行时选项(Runtime Options )

AzureOpenAiAudioTranscriptionOptions 类提供了进行转录时可使用的选项。在启动时,系统会采用 spring.ai.azure.openai.audio.transcription 指定的配置,但您可以在运行时覆盖这些设置。

请使用以下代码示例:

AzureOpenAiAudioTranscriptionOptions.TranscriptResponseFormat responseFormat = AzureOpenAiAudioTranscriptionOptions.TranscriptResponseFormat.VTT;

AzureOpenAiAudioTranscriptionOptions transcriptionOptions = AzureOpenAiAudioTranscriptionOptions.builder()
    .language("en")
    .prompt("Ask not this, but ask that")
    .temperature(0f)
    .responseFormat(this.responseFormat)
    .build();
AudioTranscriptionPrompt transcriptionRequest = new AudioTranscriptionPrompt(audioFile, this.transcriptionOptions);
AudioTranscriptionResponse response = azureOpenAiTranscriptionModel.call(this.transcriptionRequest);

手动配置(Manual Configuration)

添加 spring-ai-azure-openai 依赖到你的项目 Maven pom.xml 文件:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-azure-openai</artifactId>
</dependency>

或者,在你的 Gradle 构建文件 build.gradle 中添加:

dependencies {
    implementation 'org.springframework.ai:spring-ai-azure-openai'
}

接下来,创建一个 AzureOpenAiAudioTranscriptionModel 实例,并使用它音频转录:

var openAIClient = new OpenAIClientBuilder()
    .credential(new AzureKeyCredential(System.getenv("AZURE_OPENAI_API_KEY")))
    .endpoint(System.getenv("AZURE_OPENAI_ENDPOINT"))
    .buildClient();

var azureOpenAiAudioTranscriptionModel = new AzureOpenAiAudioTranscriptionModel(this.openAIClient, null);

var transcriptionOptions = AzureOpenAiAudioTranscriptionOptions.builder()
    .responseFormat(TranscriptResponseFormat.TEXT)
    .temperature(0f)
    .build();

var audioFile = new FileSystemResource("/path/to/your/resource/speech/jfk.flac");

AudioTranscriptionPrompt transcriptionRequest = new AudioTranscriptionPrompt(this.audioFile, this.transcriptionOptions);
AudioTranscriptionResponse response = this.azureOpenAiAudioTranscriptionModel.call(this.transcriptionRequest);
作者:Jeebiz  创建时间:2025-08-08 00:53
最后编辑:Jeebiz  更新时间:2025-08-31 23:07