README · AI Agent 2
AI Agent 学习路线
这个目录的目标不是收集名词,而是把 Java 后端能力迁移成可落地的 AI Agent 工程能力。主线只有一条:
代码块收起展开
Java 后端工程能力
-> LLM API / Prompt / Streaming
-> Tool Calling
-> MCP
-> RAG
-> Agent Workflow
-> Memory / Trace / Eval
-> Personal Knowledge Agent一屏总览
mindmap
root((AI Agent 工程))
基础层
LLM API
Prompt
Streaming
Structured Output
执行层
Tool Calling
权限
审计
错误恢复
知识层
RAG
Obsidian
Chunk
Citation
协议层
MCP Client
MCP Server
Tools
Resources
运行层
Workflow
State Machine
Memory
Trace
产品层
Eval
Cost
Safety
Deployment
推荐阅读顺序
| 阶段 | 读什么 | 目的 | 产出 |
|---|---|---|---|
| 0 | 00-Java后端转Agent学习路线 | 建立整体路线 | 知道先学什么、后学什么 |
| 1 | 05-AI工程基础入门到精通 | 补齐基础概念 | 能解释 LLM/RAG/MCP/Agent |
| 2 | 01-MCP专题学习笔记 | 理解工具协议 | 能设计只读 MCP Server |
| 3 | 02-RAG与Agent工程 | 理解知识增强 | 能做 Obsidian RAG |
| 4 | 03-项目实战清单 | 选择项目 | 有可落地作品集路径 |
| 5 | 04-每周推进计划 | 排期执行 | 每周有 demo、笔记、复盘 |
| 6 | 06-Agent CLI源码剖析-全局架构与数据流 到 21-Agent CLI深水区-从输入到落盘全链路复盘 | 源码级理解 Agent runtime | 能自己实现最小 Agent CLI |
| 7 | 00-Agent Memory 21篇论文学习路线 | 论文级理解 Agent Memory | 能设计长期记忆系统 |
目录地图
使用方式与总验收表
这套笔记的读法是先跑通主线,再按薄弱点回到源码或论文。不要把 40 多篇笔记当成线性书籍硬读。
| 学习动作 | 看哪部分 | 必须产出 |
|---|---|---|
| 补概念 | 05 | 概念到工程对象映射 |
| 定路线 | 00 | 当前阶段和交付物 |
| 做项目 | 03 + 04 | 本周 demo、trace、失败样本 |
| 补 MCP | 01 + 15 | 只读 Notes MCP |
| 补 RAG | 02 + 18 | Obsidian RAG eval |
| 补 runtime | 06-21 | 最小 Agent CLI |
| 补记忆 | essay | Memory schema 和写入策略 |
| 总能力 | 合格证据 | 关联笔记 |
|---|---|---|
| LLM 接入 | /chat、stream、错误归一化、token 日志 | 05, 06, 07 |
| 工具调用 | schema、权限、审计、结构化 result | 01, 08, 13 |
| MCP 暴露 | initialize、list、call、白名单、错误码 | 01, 10, 15 |
| RAG 问答 | chunk、hybrid recall、rerank、citation、refusal | 02, 18 |
| Workflow | 状态机、最大步数、失败出口 | 03, 07, 12 |
| Memory | 来源、置信度、更新、撤销、冲突处理 | 14, essay |
| Eval/Trace | eval set、debug report、失败归因 | 04, 20, 21 |
| 产品交付 | README、demo、配置、限制说明 | 03, 04 |
上线成熟度地图
这组笔记不是只为了“看懂 Agent”,最终要能判断一个 Agent 系统是否能上线。可以按下面这张表倒查缺口:
| 成熟度 | 必须证明 | 对应笔记 | 不合格表现 |
|---|---|---|---|
| 能运行 | 有可调用入口、固定请求/响应、错误归一 | 05, 06, 07, demo | 只能在 Notebook 或临时脚本里跑 |
| 能控边界 | 工具、路径、权限、输出都有硬限制 | 08, 13, 17 | 模型说要干什么就直接执行 |
| 能找证据 | RAG / 搜索结果可解释、可引用、可校验新鲜度 | 02, 18 | 拿过期 chunk 或无关文件回答 |
| 能复盘 | 每次任务都有 trace、debug report、失败归因 | 20, 21 | 只保存最终回答,看不到中间决策 |
| 能回归 | prompt、RAG、tool schema 改动前后能跑 eval | 04, 20 | 靠主观感觉判断“好像更好” |
| 能降级 | 超时、限流、成本、供应商故障有 fallback | 05, 16, 20 | provider 抖动时整条链路崩掉 |
| 能守隐私 | trace/log/memory 写入前有脱敏和保留策略 | 05, 13, 14 | 私有路径、密钥、原始 prompt 直接落盘 |
| 能运维 | 有 SLO、告警、runbook、回滚版本 | 05, 20, 21 | 出事故后只能靠人工猜 |
读法:如果某一行做不到,就不要继续堆新功能,先回到对应笔记补工程对象、失败样本和验收证据。
内容使用决策树
不要按文件编号机械阅读。更有效的方式是先判断当前卡点,再回到对应笔记补足“原理、对象、失败、证据”四件事。
| 当前卡点 | 先读 | 必须补出的东西 | 不合格信号 |
|---|---|---|---|
| 只知道名词,不知道系统怎么跑 | 05 | 一次请求的生命周期、核心对象、失败阶段 | 能解释概念,但画不出数据流 |
| Java 后端能力不知道怎么迁移 | 00 | Controller/Service/DB/MQ 到 Agent runtime 的映射 | 仍把 Agent 当普通 Chat API |
| 项目不知道先做哪块 | 03 + 04 | 纵向切片、每周交付、验收证据 | 一周结束只有阅读记录,没有可运行东西 |
| 工具调用不敢落地 | 08 + 13 | schema、权限、审计、失败恢复 | 模型输出什么参数就直接执行 |
| MCP 和 REST 分不清 | 01 + 10 + 15 | capability discovery、transport、tool/resource 边界 | 把 MCP 当业务 API 重写一遍 |
| RAG 回答不稳定 | 02 + 18 | chunk、召回、rerank、引用、拒答 | 检索到相似内容就直接回答 |
| Agent 循环容易乱跑 | 07 + 12 | 状态机、maxSteps、stop reason、recover policy | 失败后继续让模型自由发挥 |
| 记忆不知道该存什么 | 14 + essay | memory schema、来源、置信度、更新/撤销策略 | 把聊天历史全文塞进 memory |
| 改 prompt 后不知道好坏 | 20 + 21 | eval case、trace、debug report、回归结论 | 靠主观看两三个回答判断 |
三条主线要互相闭环:
| 主线 | 解决的问题 | 应该反哺到哪里 |
|---|---|---|
基础主线 00-05 | 建立概念和工程对象 | 项目切片、验收表、源码阅读问题 |
源码主线 06-21 | 学 Agent runtime 怎样组织 | demo 的包结构、状态机、权限和 trace |
论文主线 essay | 学 memory/agent 设计空间 | memory schema、长期上下文策略、eval 维度 |
当前可运行 Demo
路径:F:\2. ObsidianNotes\技术栈\AI Agent\demo,说明见 README。
它不是最终产品,而是当前最小后端切片:
代码块收起展开
HTTP request -> AgentService -> NoteSearchService -> grounded answer/refusal -> TraceService
EvalCase -> EvalService -> AgentService -> pass/fail reasons
ToolCallRequest -> ToolService -> search/read/trace/debug/eval -> ToolCallResponse
McpRequest -> McpService -> ToolService -> McpResponse
MemoryWriteRequest -> MemoryService -> data/memories.jsonl
TraceRecord -> TraceService -> data/traces.jsonl
TraceRecord -> DebugReportService -> DebugReport| 能力 | 当前 demo 是否覆盖 | 验证方式 |
|---|---|---|
| 本地笔记检索 | 已覆盖 | GET /API/notes/search?q=MCP&limit=2 |
| 带来源回答 | 已覆盖 | POST /API/chat 返回 sources |
| 无证据拒答 | 已覆盖 | service test 覆盖 no-source refusal |
代码块收起展开
| trace 复盘 | 已覆盖 JSONL 持久化 | `GET /API/traces/{traceId}` 或 `.\trace-test.ps1` |
| debug report | 已覆盖最小失败归因 | `GET /API/traces/{traceId}/debug` 或 `.\debug-test.ps1` || eval gate | 已覆盖 | POST /API/eval 或 .\eval-test.ps1 |
| tool schema | 已覆盖 | GET /API/tools 或 .\tool-test.ps1 |
| safe note read | 已覆盖 | read_note 拒绝路径逃逸 |
| MCP transport | 已覆盖最小子集 | POST /mcp 或 .\mcp-test.ps1 |
| memory store | 已覆盖最小 JSONL slice | POST /API/memories 或 .\memory-test.ps1 |
| 真实 LLM | 暂不覆盖 | 后续接 ModelGateway |
| 完整生产 MCP | 暂不覆盖 | 后续加 session、resources、prompts、streamable HTTP 细节 |
本地验收命令:
代码块收起展开
cd "F:\2. ObsidianNotes\技术栈\AI Agent\demo"
$env:JAVA_HOME='D:\JAVA_TechTool\JDKs\oracle-24.0.1'
$env:Path="$env:JAVA_HOME\bin;$env:Path"
.\mvnw.cmd test
.\mvnw.cmd spring-boot:run
.\smoke-test.ps1
.\eval-test.ps1
.\tool-test.ps1
.\mcp-test.ps1
.\memory-test.ps1
.\trace-test.ps1
.\debug-test.ps1当前定位
| 已有基础 | 迁移到 Agent 的位置 | 需要补的 AI 工程意识 |
|---|---|---|
| Spring Boot / MVC / MyBatis | Agent API、任务服务、工具服务、权限服务 | 模型输出不稳定,接口必须可校验 |
| MySQL | 会话、任务、trace、索引元数据 | 记忆需要来源、版本、置信度、撤销 |
| Redis / MQ | 异步工具调用、任务队列、缓存 | 工具调用有延迟、失败、重试和超时 |
| JUC / 线程池 | 并发检索、批量 embedding、eval runner | 需要限流和成本控制 |
| 设计模式 | Tool / Memory / Planner / Executor 抽象 | 抽象必须服务可观测和可测试 |
| 日志 / 监控 | Trace / Eval / Debug report | 不能只看最终答案,要复盘全过程 |
能力成熟度
| 等级 | 标志 | 你能做什么 | 不合格表现 |
|---|---|---|---|
| L1 调模型 | 能稳定请求 LLM | Chat API、Streaming | 只会复制 SDK demo |
| L2 接工具 | 模型能调用后端能力 | Tool schema、权限、审计 | 让模型执行任意命令 |
| L3 接知识 | 回答能引用私有资料 | Obsidian RAG、引用、拒答 | 检索到什么就乱答 |
| L4 接协议 | 能暴露 MCP 能力 | Notes MCP、Project MCP | MCP 和 REST/API 混着理解 |
| L5 做工作流 | 多步任务可控 | 状态机、最大步数、失败恢复 | 无限自循环 |
| L6 做产品 | 可评测、可部署、可维护 | eval、trace、成本、安全 | 只靠“看起来还行”判断效果 |
Agent Memory 论文精读
论文区入口:00-Agent Memory 21篇论文学习路线
这一组笔记已经按“原文 + 中文精读 + 工程映射”的方式拆解。阅读时按下面的问题看,不要只背论文名:
| 问题 | 阅读重点 |
|---|---|
| 这篇解决什么失败模式 | 忘记、检索不准、写入污染、事实过期、技能无法复用 |
| 记忆是什么形态 | 文本、图谱、技能、反思、隐藏状态、参数补丁 |
| 写入条件是什么 | 每轮都写、surprise 写、失败后写、用户确认后写 |
| 怎么验证有效 | recall、answer correctness、update accuracy、latency、cost |
| 怎么迁移到个人知识 Agent | Obsidian chunk、用户偏好、任务 trace、反思、技能库 |
最终作品形态
flowchart TD
Notes["Obsidian Notes"] --> Indexer["Indexer"]
Indexer --> Retriever["RAG Retriever"]
User["User"] --> Agent["Personal Knowledge Agent"]
Agent --> Retriever
Agent --> Capability["Tools / MCP / Memory"]
Capability --> Answer["Answer with citations"]
Retriever --> Answer
Agent --> Trace["Trace / Eval"]
Trace --> Report["Debug Report"]
最终项目不是“聊天机器人”,而是:
Personal Knowledge Agent:基于 Obsidian 的个人知识库 Agent,支持 RAG 问答、MCP 工具暴露、学习计划生成、任务追踪、长期记忆、回答引用、trace 复盘和 eval 回归。
学习原则
- 每个概念必须落到工程对象:类、表、接口、状态、日志、测试。
- 每个 Agent 能力必须有边界:权限、最大步数、超时、失败处理。
- 每个回答质量必须能验证:固定问题集、引用、trace、对比报告。
- 每个笔记都要能服务实现:少口号,多流程图、表格、字段、伪代码、验收标准。