Java AI转型实战(十):Agent 智能体初探

95 阅读3分钟

让 AI 不只是“回答问题”,而是“完成任务”

01 引子

在之前的九篇文章中,我们完成了:

  • Spring AI 核心功能(多轮对话、流式输出、Function Calling、Output Parser)
  • RAG 完整链路(文档加载、向量化、混合检索、元数据过滤)

这些能力让 AI 能够回答问题,并且回答得越来越精准。

但有一个问题始终存在:用户需要自己拆解任务。

比如用户说“我现在在北京,想出门散步”,他需要自己去查天气、看空气质量、规划路线——AI 只能回答“好的”或者给一些通用建议。

如果 AI 能主动调用工具获取实时信息,再给出针对性建议呢?

这就是 Agent 要做的事。

02 什么是 Agent?

一句话定义:  Agent 是一个能够自主理解意图、调用工具、完成任务的 AI 系统。

对比理解:

能力普通对话Function CallingAgent
理解用户意图✅✅✅
调用单个工具❌✅✅
多工具协作❌❌✅
自主规划步骤❌❌✅
根据结果调整❌❌✅

03 ReAct 模式:Agent 的工作方式

ReAct = Reasoning(推理)+ Acting(行动)

这是目前最主流的 Agent 工作模式:

image.png

核心思想:  Agent 不是一次性回答,而是“思考 → 行动 → 观察 → 再思考”的循环过程。

04 代码实现

4.1 准备工作:已有的 Tool

在之前的实战中,我们已经定义了 Tool:

WeatherTool.java

image.png

TimeTool.java

image.png

4.2 创建 Agent 服务

AgentService.java

image.png

4.3 创建 Controller

AgentController.java

image.png

05 测试验证

场景一:多工具协作

请求:

image.png

行为分析:

  1. Agent 识别用户问了两个问题
  2. 调用 getCurrentTime 获取时间
  3. 调用 getWeather("上海") 获取天气
  4. 汇总两个结果,生成完整回复

场景二:复杂任务规划

请求:

image.png

行为分析:

  1. Agent 理解“散步”需要天气信息
  2. 自动调用 getWeather("北京")
  3. 根据天气结果给出针对性建议
  4. 结合常识补充细节(防晒、补水、时段、空气质量)

06 Agent vs Function Calling

对比项Function CallingAgent
工具数量单次调用可多次调用
决策方式一次决策循环决策
任务复杂度简单任务复杂任务
中间结果不保留保留并用于后续决策
典型场景"现在几点了?""查天气→判断→给建议"

07 踩坑记录

坑一:CHAT_MEMORY_CONVERSATION_ID_KEY 常量找不到

在某些 Spring AI 版本中,这个常量可能不存在或名称不同。

解决:  直接使用字符串字面量 "chat_memory_conversation_id"。

坑二:Agent 不调用工具

原因:  系统提示词(System Prompt)不够清晰。

解决:  明确告诉 AI 有哪些工具可用,以及在什么情况下调用。

image.png

坑三:Agent 只调用一个工具

当用户问了多个问题时,Agent 可能只调用了一个工具。

解决:  在提示词中强调“如果用户问了多个问题,需要分别调用对应的工具”。

08 成果总结

经过这一篇,你的系统现在具备:

能力状态
理解用户意图✅
多工具注册✅
多工具协作✅
主动调用工具✅
基于结果生成建议✅

09 下期预告

你已经实现了 Agent 的基础能力。接下来可以深入的方向:

方向内容
Agent 进阶复杂任务拆解、多步推理、错误重试
Rerank 重排序在 RAG 检索结果上进一步精排
实战项目构建一个“智能会议助手”或“智能客服”

下一篇,我们探索 Agent 的进阶能力——让 Agent 能够拆解复杂任务、多步推理。

📌 我是超超不吵吵,10年Java全栈,正在转型AI应用开发。
每周一篇实战笔记,不贩卖焦虑,只分享能落地的技术。
掘金/CSDN同名,欢迎关注。