Lzh on GitHub

Transcription API

Spring AI 提供了一个统一的语音转文本(Speech-to-Text)API,通过 TranscriptionModel 接口实现。这使你能够编写可移植的代码,在不同的转录服务提供商之间通用。

Spring AI 提供了一个统一的语音转文本(Speech-to-Text)API,通过 TranscriptionModel 接口实现。这使你能够编写可移植的代码,在不同的转录服务提供商之间通用。

支持的提供商

通用接口

所有转录服务提供商都实现了以下共享接口:

转录模型(TranscriptionModel)

TranscriptionModel 接口提供了将音频转换为文本的方法:

public interface TranscriptionModel extends Model<AudioTranscriptionPrompt, AudioTranscriptionResponse> {

    /**
     * 对给定提示中的音频进行转录。
     */
    AudioTranscriptionResponse call(AudioTranscriptionPrompt transcriptionPrompt);

    /**
     * 便捷方法:转录一个音频资源。
     */
    default String transcribe(Resource resource) {
        AudioTranscriptionPrompt prompt = new AudioTranscriptionPrompt(resource);
        return this.call(prompt).getResult().getOutput();
    }

    /**
     * 便捷方法:带选项的音频资源转录。
     */
    default String transcribe(Resource resource, AudioTranscriptionOptions options) {
        AudioTranscriptionPrompt prompt = new AudioTranscriptionPrompt(resource, options);
        return this.call(prompt).getResult().getOutput();
    }
}

该接口提供了核心方法 call 用于音频转录,同时提供了两个便捷方法,可直接将音频资源转为文本,并支持自定义转录选项。

音频转录提示(AudioTranscriptionPrompt)

AudioTranscriptionPrompt 类用于封装输入音频及其选项:

Resource audioFile = new FileSystemResource("/path/to/audio.mp3");
AudioTranscriptionPrompt prompt = new AudioTranscriptionPrompt(
    audioFile,
    options
);

其中,audioFile 表示要转录的音频文件,options 可用于指定转录的相关参数。

音频转录响应(AudioTranscriptionResponse)

AudioTranscriptionResponse 类包含转录后的文本及相关元数据:

AudioTranscriptionResponse response = model.call(prompt);
String transcribedText = response.getResult().getOutput();
AudioTranscriptionResponseMetadata metadata = response.getMetadata();

其中,transcribedText 是转录得到的文本,metadata 包含转录过程的相关信息。

编写与提供商无关的代码

共享转录接口的一个主要优势是,你可以编写无需修改即可适用于任何转录服务提供商的代码。具体使用哪个提供商(如 OpenAI、Azure OpenAI 等)由 Spring Boot 配置决定,使你能够在不更改应用代码的情况下轻松切换提供商。

基本服务示例

共享接口允许你编写可适用于任何转录服务提供商的代码:

@Service
public class TranscriptionService {

    private final TranscriptionModel transcriptionModel;

    public TranscriptionService(TranscriptionModel transcriptionModel) {
        this.transcriptionModel = transcriptionModel;
    }

    public String transcribeAudio(Resource audioFile) {
        return transcriptionModel.transcribe(audioFile);
    }

    public String transcribeWithOptions(Resource audioFile, AudioTranscriptionOptions options) {
        AudioTranscriptionPrompt prompt = new AudioTranscriptionPrompt(audioFile, options);
        AudioTranscriptionResponse response = transcriptionModel.call(prompt);
        return response.getResult().getOutput();
    }
}

该服务可以无缝支持 OpenAI、Azure OpenAI 或其他任何转录服务提供商,实际使用的实现由 Spring Boot 配置决定。

特定提供商功能

虽然共享接口提供了可移植性,但每个提供商也通过特定的选项类(例如 OpenAiAudioTranscriptionOptionsAzureOpenAiAudioTranscriptionOptions)提供了专属功能。这些类实现了 AudioTranscriptionOptions 接口,同时增加了提供商特有的能力。

有关提供商特定功能的详细信息,请参阅各个提供商的文档页面。