搶先一步
VMware 提供培訓和認證,助您加速進步。
瞭解更多這篇博文由我們優秀的貢獻者 Thomas Vitale 合著。
OpenAI 提供用於語音轉文字
和文字轉語音
轉換的專用模型,這些模型以其效能和成本效益而聞名。Spring AI 透過 語音轉文字 和 文字轉語音 (TTS) 集成了這些功能。
新的 音訊生成 功能 (gpt-4o-audio-preview
) 更進一步,支援混合輸入和輸出模態。音訊輸入可以包含比純文字更豐富的資料。音訊可以傳達語氣和語調等細微資訊,並且結合音訊輸出可以實現非同步的語音轉語音
互動。此外,這種新的多模態為創新應用開闢了可能性,例如結構化資料提取。開發者不僅可以從簡單的文字中提取結構化資訊,還可以從影像和音訊中提取,無縫地構建複雜的結構化物件。
Spring AI 多模態訊息 API 簡化了多模態功能與各種 AI 模型的整合。
現在,它完全支援 OpenAI 的 音訊輸入 和 音訊輸出 模態,這在很大程度上歸功於為該功能開發做出貢獻的社群成員 Thomas Vitale。
請遵循 Spring AI-OpenAI 整合文件來準備您的環境。
OpenAI 的 使用者訊息 API 支援使用 Media 型別在訊息中包含 base64 編碼的音訊檔案。支援的格式包括 audio/mp3
和 audio/wav
。
示例:向輸入提示新增音訊
// Prepare the audio resource
var audioResource = new ClassPathResource("speech1.mp3");
// Create a user message with audio and send it to the chat model
String response = chatClient.prompt()
.user(u -> u.text("What is this recording about?")
.media(MimeTypeUtils.parseMimeType("audio/mp3"), audioResource))
.options(OpenAiChatOptions.builder()
.withModel(OpenAiApi.ChatModel.GPT_4_O_AUDIO_PREVIEW).build())
.call()
.content();
OpenAI 助手訊息 API 可以使用 Media
型別返回 base64 編碼的音訊檔案。
示例:生成音訊輸出
// Generate an audio response
ChatResponse response = chatClient
.prompt("Tell me a joke about the Spring Framework")
.options(OpenAiChatOptions.builder()
.withModel(OpenAiApi.ChatModel.GPT_4_O_AUDIO_PREVIEW)
.withOutputModalities(List.of("text", "audio"))
.withOutputAudio(new AudioParameters(Voice.ALLOY, AudioResponseFormat.WAV))
.build())
.call()
.chatResponse();
// Access the audio transcript
String audioTranscript = response.getResult().getOutput().getContent();
// Retrieve the generated audio
byte[] generatedAudio = response.getResult().getOutput().getMedia().get(0).getDataAsByteArray();
要生成音訊輸出,請在 OpenAiChatOptions
中指定音訊模態。使用 AudioParameters
類自定義語音和音訊格式。
此示例演示瞭如何使用 Spring AI 構建支援輸入和輸出音訊的互動式聊天機器人。它展示了 AI 如何透過自然流暢的音訊響應增強使用者互動。
新增 Spring AI OpenAI Starter
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
在 application.properties
中配置 API 金鑰、模型名稱和輸出音訊模態
spring.main.web-application-type=none
spring.ai.openai.api-key=${OPENAI_API_KEY}
spring.ai.openai.chat.options.model=gpt-4o-audio-preview
spring.ai.openai.chat.options.output-modalities=text,audio
spring.ai.openai.chat.options.output-audio.voice=ALLOY
spring.ai.openai.chat.options.output-audio.format=WAV
下方詳細介紹了語音聊天機器人的 Java 實現,它使用音訊輸入和輸出來建立一個會話式 AI 助手。它利用 Spring AI 與 OpenAI 模型的整合來實現與使用者的無縫互動。
VoiceAssistantApplication
VoiceAssistantApplication
用作主應用程式。
CommandLineRunner
bean 初始化聊天機器人
systemPrompt
配置 ChatClient
以獲取上下文理解,並使用記憶體中的聊天記憶來儲存會話歷史。Audio
工具用於錄製使用者的語音輸入,並播放 AI 生成的音訊響應。聊天迴圈: 在迴圈內部
audio.startRecording()
和 audio.stopRecording()
方法處理錄製過程,暫停以等待使用者輸入。chatClient.prompt()
傳送給 AI 模型。音訊資料封裝在 Media
物件中。Audio.play()
方法播放為音訊。請參閱以下程式碼片段以瞭解實現細節
@Bean
public CommandLineRunner chatBot(ChatClient.Builder chatClientBuilder,
@Value("${chatbot.prompt:classpath:/marvin.paranoid.android.txt}") Resource systemPrompt) {
return args -> {
var chatClient = chatClientBuilder.defaultSystem(systemPrompt)
.defaultAdvisors(new MessageChatMemoryAdvisor(new InMemoryChatMemory()))
.build();
try (Scanner scanner = new Scanner(System.in)) {
Audio audio = new Audio();
while (true) {
audio.startRecording();
System.out.print("Recording your question ... press <Enter> to stop! ");
scanner.nextLine();
audio.stopRecording();
System.out.print("PROCESSING ... ");
AssistantMessage response = chatClient.prompt()
.messages(new UserMessage("Please answer the questions in the audio input",
new Media(MediaType.parseMediaType("audio/wav"),
new ByteArrayResource(audio.getLastRecording()))))
.call()
.chatResponse()
.getResult()
.getOutput();
System.out.println("ASSISTANT: " + response.getContent());
Audio.play(response.getMedia().get(0).getDataAsByteArray());
}
}
};
}
用於捕獲和播放音訊的 Audio
工具是一個單獨的類,它利用了原生的 Java Sound API
。
▗▄▄▖▗▄▄▖ ▗▄▄▖ ▗▄▄▄▖▗▖ ▗▖ ▗▄▄▖ ▗▄▖ ▗▄▄▄▖
▐▌ ▐▌ ▐▌▐▌ ▐▌ █ ▐▛▚▖▐▌▐▌ ▐▌ ▐▌ █
▝▀▚▖▐▛▀▘ ▐▛▀▚▖ █ ▐▌ ▝▜▌▐▌▝▜▌ ▐▛▀▜▌ █
▗▄▄▞▘▐▌ ▐▌ ▐▌▗▄█▄▖▐▌ ▐▌▝▚▄▞▘ ▐▌ ▐▌▗▄█▄▖
▗▄▄▖ ▗▄▖ ▗▄▄▖ ▗▄▖ ▗▖ ▗▖ ▗▄▖ ▗▄▄▄▖▗▄▄▄ ▗▄▖ ▗▖ ▗▖▗▄▄▄ ▗▄▄▖ ▗▄▖ ▗▄▄▄▖▗▄▄▄
▐▌ ▐▌▐▌ ▐▌▐▌ ▐▌▐▌ ▐▌▐▛▚▖▐▌▐▌ ▐▌ █ ▐▌ █ ▐▌ ▐▌▐▛▚▖▐▌▐▌ █▐▌ ▐▌▐▌ ▐▌ █ ▐▌ █
▐▛▀▘ ▐▛▀▜▌▐▛▀▚▖▐▛▀▜▌▐▌ ▝▜▌▐▌ ▐▌ █ ▐▌ █ ▐▛▀▜▌▐▌ ▝▜▌▐▌ █▐▛▀▚▖▐▌ ▐▌ █ ▐▌ █
▐▌ ▐▌ ▐▌▐▌ ▐▌▐▌ ▐▌▐▌ ▐▌▝▚▄▞▘▗▄█▄▖▐▙▄▄▀ ▐▌ ▐▌▐▌ ▐▌▐▙▄▄▀▐▌ ▐▌▝▚▄▞▘▗▄█▄▖▐▙▄▄▀
2024-12-01T11:00:11.274+01:00 INFO 31297 --- [voice-assistant-chatbot] [ main] s.a.d.a.m.VoiceAssistantApplication : Started VoiceAssistantApplication in 0.827 seconds (process running for 1.054)
Recording your question ... press <Enter> to stop!
完整的演示可在 GitHub 上獲取:voice-assistant-chatbot
modalities = ["text", "audio"]
。gpt-4o-audio-preview
模型為動態音訊互動開闢了新的可能性,使開發者能夠構建豐富的、AI 驅動的音訊應用。
免責宣告:API 功能和特性可能會發生變化。請參考最新的 OpenAI 和 Spring AI 文件獲取更新資訊。