Spring AI Alibaba框架构建智能体Agent的完整指南

 更新时间:2026年03月30日 09:42:02   作者:LucaJu  
随着大语言模型(LLM)技术的快速发展,构建智能Agent应用变得越来越简单,本文将通过两个实际的代码示例,展示如何使用Spring AI Alibaba框架构建功能丰富的天气查询Agent,感兴趣的小伙伴可以了解下

前言

随着大语言模型(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);

通过RunnableConfigthreadId实现多轮对话的上下文保持。

总结

通过这两个示例,我们可以看到Spring AI Alibaba框架在构建智能Agent应用方面的强大能力:

  • SimpleTest展示了快速原型开发的能力,适合概念验证和学习
  • RealAgent则创建了一个基础的 ReactAgent,接下来可以:
    • 探索更多的工具集成
    • 学习如何使用不同的 Checkpoint 实现对话持久化
    • 了解如何使用 Hooks 扩展 agent 功能
    • 学习如何创建多 agent 系统

到此这篇关于Spring AI Alibaba框架构建智能体Agent的完整指南的文章就介绍到这了,更多相关Spring AI Alibaba构建智能体内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java 多线程传值的四种方法

    Java 多线程传值的四种方法

    这篇文章主要介绍了Java 多线程传值的四种方法,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下
    2020-09-09
  • MyBatis实现SQL映射文件

    MyBatis实现SQL映射文件

    映射器是 MyBatis 中最复杂并且是最重要的组件,本文主要介绍了MyBatis实现SQL映射文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • Linux系统中检查Java版本的三种高效方法

    Linux系统中检查Java版本的三种高效方法

    本文介绍了在Linux系统中检查Java版本的三种高效方法,并探讨了Java版本的重要性及其检查原因,通过了解Java版本格式和不同方法,用户可以确保应用的兼容性、性能和安全性,需要的朋友可以参考下
    2025-12-12
  • Java反射与Fastjson的危险反序列化详解

    Java反射与Fastjson的危险反序列化详解

    在 Java 中,Computer.class是一个引用,它表示了 Computer 的字节码对象(Class对象),这个对象被广泛应用于反射、序列化等操作中,那么为什么 parseObject 需要这个引用呢,带着这个问题我们一起通过本文学习下吧
    2024-07-07
  • 一文详解Java如何实现将PowerPoint转换为HTML

    一文详解Java如何实现将PowerPoint转换为HTML

    在日常开发和业务场景中,我们经常会遇到将PowerPoint(PPT)演示文稿转换为HTML的需求,本文将深入探讨如何使用Java将PowerPoint文档转换为HTML,包括整体转换和指定幻灯片转换两种场景,希望对大家有所帮助
    2025-12-12
  • 基于SpringMVC对接前端参数注解

    基于SpringMVC对接前端参数注解

    这篇文章主要介绍了基于SpringMVC对接前端参数注解的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Java中增强for循环在一维数组和二维数组中的使用方法

    Java中增强for循环在一维数组和二维数组中的使用方法

    下面小编就为大家带来一篇Java中增强for循环在一维数组和二维数组中的使用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • Spring mvc拦截器实现原理解析

    Spring mvc拦截器实现原理解析

    这篇文章主要介绍了Spring mvc拦截器实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • jenkins 构建项目之 pipeline基础教程

    jenkins 构建项目之 pipeline基础教程

    &#8203;pipeline ,简单来说,就是一套运行在 jenkins 上的工作流框架。这篇文章主要介绍了jenkins 构建项目之 pipeline基础教程,需要的朋友可以参考下
    2020-07-07
  • SpringBoot JPA实现查询多值

    SpringBoot JPA实现查询多值

    这篇文章主要为大家详细介绍了SpringBoot JPA实现查询多值,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08

最新评论