OpenAI 轉錄

Spring AI 支援 OpenAI 的轉錄模型

先決條件

您需要使用 OpenAI 建立 API 金鑰才能存取 ChatGPT 模型。在 OpenAI 註冊頁面 建立帳戶,並在 API 金鑰頁面 上產生權杖。Spring AI 專案定義了一個名為 spring.ai.openai.api-key 的組態屬性,您應該將其設定為從 openai.com 取得的 API 金鑰 值。匯出環境變數是設定該組態屬性的一種方式

自動組態

Spring AI 為 OpenAI 轉錄用戶端提供 Spring Boot 自動組態。若要啟用它,請將以下依賴項新增至專案的 Maven pom.xml 檔案

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

或新增至 Gradle build.gradle 建置檔案。

dependencies {
    implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter'
}
請參閱 依賴項管理 章節,將 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.openai.audio.transcription 用作屬性前綴,讓您可以設定 OpenAI 轉錄模型的重試機制。

屬性 描述 預設值

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

要連線的 URL

api.openai.com

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

API 金鑰

-

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

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

-

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

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

-

spring.ai.openai.audio.transcription.options.model

要使用的模型 ID。目前僅提供 whisper-1(由我們的開放原始碼 Whisper V2 模型提供支援)。

whisper-1

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

轉錄輸出的格式,選項之一:json、text、srt、verbose_json 或 vtt。

json

spring.ai.openai.audio.transcription.options.prompt

引導模型風格或繼續先前音訊片段的可選文字。提示應與音訊語言相符。

spring.ai.openai.audio.transcription.options.language

輸入音訊的語言。以 ISO-639-1 格式提供輸入語言將提高準確性和延遲。

spring.ai.openai.audio.transcription.options.temperature

取樣溫度,介於 0 和 1 之間。較高的值(如 0.8)會使輸出更隨機,而較低的值(如 0.2)會使其更集中且具確定性。如果設定為 0,模型將使用對數機率自動增加溫度,直到達到某些閾值。

0

spring.ai.openai.audio.transcription.options.timestamp_granularities

要為此轉錄填入的時間戳記粒度。response_format 必須設定為 verbose_json 才能使用時間戳記粒度。支援以下任一或兩個選項:word 或 segment。注意:區段時間戳記沒有額外的延遲,但產生單字時間戳記會產生額外的延遲。

segment

您可以覆寫常見的 spring.ai.openai.base-urlspring.ai.openai.api-keyspring.ai.openai.organization-idspring.ai.openai.project-id 屬性。如果設定了 spring.ai.openai.audio.transcription.base-urlspring.ai.openai.audio.transcription.api-keyspring.ai.openai.audio.transcription.organization-idspring.ai.openai.audio.transcription.project-id 屬性,則它們優先於通用屬性。如果您想要針對不同的模型和不同的模型端點使用不同的 OpenAI 帳戶,這會很有用。
所有以 spring.ai.openai.transcription.options 為前綴的屬性都可以在執行階段覆寫。

執行階段選項

OpenAiAudioTranscriptionOptions 類別提供在進行轉錄時使用的選項。在啟動時,會使用 spring.ai.openai.audio.transcription 指定的選項,但您可以在執行階段覆寫這些選項。

例如

OpenAiAudioApi.TranscriptResponseFormat responseFormat = OpenAiAudioApi.TranscriptResponseFormat.VTT;

OpenAiAudioTranscriptionOptions transcriptionOptions = OpenAiAudioTranscriptionOptions.builder()
    .withLanguage("en")
    .withPrompt("Ask not this, but ask that")
    .withTemperature(0f)
    .withResponseFormat(this.responseFormat)
    .build();
AudioTranscriptionPrompt transcriptionRequest = new AudioTranscriptionPrompt(audioFile, this.transcriptionOptions);
AudioTranscriptionResponse response = openAiTranscriptionModel.call(this.transcriptionRequest);

手動組態

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 新增至您的建置檔案。

接下來,建立 OpenAiAudioTranscriptionModel

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

var openAiAudioTranscriptionModel = new OpenAiAudioTranscriptionModel(this.openAiAudioApi);

var transcriptionOptions = OpenAiAudioTranscriptionOptions.builder()
    .withResponseFormat(TranscriptResponseFormat.TEXT)
    .withTemperature(0f)
    .build();

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

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

程式碼範例