6.3 Spring AI OpenAI 转录

15 阅读4分钟

Spring AI OpenAI 转录

OpenAI 转录

Spring AI 支持 OpenAI 的转录模型

前提条件

您需要创建一个 OpenAI API 密钥来访问 ChatGPT 模型。

OpenAI 注册页面 创建账户,并在 API Keys 页面 生成令牌。Spring AI 项目定义了一个名为 spring.ai.openai.api-key 的配置属性,您应该将其设置为从 openai.com 获取的 API Key 的值。导出环境变量是设置该配置属性的一种方法:

自动配置

注意 Spring AI 自动配置、启动器模块的构件名称发生了重大变化。请参考升级说明了解更多信息。

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

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

或添加到您的 Gradle build.gradle 构建文件中。

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

提示 参考依赖管理部分,将 Spring AI BOM 添加到您的构建文件中。

转录属性

连接属性

前缀 spring.ai.openai 用作连接到 OpenAI 的属性前缀。

属性描述默认值
spring.ai.openai.base-url要连接的 URLapi.openai.com
spring.ai.openai.api-keyAPI 密钥-
spring.ai.openai.organization-id可选择地,您可以指定用于 API 请求的组织。-
spring.ai.openai.project-id可选择地,您可以指定用于 API 请求的项目。-

提示 对于属于多个组织的用户(或通过其旧版用户 API 密钥访问其项目),可选择地,您可以指定用于 API 请求的组织和项目。这些 API 请求的使用将计为指定组织和项目的使用量。

配置属性

注意 音频转录自动配置的启用和禁用现在通过前缀为 spring.ai.model.audio.transcription 的顶级属性配置。

要启用,设置 spring.ai.model.audio.transcription=openai(默认启用)

要禁用,设置 spring.ai.model.audio.transcription=none(或任何不匹配 openai 的值)

进行此更改是为了允许配置多个模型。

前缀 spring.ai.openai.audio.transcription 用作配置 OpenAI 转录模型重试机制的属性前缀。

属性描述默认值
spring.ai.model.audio.transcription启用 OpenAI 音频转录模型openai
spring.ai.openai.audio.transcription.base-url要连接的 URLapi.openai.com
spring.ai.openai.audio.transcription.api-keyAPI 密钥-
spring.ai.openai.audio.transcription.organization-id可选择地,您可以指定用于 API 请求的组织。-
spring.ai.openai.audio.transcription.project-id可选择地,您可以指定用于 API 请求的项目。-
spring.ai.openai.audio.transcription.options.model要使用的模型 ID。目前只有 whisper-1(由我们的开源 Whisper V2 模型提供支持)。whisper-1
spring.ai.openai.audio.transcription.options.response-format转录输出的格式,在这些选项之一:json、text、srt、verbose_json 或 vtt。json
spring.ai.openai.audio.transcription.options.prompt用于引导模型风格或继续之前音频片段的可选文本。提示应匹配音频语言。-
spring.ai.openai.audio.transcription.options.language输入音频的语言。以 ISO-639-1 格式提供输入语言将提高准确性和延迟。-
spring.ai.openai.audio.transcription.options.temperature采样温度,在 0 和 1 之间。较高的值如 0.8 将使输出更随机,而较低的值如 0.2 将使其更专注和确定性。如果设置为 0,模型将使用对数概率自动增加温度,直到达到特定阈值。0
spring.ai.openai.audio.transcription.options.timestamp_granularities要为此转录填充的时间戳粒度。response_format 必须设置为 verbose_json 才能使用时间戳粒度。支持这些选项中的一个或两个:word 或 segment。注意:segment 时间戳没有额外延迟,但生成 word 时间戳会产生额外延迟。segment

注意 您可以覆盖通用的 spring.ai.openai.base-urlspring.ai.openai.api-keyspring.ai.openai.organization-idspring.ai.openai.project-id 属性。如果设置了 spring.ai.openai.audio.transcription.base-urlspring.ai.openai.audio.transcription.api-keyspring.ai.openai.audio.transcription.organization-idspring.ai.openai.audio.transcription.project-id 属性,它们将优先于通用属性。如果您想为不同的模型和不同的模型端点使用不同的 OpenAI 账户,这很有用。

提示 所有以 spring.ai.openai.transcription.options 为前缀的属性都可以在运行时覆盖。

运行时选项

OpenAiAudioTranscriptionOptions 类提供进行转录时要使用的选项。在启动时,使用 spring.ai.openai.audio.transcription 指定的选项,但您可以在运行时覆盖它们。

例如:

OpenAiAudioApi.TranscriptResponseFormat responseFormat = OpenAiAudioApi.TranscriptResponseFormat.VTT;

OpenAiAudioTranscriptionOptions transcriptionOptions = OpenAiAudioTranscriptionOptions.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 = openAiTranscriptionModel.call(this.transcriptionRequest);

手动配置

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

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

或添加到您的 Gradle build.gradle 构建文件中。

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

提示 参考依赖管理部分,将 Spring AI BOM 添加到您的构建文件中。

接下来,创建一个 OpenAiAudioTranscriptionModel

var openAiAudioApi = new OpenAiAudioApi(System.getenv("OPENAI_API_KEY"));

var openAiAudioTranscriptionModel = new OpenAiAudioTranscriptionModel(this.openAiAudioApi);

var transcriptionOptions = OpenAiAudioTranscriptionOptions.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 = openAiTranscriptionModel.call(this.transcriptionRequest);

示例代码