Lzh on GitHub

OpenAI Transcriptions

Spring AI 支持 OpenAI 的转录模型。

Spring AI 支持 OpenAI 的转录模型

前置条件

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

自动配置

Spring AI 的自动配置及启动模块的 artifact 名称已发生重大变化,详细信息请参考 升级说明

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 Key-
spring.ai.openai.organization-id可选,指定用于 API 请求的组织-
spring.ai.openai.project-id可选,指定用于 API 请求的项目-
对于属于多个组织的用户(或通过旧版用户 API Key 访问项目的用户),可以指定 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 Key-
spring.ai.openai.audio.transcription.organization-id可选,指定用于 API 请求的组织-
spring.ai.openai.audio.transcription.project-id可选,指定用于 API 请求的项目-
spring.ai.openai.audio.transcription.options.model转录模型 ID,可选模型:gpt-4o-transcribe(GPT-4o 语音转文本)、gpt-4o-mini-transcribe(GPT-4o mini 语音转文本)、whisper-1(通用语音识别模型,默认)whisper-1
spring.ai.openai.audio.transcription.options.response-format转录输出格式,可选:json、text、srt、verbose_json 或 vttjson
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.audio.transcription.options 为前缀的属性都可以在运行时覆盖。

运行时选项

OpenAiAudioTranscriptionOptions 类提供了进行音频转录时可使用的配置选项。在应用启动时,会使用 spring.ai.openai.audio.transcription 中指定的选项,但你可以在运行时覆盖这些选项。

例如:

// 设置转录输出格式为 VTT
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 示例:

// 创建 OpenAI 音频 API 客户端
var openAiAudioApi = new OpenAiAudioApi(System.getenv("OPENAI_API_KEY"));

// 创建 OpenAI 音频转录模型
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 = openAiAudioTranscriptionModel.call(this.transcriptionRequest);

此示例展示了如何初始化 OpenAI 音频转录模型、设置自定义转录选项,并对音频文件进行文本转录。

示例代码

OpenAiTranscriptionModelIT.java 测试提供了一些使用该库的通用示例。