如何用Spring AI Alibaba打造智能体Agent?

摘要:本文详解使用Spring AI Alibaba框架,结合DashScope和React Agent,通过两个实战案例(基础测试+生产级应用),教你快速构建Java AI智能体
前言 随着大语言模型(LLM)技术的快速发展,构建智能Agent应用变得越来越简单。本文将通过两个实际的代码示例,展示如何使用Spring AI Alibaba框架构建功能丰富的天气查询Agent,从基础的测试实现到生产级的完整应用。 技术栈概述 Spring AI Alibaba: 阿里巴巴开源的AI应用开发框架 DashScope: 阿里云的AI模型服务平台 React Agent: 基于ReAct(Reasoning and Acting)范式的智能代理 示例一:SimpleTest - 快速入门 添加核心依赖 <dependencies> <!-- Spring AI Alibaba Agent Framework --> <dependency> <groupId>com.alibaba.cloud.ai</groupId> <artifactId>spring-ai-alibaba-agent-framework</artifactId> <version>1.1.2.0</version> </dependency> <!-- DashScope ChatModel 支持(如果使用其他模型,请跳转 Spring AI 文档选择对应的 starter) --> <dependency> <groupId>com.alibaba.cloud.ai</groupId> <artifactId>spring-ai-alibaba-starter-dashscope</artifactId> <version>1.1.2.0</version> </dependency> </dependencies> 代码结构分析 @Test void agentTest() throws GraphRunnerException { // 1. 初始化 DashScope API DashScopeApi dashScopeApi = DashScopeApi.builder() .apiKey(System.getenv("AliQwen_API")) .build(); // 2. 创建 ChatModel ChatModel chatModel = DashScopeChatModel.builder() .dashScopeApi(dashScopeApi) .build(); // 3. 定义天气工具 ToolCallback weatherTool = FunctionToolCallback.builder("get_weather", new WeatherTool()) .description("获取某个城市的天气") .inputType(String.class) .build(); // 4. 构建React Agent ReactAgent agent = ReactAgent.builder() .name("weather_agent") .model(chatModel) .tools(weatherTool) .systemPrompt("你是一个非常有帮助的助手") .saver(new MemorySaver()) .build(); // 5. 调用Agent AssistantMessage response = agent.call("上海今天天气怎么样?"); System.out.println(response.getText()); } 核心特性 简洁的配置: 通过Builder模式快速构建Agent 工具集成: 使用FunctionToolCallback将自定义函数包装为Agent可调用的工具 内存存储: 使用MemorySaver保存对话历史 中文支持: 完整的中文提示词和工具描述 自定义工具实现 class WeatherTool implements BiFunction<String, ToolContext, String> { @Override public String apply(String city, ToolContext toolContext) { return city + "今天天气非常好!"; } } 这个简单的工具类展示了如何将业务逻辑封装为Agent可调用的函数。 示例二:RealAgent - 真实的智能体 高级特性概览 相比SimpleTest,RealAgent展示了更多生产级特性: 精细的模型配置 多工具协同 结构化输出 对话上下文管理 核心代码解析 1. 系统提示词设计 String SYSTEM_PROMPT = """ 你是一位擅长说**天气冷笑话/谐音梗**的专业天气预报员。 你可以使用两个工具: - **get_weather_for_location**:用于获取指定地点的天气 - **get_user_location**:用于获取用户当前所在位置 如果用户询问天气,**必须先确认地点**。 如果从问题中能判断出他们指的是**自己所在的地方**, 就使用 **get_user_location** 工具获取他们的位置。 """; 这个提示词体现了几个重要设计原则: 角色定位: 明确Agent的身份和特色 工具说明: 清晰描述可用工具的功能 行为约束: 规定了工具使用的逻辑顺序 2. 模型参数优化 ChatModel chatModel = DashScopeChatModel.builder() .dashScopeApi(dashScopeApi) .defaultOptions(DashScopeChatOptions.builder() .model(DashScopeChatModel.DEFAULT_MODEL_NAME) .temperature(0.5) // 平衡创造性和准确性 .maxToken(1000) // 控制响应长度 .build()) .build(); 3. 多工具协同 // 天气查询工具 ToolCallback getWeatherTool = FunctionToolCallback .builder("getWeatherForLocation", new WeatherForLocationTool()) .description("获取一个给定城市的天气") .inputType(String.class) .build(); // 用户定位工具 ToolCallback getUserLocationTool = FunctionToolCallback .builder("getUserLocation", new UserLocationTool()) .description("根据User Id获取用户位置") .inputType(String.class) .build(); 4. 结构化输出配置 ReactAgent agent = ReactAgent.builder() // ... 其他配置 .outputType(ResponseFormat.class) // 指定输出格式 .hooks(humanInTheLoopHook) .build(); 5. 对话上下文管理 RunnableConfig runnableConfig = RunnableConfig.builder() .threadId(Thread.currentThread().getId() + "") .build(); // 第一次调用 AssistantMessage response1 = agent.call("上海今天天气怎么样", runnableConfig); // 第二次调用(保持上下文) AssistantMessage response2 = agent.call("明天天气怎么样", runnableConfig); 通过RunnableConfig的threadId实现多轮对话的上下文保持。 总结 通过这两个示例,我们可以看到Spring AI Alibaba框架在构建智能Agent应用方面的强大能力: SimpleTest展示了快速原型开发的能力,适合概念验证和学习 RealAgent则创建了一个基础的 ReactAgent,接下来可以: 探索更多的工具集成 学习如何使用不同的 Checkpoint 实现对话持久化 了解如何使用 Hooks 扩展 agent 功能 学习如何创建多 agent 系统 参考资料 Spring AI Alibaba官方文档 DashScope平台