Java 工程师 AI 智能体学习路线 · 阶段 4:智能体(Agent)核心原理 详解
Java 工程师 AI 智能体学习路线 · 阶段 4:智能体(Agent)核心原理 详解
本阶段目标:理解"会思考、能调用工具、有记忆"的智能体是如何构成的,掌握其四大支柱(规划/记忆/工具/执行)、主流规划模式与工程风险,为编写可运行的单智能体打基础。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
4.1 什么是 Agent(智能体)
讲解
智能体(Agent)不是单纯的"问答模型",而是一个能自主循环、调用工具、利用记忆去完成目标的程序。最小公式:
Agent = LLM(大脑) + Tools(手脚,连接外部世界) + Memory(记忆,短期/长期) + Planning(规划,拆解与决策循环)它区别于普通对话的关键:模型输出不一定是"最终答案",也可能是"下一步要执行的动作"。
常见场景
- 自动订票/报销:模型查日历→调接口→填表单→确认。
- 代码助手:读仓库→改文件→跑测试→根据报错重试。
面试知识点
- Q:Agent 和普通 LLM 调用的本质区别?
A:普通调用是"一次输入→一次输出";Agent 是"感知→决策→行动→观察"的循环,能调用工具改变外部状态,并基于反馈持续迭代直到目标达成。
4.2 四大支柱
4.2.1 Planning(规划)
把复杂目标拆解为可执行的子任务,并决定执行顺序。
- 简单任务:ReAct 边想边做。
- 复杂任务:先整体规划(Plan-and-Solve),再逐步执行。
4.2.2 Memory(记忆)
- 短期记忆:当前会话的对话历史(User/Assistant/Tool 消息)。
- 长期记忆:跨会话沉淀的知识,通常存向量库/数据库。
- 压缩:历史过长时用摘要替代原文。
4.2.3 Tools(工具)
把"算"和"查"交给外部能力:HTTP 接口、数据库查询、代码执行、搜索引擎等。模型只负责决定"调哪个、传什么参"。
4.2.4 Action(执行)
将模型的决策落地为工具调用或最终回答;执行结果(Observation)再喂回循环。
示例(四大支柱对应代码职责)
Agentagent=Agent.builder().planner(newReActPlanner())// Planning.memory(newConversationMemory())// Memory(短期).tools(searchTool,dbTool,codeTool)// Tools.actionExecutor(toolRegistry)// Action.build();面试知识点
- Q:为什么说"让模型想和说,把算和查交给工具"?
A:LLM 擅长语言理解与推理,但不擅长精确计算、实时数据与状态修改;把这些交给确定性工具,既提升正确性也降低幻觉。
4.3 规划模式
4.3.1 ReAct(Reasoning + Acting)
交替进行 Thought(思考)→ Action(调工具)→ Observation(观察),最常用。
Thought: 需要查北京天气 Action: get_weather(city="北京") Observation: 晴 28℃ Thought: 信息足够,可回答 Final Answer: 北京今天晴,28℃4.3.2 Plan-and-Execute
先生成完整计划,再逐条执行;适合步骤清晰、可预见的任务。
Plan: 1. 读取需求文档 2. 生成接口定义 3. 写单元测试 4. 运行测试并修复4.3.3 Reflexion(自我反思)
任务失败后,模型反思错误原因并改进重试,形成"尝试→反思→再尝试"闭环。
场景:代码生成调试、Agent 自我纠错。
面试知识点
- Q:ReAct 和 Plan-and-Execute 怎么选?
A:路径不确定、需实时信息→ReAct;步骤可预见、偏流程化→Plan-and-Execute。两者也可结合(先粗规划,再 ReAct 执行每步)。 - Q:Reflexion 解决了什么问题?
A:普通 Agent 失败即终止;Reflexion 让其在失败后分析错误、调整策略重试,显著提升复杂任务成功率。
4.4 记忆机制
讲解
| 类型 | 存储 | 生命周期 | 示例 |
|---|---|---|---|
| 短期记忆 | 内存中的消息列表 | 单次会话 | 多轮对话历史 |
| 长期记忆 | 向量库/数据库 | 跨会话 | 用户偏好、知识库 |
| 压缩记忆 | 摘要文本 | 会话内 | 把前 20 轮对话摘要成 3 句 |
常见场景
- 客服机器人记住"用户已报过订单号",避免重复询问(短期)。
- 个人助理记住"用户偏好简洁回复"(长期,向量库检索)。
面试知识点
- Q:短期记忆过长会有什么问题?如何解决?
A:超出上下文窗口、成本与延迟上升、注意力稀释。解决:滑动窗口截断、摘要压缩、只保留关键事实(长期记忆检索回填)。
4.5 执行循环与状态机
讲解
Agent 本质是一个状态机:每步由 LLM 决策下一个状态(调工具 or 结束)。核心循环:
示例(极简 Agent 循环,Java 示意)
List<Message>history=newArrayList<>();history.add(newSystemMessage("你是能调用工具的助手,按需输出 Action 或 Final Answer。"));history.add(newUserMessage(task));for(intstep=0;step<MAX_STEPS;step++){Decisiond=planner.decide(history);// LLM 输出 Thought/Actionif(d.isFinal()){returnd.answer();// 终止}Stringobs=toolRegistry.call(d.action(),d.input());// Actionhistory.add(newToolMessage(obs));// Observation 回灌}thrownewAgentTimeoutException("超过最大步数");常见场景
- 工具调用结果是关键分支依据(如"查到库存为 0,则转而推荐替代品")。
面试知识点
- Q:Agent 循环里为什么要把工具结果再喂回历史?
A:模型本身无状态,只有把 Observation 写回上下文,下一步决策才能基于真实反馈,形成"感知—行动"闭环。
4.6 终止条件
讲解
必须有明确的"停下"机制,否则 Agent 会无限循环:
- 目标达成:模型输出 Final Answer。
- 步数上限:超过
MAX_STEPS强制停止(防死循环)。 - 人工介入:关键动作前暂停等待确认(HITL)。
- 错误熔断:连续工具失败 N 次则中止。
面试知识点
- Q:为什么必须给 Agent 设最大步数?
A:防止模型在错误路径上反复横跳、无限调用工具,造成成本失控与超时;步数上限是基本安全保障。
4.7 风险与防范
| 风险 | 说明 | 防范 |
|---|---|---|
| 死循环 | 反复调用同一工具 | 步数上限 + 重复动作检测 |
| 工具误用 | 传错参数/调错工具 | Schema 校验 + 参数预检 |
| 成本失控 | 长循环、长输出 | 步数/Token 预算上限 |
| 越权操作 | 删库、发消息 | 工具权限最小化 + 高危动作人工确认 |
| 不可控输出 | 泄露/违规 | 输出护栏 + 审计日志 |
常见场景
- 自动化运维 Agent 执行"重启服务"前必须人工确认。
- 对外发消息的 Agent 需二次校验收件人与内容。
面试知识点
- Q:如何防止 Agent 误删生产数据?
A:工具权限最小化(只给必要权限)、高危操作加人工确认(HITL)、执行前参数校验与 dry-run、全程审计日志与回滚预案。
4.8 阶段 4 自测清单
- 能画出 ReAct 循环流程图
- 能解释短期记忆与长期记忆的区别与实现
- 能说明 Agent 死循环的防范手段
- 能对比 ReAct 与 Plan-and-Execute 的取舍
- 能说出至少 3 个 Agent 工程风险及对策
4.9 阶段 4 面试题与参考答案
1. Agent 和普通 LLM 调用的本质区别?
普通调用是一次输入→一次输出;Agent 是"感知—决策—行动—观察"的循环,能调用工具改变外部状态,并基于反馈持续迭代直到目标达成。
2. Agent 的四大支柱是什么?
Planning(规划拆解)、Memory(短期/长期记忆)、Tools(调用外部能力)、Action(执行决策或回答)。四者协同使 Agent 能自主完成任务。
3. 为什么说"让模型想和说,把算和查交给工具"?
LLM 擅长语言理解与推理,不擅长精确计算、实时数据与状态修改;交给确定性工具可提升正确性、降低幻觉与成本。
4. ReAct 和 Plan-and-Execute 怎么选?
路径不确定、需实时信息→ReAct;步骤可预见、偏流程化→Plan-and-Execute。也可结合:先粗规划,再用 ReAct 执行每一步。
5. Reflexion 解决了什么问题?
普通 Agent 失败即终止;Reflexion 让其在失败后反思错误原因、调整策略重试,形成"尝试—反思—再尝试"闭环,提升复杂任务成功率。
6. 短期记忆过长有什么问题?如何解决?
超出上下文窗口、成本/延迟上升、注意力稀释。解决:滑动窗口截断、摘要压缩、关键事实沉淀到长期记忆并检索回填。
7. 为什么要把工具结果回灌到历史?
模型本身无状态,只有把 Observation 写回上下文,下一步决策才能基于真实反馈,形成闭环。
8. 为什么必须给 Agent 设最大步数?
防止模型在错误路径上反复横跳、无限调用工具,造成成本失控与超时;步数上限是基本安全保障。
9. 如何防止 Agent 误删生产数据?
工具权限最小化、高危操作人工确认(HITL)、执行前参数校验与 dry-run、全程审计日志与回滚预案。
10. Agent 有哪些典型工程风险?
死循环、工具误用、成本失控、越权操作、不可控输出;对应防范为步数上限、Schema 校验、预算限制、权限最小化+HITL、输出护栏+审计。
