CODE WITH SIBIN

Solving Real Problems with Real Code


Spring Boot + Amazon Bedrock Converse AI Integration Guide

This guide covers integrating Spring Boot with Amazon Bedrock Converse AI using Spring AI.
We will configure AWS credentials, set up application.yml, and implement a service layer & REST API to interact with Bedrock AI models.

πŸ“Œ Features Covered

βœ… BedrockConverseClient (Text Generation)
βœ… BedrockConverseChatClient (Conversational AI)
βœ… BedrockEmbeddingClient (Vector Embeddings)
βœ… BedrockImageClient (Image Generation)
βœ… BedrockModerationClient (Content Moderation)

1️⃣ Project Setup

1.1 Create a Spring Boot Project

Generate a new Spring Boot project via Spring Initializr or manually create a Maven project.

1.2 Add Dependencies (pom.xml)

<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.4.4</version>
        <relativePath/>
    </parent>

    <groupId>com.example</groupId>
    <artifactId>spring-boot-bedrock</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot-bedrock</name>

    <properties>
        <java.version>17</java.version>
        <spring-ai.version>1.0.0-M6</spring-ai.version>
    </properties>

    <dependencies>
        <!-- Spring Boot Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Spring AI Amazon Bedrock Starter -->
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-bedrock-converse-spring-boot-starter</artifactId>
        </dependency>

        <!-- Spring Boot Test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>${spring-ai.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

πŸ“‚ 2. Project Directory Structure

πŸ”‘ 3. AWS Configuration

3.1 Get AWS Access Key & Secret Key

Step 1: Sign in to AWS Console

  1. Go to AWS Management Console.
  2. Search for IAM β†’ Open Identity & Access Management (IAM).
  3. Click Users β†’ Add user.
  4. Enable Programmatic access.
  5. Attach AmazonBedrockFullAccess policy.
  6. Download your Access Key ID and Secret Access Key.

3.2 Get AWS Region & Bedrock Model ID

Find AWS Region

  1. Go to AWS Console β†’ Search for Amazon Bedrock.
  2. Open Amazon Bedrock β†’ Check the Region in the top-right.

βœ… Supported Regions:

  • us-east-1 (N. Virginia)
  • us-west-2 (Oregon)
  • eu-west-1 (Ireland)

Find Bedrock Model ID

  • Go to Amazon Bedrock Console β†’ Click Models.
  • Supported models:
    • Amazon Titan Text β†’ amazon.titan-text-express-v1
    • Claude AI (Anthropic) β†’ anthropic.claude-v2
    • Mistral AI β†’ mistral.mistral-7b

3.3 Configure AWS Credentials in application.yml

spring:
  ai:
    bedrock:
      converse:
        enabled: true
        model-id: "amazon.titan-text-express-v1"
        aws-region: "us-east-1"
  cloud:
    aws:
      credentials:
        access-key: "YOUR_ACCESS_KEY"
        secret-key: "YOUR_SECRET_KEY"
      region:
        static: us-east-1

server:
  port: 8080

πŸ— 4. Service Layer

4.1 BedrockService.java

package com.example.demo.service;

import org.springframework.ai.bedrock.converse.BedrockConverseClient;
import org.springframework.ai.bedrock.converse.BedrockConverseChatClient;
import org.springframework.ai.bedrock.embedding.BedrockEmbeddingClient;
import org.springframework.ai.bedrock.image.BedrockImageClient;
import org.springframework.ai.bedrock.moderation.BedrockModerationClient;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class BedrockService {

    private final BedrockConverseClient converseClient;
    private final BedrockConverseChatClient chatClient;
    private final BedrockEmbeddingClient embeddingClient;
    private final BedrockImageClient imageClient;
    private final BedrockModerationClient moderationClient;

    public BedrockService(
            BedrockConverseClient converseClient,
            BedrockConverseChatClient chatClient,
            BedrockEmbeddingClient embeddingClient,
            BedrockImageClient imageClient,
            BedrockModerationClient moderationClient) {
        this.converseClient = converseClient;
        this.chatClient = chatClient;
        this.embeddingClient = embeddingClient;
        this.imageClient = imageClient;
        this.moderationClient = moderationClient;
    }

    public String generateText(String prompt) {
        return converseClient.generate(prompt).getContent();
    }

    public String chat(String message) {
        return chatClient.generate(message).getContent();
    }

    public List<Double> getEmbedding(String text) {
        return embeddingClient.embed(text).getData();
    }

    public String generateImage(String prompt) {
        return imageClient.generate(prompt).getContent();
    }

    public boolean moderateContent(String text) {
        return moderationClient.moderate(text).isFlagged();
    }
}

🌐 5. REST Controller

πŸ“ 5.1 BedrockController.java

package com.example.demo.controller;

import com.example.demo.service.BedrockService;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/bedrock")
public class BedrockController {

    private final BedrockService bedrockService;

    public BedrockController(BedrockService bedrockService) {
        this.bedrockService = bedrockService;
    }

    /**
     * Generate text using BedrockConverseClient
     */
    @GetMapping("/generate")
    public String generateText(@RequestParam String prompt) {
        return bedrockService.generateText(prompt);
    }

    /**
     * Chat with BedrockConverseChatClient
     */
    @GetMapping("/chat")
    public String chat(@RequestParam String message) {
        return bedrockService.chat(message);
    }

    /**
     * Get text embeddings using BedrockEmbeddingClient
     */
    @GetMapping("/embedding")
    public List<Double> getEmbedding(@RequestParam String text) {
        return bedrockService.getEmbedding(text);
    }

    /**
     * Generate an image using BedrockImageClient
     */
    @GetMapping("/image")
    public String generateImage(@RequestParam String prompt) {
        return bedrockService.generateImage(prompt);
    }

    /**
     * Moderate content using BedrockModerationClient
     */
    @GetMapping("/moderate")
    public boolean moderateContent(@RequestParam String text) {
        return bedrockService.moderateContent(text);
    }
}

6. πŸ› οΈ Testing APIs with curl

# Generate text
curl "http://localhost:8080/bedrock/generate?prompt=Hello AI!"

# Chat with Bedrock AI
curl "http://localhost:8080/bedrock/chat?message=Tell me a joke"

# Get text embedding
curl "http://localhost:8080/bedrock/embedding?text=Artificial Intelligence"

# Generate an image
curl "http://localhost:8080/bedrock/image?prompt=A futuristic city skyline"

# Moderate text content
curl "http://localhost:8080/bedrock/moderate?text=Some explicit content"

πŸ€– Spring Boot + Amazon Bedrock Converse AI Integration

Integrate Amazon Bedrock AI with Spring Boot for text generation, embeddings, image generation, and moderation.

πŸ“‚ Clone on GitHub

Leave a Reply

Your email address will not be published. Required fields are marked *