Java AI转型实战(十三):Agent 循环推理与自主决策 让 Agent 从“单次思考”升级为“多轮推理”真正具备自主决策能力01 引子在实战十二中我们完成了 Agent 的工程化落地——错误处理、优雅降级、可观测性。Agent 在理想场景下表现得稳定可靠。但有一个核心能力仍然缺失循环推理。当前的 Agent 是这样的用户提问 → 调用一次 AI → 调用工具 → 返回结果这是“一次性的”。用户问什么AI 就回答什么。但如果用户问的是复杂任务呢“帮我规划一个上海2日游查查天气推荐景点安排行程”这时候 Agent 需要做多件事查天气 → 推荐景点 → 规划行程。每一步都需要根据上一步的结果来决定下一步做什么。这就需要循环推理。这一篇的目标让 Agent 具备多轮思考能力能够像人类一样分步解决问题。02 什么是循环推理2.1 当前 Agent 的局限对比当前 Agent循环推理 Agent推理轮次1 轮多轮直到任务完成决策方式一次决策根据中间结果动态决策工具调用最多 1-2 个可调用多个按顺序执行任务复杂度简单任务复杂任务2.2 ReAct 模式ReAct Reasoning推理Acting行动2.3 核心思想循环推理不是“一次性回答”而是“思考 → 行动 → 观察 → 再思考”的循环直到任务完成。03 代码实现3.1 整体架构3.2 完整代码ReActAgentService.java3.3 Controller 接口ReActAgentController.java04 测试验证场景一简单问题无需工具请求分析Agent 判断为简单问题直接回答没有调用工具。✅场景二单工具调用请求分析Agent 识别需要查询天气调用getWeather(北京)。✅场景三多工具协作请求分析Agent 分别查询了两个城市的天气。✅05 踩坑记录坑一AI 不按格式输出导致循环空转现象请求后返回抱歉经过 6 轮思考我无法完整回答您的问题。原因AI 没有输出Action:或Final Answer:格式导致parseOutput无法识别循环空转 6 次后超时。解决在parseOutput中添加兜底逻辑如果 AI 直接回复了自然语言无 Action 标记直接当作最终答案。优化 System Prompt明确告诉 AI简单问题直接回答复杂问题用Action:格式。// 兜底逻辑 if (response ! null response.length() 5) { parsed.isFinal true; parsed.finalAnswer response.trim(); }坑二参数解析失败现象工具调用返回“参数不足”。原因parseParams方法在解析带多个参数的工具调用时出错。解决完善参数解析逻辑支持双引号和逗号分隔。private String[] parseParams(String paramsStr) { // 支持 北京, 上海 格式 // 支持 G123, 二等座 格式 }坑三observability注入失败现象启动报错Bean not found。原因AgentObservability类没有添加Component注解。解决确保AgentObservability类上有Component注解。06 成果总结经过这一篇你的 Agent 现在具备能力状态单工具调用✅多工具协作✅简单问题直接回答✅循环推理框架✅任务完成判断✅超时降级✅可观测性✅07 下期预告循环推理完成后Agent 系列的核心能力已经全部就绪。下一步我们将把这些能力整合成一个完整的“智能助手”应用涵盖多工具协作天气 时间 订票循环推理复杂任务拆解可观测性调试模式错误处理优雅降级下一篇实战项目整合——构建完整的智能助手应用。 我是超超不吵吵10年Java全栈正在转型AI应用开发。每周一篇实战笔记不贩卖焦虑只分享能落地的技术。全网同名欢迎关注。