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";
	}
相关推荐
2601_94959365几秒前
深入解析CANN-acl应用层接口:构建高效的AI应用开发框架
数据库·人工智能
●VON3 分钟前
CANN安全与隐私:从模型加固到数据合规的全栈防护实战
人工智能·安全
刘大大Leo9 分钟前
GPT-5.3-Codex 炸了:第一个「自己造自己」的 AI 编程模型,到底意味着什么?
人工智能·gpt
小镇敲码人12 分钟前
剖析CANN框架中Samples仓库:从示例到实战的AI开发指南
c++·人工智能·python·华为·acl·cann
摘星编程20 分钟前
CANN ops-nn Pooling算子解读:CNN模型下采样与特征提取的核心
人工智能·神经网络·cnn
程序员清洒34 分钟前
CANN模型安全:从对抗防御到隐私保护的全栈安全实战
人工智能·深度学习·安全
island131438 分钟前
CANN ops-nn 算子库深度解析:神经网络计算引擎的底层架构、硬件映射与融合优化机制
人工智能·神经网络·架构
小白|41 分钟前
CANN与实时音视频AI:构建低延迟智能通信系统的全栈实践
人工智能·实时音视频
Anastasiozzzz42 分钟前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
Kiyra42 分钟前
作为后端开发你不得不知的 AI 知识——Prompt(提示词)
人工智能·prompt