图片

让Java开发者像写Spring Boot一样开发AI应用——第二课

写在前面

第一天的课程,我们创建了第一个AI Agent——一位“智能心理咨询师”。它能够根据我们设定的角色和指令,给出专业、有温度的回应。

但有一个问题:它只能“说”,不能“做”。

如果用户问:“明天杭州天气怎么样,帮我规划一下行程?”它要么编造一个天气,要么告诉你“我查不到实时天气”。

今天的课,就是要解决这个问题。

ReAct范式,让AI从“会说话的AI”进化为“会思考、会动手的AI”。


一、ReAct是什么?不是模型,是“执行逻辑”

很多人以为ReAct是一种新的AI模型。不是的。

ReAct(Reasoning + Acting)不是大模型的能力,而是一种让大模型执行任务的逻辑框架。它定义了AI在处理复杂问题时的行为模式——先想清楚做什么,再做,做完看结果,根据结果决定下一步。

就是这个“想→做→看→再想”的循环,把AI从“一问一答”的被动模式,拉到了“自主推理”的主动模式。

普通ChatModel vs ReAct Agent:一张表看懂

| 对比维度

|

ChatClient(单次对话)

|

ReAct Agent(自主执行)

交互模式

|

用户提问 → 模型回答 → 结束

|

用户给目标 → Agent规划 → 行动 → 观察 → 行动 → … → 完成

| |

决策权

| 每次由人主动发起 | Agent自主循环,主动决策 | |

任务边界

|

单轮或多轮问答

| 直到任务完成为止 |

一句话总结:如果说第一天的Agent是“会说话的AI”,那今天的ReAct Agent就是 “会思考、会动手的AI” 。它不再是等你想好问题再回答,而是自己会想“我现在该做什么?”,然后主动去做——做完再看结果,再想下一步该做什么。


二、核心链路:Thought → Action → Observation

ReAct的核心是一个迭代循环,模型会按顺序不断生成“思考→行动→观察”的轨迹。

用一个天气查询的例子来说明:

<span leaf="">💭 Thought(思考):我需要先查明天上海的天气……</span>

三个关键步骤拆解

| 步骤

|

作用

|

关键理解

Thought(思考)

分析当前状态,决定下一步做什么

|

这是ReAct与普通ChatModel最核心的区别——模型在“想”,而不只是“说”

| | Action(行动) |

调用工具或执行操作

|

可以是调用外部API、查询数据库、执行计算

| | Observation(观察) |

获取执行结果

|

作为下一轮Thought的输入

|

这个循环会持续进行,直到任务完成或达到终止条件。


三、Agent的四大核心组件

Spring AI Alibaba的Agent基于ReAct框架,包含四大核心组件:

| 组件

|

作用

|

对应Builder方法

大脑(大模型)

负责思考、决策、规划

| .model(chatModel) | | 工具集 |

Agent可调用的所有能力

| .tools(toolCallback)

 / .methodTools(object)

| | 记忆系统 |

短期记忆(当前会话)+ 长期记忆(跨会话)

| .saver(memorySaver) | | 系统提示词 |

定义Agent的角色、行为规范、约束条件

| .systemPrompt(prompt)

 / .instruction(prompt)

|


四、Builder模式详解:5个核心方法

ReactAgent采用经典的Builder设计模式,通过链式调用完成配置与构建:

<span leaf=""><span>ReactAgent</span>&nbsp;<span>agent</span>&nbsp;<span>=</span>&nbsp;ReactAgent.builder()</span>

① .name(String name) —— Agent的身份标识

为Agent设置唯一名称,用于日志追踪、调试和多Agent编排场景下的识别。

💡最佳实践:名称应具有业务语义,便于在日志和监控中快速定位问题。

② .model(ChatModel chatModel) —— 绑定大模型

将具体的大模型实例注入Agent,作为其“大脑”:

<span leaf=""><span>DashScopeApi</span>&nbsp;<span>api</span>&nbsp;<span>=</span>&nbsp;DashScopeApi.builder()</span>

③ .systemPrompt(String prompt) —— 定义Agent行为(最关键!)

这是影响Agent回复质量最关键的配置。systemPrompt定义了Agent的角色定位、行为规范和约束条件。

好的systemPrompt应该包含:

  • 角色定位:你是谁?(如“你是一名10年经验的资深心理咨询师”)

  • 能力边界:你能做什么?

  • 行为约束:你应该怎么做?

  • 风格要求:以什么风格回复?

对比示例:

<span leaf=""><span>// ❌ 差:信息太少,模型不知道该怎么表现</span></span>

⚠️ 课堂强调:systemPrompt不是“装饰品”,它是Agent行为的 “宪法” 。写得好不好,直接决定了Agent回复的质量和可靠性。

④ .tools(ToolCallback… tools) —— 注册工具

让Agent获得“动手能力”——调用外部函数、API、数据库等。

方式一:使用FunctionToolCallback(推荐)

<span leaf=""><span>ToolCallback</span>&nbsp;<span>weatherTool</span>&nbsp;<span>=</span>&nbsp;FunctionToolCallback.builder(”get_weather”,&nbsp;<span>new</span>&nbsp;<span>WeatherTool</span>())</span>

方式二:使用@Tool注解 + methodTools(更简洁)

<span leaf=""><span>class</span>&nbsp;<span>WeatherTool</span>&nbsp;{</span>

⑤ .saver(Saver saver) —— 配置记忆存储

让Agent具备“记忆力”——保存对话历史,实现多轮对话的上下文理解。

<span leaf=""><span>// 使用内存存储(适合开发测试)</span></span>

💡 为什么需要Saver?没有记忆的Agent每次对话都是“失忆”的——上一轮你说“我叫小明”,下一轮它问“你叫什么名字?”。Saver让Agent能够记住对话历史,实现真正的连贯对话。


五、代码实战:对比ChatModel与ReAct Agent

实战一:无工具的纯推理Agent

构建一个不带任何工具的Agent,观察其“纯推理”过程:

<span leaf=""><span>@Service</span></span>

课堂观察点:

  • Agent虽然没有工具,但仍然会尝试“推理”

  • 观察模型是否按照systemPrompt要求的格式输出

  • 对比“有思考过程”和“无思考过程”的答案质量差异

实战二:ChatModel vs ReAct Agent 对比实验

用同一个问题分别问ChatModel和ReAct Agent,观察差异:

<span leaf=""><span>@Service</span></span>

预期对比结果:

| | ChatModel

|

ReAct Agent

天气信息

|

可能编造或说“我不知道”

| 调用工具获取真实天气 | |

行程规划

|

通用的模板化建议

| 结合天气做针对性建议 | |

推理过程

|

不可见(黑盒)

| Thought→Action→Observation全可见 |

💡 核心结论:ChatModel是“知道什么说什么”,ReAct Agent是 “不知道就去查,查完再思考,思考完再说” 。


六、systemPrompt:一段话改变Agent“人格”

用同一个问题,搭配不同的systemPrompt,观察回复差异:

| 实验组

|

systemPrompt

|

预期效果

A组

|

“你是一个助手”

|

通用、平淡的回复

| |

B组

|

“你是一名资深心理咨询师,以温暖专业的态度回应”

|

有温度、有深度的回复

| |

C组

|

“你是毒舌吐槽专家,用幽默讽刺的方式回应”

|

风格鲜明的吐槽式回复

|

演示代码:

<span leaf=""><span>public</span>&nbsp;<span>void</span>&nbsp;<span>compareSystemPrompts</span>() {</span>

💡 结论:systemPrompt是影响Agent回复质量性价比最高的配置——不需要改代码、不需要加工具,仅仅改变一段文字就能让Agent表现出完全不同的“人格”和专业度。


七、课后挑战

任务:为Agent添加详细的systemPrompt,观察其对回复质量的影响

基于第一天的3个Agent(心理咨询师、编程助手、法律顾问),为每个Agent设计3个不同版本的systemPrompt(粗、中、细),用同一个问题测试3个版本,记录回复差异。

验收标准:

  • 为每个Agent设计了3个不同精细度的systemPrompt

  • 记录了至少9组(3 Agent × 3 Prompt)对比实验结果

  • 能总结出systemPrompt设计的3条核心原则


八、本日核心收获

  1. ReAct = Reasoning + Acting,让模型在推理和行动之间交替

  2. Thought → Action → Observation 是ReAct的核心循环

  3. systemPrompt是性价比最高的配置——一段话改变Agent“人格”

  4. 工具让Agent从“会说”变成“会做” ——工具是把聊天机器人升级为Agent的那条分界线

  5. ChatModel是“知道什么说什么”,ReAct Agent是“不知道就去查”


📌 本文要点回顾:ReAct范式让AI从“被动回答”进化为“主动解决问题”。通过“思考→行动→观察”的循环,Agent能够自主完成复杂的多步任务。而Spring AI Alibaba的ReactAgent.Builder模式,让Java开发者可以用不到50行代码,构建出一个具备自主推理和行动能力的智能体。

有任何问题,欢迎在评论区留言交流!


作者:Java老兵搞AI,专注Java生态下的AI应用开发

如果觉得有用,点个「在看」支持一下吧