OpenAI 文字轉語音 (TTS)

簡介

音訊 API 基於 OpenAI 的 TTS(文字轉語音)模型,提供語音端點,使使用者能夠:

  • 敘述書面部落格文章。

  • 生成多種語言的語音音訊。

  • 使用流式傳輸提供即時音訊輸出。

先決條件

  1. 建立一個 OpenAI 賬戶並獲取一個 API 金鑰。您可以在 OpenAI 註冊頁面 註冊,並在 API 金鑰頁面 生成 API 金鑰。

  2. spring-ai-openai 依賴項新增到您的專案構建檔案中。更多資訊,請參閱依賴管理部分。

自動配置

Spring AI 自動配置、starter 模組的 artifact 名稱發生了重大變化。更多資訊,請參閱升級注意事項

Spring AI 為 OpenAI 文字轉語音客戶端提供 Spring Boot 自動配置。要啟用它,請將以下依賴項新增到您的專案 Maven pom.xml 檔案中

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>

或新增到您的 Gradle build.gradle 構建檔案

dependencies {
    implementation 'org.springframework.ai:spring-ai-starter-model-openai'
}
請參閱依賴管理部分,將 Spring AI BOM 新增到您的構建檔案中。

語音屬性

連線屬性

字首 spring.ai.openai 用作屬性字首,允許您連線到 OpenAI。

屬性

描述

預設值

spring.ai.openai.base-url

連線 URL

api.openai.com

spring.ai.openai.api-key

API 金鑰

-

spring.ai.openai.organization-id

可選地,您可以指定用於 API 請求的組織。

-

spring.ai.openai.project-id

可選地,您可以指定用於 API 請求的專案。

-

對於屬於多個組織(或透過其舊版使用者 API 金鑰訪問其專案)的使用者,您可以選擇指定用於 API 請求的組織和專案。這些 API 請求的使用量將計入指定組織和專案的使用量。

配置屬性

音訊語音自動配置的啟用和停用現在透過字首為 spring.ai.model.audio.speech 的頂級屬性進行配置。

要啟用,設定 spring.ai.model.audio.speech=openai (預設啟用)

要停用,設定 spring.ai.model.audio.speech=none (或任何不匹配 openai 的值)

此更改是為了允許配置多個模型。

字首 spring.ai.openai.audio.speech 用作屬性字首,允許您配置 OpenAI 文字轉語音客戶端。

屬性 描述 預設值

spring.ai.model.audio.speech

啟用音訊語音模型

openai

spring.ai.openai.audio.speech.base-url

連線 URL

api.openai.com

spring.ai.openai.audio.speech.api-key

API 金鑰

-

spring.ai.openai.audio.speech.organization-id

可選地,您可以指定用於 API 請求的組織。

-

spring.ai.openai.audio.speech.project-id

可選地,您可以指定用於 API 請求的專案。

-

spring.ai.openai.audio.speech.options.model

用於生成音訊的模型 ID。對於 OpenAI 的 TTS API,請使用其中一個可用模型:tts-1 或 tts-1-hd。

tts-1

spring.ai.openai.audio.speech.options.voice

用於語音合成的聲音。對於 OpenAI 的 TTS API,可選擇所選模型的可用聲音之一:alloy, echo, fable, onyx, nova, and shimmer。

alloy

spring.ai.openai.audio.speech.options.response-format

音訊輸出格式。支援的格式有 mp3, opus, aac, flac, wav, and pcm。

mp3

spring.ai.openai.audio.speech.options.speed

語音合成的速度。可接受範圍從 0.25(最慢)到 4.0(最快)。

1.0

您可以覆蓋通用的 spring.ai.openai.base-url, spring.ai.openai.api-key, spring.ai.openai.organization-idspring.ai.openai.project-id 屬性。如果設定了 spring.ai.openai.audio.speech.base-url, spring.ai.openai.audio.speech.api-key, spring.ai.openai.audio.speech.organization-idspring.ai.openai.audio.speech.project-id 屬性,它們將優先於通用屬性。如果您想為不同的模型和不同的模型端點使用不同的 OpenAI 賬戶,這將非常有用。
所有帶有 spring.ai.openai.image.options 字首的屬性都可以在執行時被覆蓋。

執行時選項

OpenAiAudioSpeechOptions 類提供了進行文字轉語音請求時使用的選項。啟動時,使用 spring.ai.openai.audio.speech 指定的選項,但您可以在執行時覆蓋這些選項。

例如

OpenAiAudioSpeechOptions speechOptions = OpenAiAudioSpeechOptions.builder()
    .model("tts-1")
    .voice(OpenAiAudioApi.SpeechRequest.Voice.ALLOY)
    .responseFormat(OpenAiAudioApi.SpeechRequest.AudioResponseFormat.MP3)
    .speed(1.0f)
    .build();

SpeechPrompt speechPrompt = new SpeechPrompt("Hello, this is a text-to-speech example.", speechOptions);
SpeechResponse response = openAiAudioSpeechModel.call(speechPrompt);

手動配置

spring-ai-openai 依賴項新增到您的專案 Maven pom.xml 檔案中

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai</artifactId>
</dependency>

或新增到您的 Gradle build.gradle 構建檔案

dependencies {
    implementation 'org.springframework.ai:spring-ai-openai'
}
請參閱依賴管理部分,將 Spring AI BOM 新增到您的構建檔案中。

接下來,建立一個 OpenAiAudioSpeechModel

var openAiAudioApi = new OpenAiAudioApi()
    .apiKey(System.getenv("OPENAI_API_KEY"))
    .build();

var openAiAudioSpeechModel = new OpenAiAudioSpeechModel(openAiAudioApi);

var speechOptions = OpenAiAudioSpeechOptions.builder()
    .responseFormat(OpenAiAudioApi.SpeechRequest.AudioResponseFormat.MP3)
    .speed(1.0f)
    .model(OpenAiAudioApi.TtsModel.TTS_1.value)
    .build();

var speechPrompt = new SpeechPrompt("Hello, this is a text-to-speech example.", speechOptions);
SpeechResponse response = openAiAudioSpeechModel.call(speechPrompt);

// Accessing metadata (rate limit info)
OpenAiAudioSpeechResponseMetadata metadata = response.getMetadata();

byte[] responseAsBytes = response.getResult().getOutput();

即時音訊流式傳輸

語音 API 支援使用分塊傳輸編碼進行即時音訊流式傳輸。這意味著音訊可以在完整檔案生成並可訪問之前進行播放。

var openAiAudioApi = new OpenAiAudioApi()
    .apiKey(System.getenv("OPENAI_API_KEY"))
    .build();

var openAiAudioSpeechModel = new OpenAiAudioSpeechModel(openAiAudioApi);

OpenAiAudioSpeechOptions speechOptions = OpenAiAudioSpeechOptions.builder()
    .voice(OpenAiAudioApi.SpeechRequest.Voice.ALLOY)
    .speed(1.0f)
    .responseFormat(OpenAiAudioApi.SpeechRequest.AudioResponseFormat.MP3)
    .model(OpenAiAudioApi.TtsModel.TTS_1.value)
    .build();

SpeechPrompt speechPrompt = new SpeechPrompt("Today is a wonderful day to build something people love!", speechOptions);

Flux<SpeechResponse> responseStream = openAiAudioSpeechModel.stream(speechPrompt);

示例程式碼