-
概述
企業常常需要從各種類型的音頻內容中提取有價值的數據,例如:將客戶支持通話轉錄用于情感分析、為視頻生成字幕,或整理會議紀要。然而,手動轉錄音頻文件既耗時又昂貴。
為了解決這一問題,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工具和框架