Spring AI Alibaba-ReactAgent框架-chatbot智能体应用

目录

1、ReactAgent框架

[1.1、ReactAgent 的核心原理:ReAct 范式](#1.1、ReactAgent 的核心原理:ReAct 范式)

[1.2、ReactAgent 的内部构造](#1.2、ReactAgent 的内部构造)

[1.3、为什么需要 ReactAgent?](#1.3、为什么需要 ReactAgent?)

[1.4、构建一个 ReactAgent](#1.4、构建一个 ReactAgent)

2、示例:chatbot智能体应用

2.1、ChatBot运行

[2.2:开箱即用的 Web UI 聊天界面](#2.2:开箱即用的 Web UI 聊天界面)


1、ReactAgent框架

ReactAgent框架是spring-ai-alibaba-agent-framework中最核心、最常用的智能体(Agent)实现类。它赋予了大模型**"自主思考"** 和**"调用工具"**的能力,让 AI 不再只是一个只会陪聊的机器人,而是一个能真正帮你干活的智能助手。

是 Spring AI Alibaba 中实现"模型 + 工具 = 智能体"这一公式的核心载体。

1.1、ReactAgent 的核心原理:ReAct 范式

ReactAgent 的名字来源于 ReAct (Reasoning + Acting) 范式,即"推理 + 行动"。它的底层实际上是一个基于 Graph(图)的工作流引擎,通过多个节点循环协作来完成任务。

当用户提出一个问题时,ReactAgent 会进入一个**"思考 → 行动 → 观察 → 迭代"**的循环:

  1. 推理(Reasoning / Thought):模型先拆解问题,判断是否需要借助外部工具(比如查天气、读文件、执行代码等)。
  2. 行动(Acting / Action):如果需要,它会生成指令去调用你预先配置好的 Java 方法或外部 API。
  3. 观察(Observation):获取工具执行后的返回结果,并将这个新信息重新反馈给模型。
  4. 迭代(Iteration):模型结合新的观察结果再次进行推理。如果信息足够,就输出最终答案;如果不够,则继续下一轮循环,直到问题解决或达到最大尝试次数。

1.2、ReactAgent 的内部构造

从源码架构来看,ReactAgent 继承自 BaseAgent,其内部主要由以下几个核心组件驱动:

  • AgentLlmNode(模型节点):负责调用底层的 LLM(如通义千问)进行逻辑推理和决策。
  • AgentToolNode(工具节点):负责具体执行工具调用的逻辑。
  • Hook(钩子机制) :允许你在 Agent 生命周期的关键阶段(如调用模型前/后、调用工具前/后)插入自定义的逻辑,常用于实现限流、审批、日志记录或防死循环控制。如图是默认实现:

1.3、为什么需要 ReactAgent?

普通的 LLM 应用只能依靠模型训练时的历史数据来回答问题,存在知识滞后和幻觉问题。而 ReactAgent 的本质区别在于:

  • 打破知识边界:通过调用实时工具(如搜索、数据库查询),它能获取最新的信息。
  • 具备执行力:不仅能"说",还能通过 Function Calling 去"做"(比如执行 Shell 命令、修改业务数据)。
  • 处理复杂任务:面对需要多步骤推理的复杂需求,它能像人类一样一步步拆解并解决。

1.4、构建一个 ReactAgent

在 Spring AI Alibaba 中,创建一个 ReactAgent 非常简洁,通常使用建造者模式(Builder)进行链式配置:

java 复制代码
ReactAgent agent = ReactAgent.builder()
    .name("weather_agent")               // 智能体的唯一标识名称
    .model(chatModel)                    // 注入大脑:配置 ChatModel(如通义千问)
    .systemPrompt("你是天气预报助手...") // 设定人设与行为准则(System Prompt)
    .tools(myWeatherTool, mySearchTool)  // 赋予手脚:注册可调用的工具
    .hooks(someLimitHook)                // 可选:挂载拦截器或钩子
    .build();

// 发起对话,Agent 会自动开始 ReAct 循环
AssistantMessage reply = agent.call("帮我查一下深圳今天的天气,并推荐穿搭");

2、示例:chatbot智能体应用

官方examples目录下的 chatbot 示例,是一个用来快速体验和上手 Spring AI Alibaba Agent 框架的入门级智能体应用。它展示了如何用最少的代码构建一个具备工具调用能力的聊天机器人。

这个 ChatBot 不仅是一个简单的问答机器人,它是一个基于 ReAct(Reasoning + Acting)范式的智能体(Agent)。除了能进行日常对话外,它还内置了以下的工具能力:

  • 执行 Shell 脚本:可以在本地环境中运行命令行指令。
  • 执行 Python 代码:通过 GraalVM Python 库来动态执行 Python 脚本。
  • 查看本地文件:能够读取并展示指定文本文件的内容。

2.1、ChatBot运行

pom.xml 引入的三个核心依赖:

  • spring-ai-alibaba-agent-framework:核心的 Agent 开发框架。
  • spring-ai-alibaba-starter-dashscope:用于对接阿里云百炼大模型平台,去集成各种大模型。
  • spring-ai-alibaba-studio:可选依赖,提供开箱即用的 Web UI 聊天界面。
java 复制代码
public ReactAgent chatbotReactAgent(ChatModel chatModel,
	                                    @Qualifier("executeShellCommand")ToolCallback executeShellCommand,
	                                    @Qualifier("executePythonCode")ToolCallback executePythonCode,
	                                    @Qualifier("viewTextFile")ToolCallback viewTextFile,
			MemorySaver memorySaver) {
		return ReactAgent.builder()
				.name("SAA")// 智能体名称
				.model(chatModel) // 注入大模型(大脑)
				.instruction(INSTRUCTION) // 设定系统提示词
				.enableLogging(true)// 开启日志以便观察推理过程
				.saver(memorySaver)
				//.hooks()可选:挂载拦截器或钩子
				// Must set ShellToolAgentHook to manage shell session lifecycle for executeShellCommand
				.hooks(ShellToolAgentHook.builder().shellToolName(executeShellCommand.getToolDefinition().name()).build())
				.tools(
						executeShellCommand,
						executePythonCode,
						viewTextFile
				)// 赋予智能体工具能力
				.build();
	}

启动之后访问:http://localhost:8080/chatui/index.html?chatHistoryOpen=true

2.2:开箱即用的 Web UI 聊天界面

前端界面代码位于在spring-ai-alibaba-studio的jar包里,该jar包也包含了对应的REST API 。

可以基于该源码客开自己项目本地的,或者集成成熟的开源的 Chatbot UI。

相关推荐
江畔柳前堤3 小时前
roLabelImg 详细安装教程
开发语言·人工智能·后端·云原生
阿里云大数据AI技术3 小时前
分链路差异化设计的DSP准实时数仓|钛动科技基于阿里云实时计算 Flink 版 + DLF Paimon + EMR Serverless StarRocks 的实践
人工智能·flink
陕西企来客3 小时前
2026年7月AI智能搜索曝光趋势研判
大数据·人工智能·机器学习·ai智能搜索曝光
阿里云大数据AI技术4 小时前
从算力到智能体,面向 Agentic AI 的基础设施演进
人工智能·agent
hangyuekejiGEO5 小时前
GEO技术服务选型指南
大数据·人工智能·python
阿里云大数据AI技术5 小时前
EMR Serverless Spark AI Function 的双维降本实践
人工智能·sql·spark
维基框架5 小时前
GitHub源码处理提速 一趟扫描反而更慢
人工智能·github
冬奇Lab5 小时前
代码库知识库系列(05):向量检索 vs 知识图谱——加了调用图并没有变更好
人工智能
AKAMAI5 小时前
你的源服务器可能是你做出的最昂贵决定
运维·人工智能·云计算
冬奇Lab6 小时前
【无标题】
人工智能·开源