使用Amazon Bedrock和Spring AI构建自主AI代理
- 作者

- 姓名
- Nino
- 职业
- Senior Tech Editor
企业级Java开发人员越来越多地被赋予将生成式AI能力引入遗留系统和现代云原生微服务的任务。尽管Python在机器学习领域占据主导地位,但Spring生态系统通过Spring AI迅速成熟,为大语言模型提供了世界级的抽象层。结合Amazon Bedrock的企业级基础设施,Java团队能够构建安全、可扩展且符合生产标准的自主AI代理。为了简化开发流程并在多个基础模型之间降低延迟,许多架构团队选择集成像n1n.ai这样提供统一API访问和高性价比模型路由的解决方案。
Java AI代理架构概览
自主AI代理与传统对话机器人的区别在于其具备动态推理、规划和执行操作的能力。代理不再仅依赖预训练权重,而是评估用户查询、决定调用哪些工具或API、处理输出并不断迭代直到达成目标。
在我们的Spring AI实现中,架构依赖于以下几个核心组件:
- ChatClient与ChatModel:与托管在Amazon Bedrock上的基础模型(如Claude 3.5 Sonnet或DeepSeek-V3)进行交互的主要入口点。
- Tool Callbacks(工具回调):注解并暴露给LLM的Java方法,使代理能够获取实时数据、查询数据库或执行事务逻辑。
- ChatMemory(聊天记忆):持久化的对话历史管理,用于在多轮交互中保持上下文。
- Resilience4j集成:断路器和速率限制器,用于平稳处理间歇性API故障和延迟峰值。
为了管理企业代理所需的高吞吐量,开发人员可以配置其Spring应用程序,通过n1n.ai路由请求,从而确保各个LLM提供商之间的最佳负载均衡和高可用性。
配置Spring AI与Amazon Bedrock
首先,在Maven或Gradle项目中配置必要的Spring Boot和Spring AI依赖项。确保使用Spring Boot 3.3或更高版本以获得最佳兼容性。
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-amazon-bedrock-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
在application.yml中配置应用程序属性以进行AWS身份验证并选择默认的基础模型:
spring:
ai:
bedrock:
aws:
region: us-east-1
access-key: ${AWS_ACCESS_KEY_ID}
secret-key: ${AWS_SECRET_ACCESS_KEY}
chat:
enabled: true
options:
model: anthropic.claude-3-5-sonnet-20241022-v2:0
temperature: 0.2
max-tokens: 2048
实现工具调用和函数执行
工具调用允许LLM通过生成映射到Java方法的结构化JSON负载来请求数据或触发外部系统。Spring AI通过@Tool注解和函数回调简化了这一过程。
以下是一个天气和库存检索工具的示例:
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.stereotype.Component;
@Component
public class EnterpriseTools {
@Tool(description = "根据指定的SKU ID检索实时库存水平")
public InventoryStatus checkInventory(String skuId) {
// 查询仓库数据库的业务逻辑
return databaseService.queryStock(skuId);
}
}
将此工具注册到您的ChatClient构建器Bean中:
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AgentConfiguration {
@Bean
public ChatClient agentChatClient(ChatClient.Builder builder, EnterpriseTools enterpriseTools) {
return builder
.defaultSystem("你是一个自主的企业运营助手。请使用可用的工具准确回答用户的查询。")
.defaultTools(enterpriseTools)
.build();
}
}
添加对话记忆与容错机制
生产级代理必须记住用户上下文,并在不崩溃的情况下处理上游API超时。Spring AI为使用关系数据库或内存存储(如Redis)的聊天记忆提供了强大的抽象。
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.memory.InMemoryChatMemory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MemoryConfig {
@Bean
public ChatMemory chatMemory() {
return new InMemoryChatMemory();
}
}
为了保护您的代理免受LLM提供商停机或速率限制的影响,请集成Resilience4j:
import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
import org.springframework.stereotype.Service;
@Service
public class ResilientAgentService \{
private final ChatClient chatClient;
public ResilientAgentService(ChatClient chatClient) \{
this.chatClient = chatClient;
\}
@CircuitBreaker(name = "bedrockService