跳到主要内容

DashScope Transcriptions

Spring AI Alibaba 支持 DashScope 的语音转文字模型

Prerequisites

您需要使用阿里云 DashScope 创建 API Key 才能访问 DashScope 转录模型。

阿里云 DashScope 控制台 创建账户,并在 API Keys 页面 生成 API Key。

Spring AI Alibaba 项目定义了一个名为 spring.ai.dashscope.api-key 的配置属性,您应将其设置为从 DashScope 控制台获得的 API Key 值。

导出环境变量是设置该配置属性的一种方法:

export AI_DASHSCOPE_API_KEY=<your-dashscope-api-key>

Auto-configuration

Spring AI Alibaba 为 DashScope Transcription Client 提供 Spring Boot 自动配置。 要启用它,请将以下依赖项添加到项目的 Maven pom.xml 文件中:

<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
</dependency>

或添加到 Gradle build.gradle 构建文件中。

dependencies {
implementation 'com.alibaba.cloud.ai:spring-ai-alibaba-starter-dashscope'
}

TIP: 请参考 Dependency Management 部分,将 Spring AI Alibaba BOM 添加到您的构建文件中。

Transcription Properties

Connection Properties

前缀 spring.ai.dashscope 用作允许您连接到 DashScope 的属性前缀。

PropertyDescriptionDefault
spring.ai.dashscope.base-url连接的 URLhttps://dashscope.aliyuncs.com
spring.ai.dashscope.api-keyAPI Key-
spring.ai.dashscope.work-space-id可选,您可以指定用于 API 请求的工作空间 ID-

TIP: 对于属于多个工作空间的用户,您可以可选地指定用于 API 请求的工作空间 ID。 这些 API 请求的使用量将计入指定工作空间的使用量。

Configuration Properties

NOTE

音频转录自动配置的启用和禁用现在通过前缀为 spring.ai.model.audio.transcription 的顶级属性进行配置。

要启用,spring.ai.model.audio.transcription=dashscope

要禁用,spring.ai.model.audio.transcription=none(或任何与 dashscope 不匹配的值)

此更改是为了允许配置多个模型。

前缀 spring.ai.dashscope.audio.transcription 用作允许您配置 DashScope 转录模型的属性前缀。

PropertyDescriptionDefault
spring.ai.model.audio.transcription启用 DashScope Audio Transcription Modeldashscope
spring.ai.dashscope.audio.transcription.base-url连接的 URLhttps://dashscope.aliyuncs.com
spring.ai.dashscope.audio.transcription.api-keyAPI Key-
spring.ai.dashscope.audio.transcription.work-space-id可选,您可以指定用于 API 请求的工作空间 ID-
spring.ai.dashscope.audio.transcription.options.model用于转录的模型 ID。可用模型:paraformer-v1paraformer-8k-v1paraformer-v2paraformer-8k-v2paraformer-mtl-v1paraformer-realtime-v1paraformer-realtime-8k-v1paraformer-realtime-v2paraformer-realtime-8k-v2fun-asrfun-asr-mtlfun-asr-realtimegummy-realtime-v1gummy-chat-v1paraformer-v1
spring.ai.dashscope.audio.transcription.options.format音频格式。支持的格式:pcmwavmp3opusspeexaacamrpcm
spring.ai.dashscope.audio.transcription.options.sample-rate音频采样率-
spring.ai.dashscope.audio.transcription.options.vocabulary-id自定义热词表 ID-
spring.ai.dashscope.audio.transcription.options.resource-id资源 ID(用于 paraformer 系列模型)-
spring.ai.dashscope.audio.transcription.options.channel-id声道 ID 列表[0]
spring.ai.dashscope.audio.transcription.options.disfluency-removal-enabled是否启用流畅度移除false
spring.ai.dashscope.audio.transcription.options.timestamp-alignment-enabled是否启用时间戳对齐false
spring.ai.dashscope.audio.transcription.options.special-word-filter特殊词过滤-
spring.ai.dashscope.audio.transcription.options.language-hints语言提示列表["zh", "en"]
spring.ai.dashscope.audio.transcription.options.diarization-enabled是否启用说话人分离false
spring.ai.dashscope.audio.transcription.options.speaker-count说话人数量-
spring.ai.dashscope.audio.transcription.options.semantic-punctuation-enabled是否启用语义标点false
spring.ai.dashscope.audio.transcription.options.max-sentence-silence最大句子静音时长(毫秒)800
spring.ai.dashscope.audio.transcription.options.multi-threshold-mode-enabled是否启用多阈值模式false
spring.ai.dashscope.audio.transcription.options.punctuation-prediction-enabled是否启用标点预测true
spring.ai.dashscope.audio.transcription.options.heartbeat是否启用心跳false
spring.ai.dashscope.audio.transcription.options.inverse-text-normalization-enabled是否启用逆文本规范化true
spring.ai.dashscope.audio.transcription.options.source-language源语言-
spring.ai.dashscope.audio.transcription.options.transcription-enabled是否启用转录true
spring.ai.dashscope.audio.transcription.options.translation-enabled是否启用翻译false
spring.ai.dashscope.audio.transcription.options.translation-target-languages翻译目标语言列表-
spring.ai.dashscope.audio.transcription.options.max-end-silence最大结束静音时长(毫秒)800

NOTE: 您可以覆盖通用的 spring.ai.dashscope.base-urlspring.ai.dashscope.api-keyspring.ai.dashscope.work-space-id 属性。 如果设置了 spring.ai.dashscope.audio.transcription.base-urlspring.ai.dashscope.audio.transcription.api-keyspring.ai.dashscope.audio.transcription.work-space-id 属性,它们优先于通用属性。 如果您想为不同的模型和不同的模型端点使用不同的 DashScope 账户,这很有用。

TIP: 所有以 spring.ai.dashscope.audio.transcription.options 为前缀的属性都可以在运行时覆盖。

Runtime Options

DashScopeAudioTranscriptionOptions 类提供在进行转录时使用的选项。 在启动时,使用 spring.ai.dashscope.audio.transcription 指定的选项,但您可以在运行时覆盖这些选项。

例如:

DashScopeAudioTranscriptionOptions transcriptionOptions = DashScopeAudioTranscriptionOptions.builder()
.model(DashScopeModel.AudioModel.PARAFORMER_V1.getValue())
.languageHints(List.of("zh", "en"))
.disfluencyRemovalEnabled(false)
.punctuationPredictionEnabled(true)
.build();

AudioTranscriptionPrompt transcriptionRequest = new AudioTranscriptionPrompt(audioFile, transcriptionOptions);
AudioTranscriptionResponse response = dashScopeTranscriptionModel.call(transcriptionRequest);

Manual Configuration

spring-ai-alibaba-dashscope 依赖项添加到项目的 Maven pom.xml 文件中:

<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-dashscope</artifactId>
</dependency>

或添加到 Gradle build.gradle 构建文件中。

dependencies {
implementation 'com.alibaba.cloud.ai:spring-ai-alibaba-dashscope'
}

TIP: 请参考 Dependency Management 部分,将 Spring AI Alibaba BOM 添加到您的构建文件中。

接下来,创建一个 DashScopeAudioTranscriptionModel

var dashScopeAudioTranscriptionApi = DashScopeAudioTranscriptionApi.builder()
.apiKey(System.getenv("AI_DASHSCOPE_API_KEY"))
.build();

var dashScopeAudioTranscriptionModel = new DashScopeAudioTranscriptionModel(
dashScopeAudioTranscriptionApi,
DashScopeAudioTranscriptionOptions.builder()
.model(DashScopeModel.AudioModel.PARAFORMER_V1.getValue())
.build()
);

var transcriptionOptions = DashScopeAudioTranscriptionOptions.builder()
.model(DashScopeModel.AudioModel.PARAFORMER_V1.getValue())
.languageHints(List.of("zh", "en"))
.punctuationPredictionEnabled(true)
.build();

var audioFile = new FileSystemResource("/path/to/your/resource/speech/audio.wav");

AudioTranscriptionPrompt transcriptionRequest = new AudioTranscriptionPrompt(audioFile, transcriptionOptions);
AudioTranscriptionResponse response = dashScopeAudioTranscriptionModel.call(transcriptionRequest);

String transcribedText = response.getResult().getOutput();

Streaming Real-time Transcription

DashScope 支持使用 WebSocket 进行实时音频转录。这对于需要实时处理音频流的场景非常有用。

DashScopeAudioTranscriptionModel 实现了流式转录功能:

var dashScopeAudioTranscriptionApi = DashScopeAudioTranscriptionApi.builder()
.apiKey(System.getenv("AI_DASHSCOPE_API_KEY"))
.build();

var dashScopeAudioTranscriptionModel = new DashScopeAudioTranscriptionModel(
dashScopeAudioTranscriptionApi,
DashScopeAudioTranscriptionOptions.builder()
.model(DashScopeModel.AudioModel.PARAFORMER_REALTIME_V1.getValue())
.format(DashScopeAudioTranscriptionApi.AudioFormat.PCM)
.sampleRate(16000)
.build()
);

Resource audioResource = new FileSystemResource("/path/to/audio.pcm");
AudioTranscriptionPrompt prompt = new AudioTranscriptionPrompt(audioResource);

Flux<AudioTranscriptionResponse> responseStream = dashScopeAudioTranscriptionModel.stream(prompt);

responseStream.subscribe(response -> {
String text = response.getResult().getOutput();
// 处理实时转录结果
System.out.println("Transcribed: " + text);
});

Supported Models

DashScope 支持多种转录模型:

Paraformer 系列(非实时)

  • paraformer-v1 - 通用语音识别模型
  • paraformer-8k-v1 - 8kHz 采样率版本
  • paraformer-v2 - 增强版本
  • paraformer-8k-v2 - 8kHz 采样率增强版本
  • paraformer-mtl-v1 - 多任务学习版本

Paraformer 系列(实时)

  • paraformer-realtime-v1 - 实时语音识别模型
  • paraformer-realtime-8k-v1 - 8kHz 采样率实时版本
  • paraformer-realtime-v2 - 实时增强版本
  • paraformer-realtime-8k-v2 - 8kHz 采样率实时增强版本

FunASR 系列

  • fun-asr - FunASR 通用模型
  • fun-asr-mtl - FunASR 多任务学习版本
  • fun-asr-realtime - FunASR 实时版本

Gummy 系列

  • gummy-realtime-v1 - Gummy 实时模型
  • gummy-chat-v1 - Gummy 对话模型

更多模型信息请参考 DashScope 模型列表

Advanced Features

Custom Vocabulary

使用自定义热词表可以提高特定领域术语的识别准确率:

DashScopeAudioTranscriptionOptions options = DashScopeAudioTranscriptionOptions.builder()
.model(DashScopeModel.AudioModel.PARAFORMER_V1.getValue())
.vocabularyId("your-vocabulary-id") // 在 DashScope 控制台创建的热词表 ID
.build();

AudioTranscriptionPrompt prompt = new AudioTranscriptionPrompt(audioFile, options);
AudioTranscriptionResponse response = dashScopeTranscriptionModel.call(prompt);

Speaker Diarization

启用说话人分离功能,可以识别不同说话人的内容:

DashScopeAudioTranscriptionOptions options = DashScopeAudioTranscriptionOptions.builder()
.model(DashScopeModel.AudioModel.PARAFORMER_V1.getValue())
.diarizationEnabled(true)
.speakerCount(2) // 指定说话人数量
.build();

AudioTranscriptionPrompt prompt = new AudioTranscriptionPrompt(audioFile, options);
AudioTranscriptionResponse response = dashScopeTranscriptionModel.call(prompt);

Translation

部分模型支持在转录的同时进行翻译:

DashScopeAudioTranscriptionOptions options = DashScopeAudioTranscriptionOptions.builder()
.model(DashScopeModel.AudioModel.PARAFORMER_MTL_V1.getValue())
.translationEnabled(true)
.translationTargetLanguages(List.of("en")) // 翻译目标语言
.build();

AudioTranscriptionPrompt prompt = new AudioTranscriptionPrompt(audioFile, options);
AudioTranscriptionResponse response = dashScopeTranscriptionModel.call(prompt);

Resource ID (for Paraformer models)

对于 Paraformer 系列模型,可以使用 resource-id 替代 vocabulary-id:

DashScopeAudioTranscriptionOptions options = DashScopeAudioTranscriptionOptions.builder()
.model(DashScopeModel.AudioModel.PARAFORMER_V1.getValue())
.resourceId("your-resource-id") // 资源 ID
.build();

AudioTranscriptionPrompt prompt = new AudioTranscriptionPrompt(audioFile, options);
AudioTranscriptionResponse response = dashScopeTranscriptionModel.call(prompt);

Example Code

完整的示例代码可以参考项目中的测试文件,展示了如何使用 DashScope Transcription API 的各种功能。

Spring AI Alibaba 开源项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。