-
概述
企业常常需要从各种类型的音频内容中提取有价值的数据,例如:将客户支持通话转录用于情感分析、为视频生成字幕,或整理会议纪要。然而,手动转录音频文件既耗时又昂贵。
为了解决这一问题,OpenAI 提供了强大的语音转文字模型,能够准确地将多种语言的音频文件转录为文本。
在本教程中,我们将学习如何使用 Spring AI 搭配 OpenAI 的语音转文字模型来转录音频文件。
要完成本教程,需要一个 OpenAI 的 API 密钥。
2.项目搭建
在开始实现我们的音频转录功能之前,我们需要引入必要的依赖项,并正确配置我们的应用程序。
2.1. 依赖项
我们首先需要在项目的 pom.xml
文件中添加 Spring AI 提供的 OpenAI Starter 依赖项:
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId><version>1.0.0-M7</version>
</dependency>
由于当前版本 1.0.0-M7 是一个里程碑版本(Milestone Release),我们还需要在 pom.xml
中添加 Spring 的 Milestones 仓库:
<repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository>
</repositories>
该仓库用于发布里程碑版本,而不是标准的 Maven Central 仓库。
2.2. 配置 OpenAI 属性
接下来,我们将在 application.yaml
文件中配置 OpenAI 的 API 密钥和语音转文字模型:
spring:ai:openai:api-key: ${OPENAI_API_KEY}audio:transcription:options:model: whisper-1language: en
在这里,我们通过模型 whisper-1
指定使用 OpenAI 的 Whisper 模型。需要注意的是,OpenAI还提供了更高级、质量更高的语音转文字模型,如gpt-4o-transcribe
和 gpt-4o-mini-transcribe
,
但当前版本的 Spring AI 尚不支持它们。
此外,我们还指定了音频文件的语言为en
(英语)。当然,也可以根据需求,使用 ISO-639-1 格式指定其他输入语言。如果未指定语言,所选模型会自动尝试识别音频中的语言。
配置好上述属性后,Spring AI 会自动创建一个类型为
OpenAiAudioTranscriptionModel
的Bean,使我们可以与所选模型进行交互。
3. 构建音频转录器
配置完成后,我们将创建一个AudioTranscriber服务类。我们会注入 Spring AI 自动为我们创建的
OpenAiAudioTranscriptionModel
Bean。
但在此之前,先定义两个简单的 record
类型,用于表示请求和响应的数据结构:
record TranscriptionRequest(MultipartFile audioFile, @Nullable String context) {}record TranscriptionResponse(String transcription) {}
TranscriptionRequest
包含要转录的音频文件 audioFile
,以及一个可选的上下文context
,用于帮助模型更好地完成转录过程。需要注意的是,OpenAI当前支持的音频文件格式包括:mp3
、mp4
、mpeg
、mpga
、m4a
、wav
和 webm
。
同样地,TranscriptionResponse
用于简单地保存生成的转录文本。
现在,让我们实现预期的功能:
TranscriptionResponse transcribe(TranscriptionRequest transcriptionRequest) {AudioTranscriptionPrompt prompt = new AudioTranscriptionPrompt(transcriptionRequest.audioFile().getResource(),OpenAiAudioTranscriptionOptions.builder().prompt(transcriptionRequest.context()).build());AudioTranscriptionResponse response = openAiAudioTranscriptionModel.call(prompt);return new TranscriptionResponse(response.getResult().getOutput());
}
在这里,我们为 AudioTranscriber
类添加了一个新的 transcribe()
方法。
我们使用音频文件资源和可选的上下文提示,创建一个AudioTranscriptionPrompt对象。然后,通过它调用自动注入的
OpenAiAudioTranscriptionModel
Bean 的 call()
方法。
最后,我们从响应中提取转录后的文本,并将其包装在 TranscriptionResponse
记录类中返回。
目前,对于语音转文字模型,音频文件的大小限制为25MB。然而,Spring Boot 默认将上传文件的大小限制为 1MB。我们可以在
application.yaml
文件中增加这一限制:
spring:servlet:multipart:max-file-size: 25MBmax-request-size: 25MB
我们将最大文件大小和请求体大小都设置为25MB,这对于大多数音频转录请求来说应该已经足够。
4. 测试我们的音频转录器
现在我们已经实现了服务层,接下来我们来基于它暴露一个
REST API 接口:
@PostMapping("/transcribe")
ResponseEntity<TranscriptionResponse> transcribe(@RequestParam("audioFile") MultipartFile audioFile,@RequestParam("context") String context
) {TranscriptionRequest transcriptionRequest = new TranscriptionRequest(audioFile, context);TranscriptionResponse response = audioTranscriber.transcribe(transcriptionRequest);return ResponseEntity.ok(response);
}
我们用HTTPie去调用接口
http -f POST :8080/transcribe audioFile@××××-audio-description.mp3 context="Short description about Baeldung"
在这里,我们调用 /transcribe
API,发送音频文件及其上下文信息。为了演示,我们准备了一个简短的音频文件,存放在代码库的
src/test/resources/audio 文件夹中。让我们来看一下返回的响应内容:
{"transcription": "×××× is a top-notch educational platform that specializes in Java, Spring, and related technologies. It offers a wealth of tutorials, articles, and courses that help developers master programming concepts. Known for its clear examples and practical guides, Baeldung is a go-to resource for developers looking to level up their skills."
}
正如我们所见,API 返回了对所提供音频文件的正确转录内容。
5. 总结
本文介绍了如何在 Spring AI 中使用 OpenAI 进行音频文件转录。
我们详细讲解了所需的配置,并基于 OpenAI 的 Whisper 语音转文字模型实现了一个音频转录器。随后,我们对应用进行了测试,展示了提供上下文提示如何提升转录的准确性。
关注我不迷路,系列化的给您提供当代程序员需要掌握的现代AI工具和框架