当前位置: 首页 > web >正文

Amazon Bedrock Converse API:开启对话式AI新体验

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 的步骤

前提条件准备

  1. 设置API访问:首先需要按照Amazon Bedrock入门指南来设置API访问,确保能够顺利调用API。
  2. 获取AWS凭证:如果尚未配置AWS账户和AWS CLI,可以参考相关视频指南(如“AWS CLI和SDK设置在不到4分钟的时间内”)来获取访问密钥和安全密钥。
  3. 启用要使用的模型:在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开发领域取得更多的成果。

http://www.xdnf.cn/news/3996.html

相关文章:

  • Qt开发:容器组控件的介绍和使用
  • 20、数据可视化:魔镜报表——React 19 图表集成
  • 408考研逐题详解:2009年第8题
  • Java后端程序员学习前端之CSS
  • Python matplotlib 成功使用SimHei 中文字体
  • 详解RabbitMQ工作模式之发布订阅模式
  • 基于C++实现的深度学习(cnn/svm)分类器Demo
  • Baklib知识中台:智能服务架构新实践
  • 【算法学习】递归、搜索与回溯算法(一)
  • python函数复习(形参实参,收集参数,关键字参数)
  • uniapp中用canvas绘制简单柱形图,小容量,不用插件——简单使用canvas
  • QT 在圆的边界画出圆
  • IP属地是我的定位吗?——解析两者区别
  • Python异步编程入门:从同步到异步的思维转变
  • VBA信息获取与处理专题五:VBA利用CDO发送电子邮件
  • 【外围电路】按键电路设计外接信号输入设计
  • Go小技巧易错点100例(二十九)
  • rollout 是什么:机器学习(强化学习)领域
  • 【Vue】Vue3源码解析与实现原理
  • 关于 dex2oat 以及 vdex、cdex、dex 格式转换
  • VLA算法总结对比——RT1 / RT2 / Pi0 / Octo/ RDT / OpenVLA
  • 钩子函数和参数:Vue组件生命周期中的自定义逻辑
  • 2.3 向量组
  • Linux电源管理(6)_Generic PM之挂起功能
  • Ubuntu K8S(1.28.2) 节点/etc/kubernetes/manifests 不存在
  • n8n工作流自动化平台:生成图文并茂的分析报告之Merge节点详细说明
  • labelimg快捷键
  • DXFViewer进行中 : ->封装OpenGL -> 解析DXF直线
  • SpringMVC框架详解与实践指南
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.3 数据脱敏与安全(模糊处理/掩码技术)