Spring AI 如何实现语音转文本实战教程
本文将详细介绍如何在Spring AI框架下实现语音转文本的功能,主要聚焦于使用OpenAI的whisper模型进行相关操作,帮助你在项目中快速集成语音转文本功能。
一、入门准备
目前,Spring AI仅支持通过OpenAI的whisper模型进行多语言语音识别,以及将语音转录成JSON或TEXT文件。若想了解最新可用的模型信息,可以前往OpenAI官网查看。在Spring AI中,创建音频文件转录功能主要依靠OpenAiAudioTranscriptionModel
类,当未来有更多转录服务提供商接入时,会提取出通用的AudioTranscriptionModel
接口。
要在项目中使用音频转录模型,需要先在项目里添加spring-ai-openai-spring-boot-starter
依赖。关于如何在项目依赖中设置Spring AI的BOM,可以参考Spring AI的入门指南。在pom.xml
文件中添加如下依赖:
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> </dependency>
添加好依赖后,Spring Boot会自动进行配置。除了为聊天、音频和图像模型创建其他bean之外,它还会创建OpenAiAudioTranscriptionModel
类的实例,并赋予一些默认配置值。这些配置值可以根据实际需求进行修改,具体配置如下:
# API Key是必填项,需替换为自己的OpenAI API Key spring.ai.openai.api-key=${OPENAI_API_KEY} # 默认配置值 # 设置使用的模型为whisper-1 spring.ai.openai.audio.transcription.options.model=whisper-1 # 设置响应格式,可选json、text、srt、verbose_json、vtt spring.ai.openai.audio.transcription.options.response-format=json # 采样温度,取值范围在0到1之间,这里设置为0 spring.ai.openai.audio.transcription.options.temperature=0 # 时间戳粒度,可选segment(片段)和word(单词),或两者都选 spring.ai.openai.audio.transcription.options.timestamp_granularities=segment
支持的输出格式有以下几种:
- json:结构化的响应格式。
- text:纯文本数据。
- srt:用于字幕的文件格式。
- verbose_json:包含额外元数据的json格式。
- vtt:用于在网页视频播放器中显示定时文本轨道(比如字幕或标题)。
此外,还可以设置一些可选属性来控制模型的输出风格:
# 可选文本,用于引导模型的风格或延续上一段音频的内容,需与音频语言匹配 spring.ai.openai.audio.transcription.options.prompt={prompt} # 输入音频的语言,采用ISO-639-1格式 spring.ai.openai.audio.transcription.options.language={language}
完成配置后,就可以在Spring管理的bean中注入OpenAiAudioTranscriptionModel
了。
二、手动配置模型
(一)使用默认配置创建模型
如果想使用默认配置创建OpenAiAudioTranscriptionModel
bean,只需要获取OpenAI的API Key即可。示例代码如下:
// 通过系统环境变量获取OpenAI API Key,创建OpenAiAudioApi实例 var openAiAudioApi = new OpenAiAudioApi(System.getenv("OPENAI_API_KEY")); // 使用OpenAiAudioApi实例创建OpenAiAudioTranscriptionModel实例 var transcriptionModel = new OpenAiAudioTranscriptionModel(openAiAudioApi);
(二)自定义参数创建模型
要是希望通过自定义参数修改默认配置,可以借助OpenAiAudioTranscriptionOptions
类。示例代码如下:
// 使用OpenAiAudioTranscriptionOptions.builder()构建器设置自定义参数 OpenAiAudioTranscriptionOptions options = OpenAiAudioTranscriptionOptions.builder() // 设置音频语言为英文 .withLanguage("en") // 设置引导文本 .withPrompt("Create transcription for this audio file.") // 设置采样温度为0 .withTemperature(0f) // 设置响应格式为文本 .withResponseFormat(TranscriptResponseFormat.TEXT) // 构建OpenAiAudioTranscriptionOptions实例 .build(); // 通过系统环境变量获取OpenAI API Key,创建OpenAiAudioApi实例 OpenAiAudioApi openAiAudioApi = new OpenAiAudioApi(System.getenv("OPENAI_API_KEY")); // 使用OpenAiAudioApi实例和自定义的OpenAiAudioTranscriptionOptions实例创建OpenAiAudioTranscriptionModel实例 var transcriptionModel = new OpenAiAudioTranscriptionModel(openAiAudioApi, options);
三、语音转文本实战示例
当OpenAiAudioTranscriptionModel
bean初始化完成后,就可以使用它的call()
方法将音频文件转录成文本了。示例代码如下:
// 注入名为speech.mp3的音频文件资源 @Value("classpath:speech.mp3") Resource audioFile; // 调用OpenAiAudioTranscriptionModel的call()方法,传入包含音频文件的AudioTranscriptionPrompt对象 AudioTranscriptionResponse response = transcriptionModel.call(new AudioTranscriptionPrompt(audioFile)); // 获取转录后的文本内容 String text = response.getResult().getOutput();
下面是一个完整的Spring Boot控制器方法示例,用于接收音频文件并返回转录后的文本:
@RestController class SpeechController { // 注入OpenAiAudioTranscriptionModel private final OpenAiAudioTranscriptionModel transcriptionModel; public SpeechController(OpenAiAudioTranscriptionModel transcriptionModel) { this.transcriptionModel = transcriptionModel; } // 处理GET请求,接收名为speech.mp3的音频文件资源,并返回转录后的文本 @GetMapping("/transcription") public String speech(@Value("classpath:speech.mp3") Resource audioFile) { return transcriptionModel.call(new AudioTranscriptionPrompt(audioFile)) .getResult() .getOutput(); } }
在这个示例中,使用了speech.mp3
音频文件进行演示,转录后的结果会作为API的输出展示出来。
四、总结
通过本文的学习,我们对Spring AI的语音转文本功能有了全面的了解:
- 目前,Spring AI模块仅支持OpenAI的whisper模型。
OpenAiAudioTranscriptionModel
是实现语音转录的主要类。- 只要在项目中添加
spring-ai-openai-spring-boot-starter
依赖,就可以使用默认配置的OpenAiAudioTranscriptionModel
bean。 - 可以通过属性文件来控制默认配置值。
- 若要进行手动配置,可以使用
OpenAiAudioTranscriptionOptions
构建器类。
希望大家通过本文的学习,能够在实际项目中顺利运用Spring AI的语音转文本功能。