使用 Spring AI 中的 OpenAI 轉錄音訊文件
1.概述
企業通常需要從各種類型的音訊內容中提取有意義的數據,例如轉錄客戶支援電話以進行情緒分析、為視訊產生字幕或產生會議記錄。然而,手動轉錄音訊檔案是一個耗時且昂貴的過程。
為了實現這一過程的自動化, OpenAI提供了強大的語音轉文字模型,能夠準確地轉錄多種語言的音訊檔案。
在本教程中,我們將探討如何使用 Spring AI 透過 OpenAI 的語音到文字模型轉錄音訊檔案。
要遵循本教程,我們需要一個OpenAI API 金鑰。
2. 設定項目
在我們開始實作音訊轉錄器之前,我們需要包含必要的依賴項並正確配置我們的應用程式。
2.1.依賴項
讓我們先將 Spring AI 的OpenAI 啟動器依賴項新增到我們專案的pom.xml
檔案中:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-openai</artifactId>
<version>1.0.0-M7</version>
</dependency>
由於目前版本1.0.0-M7
是一個里程碑版本,我們還需要將 Spring Milestones 儲存庫新增到我們的pom.xml
中:
<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-1
language: en
我們使用${}
屬性佔位符從環境變數載入 API 金鑰的值。
在這裡,我們透過其模型 ID 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 TranscriptionRequest(MultipartFile audioFile, @Nullable String context) {}
record TranscriptionResponse(String transcription) {}
TranscriptionRequest
包含要轉錄的audioFile
和可選context
,以協助模型進行轉錄過程。值得注意的是,OpenAI 目前支援mp3
、 mp4
、 mpeg
、 mpga
、 m4a
、 wav
和webm
格式的音訊檔案。
類似地, TranscriptionResponse
僅保存產生的transcription
。
現在,讓我們實現預期的功能:
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()
方法。
我們使用audioFile
資源和可選的context
提示來建立一個AudioTranscriptionPrompt
物件。然後,我們使用它來呼叫自動連接的OpenAiAudioTranscriptionModel
bean 的call()
方法。
最後,我們從response
中提取轉錄的文字並將其包裝在我們的TranscriptionResponse
記錄中傳回。
目前,對於語音轉文字模型,音訊檔案大小限制為 25 MB。但是,預設情況下,Spring Boot將上傳檔案的大小限制為1MB 。讓我們在application.yaml
檔案中增加這個限制:
spring:
servlet:
multipart:
max-file-size: 25MB
max-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 CLI 呼叫上述 API 端點:
http -f POST :8080/transcribe [email protected] context="Short description about Baeldung"
在這裡,我們呼叫/transcribe
API 並發送audioFile
及其context
。為了演示,我們準備了一個音訊文件,其中提供了 Baeldung 的簡短描述。該檔案可以在程式碼庫的src/test/resources/audio
資料夾中找到。
讓我們看看我們得到了什麼回應:
`{
"transcription": "Baeldung 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 傳回了所提供音訊檔案的正確transcription
。
請注意,提供context
提示如何幫助模型正確轉錄Baeldung
名稱。如果沒有這個context
,Whisper 模型會將這個字轉錄為Baildung
。
5. 結論
在本文中,我們探索了使用 Spring AI 中的 OpenAI 轉錄音訊檔案。
我們完成了必要的配置,並使用 OpenAI 的 Whisper 語音到文字模型實現了音訊轉錄器。我們還測試了我們的應用程序,並觀察了提供上下文提示如何提高生成的轉錄的準確性,特別是對於特定領域的名稱。
與往常一樣,本文中使用的所有程式碼範例均可在 GitHub 上找到。