本文将详细介绍如何在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的语音转文本功能有了全面的了解:

  1. 目前,Spring AI模块仅支持OpenAI的whisper模型。
  2. OpenAiAudioTranscriptionModel是实现语音转录的主要类。
  3. 只要在项目中添加spring-ai-openai-spring-boot-starter依赖,就可以使用默认配置的OpenAiAudioTranscriptionModel bean。
  4. 可以通过属性文件来控制默认配置值。
  5. 若要进行手动配置,可以使用OpenAiAudioTranscriptionOptions构建器类。

希望大家通过本文的学习,能够在实际项目中顺利运用Spring AI的语音转文本功能。