AI IN PRACTICE / FROM ZERO TO AGENT
Agent 应用工程:从入门到交付。
使用现有模型,逐步构建检索、工具、状态、评测与可部署的应用。
按目标选择路线,共同基础只学一次
Agent 应用工程
用现有模型做应用:让它查资料、调用工具,并处理出错、权限和部署。最后做一个能实际使用、能检查结果的 Java 学习助手。
模型训练与 Agent 算法研究
从数学和小模型实验开始,理解模型怎样学习、怎样改进。最后写一份别人能重做、能看懂比较结果的实验报告。
两条路线按各自前置知识起步,无需先读完另一条路线。只做应用可沿工程主线推进;以研究为目标可直接从数学开始。
共享基础主读向量与余弦注意力直觉(应用选修)数据划分原则
已掌握基础时,按文章开头的“本篇重点”阅读;重复的余弦推导与注意力 Java 演示默认折叠,完整代码仍可展开。
查看 12 组交叉主题:已学什么,这次补什么
| 主题与共同基础 | 应用工程侧重 | 训练研究侧重 |
|---|---|---|
| 向量与相似度 点积、范数、余弦与稳定计算统一以数学篇为主读;掌握后不重复做同类数值练习。 | 先核对查询和文档的编码模型版本、归一化方式与索引是否兼容;换模型或迁移索引后检查检索结果,再用标注样例确定并检验相似度阈值。阅读应用篇 ↗ | 推导并计算 L1 / L2 / L∞ 范数、点积和余弦,再用相近数相减的例子检查浮点抵消误差,学习稳定计算。阅读研究篇 ↗ |
| 注意力 Q / K / V、缩放、掩码与 softmax 的基础直觉以 Agent 入门篇为主读,属于应用路线的选修模型背景。 | 画出 Token 怎样变成注意力输出,说明每个位置能看到哪些上下文、为什么不能提前看到未来内容;按需选学,不要求训练模型。阅读应用篇 ↗ | 先核对矩阵各维的大小,再检查不同框架 API 如何解释掩码、整行屏蔽时怎样处理以及 dropout 的行为;用梯度实验检查被屏蔽信息是否仍影响计算。阅读研究篇 ↗ |
| Token 与 Embedding Token、上下文窗口、词表与向量表示的术语可复用。 | 记录请求用了多少 Token、输出是否被截断以及为什么结束,检查调用是否超出预算。阅读应用篇 ↗ | 用 BPE 观察词表怎样建立,再把 Token ID 转成可训练的 Embedding,弄清训练实际接收的输入。阅读研究篇 ↗ |
| 概率与 softmax 概率归一化与数值稳定性是共同基础;采样和求梯度是不同任务。 | 先累计每项概率,再用二分查找选中一次采样结果;检查边界输入和调用预算,观察生成结果的随机性。阅读应用篇 ↗ | 先推导交叉熵与 p − one-hot 梯度,再比较把多条损失求和或取平均(loss reduction)会怎样改变训练。阅读研究篇 ↗ |
| 工具调用与轨迹 模型、工具、观察与行动的交互结构相通。 | 先规定允许调用哪些工具(白名单),再记录调用 ID,处理重复与冲突,并设置执行预算和停止条件。阅读应用篇 ↗ | 按步骤记录观察、动作、奖励和结束原因,区分任务真正结束与预算用尽的截断,再决定哪些内容作为监督训练标签。阅读研究篇 ↗ |
| 工作流与决策搜索 任务、状态、依赖与预算是共同语言,固定调度与搜索未知动作分别学习。 | 画出没有循环依赖的任务图(DAG),找出耗时最长的依赖路径(关键路径),再规定角色、预算和失败后受影响的任务。阅读应用篇 ↗ | 比较 Beam Search 与 MCTS / UCT 怎样选择候选,推演尝试新选择(探索)、利用已有好选择与搜索预算之间的关系。阅读研究篇 ↗ |
| 多 Agent 协作 角色之间会交换信息并共享结果;工程编排不等于联合策略训练。 | 安排固定角色的权限、依赖、通信与结果合并,判断是否需要多个 Agent。阅读应用篇 ↗ | 先观察队友改变策略后,旧经验为什么可能失效;再学集中训练、分散执行(CTDE)和 COMA,检查各成员的动作对策略更新与合作收益分别有什么影响。阅读研究篇 ↗ |
| 检索与记忆 检索、证据和上下文选择相通;使用检索器与训练检索器有不同验收目标。 | 把记忆和有出处的资料交给模型,检查读取权限和上下文长度,再用 Recall / MRR / NDCG 检查资料是否找全、排得是否合适。阅读应用篇 ↗ | 分别为查询和文档生成向量(双编码器),用负样本和对比损失学习区分相关资料,再检查内容选择策略及对新数据的效果。阅读研究篇 ↗ |
| 数据划分与评测集 这组原则只学一次:先确定以后要处理哪些新数据,再据此给相关样本分组;同组不跨数据集,测试集不用来调参,并划清时间先后,避免测试内容的相同或近似版本提前进入训练。 | 写清系统允许和禁止做什么,把同一原始案例的变体归为一组,记录失败类型,并固定回归测试的版本与通过条件。阅读应用篇 ↗ | 只用训练部分学习预处理参数,再复用参数处理其他数据(fit / transform);交叉验证时每折都在训练部分重新拟合。检查新实体上的效果,保存数据及处理结果的版本,并说明评测时哪些任务计入总数。阅读研究篇 ↗ |
| 回归与统计评估 先约定实验方法,再用独立样本得到可以比较的结果。 | 先列出发布必须通过的检查,校准评分器,再比较新旧版本有没有退步,决定能否发布。阅读应用篇 ↗ | 用重复抽样观察分数如何波动,学习 bootstrap、置信区间和 pass@k 各自适用的条件,再说明结论有多大不确定性。阅读研究篇 ↗ |
| 失败定位与归因 保留完整的输入、执行步骤和结果;同时发生的变化,不一定就是导致失败的原因。 | 沿一次请求的完整记录(trace)和各步骤记录(span)查找失败位置与耗时,再结合指标排查线上问题。阅读应用篇 ↗ | 逐步删减仍能触发同一失败的输入,固定其他条件后替换一个环节(反事实实验),检查结果是否变化,以及是否还有其他因素同时影响结果。阅读研究篇 ↗ |
| 成本与推理性能 先说清统计哪些调用、哪些阶段,再比较费用、耗时和单位时间处理量(吞吐)。 | 逐次记录调用费用,缺少用量时标为未知;拆开从请求开始到结束各阶段的耗时,再设置应用预算。阅读应用篇 ↗ | 对比使用与不使用 KV Cache 的结果,分清先处理提示内容(prefill)和逐步生成(decode),再检查查询与键数量不同时的掩码、分页共享及写时复制。阅读研究篇 ↗ |
先知道,哪些值得先学
重要程度与难度,分开看。
先沿 P0 主线学习,遇到前置知识先补齐;再按目标扩展 P1、P2。编号是建议顺序,不限制每天的篇数。筛选后的编号会保留,方便回到完整路线。
- P0 · 必会主线
- 后续学习和独立开发反复依赖
- P1 · 重点提升
- 提升工程能力与问题定位能力
- P2 · 按需深入
- 在特定场景下进一步研究
显示 36 / 36 篇
L0 · 零基础
从环境、术语和第一个可运行的例子开始,不预设相关知识。
先分清 AI、机器学习、语言模型与 Agent
用分类问题分清 AI、机器学习、语言模型和 Agent,再判断自己的任务是否需要模型。
AI、机器学习与深度学习的关系 · 训练与推理的区别 · 分类任务与生成任务
建立能重复运行的 Python 练习环境
跑通第一个 Python 脚本,分清终端、解释器和项目环境,并记录别人怎样重建它。
终端、解释器与源文件 · Python 版本检查 · Windows py 启动器
用列表、字典和函数处理第一份学习数据
用清洗标题的小任务学习列表、字典、函数和测试,掌握 AI 应用马上会用到的 Python。
字符串与空白清理 · 列表索引与遍历 · 字典取值及缺字段
看懂 HTTP 请求、JSON 与 API 错误
接模型前先看清请求地址、身份、正文和响应,再处理超时、错误与格式不合格的情况。
API 契约 · HTTP 方法与地址 · 请求头与请求体
L1 · 基础
掌握日常开发的基本方法,能独立完成小功能并解释结果。
用向量和相似度建立 Embedding 直觉
先用一组数字亲手算相似度,再理解文本向量如何用于查找相关资料。
标量、向量与矩阵 · 维度与对应位置 · 点积
本篇重点:先核对查询和文档的编码模型版本、归一化方式与索引是否兼容;换模型或迁移索引后检查检索结果,再用标注样例确定并检验相似度阈值。
理解 Transformer 如何利用上下文
从一句话怎样逐步生成出发,理解分词、注意力和上下文,不必先实现整套训练。
文本到 Token 标识 · Token 到向量表示 · 位置与顺序信息
本篇重点:画出 Token 怎样变成注意力输出,说明每个位置能看到哪些上下文、为什么不能提前看到未来内容;按需选学,不要求训练模型。
从一次 LLM 请求理解 Token 与上下文
从一次 Java 请求入手,看清模型收到了什么、返回了什么,以及用量、耗时和失败怎样记录。
消息角色与请求选项 · 上下文窗口 · 输入和输出 Token
本篇重点:记录请求用了多少 Token、输出是否被截断以及为什么结束,检查调用是否超出预算。
控制生成随机性与 Token 预算
分清温度、采样和输出长度各控制什么,再用实际任务比较效果和用量。
候选 Token 分数 · 概率归一化与 softmax · 贪心与采样
本篇重点:先累计每项概率,再用二分查找选中一次采样结果;检查边界输入和调用预算,观察生成结果的随机性。
把模糊需求写成可测试的提示
把任务、资料和通过条件写清楚,再用一致的示例说明应该怎样回答、缺资料时怎么办。
任务目标与验收标准 · 输入资料边界 · 零样本提示
让 AI 按指定格式回答:结构化输出与校验
先约定模型返回哪些字段,再检查格式、业务范围和内容对错,让结果能直接用于应用。
业务字段设计 · Java record 映射 · 文本转换器边界
让结构化结果通过三层校验
数据能解析成 Java 对象后,继续检查必填、空值、范围和资源权限,确认业务上能否执行。
JSON 语法校验 · Schema 结构校验 · 业务语义校验
把原始笔记变成可追溯的检索片段
先把资料读对、清理好、按意思切成片段并记录版本,再生成向量用于检索。
提取、转换与写入 · 原文完整性抽查 · 文档来源和版本
工具调用:执行、返回结果与正确停止
走完“模型提出请求—应用检查并执行—返回真实结果—继续回答”的完整工具调用流程。
工具名称和参数 · 调用 ID 与结果关联 · 应用分派和执行
本篇重点:先规定允许调用哪些工具(白名单),再记录调用 ID,处理重复与冲突,并设置执行预算和停止条件。
L2 · 进阶
把知识串成系统,处理并发、可靠性、检索质量与真实故障。
向量检索:选择距离、建立索引并检查召回
先用逐项比较找出正确结果,再检验近似索引节省了多少时间、漏掉了多少相关内容。
编码模型与维度配置 · 欧氏距离、点积与余弦 · 距离排序方向
组合关键词、向量检索与重排
结合关键词与语义检索,既找准类名和配置键,也找得到换了说法的资料,再重新排序。
关键词与向量检索互补 · BM25 与向量分数尺度 · RRF 排名融合
让 RAG 回答能回到原始证据
先从文档里找依据,再生成带真实引用的回答;资料不够时,明确说明还不能下结论。
RAG 检索与生成分工 · 文档章节与版本元数据 · 租户和权限过滤
单独测量检索召回与排序质量
用固定测试题检查相关资料有没有找到、排得够不够靠前,以及资料外的问题怎样处理。
查询、语料与相关标注 · 文档和片段标注单位 · Hit@k
本篇重点:先检查该找的资料是否找到、排在什么位置,再评估回答质量;用 Recall / MRR / NDCG 按样本类别分别检查,定位遗漏资料的原因。
把工具定义做成可测试的接口契约
把工具参数、返回值和错误说清楚,再分别测试工具本身,以及模型会不会正确使用它。
工具名称与能力边界 · 输入来源与必填参数 · JSON Schema 输入范围
提示注入与权限检查:限制工具能做什么
区分资料里的文字与真正的操作授权,在后端检查身份、资源和动作,拦住提示注入带来的越权。
用户、模型与工具信任边界 · 直接提示注入 · 检索和工具中的间接注入
用 MCP 连接工具,保留应用控制权
看懂应用、连接端和能力服务各负责什么,再实际完成一次工具发现与调用。
Host、Client、Server 职责 · 工具、资源与提示 · JSON-RPC 请求标识
排查 MCP 初始化、传输与会话问题
按初始化、协商、调用和断线几个阶段检查 MCP,分清本地进程与 HTTP 两种传输方式。
initialize 请求 · 版本与能力协商 · initialized 通知
用状态机决定哪里需要 Agent
先写清业务要经过哪些步骤,再把需要临场判断的选择交给模型,并限制它能走的路径。
工作流与 Agent 控制权 · 固定节点与动态决策 · 显式状态数据
不用真实模型也能验证状态机
把状态、事件和合法变化写成可测试的规则,确认完成、取消、重复通知时都走对流程。
状态和事件区分 · 状态转换表 · 纯函数迁移
分开保存历史、工作记忆与长期偏好
把历史、当前任务信息和长期记忆分开保存,让对话接得上,也给眼前的问题留够空间。
完整历史与工作记忆 · 长期偏好 · 消息条数与 Token 预算
本篇重点:记录记忆中的事实、出处和权限;以完整记忆组为单位选取内容,并检查是否超出上下文预算。
让执行能重启、重试与等待确认
保存长任务进度,防止恢复时重复操作,并让用户确认对应到具体内容和版本。
持久检查点 · 内存状态与进程重启 · 节点重放
流式与异步:用背压控制待处理数据
分清先显示一部分与真正完成,处理慢客户端、断线和取消,避免缓存越积越多。
流式与异步的区别 · 增量和完整结果 · 网络分块与事件边界
建立不会自我欺骗的 Agent 评测集
把真实任务、正确行为和失败类型整理成固定测试数据,让每次改进都有同一把尺子。
任务类型覆盖 · 输入、资料和预期行为 · 禁止行为约束
本篇重点:写清系统允许和禁止做什么,把同一原始案例的变体归为一组,记录失败类型,并固定回归测试的版本与通过条件。
用评测和执行轨迹判断 Agent 是否可靠
既检查任务有没有做成,也记录检索、决策和工具执行过程,让失败能找到具体原因。
结果和过程分别评估 · Schema 权限预算检查 · 引用支持与人工核对
本篇重点:沿一次请求的完整记录(trace)和各步骤记录(span)查找失败位置与耗时,再结合指标排查线上问题。
把 Spring 服务接入模型工具
沿用熟悉的 Service、Repository 分层,把小而明确的 Java 业务方法开放为模型工具。
ChatClient 接入 · @Tool 与 @ToolParam · 工具注册
为学习助手实现接口、存储与测试骨架
用 Java 后端保存任务、步骤和资料,设计发起、查询、取消、确认等接口,为完整项目做准备。
Controller Service Adapter 分层 · 兼容版本与构建配置 · 请求和响应 DTO
L3 · 深入
进入机制、诊断与权衡,用证据判断复杂设计是否必要。
让记忆可以纠错、过期并保持隔离
给长期记忆记录来源、版本和有效期,并处理修改与撤回,避免旧信息重新生效。
记忆来源与确认状态 · 事实与推测区分 · 临时要求和长期偏好
管理重试预算、幂等键与并发恢复
分清哪些失败能重试,处理超时后结果未知,并防止重复请求和多个进程执行同一笔操作。
可重试与不可重试错误 · 指数退避和抖动 · 整体截止时间
在预算内拆解任务与协作
把计划写成有输入、结果和先后顺序的任务表,再让真正独立的子任务并行处理。
单代理基线 · 任务独立性和依赖 · 结构化计划
本篇重点:画出没有循环依赖的任务图(DAG),找出耗时最长的依赖路径(关键路径),再规定角色、预算和失败后受影响的任务。 安排固定角色的权限、依赖、通信与结果合并,判断是否需要多个 Agent。
设计评分规则并公平比较两个版本
组合程序检查、人工评审和模型评分,逐题比较新旧版本,说明提升、退步和不确定性。
确定性规则检查 · 硬约束门槛 · 人工评分 Rubric
本篇重点:先列出发布必须通过的检查,校准评分器,再比较新旧版本有没有退步,决定能否发布。
质量、成本与尾延迟:关注等待较久的请求
统计一整次任务的模型、工具用量和等待时间,在质量相同的条件下优化上下文、并发与缓存。
全任务调用量统计 · 输入输出及缓存计量 · 未知用量处理
本篇重点:逐次记录调用费用,缺少用量时标为未知;拆开从请求开始到结束各阶段的耗时,再设置应用预算。
毕业项目:可验证的 Java 学习助手
完成一个 Java 学习助手:查资料、出练习、保存计划,并用测试说明正常与失败时的行为。
授权笔记问答 · 来源引用与资料不足 · 练习题结构化生成
学习笔记 · 整理于 2026.09.26
难度与重要程度服务于学习排序。用练习结果验证掌握情况,再决定是否进入下一篇。