spring ai alibab agent之ReactAgent深度解读

spring ai alibab agent之ReactAgent

一、什么是 Agent 模式

在大模型(LLM, Large Language Model)应用中,Agent 指的是:

能够自主规划、推理、调用工具并与外部环境交互的智能体。

与普通对话模型不同,Agent 不仅能"回答问题",还可以:

  1. 理解目标(Goal)
  2. 制定计划(Planning)
  3. 调用外部工具(Tool / API)
  4. 处理结果(Observation)
  5. 生成最终答案(Final Answer)

二、ReAct 模式简介

ReAct 是 "Reason + Act" 的缩写,来自论文:

ReAct: Synergizing Reasoning and Acting in Language Models

(Harvard & Google Research, 2022)

其核心思想是:

让模型在"思考(Reason)"与"行动(Act)"之间交替循环,直至完成任务。

这是一种通用的 Agent 推理与执行框架。


三、ReAct 的核心流程

组件 说明
LLM 语言模型本体,负责生成 Thought 与 Action
Memory 存储上下文、历史交互和工具调用结果
Tools 可被调用的外部函数、API、数据库、插件等
Parser 解析 LLM 输出,识别 Thought/Action/Final Answer
Loop Controller 控制 Reason-Act 循环,防止无限循环
Environment Agent 作用的外部环境(系统、文件、用户等)

一个典型的 ReAct Agent 执行过程如下:

text 复制代码
Thought: 我需要了解用户账户余额。
Action: 调用函数 get_balance(user_id=123)
Observation: 返回结果是 500 元。
Thought: 用户账户余额足够,我可以继续下单。
Action: 调用函数 place_order(item="电脑", price=400)
Observation: 下单成功。
Thought: 任务完成。
Final Answer: 用户已成功购买电脑。

四、spring ai alibaba是如何实现ReactAgent

ReactAgent是基于组件graph构建的应用层组件,它是一个内置单agent的实现,muti-agent基数也是在这个基础之上的。ReactAgent 实现依赖内置的graph Node节点,LlmNode和ToolNode,这个两个是关键点,ReactAgentLoop Controller 通过在这两个节点循环实现的。

这里边有一个重要提示,spring ai实现mcp时使用的模型的functioncall功能,而且封装的工具执行器,默认模型返回function call方法会自动执行,所以在配置ReactAgent model client时,需要注意需要改变这个默认值,不要自动执行。这是ToolNode节点能够执行的关键。就像使用下面的方式:

复制代码
ChatClient chatClient = ChatClient.builder(chatModel)
			.defaultToolNames("getWeatherFunction")
			.defaultAdvisors(new SimpleLoggerAdvisor())
			.defaultOptions(OpenAiChatOptions.builder().internalToolExecutionEnabled(false).build())
			.build();

在整个ReactAgent流转状态OverAllState 中有一个key名为messages的状态值,这个是ReactAgent默认的输入

复制代码
ReactAgent.builder()
			.name("React Agent Demo")
			.chatClient(chatClient)
			.resolver(resolver)
			.maxIterations(10)
			.build();

这个是代码中的备注:

复制代码
// For graph built from ReactAgent, the only legal key used inside must be
		// messages.
		// if (outputKey != null && !outputKey.isEmpty()) {
		// llmNodeBuilder.outputKey(outputKey);
		// }

也就是说使用LlmNode唯一合法输入key OverAllState key必须是messages, 要不然LlmNode和ToolNode循环,两个节点的信息没有办法做交互,他们采用追加策略,最新的消息在最后一条。这个是ReactAgent使用前提

核心think代码:

java 复制代码
private String think(OverAllState state) {
    //迭代次数
		if (iterations > max_iterations) {
			return "end";
		}
    // 这个是中断函数,什么时候直接中断
		if (shouldContinueFunc != null && !shouldContinueFunc.apply(state)) {
			return "end";
		}

    // 这是一个关键,模型节点执行后,返回结果,如果返回结果最后一条信息,LlmNode执行完会将结果追加到队列尾部,如果结果有function call信息,就到tool节点,tool执行完会把结果追加到messages,模型会取 messages作为大模型的上下文,给模型,让模型判断是否执行完,还是接着选中tool执行。
		List<Message> messages = (List<Message>) state.value("messages").orElseThrow();
		AssistantMessage message = (AssistantMessage) messages.get(messages.size() - 1);
		if (message.hasToolCalls()) {
			return "continue";
		}

		return "end";
	}
相关推荐
卷福同学9 小时前
不用服务器,不用配环境,我10分钟上线了一个AI Agent
人工智能·后端·算法
码兄科技10 小时前
Java AI智能体开发实战:从零构建智能对话系统指南
java·开发语言·人工智能
Zik----10 小时前
CCswitch-code
人工智能
折哥的程序人生 · 物流技术专研11 小时前
第8篇:六大设计原则在工厂模式中的体现
java·设计模式·设计原则·工厂模式·编程进阶·扩充系列
小明bishe1811 小时前
计算机毕业设计之基于JAVA的植物科普网站
java·spring boot·spring·架构·课程设计
r_oo_ki_e_11 小时前
Java Map 集合学习笔记
java·笔记·学习
AI科技星11 小时前
全域谱分析:无穷维超复数信息场分形统一场论 ——自然、量子、金融多重分形第一性原理完整体系(中英双语终稿)
人工智能·机器学习·金融·乖乖数学·全域数学
stormzhangV12 小时前
为什么你的 AI 像智障
人工智能
SL-staff12 小时前
智慧园区2000+设备统一管理:JVS-IoT如何降低运维成本40%
java·开发语言·物联网·智慧园区·设备管理·运维优化·jvs-iot
ai产品老杨12 小时前
H264 H265视频分析常见问题和排查清单
人工智能·算法·音视频