Amazon Bedrock Converse API:開啟對話式AI新體驗
前言
在當今人工智能飛速發展的時代,對話式AI已成為眾多應用的核心組成部分。從智能客服到智能助手,對話式AI為用戶帶來了便捷且高效的交互體驗。而Amazon Bedrock Converse API的出現,更是為這一領域注入了強大的動力。它為對話式AI模型提供了統一接口,并具備一系列令人矚目的增強功能,如工具/函數調用、多模態輸入和流式響應等,使得開發者能夠更輕松地構建出功能強大、交互豐富的對話式AI應用。本文將深入探討Amazon Bedrock Converse API的各項特性、使用方法以及在實際項目中的應用示例,幫助讀者全面了解并掌握這一強大工具。
Amazon Bedrock Converse API 特性解析
強大的工具/函數調用功能
在對話期間,該API支持使用函數定義和工具。這意味著開發者可以讓模型在對話過程中調用特定的函數或工具,從而實現更復雜的任務。例如,通過定義一個天氣查詢函數,當用戶詢問天氣相關問題時,模型能夠自動調用該函數獲取準確的天氣信息并回復用戶。這種能力極大地拓展了對話式AI的應用場景,使其不再局限于簡單的文本交流,而是能夠真正解決用戶的實際問題。
多模態輸入處理能力
多模態輸入是Amazon Bedrock Converse API的一大亮點。它能夠在對話中同時處理文本和圖像輸入,甚至對于部分模型還支持視頻等其他格式的輸入。例如,對于支持視覺多模態的模型,如Amazon Nova、Anthropic Claude、Llama 3.2等,用戶可以發送包含圖像的消息,模型能夠分析圖像內容并結合文本問題生成準確的回答。這在圖像描述、圖像分析等領域具有巨大的應用潛力。同時,對于一些模型,還支持將文檔(如pdf、docx等)包含在有效負載中,實現基于文檔內容的問答和總結等功能。
實時流式響應
流式處理支持使得模型響應能夠實時返回給用戶。在傳統的對話式AI應用中,用戶往往需要等待模型完成整個處理過程后才能得到完整的回答,這在一些對響應速度要求較高的場景中可能會影響用戶體驗。而Amazon Bedrock Converse API的流式響應功能,能夠讓模型在生成回答的過程中就逐步將結果返回給用戶,大大提高了交互的實時性和流暢性。
系統消息支持
系統消息功能允許開發者設置系統級指令和上下文,為對話提供更豐富的背景信息。通過合理設置系統消息,模型能夠更好地理解用戶的意圖,給出更符合預期的回答。例如,可以設置模型的角色、對話的主題范圍等,使得模型在對話過程中始終保持在特定的語境中,避免回答偏離主題。
使用Amazon Bedrock Converse API 的步驟
前提條件準備
- 設置API訪問:首先需要按照Amazon Bedrock入門指南來設置API訪問,確保能夠順利調用API。
- 獲取AWS憑證:如果尚未配置AWS賬戶和AWS CLI,可以參考相關視頻指南(如“AWS CLI和SDK設置在不到4分鐘的時間內”)來獲取訪問密鑰和安全密鑰。
- 啟用要使用的模型:在Amazon Bedrock中,從左側的Model Access菜單中配置對所需模型的訪問權限。
自動配置項目
在Spring AI項目中,需要對自動配置、啟動模塊的artifact名稱進行相應調整(具體可參考升級說明)。然后添加spring - ai - starter - model - bedrock - converse依賴項到項目的Maven pom.xml或Gradle build.gradle文件中。同時,將Spring AI BOM添加到構建文件中以進行依賴管理。
配置聊天屬性
通過一系列屬性來配置與AWS Bedrock的連接。例如,“spring.ai.bedrock.aws.region”用于指定要使用的AWS區域,默認值為“us - east - 1”;“spring.ai.bedrock.aws.timeout”設置AWS超時時間,默認5分鐘等。此外,還需要配置AWS訪問密鑰、密鑰以及會話令牌等信息。啟用和禁用聊天自動配置通過“spring.ai.model.chat”屬性來控制,若要啟用Bedrock Converse聊天模型,可設置“spring.ai.model.chat = bedrock - converse”(默認啟用)。
運行時選項設置
可以使用便攜式ChatOptions或ToolCallingChatOptions來創建模型配置,如設置temperature、maxToken、topP等參數。在啟動時,可以通過構造函數或相關性能屬性來設置這些參數。在運行時,也可以通過向Prompt中添加特定配置來動態調整模型行為。
工具調用實現
為了實現工具調用功能,可以定義基于@Tool的工具類。例如,創建一個WeatherService類,通過在方法上添加@Tool注解來定義工具,然后在對話中通過ChatClient調用該工具。此外,也可以將java.util.function bean用作工具,通過在Spring中定義相應的bean并在ChatClient中指定工具名稱來使用。
多模態應用示例
在多模態方面,以圖像輸入為例,Spring AI的Message界面引入了Media類型來支持多模態輸入。通過以下代碼示例可以實現用戶文本與圖像的組合發送:
多模態測試圖像
String response = ChatClient.create(chatModel).prompt().user(u -> u.text("Explain what do you see on this picture?").media(Media.Format.IMAGE_PNG, new ClassPathResource("/test.png"))).call().content();
它將test.png圖像:
以及文本消息“Explain what do you see on this picture?”,并生成如下響應:
The image shows a close-up view of a wire fruit basket containing several pieces of fruit.
類似地,對于視頻和文檔輸入,也有相應的代碼示例來展示如何將用戶文本與這些多模態數據結合,讓模型進行綜合處理并生成回答。
視頻
Amazon Nova 模型允許您在負載中包含單個視頻,該視頻可以采用 base64 格式或通過 Amazon S3 URI 提供。
目前,Bedrock Nova 支持video/x-matros,video/quicktime,video/mp4,video/video/webm,video/x-flv,video/mpeg,video/x-ms-wmv和image/3gppMIME 類型。
Spring AI 的Message界面通過引入Media`類型。 它包含有關消息中媒體附件的數據和信息,使用 Spring 的org.springframework.util.MimeType以及java.lang.Object對于原始媒體數據。
下面是一個簡單的代碼示例,演示了用戶文本與視頻的組合。
String response = ChatClient.create(chatModel).prompt().user(u -> u.text("Explain what do you see in this video?").media(Media.Format.VIDEO_MP4, new ClassPathResource("/test.video.mp4"))).call().content();logger.info(response);
它將test.video.mp4圖像:
多模態測試視頻
以及文本消息“Explain what do you see in this video?”,并生成如下響應:
The video shows a group of baby chickens, also known as chicks, huddled together on a surface
文件
對于某些模型,Bedrock 允許您通過 Converse API 文檔支持將文檔包含在有效負載中,該支持可以以字節為單位提供。 文檔支持有兩種不同的變體,如下所述:
文本文檔類型(txt、csv、html、md 等),其中重點是文本理解。這些用例包括根據文檔的文本元素進行回答。
媒體文檔類型(pdf、docx、xlsx),其中重點是基于視覺的理解來回答問題。這些使用案例包括根據圖表、圖形等回答問題。
目前,Anthropic PDF 支持(測試版)和 Amazon Bedrock Nova 模型支持文檔多模態。
下面是一個簡單的代碼示例,演示了用戶文本與媒體文檔的組合。
String response = ChatClient.create(chatModel).prompt().user(u -> u.text("You are a very professional document summarization specialist. Please summarize the given document.").media(Media.Format.DOC_PDF, new ClassPathResource("/spring-ai-reference-overview.pdf"))).call().content();logger.info(response);
它將spring-ai-reference-overview.pdf公文:
多模態測試 PNG
伴隨著短信“您是一位非常專業的文檔摘要專家。請總結給定的文檔“,并生成如下響應:
**Introduction:**
- Spring AI is designed to simplify the development of applications with artificial intelligence (AI) capabilities, aiming to avoid unnecessary complexity.
Samples控制器示例
創建一個新的Spring Boot項目,添加相關依賴并配置application.properties文件后,可以創建一個示例控制器來使用聊天模型。例如,下面的ChatController通過@Autowired注入ChatClient.Builder來構建ChatClient,并提供了兩個接口“/ai/generate”和“/ai/generateStream”,分別用于生成非流式和流式的對話響應。
@RestController
public class ChatController {private final ChatClient chatClient;@Autowiredpublic ChatController(ChatClient.Builder builder) {this.chatClient = builder.build();}@GetMapping("/ai/generate")public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {return Map.of("generation", this.chatClient.prompt(message).call().content());}@GetMapping("/ai/generateStream")public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {return this.chatClient.prompt(message).stream().content();}
}
總結
Amazon Bedrock Converse API憑借其豐富的功能特性,為對話式AI的開發提供了極大的便利。通過工具/函數調用,增強了模型解決實際問題的能力;多模態輸入功能使對話式AI能夠處理更豐富的數據類型,拓寬了應用領域;實時流式響應提升了用戶交互體驗;系統消息支持則為模型提供了更準確的上下文信息。在使用過程中,通過合理的前提條件準備、項目配置以及對各種功能的靈活運用,開發者能夠快速構建出高性能、智能化的對話式AI應用。然而,在實際應用中也可能會面臨一些挑戰,如多模態數據處理的復雜性、模型選擇與優化等問題。但總體而言,Amazon Bedrock Converse API為對話式AI的發展帶來了新的機遇,相信隨著技術的不斷進步和應用的深入拓展,它將在更多領域發揮重要作用,為用戶帶來更加智能、便捷的交互體驗。希望本文的介紹能夠幫助讀者快速上手并充分利用這一強大的API,在對話式AI開發領域取得更多的成果。