OpenAI 轉錄

Spring AI 支援 OpenAI 的轉錄模型

先決條件

您需要建立 OpenAI API 金鑰來訪問 ChatGPT 模型。在 OpenAI 註冊頁面 建立一個賬戶,並在 API 金鑰頁面 生成令牌。Spring AI 專案定義了一個名為 spring.ai.openai.api-key 的配置屬性,您應將其設定為從 openai.com 獲取的 API 金鑰的值。匯出環境變數是設定該配置屬性的一種方法。

自動配置

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.transcription 的頂層屬性進行配置。

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

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

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

字首 spring.ai.openai.audio.transcription 用作屬性字首,用於配置 OpenAI 轉錄模型的重試機制。

屬性 描述 預設值

spring.ai.model.audio.transcription

啟用 OpenAI 音訊轉錄模型

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, or vtt。

json

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

可選文字,用於指導模型的風格或繼續之前的音訊片段。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 時間戳沒有額外的延遲,但生成 word 時間戳會產生額外的延遲。

segment

您可以覆蓋常見的 spring.ai.openai.base-url, spring.ai.openai.api-key, spring.ai.openai.organization-idspring.ai.openai.project-id 屬性。如果設定了 spring.ai.openai.audio.transcription.base-url, spring.ai.openai.audio.transcription.api-key, spring.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()
    .language("en")
    .prompt("Ask not this, but ask that")
    .temperature(0f)
    .responseFormat(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()
    .responseFormat(TranscriptResponseFormat.TEXT)
    .temperature(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);

示例程式碼