通过 Spring AI Alibaba 源码,看如何玩转 ReAct 智能体范式

希望通过本文的分析,帮助大家跳出 API 的表面使用,从运行机制和架构设计的角度理解 ReAct Agent 的本质。

核心前置知识

从"只会聊天"到"学会行动"

以前的大模型,更像是个"纸上谈兵的军师"。你问它什么,它都能陪你聊上三天三夜,可一旦涉及查实时天气、调内部接口、改数据库,它就抓瞎了------因为这时候的它,只会聊天。而 ReAct 模式(Reasoning + Acting,推理+行动),就是教大模型学会行动的绝妙招式。它通过一套"思考 →\rightarrow → 行动 →\rightarrow → 观察"的闭环控制流,让大模型在遇到不懂的问题时,能主动停下来去"翻书"或"搬救兵"(调用工具)。

ReAct Agent 的底层运行图

从运行机制来看,一个 Agent 的底层运行模型,本质上是一张 Graph。

什么是Graph(图)

在计算机科学中,Graph(图)是一种用于描述节点之间关系的数据结构。

它由两部分组成:

Node(节点) Edge(边)

其中,节点表示一个实体,边表示实体之间的连接关系。(其实就是流程图)

例如一个简单的审批流程:

这里:

每一个审批步骤都是一个节点; 节点之间的流转路径就是边; 整个审批过程构成了一张图。

Graph在React Agent中的工作流程

React模式我们可以用以下流程图表示出

  1. 将用户内容发送给LLM,同时告诉LLM,可以使用的TOOL
  2. LLM进行推理分析,返回结果
  3. 判断是否需要调用TOOL
  • 如果不需要调用,则结束
  • 如果需要调用则进行调用,将调用结果再返回给LLM,供LLM进行下一次思考(返回到了2)

SpringAI alibaba 核心源码学习

官方使用教程:java2ai.com/

流程概览

我们先通过以下代码输出alibaba,为ReactAGent编排的工作流

java 复制代码
  this.chatModel = DashScopeChatModel.builder().dashScopeApi(dashScopeApi).build();
        ReactAgent translatorAgent = ReactAgent.builder()
                .name("translator_agent")
                .model(chatModel)
                .tools(new DateTimeTools())
                .description("擅长将文章翻译成各种语言")
                .instruction("你是一个专业的翻译家,能够准确地将文章翻译成目标语言。")
                .outputKey("translator_output")
                .build();


        GraphRepresentation graph = translatorAgent.getAndCompileGraph().stateGraph.getGraph(GraphRepresentation.Type.PLANTUML);
        System.out.println(graph.content());

将输出的PlantUML转换成流程图后,可以清楚的看到alibaba对ReactAgent设置的Graph

  • InstructionAgentHook: 内置的钩子(先不管)
  • Agent_Model:调用LLM
  • check_state:判断要不要调用tool
  • Agent_tool:调用tool

钩子

钩子其实就是面向切面的思想,可大致分为两类,一类是在调用LLM节点前后执行。另一类是在这个Agent执行前后执行。

initGraph

代码位置: com.alibaba.cloud.ai.graph.agent.ReactAgent#initGraph

执行时机:

当ReactAgent第一次被调用时,会执行initGraph初始化Graph,React的核心流程也在这里完成

核心代码

  • 将调用LLM节点转换成一个Node并加入到Graph
  • 判断是否有工具,如果有将工具节点加入到Graph
  • 获取所有钩子
  • 把钩子转换为节点并添加到流程图中
  • 添加边(给流程图连线)
  • start节点连第一个节点(entryNode)
  • 把所有钩子都连上线

工具边的处理 当判断该Agent有tool时调用setupToolRouting

代码位置 com.alibaba.cloud.ai.graph.agent.ReactAgent #setupToolRouting

这两行代码添加了两个条件节点,是实现Tool Calling的核心代码

也就是添加了这两个被框出来的条件边

第一个边是,处理LLM返回消息到程序,判断是该结束,还是该调工具 第二个边是,处理拿到工具执行结果后该结束还是该返回LLM节点,继续思考

makeModelToTools关键代码

如果没有tool调用就结束,有就进工具节点

makeToolsToModelEdge关键代码

如果调用完工具后不需要再经LLM了,则直接end,否则回到LLM调用节点

结尾

ReAct Agent 本质上就是一个由 LLM 驱动的动态工作流(Workflow)。

通过对 ReAct Agent 关键源码的剖析,从运行机制上看,ReAct Agent 本质上是一套基于 Graph 的工作流系统, 所谓的 ReAct(Reason + Act),实际上就是让大模型在工作流中不断完成「思考 → 行动 → 观察 → 再思考」的循环,直到任务结束。

技术迭代的速度每天都在加快,但底层设计的艺术往往历久弥新。欢迎在评论区留言,我们一起"点亮"更多硬核技术栈!

相关推荐
万少5 小时前
DeepSeek 昨晚刚开源了 Harness:附万少的2 万字保姆级教程
前端·后端·架构
To_OC8 小时前
别死磕 Prompt 了!我用 Harness 流水线,让大模型自动产出高质量代码
人工智能·llm·agent
恒拓高科WorkPlus8 小时前
企业级即时通讯与数字协同平台:BeeWorks如何连接沟通、文档、业务与AI
人工智能
XGeFei8 小时前
【AI应用/Agent智能体搭建平台2】Dify——自部署
人工智能·笔记·学习
hans汉斯9 小时前
《软件工程与应用》期刊推荐&10月版面征稿中
图像处理·人工智能·深度学习·算法·音视频·软件工程
前端开发江鸟9 小时前
为了实现“小说自由”,我搭了一套 AI 小说工作流,结果却不如回家种田
人工智能
大鸡腿同学9 小时前
身弱体质|你的 FM 该关了📻
后端
叠层归一研究院9 小时前
AGI 系统(八):符号范畴嵌入函子 — SymCat ↪ C_M107 严格化
c语言·开发语言·人工智能·算法·transformer·agi
2601_964840279 小时前
4G云门禁普惠化技术实践:基于边缘计算破解成本、隐私、部署三大行业瓶颈
大数据·人工智能·边缘计算
明朝百晓生9 小时前
Deep RL learning[2026/8]
开发语言·javascript·人工智能