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";
	}
相关推荐
大模型教程.2 小时前
收藏级教程:ReAct模式详解,让大模型从回答问题到解决问题
前端·人工智能·机器学习·前端框架·大模型·产品经理·react
水坚石青2 小时前
Java+Swing+Mysql实现物业管理系统
java·开发语言·数据库·mysql·swing
飞凌嵌入式2 小时前
AIoT出海背景下,嵌入式主控的国际认证之路与价值思考
大数据·人工智能·嵌入式硬件·区块链·嵌入式
尼古拉斯·纯情暖男·天真·阿玮2 小时前
[JavaEE初阶] Thread类的基本用法
java·开发语言
Robot侠2 小时前
多模态大语言模型(Multimodal LLM)技术实践指南
人工智能·语言模型·自然语言处理·transformer·rag·多模态大模型
Wpa.wk2 小时前
自动化测试(java) - PO模式了解
java·开发语言·python·测试工具·自动化·po模式
roman_日积跬步-终至千里2 小时前
【计算机视觉概述】:从像素到理解的完整图景
人工智能·计算机视觉
IT 行者2 小时前
Spring Security 7.0 新特性详解
java·后端·spring
Light602 小时前
【MCP原生时代】第7篇|治理与合规:在模型驱动自动化中把控法律、隐私与伦理风险——把“能做什么”变成可审计、可解释、可追责的企业能力
人工智能·隐私·审计·治理·合规·mcp·伦理