This version is still in development and is not considered stable yet. For the latest snapshot version, please use Spring AI 1.0.0-SNAPSHOT! |
Amazon Bedrock
Amazon Bedrock is a managed service that provides foundation models from various AI providers, available through a unified API.
Spring AI supports all the Chat and Embedding AI models available through Amazon Bedrock by implementing the Spring interfaces ChatModel
, StreamingChatModel
, and EmbeddingModel
.
Additionally, Spring AI provides Spring Auto-Configurations and Boot Starters for all clients, making it easy to bootstrap and configure for the Bedrock models.
Getting Started
There are a few steps to get started
-
Add the Spring Boot starter for Bedrock to your project.
-
Obtain AWS credentials: If you don’t have an AWS account and AWS CLI configured yet, this video guide can help you configure it: AWS CLI & SDK Setup in Less Than 4 Minutes!. You should be able to obtain your access and security keys.
-
Enable the Models to use: Go to Amazon Bedrock and from the Model Access menu on the left, configure access to the models you are going to use.
Project Dependencies
Then add the Spring Boot Starter dependency to your project’s Maven pom.xml
build file:
<dependency>
<artifactId>spring-ai-bedrock-ai-spring-boot-starter</artifactId>
<groupId>org.springframework.ai</groupId>
</dependency>
or to your Gradle build.gradle
build file.
dependencies {
implementation 'org.springframework.ai:spring-ai-bedrock-ai-spring-boot-starter'
}
Refer to the Dependency Management section to add the Spring AI BOM to your build file. |
Connect to AWS Bedrock
Use the BedrockAwsConnectionProperties
to configure AWS credentials and region:
spring.ai.bedrock.aws.region=us-east-1
spring.ai.bedrock.aws.access-key=YOUR_ACCESS_KEY
spring.ai.bedrock.aws.secret-key=YOUR_SECRET_KEY
spring.ai.bedrock.aws.timeout=10m
The region
property is compulsory.
AWS credentials are resolved in the following order:
-
Spring-AI Bedrock
spring.ai.bedrock.aws.access-key
andspring.ai.bedrock.aws.secret-key
properties. -
Java System Properties -
aws.accessKeyId
andaws.secretAccessKey
. -
Environment Variables -
AWS_ACCESS_KEY_ID
andAWS_SECRET_ACCESS_KEY
. -
Web Identity Token credentials from system properties or environment variables.
-
Credential profiles file at the default location (
~/.aws/credentials
) shared by all AWS SDKs and the AWS CLI. -
Credentials delivered through the Amazon EC2 container service if the
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
environment variable is set and the security manager has permission to access the variable. -
Instance profile credentials delivered through the Amazon EC2 metadata service or set the
AWS_ACCESS_KEY_ID
andAWS_SECRET_ACCESS_KEY
environment variables.
AWS region is resolved in the following order:
-
Spring-AI Bedrock
spring.ai.bedrock.aws.region
property. -
Java System Properties -
aws.region
. -
Environment Variables -
AWS_REGION
. -
Credential profiles file at the default location (
~/.aws/credentials
) shared by all AWS SDKs and the AWS CLI. -
Instance profile region delivered through the Amazon EC2 metadata service.
In addition to the standard Spring-AI Bedrock credentials and region properties configuration, Spring-AI provides support for custom AwsCredentialsProvider
and AwsRegionProvider
beans.
For example, using Spring-AI and Spring Cloud for Amazon Web Services at the same time. Spring-AI is compatible with Spring Cloud for Amazon Web Services credential configuration. |
Enable selected Bedrock model
By default, all models are disabled. You have to enable the chosen Bedrock models explicitly using the spring.ai.bedrock.<model>.<chat|embedding>.enabled=true property.
|
Here are the supported <model>
and <chat|embedding>
combinations:
Model | Chat | Chat Streaming | Embedding |
---|---|---|---|
llama |
Yes |
Yes |
No |
jurassic2 |
Yes |
No |
No |
cohere |
Yes |
Yes |
Yes |
anthropic 2 |
Yes |
Yes |
No |
anthropic 3 |
Yes |
Yes |
No |
jurassic2 (WIP) |
Yes |
No |
No |
titan |
Yes |
Yes |
Yes (however, no batch support) |
For example, to enable the Bedrock Llama chat model, you need to set spring.ai.bedrock.llama.chat.enabled=true
.
Next, you can use the spring.ai.bedrock.<model>.<chat|embedding>.*
properties to configure each model as provided.
For more information, refer to the documentation below for each supported model.
-
Spring AI Bedrock Anthropic 2 Chat:
spring.ai.bedrock.anthropic.chat.enabled=true
-
Spring AI Bedrock Anthropic 3 Chat:
spring.ai.bedrock.anthropic3.chat.enabled=true
-
Spring AI Bedrock Llama Chat:
spring.ai.bedrock.llama.chat.enabled=true
-
Spring AI Bedrock Cohere Chat:
spring.ai.bedrock.cohere.chat.enabled=true
-
Spring AI Bedrock Cohere Embeddings:
spring.ai.bedrock.cohere.embedding.enabled=true
-
Spring AI Bedrock Titan Chat:
spring.ai.bedrock.titan.chat.enabled=true
-
Spring AI Bedrock Titan Embeddings:
spring.ai.bedrock.titan.embedding.enabled=true
-
Spring AI Bedrock Ai21 Jurassic2 Chat:
spring.ai.bedrock.jurassic2.chat.enabled=true