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 endpoint
和 api-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.model
为 spring.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 Milestone
和 Snapshot
存储库中。请参阅存储库部分将这些存储库添加到您的构建系统中。
为了帮助进行依赖管理,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-31 23:07