Spring AI 集成 Amazon Bedrock Converse API 技术博客

本文全面梳理 Amazon Bedrock Converse API 与 Spring AI 的集成方案,系统讲解其核心能力、配置方法、常见用例,结合项目背景与发展历史,附权威参考资料,并用多种 Mermaid 图表辅助理解。内容结构化,便于开发者速记和系统认知。


一、概述

随着生成式 AI 应用的爆发,企业亟需安全、可扩展、多模态、可调用工具的 LLM 服务。Amazon Bedrock 提供多家主流模型统一接入,Converse API 更支持工具调用和多模态输入。Spring AI 作为开源 Java AI 框架,已原生支持 Bedrock Converse,帮助开发者快速构建智能应用。


二、名词解释

  • LLM(Large Language Model):大语言模型,能理解和生成自然语言。
  • 多模态输入:支持文本、图片、视频、文档等多种数据格式。
  • 工具/函数调用:模型可在对话中自动调用后端 Java 方法或 Bean,实现智能工具集成。
  • 流式响应:模型输出可实时推送,适合长文本和交互场景。
  • Spring AI:Spring 生态下的 AI 框架,简化 Java 应用与 AI 服务集成。
  • Bedrock Converse API:Amazon Bedrock 的对话式 API,支持多模态、工具调用等高级功能。

三、项目背景与发展历史

发展脉络

  • 2022:Amazon Bedrock 发布,致力于成为多模型统一入口,支持 Titan、Claude 等主流模型。
  • 2023:Bedrock Converse API 推出,支持多模态、工具调用,推动企业级智能应用落地。
  • 2024:Spring AI 集成 Bedrock Converse,Java 社区可无缝接入主流 LLM 服务,促进生产级 AI 应用开发。

行业权威资料


四、核心功能速记口

能力 关键词速记 说明
工具调用 “函数Bean” 对话可自动调用 Java 方法/Bean
多模态输入 “图文视频文档” 支持图片、视频、PDF、Word 等多格式
流式响应 “边说边发” 实时推送文本,适合长对话
多模型支持 “随心切换” Titan、Claude、Llama 等统一接入
系统消息 “指令上下文” 支持系统级 prompt 指令和上下文管理

五、Spring AI 集成步骤详解

1. 依赖配置

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-model-bedrock-converse</artifactId>
</dependency>
<!-- 推荐引入 BOM 进行版本统一 -->

2. application.properties 配置

spring.ai.bedrock.aws.region=eu-central-1
spring.ai.bedrock.aws.timeout=10m
spring.ai.bedrock.aws.access-key=${AWS_ACCESS_KEY_ID}
spring.ai.bedrock.aws.secret-key=${AWS_SECRET_ACCESS_KEY}
spring.ai.bedrock.aws.session-token=${AWS_SESSION_TOKEN}
spring.ai.bedrock.converse.chat.options.model=anthropic.claude-3-5-sonnet-20240620-v1:0
spring.ai.bedrock.converse.chat.options.temperature=0.8
spring.ai.bedrock.converse.chat.options.top-k=15

3. 代码用例

工具调用
public class WeatherService {
    @Tool(description = "Get the weather in location")
    public String weatherByLocation(@ToolParam(description= "City or state name") String location) {
        return "Amsterdam 22C";
    }
}
String response = ChatClient.create(chatModel)
    .prompt("What's the weather like in Boston?")
    .tools(new WeatherService())
    .call()
    .content();
多模态输入

图片:

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();

视频:

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();

PDF:

String response = ChatClient.create(chatModel)
    .prompt()
    .user(u -> u.text("请总结一下这份 PDF 文档。")
        .media(Media.Format.DOC_PDF, new ClassPathResource("/spring-ai-reference-overview.pdf")))
    .call()
    .content();
流式响应
@GetMapping("/ai/generateStream")
public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
    return chatClient.prompt(message).stream().content();
}

六、Controller 示例

@RestController
public class ChatController {
    private final ChatClient chatClient;
    @Autowired
    public 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", chatClient.prompt(message).call().content());
    }
    @GetMapping("/ai/generateStream")
    public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return chatClient.prompt(message).stream().content();
    }
}

七、注意事项速记

  • 嵌入式(Embedding)操作:Converse API 暂不支持,需用原有 InvokeModel API。
  • 多模型切换:通过 spring.ai.model.chat 灵活配置。
  • 多模态需支持:仅 Claude、Nova 等支持多模态。
  • AWS 权限:需在 Bedrock 控制台开通目标模型权限。

八、结构化知识图表

1. 流程图(flowchart)

工具调用
多模态输入
流式响应
开发者需求
Spring Boot 项目
引入 Spring AI Bedrock Converse 依赖
配置 application.properties
构建 ChatClient
功能选择
集成 Java Bean/方法
上传图片/视频/PDF
实时输出
返回模型结果
前端/业务系统展示

2. 状态图(stateDiagram-v2)

配置阶段
构建ChatClient
等待输入
工具调用
多模态输入
普通文本对话
响应生成
流式推送
完成

3. 时序图(sequenceDiagram)

User Controller ChatClient BedrockConverse 发起对话/上传媒体 构造 prompt、工具、媒体 发送请求 返回响应/流式数据 发送结果 展示回复 User Controller ChatClient BedrockConverse

九、参考文献

  1. Spring AI 官方文档
  2. Amazon Bedrock 官方文档
  3. Gartner, 2023. “Generative AI Is the Most Disruptive Technology in Decades” Press Release.

十、系统性认知总结

  • Bedrock Converse API 让 Java 应用具备主流 LLM 的多模态、工具调用、流式能力,统一接口,极大提升企业级 AI 应用开发效率。
  • Spring AI 作为桥梁,自动化依赖管理、模型切换、工具集成,降低门槛。
  • 多模态与工具调用是未来企业智能应用的核心竞争力,建议优先选用支持相关能力的模型。
  • 权限和配置是常见踩坑点,务必在 AWS 控制台提前配置好模型访问权限。
  • Mermaid 图表能帮助开发者快速梳理架构与流程,提升系统认知。

速记口:依赖引入、配置模型、工具调用、多模态输入、流式输出、权限开通,六步走,企业级 AI 应用即刻拥有!


如果你有具体业务场景或遇到技术难题,欢迎留言,我会结合代码与架构图为你定制解决方案!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐