Java 工程师 AI 智能体(Agent)完整学习路线
适用对象:具备 Java / Spring 后端基础,希望系统学习大模型应用与 AI 智能体开发的工程师。
路线主线:基础认知 → 提示词 → 编程调用 → 单智能体 → 工具/RAG → 多智能体 → 框架生态 → 工程化落地。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
总览路线图
#mermaid-svg-JHDUpGBHa9OZTx6n{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-JHDUpGBHa9OZTx6n .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-JHDUpGBHa9OZTx6n .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-JHDUpGBHa9OZTx6n .error-icon{fill:#552222;}#mermaid-svg-JHDUpGBHa9OZTx6n .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-JHDUpGBHa9OZTx6n .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-JHDUpGBHa9OZTx6n .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-JHDUpGBHa9OZTx6n .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-JHDUpGBHa9OZTx6n .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-JHDUpGBHa9OZTx6n .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-JHDUpGBHa9OZTx6n .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-JHDUpGBHa9OZTx6n .marker{fill:#333333;stroke:#333333;}#mermaid-svg-JHDUpGBHa9OZTx6n .marker.cross{stroke:#333333;}#mermaid-svg-JHDUpGBHa9OZTx6n svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-JHDUpGBHa9OZTx6n p{margin:0;}#mermaid-svg-JHDUpGBHa9OZTx6n .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-JHDUpGBHa9OZTx6n .cluster-label text{fill:#333;}#mermaid-svg-JHDUpGBHa9OZTx6n .cluster-label span{color:#333;}#mermaid-svg-JHDUpGBHa9OZTx6n .cluster-label span p{background-color:transparent;}#mermaid-svg-JHDUpGBHa9OZTx6n .label text,#mermaid-svg-JHDUpGBHa9OZTx6n span{fill:#333;color:#333;}#mermaid-svg-JHDUpGBHa9OZTx6n .node rect,#mermaid-svg-JHDUpGBHa9OZTx6n .node circle,#mermaid-svg-JHDUpGBHa9OZTx6n .node ellipse,#mermaid-svg-JHDUpGBHa9OZTx6n .node polygon,#mermaid-svg-JHDUpGBHa9OZTx6n .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-JHDUpGBHa9OZTx6n .rough-node .label text,#mermaid-svg-JHDUpGBHa9OZTx6n .node .label text,#mermaid-svg-JHDUpGBHa9OZTx6n .image-shape .label,#mermaid-svg-JHDUpGBHa9OZTx6n .icon-shape .label{text-anchor:middle;}#mermaid-svg-JHDUpGBHa9OZTx6n .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-JHDUpGBHa9OZTx6n .rough-node .label,#mermaid-svg-JHDUpGBHa9OZTx6n .node .label,#mermaid-svg-JHDUpGBHa9OZTx6n .image-shape .label,#mermaid-svg-JHDUpGBHa9OZTx6n .icon-shape .label{text-align:center;}#mermaid-svg-JHDUpGBHa9OZTx6n .node.clickable{cursor:pointer;}#mermaid-svg-JHDUpGBHa9OZTx6n .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-JHDUpGBHa9OZTx6n .arrowheadPath{fill:#333333;}#mermaid-svg-JHDUpGBHa9OZTx6n .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-JHDUpGBHa9OZTx6n .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-JHDUpGBHa9OZTx6n .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-JHDUpGBHa9OZTx6n .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-JHDUpGBHa9OZTx6n .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-JHDUpGBHa9OZTx6n .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-JHDUpGBHa9OZTx6n .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-JHDUpGBHa9OZTx6n .cluster text{fill:#333;}#mermaid-svg-JHDUpGBHa9OZTx6n .cluster span{color:#333;}#mermaid-svg-JHDUpGBHa9OZTx6n div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-JHDUpGBHa9OZTx6n .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-JHDUpGBHa9OZTx6n rect.text{fill:none;stroke-width:0;}#mermaid-svg-JHDUpGBHa9OZTx6n .icon-shape,#mermaid-svg-JHDUpGBHa9OZTx6n .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-JHDUpGBHa9OZTx6n .icon-shape p,#mermaid-svg-JHDUpGBHa9OZTx6n .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-JHDUpGBHa9OZTx6n .icon-shape .label rect,#mermaid-svg-JHDUpGBHa9OZTx6n .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-JHDUpGBHa9OZTx6n .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-JHDUpGBHa9OZTx6n .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-JHDUpGBHa9OZTx6n :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 阶段1 基础认知
阶段2 提示词工程
阶段3 编程调用 LLM
阶段4 智能体核心原理
阶段5 工具/MCP/RAG
阶段6 多智能体与编排
阶段7 框架与生态
阶段8 工程化落地
目录
- [阶段 1:AI / LLM 基础认知](#阶段 1:AI / LLM 基础认知)
- [阶段 2:提示词工程](#阶段 2:提示词工程)
- [阶段 3:编程调用 LLM](#阶段 3:编程调用 LLM)
- [阶段 4:智能体核心原理](#阶段 4:智能体核心原理)
- [阶段 5:工具调用、MCP 与 RAG](#阶段 5:工具调用、MCP 与 RAG)
- [阶段 6:多智能体与编排](#阶段 6:多智能体与编排)
- [阶段 7:框架与生态](#阶段 7:框架与生态)
- [阶段 8:工程化落地](#阶段 8:工程化落地)
- 附:阶段周期与产出总表
阶段 1:AI / LLM 基础认知
目标:建立对大模型能力与边界的正确直觉,理解 Token、上下文、参数、成本等核心概念。
1.1 核心术语
1.1.1 Token(词元)
讲解 :模型处理文本的最小单位,文本先被切分为 Token 再转向量计算。英文约 1 Token ≈ 4 字符;中文约 1 Token ≈ 1~2 汉字;代码/公式按子词切分。
示例 :"你好,世界" 约 5~7 Token;"The quick brown fox" 约 4~5 Token。
场景 :计费按 Token;上下文以 Token 为上限;可用官方 tokenizer 估算成本。
面试知识点:Q:中文为何更费 Token?A:中文无空格、语义密度高,常按字/词根切分,同等语义下 Token 更多。
1.1.2 上下文窗口(Context Window)
讲解 :模型单次可见的最大 Token 数,含"输入 + 历史 + 输出"。超出截断或压缩。
示例 :128K 窗口约 10 万汉字;输入占 120K 则输出仅剩 8K。
场景 :长文档需配合 RAG/摘要;多轮对话需管理长度。
面试知识点:Q:窗口越大越好吗?A:不一定,会带来注意力分散、延迟与成本上升。
1.1.3 Embedding(向量嵌入)
讲解 :把文本映射为稠密向量,语义相近则距离近,是 RAG/检索基础。
示例 :float[] v = embeddingClient.embed("人工智能是计算机科学的分支");
场景 :知识库检索、去重、聚类。
面试知识点:Q:Embedding 与生成模型区别?A:前者输出向量表征语义,后者输出文本,常配合使用。
1.1.4 微调 vs 推理
讲解 :微调改变权重学新知识(贵、慢);推理是用已有模型处理请求(日常 API)。
场景 :一般业务用推理+Prompt/RAG;仅垂直领域固化风格才微调。
面试知识点:Q:何时用 RAG 而非微调?A:知识易变、需溯源、私有数据优先 RAG。
1.1.5 幻觉(Hallucination)
讲解 :无依据时"自信编造"错误内容。
场景 :事实问答、数据引用、API 名易幻觉。
缓解 :RAG 注入证据、约束拒答、要求引用、人工复核。
面试知识点:Q:如何降低幻觉?A:RAG+约束拒答+引用溯源+多模型验证+人工复核。
1.1.6 知识截止日期
讲解 :训练数据截止某时点,之后事件/新库未知。
场景:问最新资讯可能编造;用搜索/RAG 注入实时信息。
1.2 模型分类
| 类型 | 用途 | 示例 |
|---|---|---|
| 对话/生成 | 客服、写作 | GPT-4o、通义千问、Claude |
| 推理 | 数学/代码/规划 | o1/o3、DeepSeek-R1 |
| 多模态 | 图文理解 | GPT-4V、Gemini |
| Embedding | 检索 | text-embedding-3 |
| Rerank | RAG 精排 | BGE-Reranker |
面试知识点:推理模型擅长复杂推理但延迟高、成本高;简单任务用普通模型。
1.3 采样参数
- temperature:0~2,越低越确定;事实/代码用 0~0.3,创意用 0.8~1.0。
- top_p:仅从累计概率达 top_p 的词集采样;与 temperature 二选一调。
- top_k:仅取概率最高 k 个词。
- max_tokens:限制输出长度、控成本。
- stop:遇指定串停止。
- frequency/presence penalty:降复读、鼓励新话题。
示例
json
{ "model":"gpt-4o", "messages":[{"role":"user","content":"一句话解释 Token"}],
"temperature":0.2, "top_p":0.9, "max_tokens":200, "stop":["\n\n"] }
面试知识点:Q:temperature=0 完全可复现?A:基本可复现但不保证 100%(推理模型随机性、批处理/实现差异)。
1.4 能力边界
短板:知识时效、精确计算、因果常识、不可复现、幻觉。
启示 :让模型"想/说",把"算/查"交工具。
面试知识点:Q:为何不让 LLM 做精确计算?A:自回归是概率预测,不保算术正确,应借工具执行。
1.5 推理成本
组成:输入+输出 Token(输出更贵);缓存命中降本;推理模型更贵。
优化:压缩 System Prompt 复用前缀命中缓存、模型分级路由、限制 max_tokens、批量调用。
1.6 生态认知
OpenAI / Anthropic / Google / 国产(通义、智谱、DeepSeek、文心)。
解耦 :用 Spring AI ChatClient、LangChain4j ChatLanguageModel 屏蔽厂商差异。
1.7 自测清单
- 解释 Token 与上下文关系
- 说明 temperature/top_p 取舍
- 列举 3 个失败场景
- 区分微调与推理
- 说出降本与降幻觉手段
1.8 面试题与参考答案
- Token 及中英文差异? 最小处理单位;中文无空格、语义密,约 1~2 字/Token,故更费。
- 上下文窗口含什么、超长怎样? 输入+历史+输出;超出截断/压缩致信息丢失。
- Embedding 作用? 文本转向量,RAG 中检索语义相近块作证据。
- 微调 vs RAG? 知识易变/需溯源→RAG;固化风格→微调。
- 幻觉与缓解? 无依据编造;RAG+拒答约束+引用+验证+复核。
- temperature=0 可复现? 基本可,但不保证 100%(随机性/实现差异)。
- 为何不让 LLM 算精确数? 概率预测不保算术,借工具/解释器执行。
- 降本手段? 缓存前缀、RAG 取相关片段、模型路由、限长、批量。
- 推理模型取舍? 强于复杂推理但贵且慢,按任务复杂度选。
- 多厂商解耦? 抽象层统一接口,便于切换/灰度。
阶段 2:提示词工程(Prompt Engineering)
目标:稳定"指挥"模型产出期望结果,具备结构化输出与高级推理范式能力。
2.1 基础结构(三种角色)
- System:设定角色/规则/语气,贯穿会话、权重最高。
- User:当前指令。
- Assistant :模型回复,也可预填做 Few-shot。
面试知识点:System 定全局约束,优先级高;User 是当前任务。
2.2 基础技巧
- 角色设定 :
System: 你是一位 10 年 Spring Boot 架构师。 - Zero/Few-shot:Few-shot 给"输入→输出"范例提升格式一致性(代价:占 Token、可能带偏)。
- CoT:要求逐步推理再给答案(代价:更长更贵;推理模型已内化)。
- Self-Consistency:多路径采样取多数,提复杂题准确率。
2.3 结构化输出
- JSON Mode :
response_format:{type:"json_object"}或明确要求只输出 JSON。 - 函数/Schema 约束:用 JSON Schema 约束字段。
- 校验兜底:Jackson 反序列化失败则重试。
java
try { Result r = objectMapper.readValue(out, Result.class); }
catch (JsonProcessingException e) { /* 重试 */ }
面试知识点:JSON 非法兜底------JSON Mode+Schema 校验+失败重试+限长防截断+降级。
2.4 约束与防漏
- 拒答边界:
只处理 Java 问题,否则回复"抱歉,我无法回答"。 - 格式/长度/语气强制。
- Prompt Injection 防范:System 强调边界、隔离标记用户输入、输出过滤、关键动作 HITL、护栏二次校验。
2.5 高级范式
- ReAct:Thought→Action(调工具)→Observation 循环,Agent 核心。
- Plan-and-Solve:先规划再执行,适步骤清晰任务。
- Reflexion:失败反思改进重试。
- Tree-of-Thought :多分支搜索最优。
面试知识点:ReAct 比 CoT 多了"行动+观察",能接触外部世界。
2.6 评测意识
关注一致性、回归(Prompt 改动跑评测集)、数据集建设。
2.7 自测清单
- 写带拒答边界的 System Prompt
- Few-shot 提升分类
- 稳定输出 JSON
- 描述 ReAct
- 设计最小评测集
2.8 面试题与参考答案
- 三角色作用? System 全局规则权重高;User 当前指令;Assistant 回复/示例。
- Few-shot vs Zero-shot? Few-shot 引格式更稳但费 Token 可能带偏;简单任务 Zero-shot。
- CoT 及代价? 逐步推理提准确率;更长更贵,推理模型已内化。
- 稳定 JSON? JSON Mode+Schema+校验重试+限长。
- Prompt Injection 防范? 边界强调、隔离用户输入、输出过滤、HITL、护栏。
- ReAct 与 CoT 区别? ReAct 想+做+观察,能调工具;CoT 只想。
- Plan-and-Solve vs ReAct? 可预见流程用前者;不确定需实时信息用后者。
- JSON 非法处理? 开启约束+代码校验重试+限长+降级。
- 为何 Prompt 需评测? 同 Prompt 可能不一致,改动需回归比对。
- Self-Consistency? 多路径采样取多数,提正确率但成本线性升。
阶段 3:编程调用 LLM
目标:用代码把模型接进 Java 应用,掌握流式、错误处理、密钥管理。
3.1 HTTP 直接调用
端点 POST /v1/chat/completions,头 Authorization: Bearer <KEY>。
json
{ "model":"gpt-4o",
"messages":[{"role":"system","content":"Java 专家"},{"role":"user","content":"什么是 Stream API?"}],
"temperature":0.3 }
面试知识点:Key 放请求头而非 Body,避免日志泄露、便于网关拦截。
3.2 SDK 与框架抽象
- Spring AI :
ChatClient。
java
String ans = chatClient.prompt().system("Java 架构师").user(q).call().content();
- LangChain4j :
ChatLanguageModel.generate(...)。
面试知识点:抽象屏蔽厂商差异、内置重试/流式/拦截,便于切换与测试。
3.3 消息模型
SystemMessage/UserMessage/AssistantMessage/ToolMessage → Prompt → ChatResponse(含 usage)。
面试知识点:多轮历史全量发会超窗口且增成本,需截断/摘要。
3.4 流式处理
SSE(text/event-stream)逐段推送。
java
chatClient.prompt().user(q).stream().content().subscribe(token -> System.out.print(token));
Web 层用 SseEmitter 推前端。成本同非流式;首字延迟低、体验好,但需处理断连/背压。
3.5 错误处理与重试
- 429 限流、408 超时、5xx、内容拦截。
- 可重试:429/408/5xx;不可重试:401/403/400/审核拦截。
- 指数退避+抖动、最大重试、降级兜底(如 Spring Retry
@Recover)。
面试知识点 :429 不立即重试;读Retry-After退避+本地限流+降级。
3.6 密钥与配置
- 放配置中心(Nacos/Apollo),不写死代码;多 Key 轮询分摊配额、支持轮转。
- 前端绝不持有 Key(盗刷+无法审计)。
面试知识点:密钥仅服务端,日志脱敏。
3.7 自测清单
- 裸 HTTP 调一次
- Spring AI/LangChain4j 对话
- 流式接口
- 429 重试/降级
- Key 放配置中心
3.8 面试题与参考答案
- Key 放头还是体? 头,防泄露、便拦截。
- 为何用抽象? 屏蔽差异、统一模型、内置能力、易切换。
- 多轮历史管理? 拼回历史,但需截断/摘要控成本。
- 流式 vs 非流式? 成本同;流式体验好但需处理断连。
- 429 处理? 读 Retry-After、退避+限流+降级。
- 可/不可重试? 429/408/5xx 可;401/403/400/审核不可。
- 前端持 Key? 不能,盗刷且不可审计。
- SSE 与 Java 实现? 服务端单向推送;
SseEmitter/Flux。 - 多 Key 轮询价值? 分摊配额、故障切换、轮转。
- 成本核算? 解析
usage按单价累计+可观测归因。
阶段 4:智能体(Agent)核心原理
目标:理解自主循环、工具、记忆构成的 Agent,掌握规划模式与工程风险。
4.1 什么是 Agent
Agent = LLM + Tools + Memory + Planning。区别于普通调用:输出可能是"下一步动作"而非最终答案。
4.2 四大支柱
- Planning:拆解子任务、定顺序(ReAct 边想边做 / Plan-and-Solve 先规划)。
- Memory:短期(会话历史)、长期(向量库/库)、压缩(摘要)。
- Tools:把算/查交给外部能力。
- Action :将决策落地为工具调用或回答。
面试知识点:让模型想/说,算/查交工具,提正确降幻觉。
4.3 规划模式
- ReAct:Thought→Action→Observation。
- Plan-and-Execute:先计划再执行。
- Reflexion :失败反思改进重试。
面试知识点:ReAct 边想边做;Plan-and-Solve 适可预见流程;Reflexion 提复杂任务成功率。
4.4 记忆机制
| 类型 | 存储 | 场景 |
|---|---|---|
| 短期 | 内存消息 | 多轮对话 |
| 长期 | 向量库/库 | 用户偏好/知识 |
| 压缩 | 摘要文本 | 历史过长压缩 |
| 过长→超窗口/成本升/注意力稀释;解决:截断、摘要、长期检索回填。 |
4.5 执行循环与状态机
java
for (int step=0; step<MAX; step++) {
Decision d = planner.decide(history);
if (d.isFinal()) return d.answer();
String obs = toolRegistry.call(d.action(), d.input());
history.add(new ToolMessage(obs)); // 回灌
}
面试知识点:模型无状态,必须把 Observation 回灌才能形成闭环。
4.6 终止条件
目标达成 / 步数上限 / 人工介入 / 错误熔断。步数上限防死循环与成本失控。
4.7 风险与防范
| 风险 | 防范 |
|---|---|
| 死循环 | 步数上限+重复检测 |
| 工具误用 | Schema 校验+预检 |
| 成本失控 | 步数/Token 预算 |
| 越权 | 权限最小化+HITL |
| 不可控输出 | 护栏+审计 |
4.8 自测清单
- 画 ReAct 图
- 解释长短记忆
- 死循环防范
- 对比 ReAct/Plan
- 列 3 风险对策
4.9 面试题与参考答案
- Agent vs 普通调用? 前者是感知-决策-行动-观察循环,能调工具改状态。
- 四大支柱? Planning/Memory/Tools/Action。
- 想/说 vs 算/查? LLM 擅推理不擅计算/实时,交工具提正确降幻觉。
- ReAct vs Plan? 不确定实时→ReAct;可预见→Plan;可结合。
- Reflexion? 失败后反思重试,提复杂任务成功率。
- 短记忆过长? 超窗口/成本升;截断/摘要/长期回填。
- 回灌 Observation? 模型无状态,需基于真实反馈闭环。
- 步数上限? 防死循环与成本失控。
- 防误删? 权限最小+HITL+预检+dry-run+审计回滚。
- 典型风险? 死循环/误用/成本/越权/不可控输出及对应防范。
阶段 5:工具调用、MCP 与 RAG
目标:让 Agent 连接外部世界(工具/MCP)与私有知识(RAG)。
5.1 Function Calling
流程:声明工具(名/描述/Schema) → 用户问 → 模型返回 {name, arguments} → 本地执行 → 结果回灌 → 生成答案。模型不真正执行函数。
5.2 Java 注册工具
java
public class WeatherTool {
@Tool(description="查询城市天气")
public String getWeather(@ToolParam(description="城市") String city){
return weatherService.query(city);
}
}
ChatClient c = ChatClient.builder(model).defaultTools(new WeatherTool()).build();
LangChain4j 用 @Tool + @P。防传错参:Schema 描述清晰+方法内校验+关键工具 HITL+失败重试。
5.3 MCP(模型上下文协议)
- 开放标准,AI 界的"USB-C";
MCP Server暴露工具/资源,MCP Client连接。 - 与 FC 关系:FC 是"模型如何表达要调函数";MCP 是"工具如何被标准发现/调用"。
- 价值:工具一次实现、多应用复用、解耦能力提供与调用。
java
List<ToolCallback> tools = mcpClient.listTools().stream().map(McpToolCallback::new).toList();
5.4 RAG 流水线
- 加载+切分:PDF/网页/DB;块 200~500 字,留重叠。
- Embedding+向量库:Milvus/pgvector/Chroma/Redis/ES。
- 检索+Rerank:Top-K 相似度粗排,Rerank 模型精排。
- 注入生成:相关块拼 Prompt,可标来源。
java
List<TextSegment> hits = vectorStore.search(embed(question),5);
hits = reranker.rerank(question, hits, 3);
String ans = chatClient.prompt().user("资料:\n"+join(hits)+"\n问题:"+question).call().content();
面试知识点:块太大噪声多、太小语义碎;Rerank 提 Top 相关性。
5.5 引用与溯源
给块编号、要求回答附编号;便于点击溯源、纠错、合规。降编造:只给真实片段+约束拒答+校验来源+置信阈值。
5.6 Agentic RAG
Agent 自主决定何时/查什么/多轮检索,与 ReAct 结合(Action=retrieve)。区别于传统"检索一次→生成"。
5.7 自测清单
- @Tool 注册
- 说明谁执行函数
- MCP vs FC
- 跑通最小 RAG
- Rerank 作用
5.8 面试题与参考答案
- 模型执行函数? 否,只输出决策,本地执行后回灌。
- 防传错参? Schema 清晰+方法校验+ HITL+重试。
- MCP vs FC? FC 是调用机制;MCP 是工具标准协议,解耦提供与调用。
- 块大小? 太大噪声、太小碎;重叠调优。
- 为何 Rerank? 粗排快但不精,精排提相关性。
- 降编造来源? 真实片段+拒答+来源校验+阈值。
- Agentic RAG? Agent 动态控制检索时机/词/多轮。
- 向量库角色? 存 Embedding,高效相似检索。
- MCP 工程价值? 复用、标准化、易治理。
- 完整 RAG 步骤? 加载→切分→Embedding→存库→检索→Rerank→注入→生成
阶段 6:多智能体与编排
目标:掌握协作模式、编排范式、智能体间协议与人类在环。
6.1 为何多智能体
分工→专业化、可控、可并行;复杂任务单 Agent "什么都不精"。
6.2 协作模式
- Supervisor/Worker:中枢拆解派发汇总,灵活适不确定任务。
- Pipeline:线性流转,简单可预测。
- 辩论/投票:多方案交叉验证,成本高。
- Blackboard :共享黑板逐步汇聚,适探索性任务。
面试知识点:Pipeline 简单但缺灵活;Supervisor/Worker 动态派发更灵活。
6.3 编排范式
- 有向图(LangGraph 思想):节点+边+状态,支持循环/分支。
java
StateGraph g=new StateGraph();
g.addNode("planner",planner); g.addNode("researcher",r); g.addNode("writer",w);
g.addEdge("planner","researcher");
g.addConditionalEdge("researcher", s-> s.enough()?"writer":"researcher");
- 状态机:显式状态约束合法路径,便审计。
- 事件驱动 :消息总线松耦合、可扩展。
面试知识点:图编排支持分支/循环/并行/中断,表复杂控制流。
6.4 共享状态与消息
统一任务上下文/消息结构(JSON Schema)传递;Supervisor 聚合、去重、排序、仲裁。
6.5 智能体间协议:A2A / ACP / Agent Card
- A2A(Google) :
Agent Card(JSON 描述能力/端点/技能)、Task、Message;HTTP+JSON-RPC,SSE 推进度。 - ACP:面向 Agent 通信的开放协议,侧重会话与能力协商。
- Agent Card 示例:
json
{ "name":"天气Agent", "url":"https://a2a.example.com/weather",
"skills":[{"id":"get_weather","name":"查天气"}] }
面试知识点:A2A 解决 Agent 间协作(Agent 对 Agent);MCP 解决 Agent 调工具(Agent 对资源),互补。
6.6 任务分解与结果聚合
按技能派发子任务;冲突用仲裁 Agent/投票/可信度加权;关键结论附证据或 HITL。
6.7 人类在环(HITL)
关键节点(发消息/删数据/发布)暂停审批,反馈回灌。兼顾自动化与可控。
6.8 自测清单
- Supervisor vs Pipeline
- Agent Card 作用
- 设计 2-Agent 协作
- A2A vs MCP
- HITL 节点
6.9 面试题与参考答案
- 多 Agent 适用? 可拆分/需分工/可控/并行/人工介入。
- Supervisor vs Pipeline? 前者动态灵活,后者线性简单。
- 图编排优势? 分支/循环/并行/中断,节点可测可换。
- 信息如何传? 统一消息结构+聚合去重仲裁。
- Agent Card? Agent 名片/注册表,供发现与委托。
- A2A vs MCP? Agent 对 Agent vs Agent 对资源。
- 结果冲突? 仲裁/投票/加权+证据+HITL。
- HITL 节点? 不可逆/高风险/强合规处。
- Blackboard? 共享黑板逐步汇聚,适探索任务。
- 辩论/投票价值与代价? 降偏差但成本翻倍需收敛机制。
阶段 7:框架与生态
目标:选型与落地------弄清 Java 主流框架定位,以 Python 框架为范式参考。
7.1 为何用框架
标准化消息/重试/流式/工具/记忆/编排/可观测,降本提效;但需能下钻原始报文防黑盒。
7.2 Java 主流框架
- Spring AI :
ChatClient,最贴合 Spring Boot;Advisor 拦截链。 - LangChain4j :轻量声明式
AiServices+@Tool。
java
interface Assistant { @SystemMessage("Java 导师") String answer(@UserMessage String q); }
Assistant bot = AiServices.create(Assistant.class, model);
- Spring AI Alibaba:通义/DashScope 优化,含 Agent Framework + 可视化 Dashboard,国内友好。
- Semantic Kernel(Java) :微软,
Kernel+Plugin(函数集合)+Planner(目标拆解)。 - 协议 SDK :MCP SDK 接 Server;A2A SDK 做 Agent 协作。
面试知识点:Spring AI 更 Spring 原生;LangChain4j 更轻量声明式。
7.3 Python 框架(范式参考)
- LangGraph:有向图+状态编排事实标准。
- AutoGen:多 Agent 对话协作、代码执行。
- CrewAI :Role/Crew/Task 岗位化协作。
学其设计,不迁业务到 Python。
7.4 选型建议
| 现状 | 推荐 |
|---|---|
| Spring Boot 后端 | Spring AI(+Alibaba) |
| 轻量/声明式 | LangChain4j |
| 国内通义/可视化 | Spring AI Alibaba |
| 微软/插件治理 | Semantic Kernel |
| 多 Agent 图编排 | 框架图能力+LangGraph 思想 |
| 跨进程协作 | MCP/A2A |
防锁定:业务依赖抽象接口、走标准协议、编排与框架解耦。
7.5 自测清单
- 对比 Spring AI 与 LangChain4j
- Spring AI Alibaba 特色
- Semantic Kernel Plugin/Planner
- 何时参考 Python
- 给出选型理由
7.6 面试题与参考答案
- 用框架? 标准化通用能力、统一治理;但防黑盒。
- Spring AI vs LangChain4j? 前者 Spring 原生融合深;后者轻量声明式。
- Alibaba 特色? 通义优化+Agent Framework+Dashboard+国内合规。
- Semantic Kernel Plugin/Planner? Plugin=函数集合模块化;Planner=目标拆计划。
- 何时参考 Python? 范式先在 Python 成熟时学思想,Java/A2A 等价落地。
- 抽象解耦厂商? 依赖统一接口,配置/适配器注入,便切换灰度。
- MCP/A2A SDK 角色? MCP 接工具;A2A 做 Agent 协作。
- 如何选型? 技术栈/模型厂商/协作模式/跨进程需求综合。
- 锁定风险? 依赖抽象、走标准、编排解耦。
- 成熟框架能力? 模型抽象/工具/记忆/RAG/流式/护栏/编排/可观测。
阶段 8:工程化落地
目标:可上线、可观测、可评测、可治理。
8.1 可观测性
- Metrics:Micrometer 记 Token/次数/耗时/错误率。
java
registry.counter("llm.tokens","type","prompt").increment(usage.promptTokens());
- Tracing:Langfuse/OpenTelemetry 追链路(每 Agent/工具为 span)。
- Logging :结构化记录,注意脱敏。
面试知识点:概率黑盒+长链路+高成本,无观测无法定位/算账。
8.2 评测体系
评测数据集(输入+期望/评分)→ 指标(准确率/幻觉率/工具成功率/合规率)→ 回归(CI 全量跑,不达标阻断)。
java
@Test void regression(){ for(Case c:set) assertTrue(scorer.pass(c, agent.run(c.input()))); }
8.3 安全护栏
输入过滤(Prompt Injection/敏感词)、输出过滤(隐私/违规)、工具权限最小化、敏感操作 HITL、越权防护。
java
// Advisor:输入护栏 + 输出脱敏
securityFilter.checkInput(req.userText());
r = r.withOutput(piiRedactor.redact(r.output()));
8.4 提示词与配置管理
Git 版本化、A/B 对比(评测集/灰度)、配置中心热更新。改动风险高,需回滚与灰度。
8.5 成本控制
模型分级路由(简单用小模型)、prompt 缓存、批处理、Token 预算上限。
java
ChatModel m = isSimple(task)? cheap : strong;
8.6 部署与运维
容器化+K8s、Spring Boot 原生镜像降冷启、限流保护配额、灰度/回滚、队列削峰、降级兜底。
8.7 合规治理
PII 脱敏(姓名/手机)、日志脱敏、审计留痕、数据出境/备案合规。
java
auditLogger.info("task={} input={}", id, piiRedactor.redact(raw));
8.8 自测清单
- 接入可观测
- 设计评测集回归
- 敏感工具 HITL
- 提示词版本化/灰度
- 降本与合规手段
8.9 面试题与参考答案
- 为何需可观测? 概率性+长链路+高成本,无指标难定位/算账。
- 判断 Prompt 改好? 固定评测集量化比对+回归不退化。
- 防 Injection? 边界强调+隔离输入+输出过滤+HITL+护栏。
- HITL 与节点? 不可逆/高风险/强合规处人工确认。
- 提示词版本化/灰度? 改动风险高,便回滚审计、小流量验证。
- 降本? 缓存前缀+RAG 取相关+路由+限长+批量+结果缓存。
- 运维要点? 容器化弹性+限流+灰度回滚+异步削峰+降级+告警。
- 日志合规风险? 泄露 PII/密钥;脱敏+访问控制+最小化+审计。
- 模型路由价值? 按复杂度平衡成本与效果。
- Agent 评测回归? 评测集+CI 全量跑+指标对比+阻断发布。
附:阶段周期与产出总表
| 阶段 | 主题 | 周期 | 关键产出 |
|---|---|---|---|
| 1 | 基础认知 | 1 周 | 说清 Token/上下文/成本/边界 |
| 2 | 提示词工程 | 1--2 周 | 可复用高质量 Prompt 模板 |
| 3 | 编程调用 LLM | 1--2 周 | 流式对话 Demo |
| 4 | 智能体核心原理 | 2--3 周 | 理解四大支柱、手写 ReAct 循环 |
| 5 | 工具/MCP/RAG | 3--4 周 | 带工具与知识库的助手 |
| 6 | 多智能体与编排 | 3 周 | 2--3 个 Agent 协作系统 |
| 7 | 框架与生态 | 持续 | 选定主框架并落地 |
| 8 | 工程化落地 | 2--3 周 | 可观测/可评测/可部署 |
推荐学习顺序小结
- 上手机器(阶段 1--3):两周内跑通带 System Prompt 的流式对话。
- 单智能体(阶段 4--5):加工具+RAG,做出能查资料、调接口的助手。
- 多智能体(阶段 6):理解编排与协议,做 2--3 Agent 协作。
- 工程化(阶段 7--8):选型框架、补评测与可观测,推向生产。