Files
SuperBizAgent-java/docs/learning/README.md
T
2026-05-31 21:45:14 +08:00

332 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 学习报告索引
> 创建日期:2026-05-30
> 主题:AI Ops 3-Agent 协同架构深度分析
> 学习路径:从核心设计 → outputKey 机制 → 疑难解答
---
## 📚 学习报告清单
### 01. [AI Ops 核心设计 - Essence 报告](./01-AI-Ops-核心设计-Essence报告.md)
**内容**:
- 3-Agent 协同分析模式详解
- 完整调用链(HTTP → Service → Agents → Tools → SSE)
- 设计模式对比与权衡分析
- 迁移示例与关键陷阱
**适合**:
- 第一次学习 AI Ops 架构
- 需要理解"为什么用 3 个 Agent"
- 准备在自己的项目中应用这个模式
**关键收获**:
- ✅ 理解 Planner、Executor、Supervisor 的职责
- ✅ 掌握 Agent 协同的执行流程
- ✅ 学会避免常见的陷阱
---
### 02. [outputKey 深度解析](./02-outputKey-深度解析.md)
**内容**:
- outputKey 的核心机制(共享内存模型)
- 完整时间线示例(8 个步骤)
- Prompt 占位符替换原理
- 调试技巧与实践建议
**适合**:
- 已理解 3-Agent 架构,想深入了解状态传递机制
- 遇到 Agent 间通信问题
- 想知道如何在 Prompt 中引用其他 Agent 的输出
**关键收获**:
- ✅ 理解 `OverAllState` 的工作原理
- ✅ 掌握 outputKey 的命名规范
- ✅ 学会在 Prompt 中正确引用 state
---
### 03. [3个核心疑问解答](./03-核心疑问解答.md)
**内容**:
- 疑问 1:Prompt 中的 `{}` 占位符如何替换?
- 疑问 2:如果两个 Agent 用同一个 outputKey 会怎样?
- 疑问 3:如何在 Prompt 中读取多个 key?
**适合**:
- 对特定机制有疑问
- 遇到实际问题需要快速查阅
- 想了解边界情况的处理
**关键收获**:
- ✅ 掌握 Prompt 模板引擎的替换规则
- ✅ 避免 outputKey 冲突导致的数据丢失
- ✅ 学会在 Prompt 中读取多个 state 值
---
### 04. [RAG 分块策略 - Essence 报告](./04-RAG-分块策略-Essence报告.md)
**内容**:
- Token 感知的智能分块机制
- 结构保护(Markdown 标题、列表、代码块)
- 软硬双重限制防止失控
- 重叠机制保证上下文连续性
- 与 LangChain 等方案的对比
**适合**:
- 需要理解 RAG 链路中的文档处理流程
- 想了解如何切分文档而不破坏语义
- 准备优化自己项目的文档分块策略
**关键收获**:
- ✅ 理解为什么用 Token 估算而不是字符计数
- ✅ 掌握不可中断上下文的检测逻辑
- ✅ 学会软硬双重限制的设计哲学
- ✅ 理解重叠机制如何提升检索准确率
---
### 05. [文件上传自动索引 - Essence 报告](./05-文件上传自动索引-Essence报告.md)
**内容**:
- 上传即索引的自动化流程
- 基于文件名的覆盖更新策略
- 原子化的删除-索引流程
- 同步 vs. 异步的权衡分析
- 一致性保证的设计思路
**适合**:
- 需要理解 RAG 系统的文件管理机制
- 想了解如何保证文件系统与向量库的一致性
- 准备构建自己的文档上传功能
**关键收获**:
- ✅ 理解为什么上传成功后立即触发索引
- ✅ 掌握基于文件名的覆盖更新策略
- ✅ 学会同步索引 vs. 异步队列的权衡
- ✅ 理解索引失败不阻塞上传的设计哲学
---
### 06. [RAG 查询流程 - Essence 报告](./06-RAG查询流程-Essence报告.md) ⭐ 新增
**内容**:
- Tool-Driven RAG 架构
- ReactAgent 智能路由机制
- 向量检索 + LLM 综合答案
- Tool-as-Service 松耦合设计
- JSON 返回格式与 Agent 契约
**适合**:
- 需要理解查询如何触发 RAG
- 想了解 ReactAgent 的工作原理
- 准备构建多功能 AI 助手(不只是文档问答)
**关键收获**:
- ✅ 理解为什么用 ReactAgent 而不是直接调用 RAG
- ✅ 掌握 Tool-as-Service 架构的优势
- ✅ 学会系统提示词如何引导 Agent 选择工具
- ✅ 理解 Top-K = 3 的设计依据
---
## 🎯 推荐学习顺序
### 快速模式(30 分钟)
```
01-AI-Ops-核心设计-Essence报告.md
↓ (只看"核心洞察"、"完整调用链"、"迁移示例")
完成 ✅
```
### 标准模式(1 小时)
```
01-AI-Ops-核心设计-Essence报告.md
↓ (完整阅读)
02-outputKey-深度解析.md
↓ (重点看"完整时间线示例")
03-核心疑问解答.md
↓ (按需查阅)
完成 ✅
```
### 深度模式(2 小时)
```
01-AI-Ops-核心设计-Essence报告.md
↓ (完整阅读 + 对照源码验证)
02-outputKey-深度解析.md
↓ (完整阅读 + 自己画时间线图)
03-核心疑问解答.md
↓ (完整阅读 + 尝试回答扩展问题)
实践:修改 AiOpsService 添加新的 Agent
↓
完成 ✅
```
---
## 📊 学习检查点
### 完成 01 后,你应该能回答:
- [ ] 为什么用 3 个 Agent 而不是 1 个?
- [ ] Planner 的 Replanner 角色是什么意思?
- [ ] Executor 为什么只执行"第一步"?
- [ ] Supervisor 如何知道该调用哪个 Agent?
- [ ] 如果 Executor 执行失败会发生什么?
### 完成 02 后,你应该能回答:
- [ ] outputKey 的本质是什么?
- [ ] Prompt 中的 `{executor_feedback}` 如何被替换?
- [ ] 如何从 state 中提取最终报告?
- [ ] 如何调试 Agent 间的状态传递?
### 完成 03 后,你应该能回答:
- [ ] 如果两个 Agent 使用同一个 outputKey 会发生什么?
- [ ] 如何在 Prompt 中同时读取 3 个 key?
- [ ] 模板引擎是如何工作的?
### 完成 04 后,你应该能回答:
- [ ] 为什么用 Token 估算而不是字符计数?
- [ ] 什么是"不可中断的上下文"?举例说明。
- [ ] 软限制和硬限制的区别是什么?
- [ ] 重叠机制如何提升检索准确率?
- [ ] 这个设计与 LangChain 的切分器有什么不同?
- [ ] 在什么情况下会在列表中间强制切断?
### 完成 05 后,你应该能回答:
- [ ] 为什么上传成功后要立即触发索引?
- [ ] 为什么使用原始文件名而不是 UUID?
- [ ] 索引失败为什么不影响上传?这个设计的利弊是什么?
- [ ] 如何保证文件更新时,向量库中的旧数据被删除?
- [ ] 这个设计在什么场景下会出现问题?
- [ ] 如何改造为异步索引?
### 完成 06 后,你应该能回答:
- [ ] 为什么用 ReactAgent 而不是直接调用 RAG?
- [ ] InternalDocsTools 的 `@Tool` 注解是如何被 ReactAgent 发现的?
- [ ] 工具返回为什么必须是 JSON 格式?
- [ ] Top-K = 3 的设计依据是什么?
- [ ] L2 距离和余弦相似度的区别?何时该换?
- [ ] 如果要添加一个新工具(如查 GitHub Issues),需要改哪些文件?
---
## 🔗 相关文档
### 项目文档
- [项目学习路径](../项目学习路径.md) - 完整的项目学习计划
- [功能分析报告](../功能分析报告.md) - 项目整体功能分析
- [日志配置与分析指南](../日志配置与分析指南.md) - 日志配置与调试
### 源码文件
| 文件 | 关键行 | 说明 |
|------|--------|------|
| `AiOpsService.java` | 51-70 | 3-Agent 构建与编排 |
| `AiOpsService.java` | 100-124 | Planner & Executor 构建 |
| `AiOpsService.java` | 144-257 | Agent Prompts |
| `ChatController.java` | 280-314 | HTTP 入口 + SSE 返回 |
| `DocumentChunkService.java` | 104-202 | RAG 分块核心逻辑 ⭐ |
| `DocumentChunkService.java` | 279-297 | Token 估算算法 |
| `DocumentChunkService.java` | 307-336 | 不可中断上下文检测 |
| `VectorIndexService.java` | 124-168 | 文档索引流程 |
| `RagService.java` | 55-83 | RAG 查询编排 |
| `FileUploadController.java` | 35-103 | 文件上传接口 ⭐ |
| `FileUploadController.java` | 72-80 | 自动索引触发(核心设计) |
| `VectorIndexService.java` | 173-215 | 删除旧数据(覆盖更新) |
| `ChatController.java` | 140-274 | ReactAgent 对话接口 ⭐ |
| `ChatService.java` | 59-96 | 系统提示词构建 |
| `InternalDocsTools.java` | 49-78 | RAG 工具封装 |
| `VectorSearchService.java` | 42-94 | 向量检索 |
---
## 🚀 下一步
### 实践练习
1. **修改 Planner Prompt**
- 调整 `buildPlannerPrompt()` 中的指令
- 观察 Agent 行为变化
- 记录你的发现
2. **添加新的 Agent**
- 在 Planner 和 Executor 之间添加一个 Validator Agent
- 验证 Planner 的计划是否合理
- 实现 3-Agent → 4-Agent 升级
3. **调试工具失败场景**
- 故意让某个工具返回失败
- 观察 Executor 如何反馈给 Planner
- 验证 Planner 的重新规划逻辑
---
## 📝 学习笔记模板
你可以在这个文件夹创建自己的学习笔记:
```markdown
# 我的学习笔记 - [日期]
## 今日学习
- 阅读文档:[文档名]
- 学习时长:[X小时]
- 完成练习:[练习名]
## 关键收获
1.
2.
3.
## 疑问
1.
2.
## 下一步计划
- [ ]
- [ ]
```
---
## 🎓 扩展阅读
### Spring AI 官方文档
- [Agent Framework](https://docs.spring.io/spring-ai/) - Spring AI Agent 官方文档
- [Tool Use](https://docs.spring.io/spring-ai/reference/api/tool.html) - 工具使用指南
### 相关设计模式
- **Chain of Responsibility**(责任链模式)- Supervisor 调度模式的基础
- **Strategy Pattern**(策略模式)- Planner 的多策略规划
- **Observer Pattern**(观察者模式)- Agent 间的状态通知
---
> 💡 **提示**:这个学习报告文件夹会持续更新。当你遇到新的问题或有新的发现时,可以创建新的 Markdown 文件添加到这里。
---
**创建日期**:2026-05-30
**最后更新**:2026-05-31
**版本**:v1.3 (新增 RAG 查询流程报告,完成 RAG 全链路分析)