🚀 100 天搞定 Agent 开发
一条从理解 LLM 本质,到构建可控 Agent 系统的工程化学习路径
2025 年,是 Agent 真正开始爆发的一年。它不再只是 Demo、Prompt 技巧或能力展示,而是被放进真实业务系统中,开始承担明确职责,也开始暴露真实问题。
我从 2024 年 开始做 LLM 和 Agent 相关项目,有过几次真正落地的,也有不少因为方向判断失误、工程复杂度失控而中途终止的项目。
过程中踩过不少坑,有一些比较简单,比如
- 阿里云百炼接口处理用参数 temperature 控制输出,最好再加上
seed参数以便于结果复现。 - 部分推理模型调用时要加 extra_body 传参{"enable_thinking": true}才能真正让它进行推理。
langchain_openai默认会吞掉reasoning_content,导致收不到推理过程的内容,可以通过猴子补丁的方式修复。
还有一些比较复杂,是架构设计和能力边界的问题,比如
-
把 Prompt 当成逻辑层使用 一开始为了省事,把判断条件、分支选择、状态切换全写进 Prompt。 Prompt 越写越长,也越来越“聪明”,但问题也随之出现: 很难调试、很难复现,任何一句话的微调,都可能引发完全不同的行为。 到后面你会发现,系统不是坏在模型能力上,而是坏在逻辑藏在自然语言里,没人能真正控制它。
-
工具列表失控,模型不知道该用什么 工具越加越多,却缺少清晰的边界和分工。 对模型来说,这不是“能力增强”,而是决策负担: 相似功能的工具混在一起,调用条件模糊, 有时选错工具,有时干脆不用工具,行为看起来像“随机发挥”。 问题不在模型,而在于你并没有真正告诉它:什么时候该用、什么时候不该用。
-
没有给 Agent 设定清晰的能力上限 一些本就不适合模型判断的问题,被强行交给模型处理; 一些本该由人介入兜底的灰色区间,被乐观地当成“可以自动化”。 在小规模测试时,这类问题很难暴露, 但一旦进入真实场景,失败会成批出现,而且往往是系统性失败,不是修几个 Prompt 就能解决的。
在不断失败、复盘、修正的过程中,我开始系统性地整理这些经验,并借助 AI 一起校对认知与表达,逐步沉淀出了这份 《100 天搞定 Agent 开发》。
它一方面是我自己的工程笔记和认知复盘,另一方面,也希望能为正在或准备进入 Agent 开发的工程师,少走一些我已经走过的弯路。
整个路径中,大量内容基于真实工程实践,配合主流开源框架的实战,包括但不限于:LangChain、LangGraph、Gradio、Agno、Mem0、Vanna、Langfuse 等。 整个学习路径结构大致如下:
- Week 1–2:先从 LLM 的底层原理出发, 随后通过一个完整的实战项目,开发一个带 UI、支持多模态和深度思考的英语学习 Agent,建立对 Agent 的整体认知。
- Week 3–7:深入学习 Agent 的各个关键组成, Prompt 工程、工具调用、RAG、上下文工程、记忆系统。
- Week 8–11: 关注 Agent 开发与传统软件开发真正不同的地方,以及常见的 Agent 模式。
- Week 12–15:通过多个综合项目,把前面的模块与模式串起来,从“能写 Demo”,走向“能支撑复杂系统”。
👥 适合谁
- 有编程基础,想系统性进入 Agent / AI 工程 的开发者
- 用过 LLM / LangChain,但感觉「越写越乱」的人
- 关心 可维护、可演进 Agent 架构 的工程师 / 架构师
🤝 开源共建
这是一个持续演进的项目,结论来自真实实践,也欢迎被修正。
👉 欢迎 Issue / Fork / PR / Contribute
如果你也准备在 2026 年做 Agent,希望这个 repo 能对你有帮助。
🛠️ 环境配置
本教程文档,默认运行在 Python + Jupyter Notebook 环境中
1. 安装依赖并配置环境变量
a.安装 uv
pip install uv
b.在项目根目录执行按照依赖:
uv sync
c.环境变量配置
cp .env.example .env
在 .env 文件中配置自己的 API Key
2.启动 Jupyter Notebook
uv run jupyter notebook
成功启动后打开浏览器进行访问即可,默认地址为 http://localhost:8888
🧭 教程目录
Week 1 | LLM 基础入门
本周目标
建立对大语言模型的“第一性理解”:
- 模型在“算什么”,而不是“看起来会什么”
- 为什么它能表现出类智能行为
- 为什么它天然不稳定、不可控、但又非常有用
Day 1 |大语言模型到底在干什么
学习内容
- 什么是 LLM(大语言模型)
- 「预测下一个 token」的真实含义
- 为什么一个“预测器”能产生看起来像智能的行为
Day 2 | Token、Embedding 与向量空间
学习内容
- 什么是 Token,为什么 LLM 的基本单位是 Token
- Embedding 是什么,它解决了什么问题
- 相似性、类比、联想在向量空间中如何体现
Day 3 | Transformer:模型的计算引擎
学习内容
- 为什么 RNN 不够用,Transformer 出现的背景
- Self-Attention 在“算什么”
- Layer 在模型中承担的角色
Day 4 |从训练到推理:模型是怎么“学会语言”的
学习内容
- 预训练阶段模型在做什么
- 训练过程是怎样的
- 训练阶段 vs 推理阶段
Day 5 |概率、随机性与不稳定性
学习内容
- 为什么同一个问题多次询问会得到不同答案
- temperature 等参数
- LLM 擅长什么,不擅长什么
Day 6 |一次 LLM API 调用,到底发生了什么?
学习内容
- 核心要素
- 一次完整调用过程说明
- 一次调用中的“可控点”与“不可控点”
Day 7 |思考 & 补充学习资料
反思问题
- LLM 在回答问题时,它真的“理解”了吗?
- 模型输出的一句话,本质上是什么?
- 为什么模型“会在常识问题上犯低级错误”?
Week 2 |基于 LangChain + Gradio 的对话 Agent 实战
本周目标
基于 Langchain 和 Gradio 动手实现一个英语学习 Agent
Day 8 |用 LLM 生成英文学习内容
学习内容
- 了解 LangChain
- 调用 LLM 生成英语文本,如简单句子、段落、词汇解释
Day 9 | 前端交互
学习内容
- 了解 Gradio
- 基于 Gradio 实现英语学习界面
- 通过界面与 Agent 进行交互
Day 10 |多轮对话
学习内容
- 构建对话型 Agent,可连续辅导用户写作
- 保存上下文,逐轮提供修改建议
Day 11 |流式生成
学习内容
- 支持流式生成英语内容
- 提升交互体验
Day 12 |多模态
学习内容
- 支持语音输入和图片输入
- 实现英语听力、阅读辅助
Day 13 |深度思考
学习内容
- 实现作文评分、复杂阅读理解分析
- 引导模型进行 chain-of-thought 生成
Day 14 |思考 & 补充学习资料
反思问题
- LangChain 在这里解决了什么?
- “模式切换”本质是什么?
- 流式输出到底发生在什么层?
- 一次对话,真正“不可控”的部分是哪一步?
Week 3 |提示词工程(Prompt Engineering)
本周目标
学习提示词工程的底层逻辑、通用技巧、和优化迭代技巧
Day 15 | 提示词工程的底层逻辑
学习内容
- Prompt 是什么,不是什么
- Prompt 的真实作用
- Prompt 适合做什么,不适合做什么
Day 16 | Prompt 的通用技巧
学习内容
- 编写 Prompt 的通用技巧
- 编写 Prompt 需要注意什么
Day 17 |零样本提示与少样本提示
学习内容
- 零样本与少样本
- 示例数量为什么“少而精”
- 何时不该用少样本
Day 18 |思维链
学习内容
- 单 Prompt 的天然局限
- 思维链的基本思想
- CoT vs 一次性长 Prompt
- 思维链的延伸
Day 19 |结构化输出
学习内容
- 为什么自然语言输出不可控
- 常见结构化方式
- 结构化输出的技巧
Day 20 |提示词的优化与迭代
学习内容
- 为什么一次写好 Prompt 几乎不可能
- 常见失败模式
- Prompt 迭代的基本流程
Day 21 |思考 & 补充学习资料
反思问题
- Prompt 本质上在做什么?
- Prompt 在系统中的位置, 以及能解决的上限
- Prompt 如何配合工程能力
Week 4 |工具使用
本周目标
学习基于 LLM 工具调用的原理,基于 langchain 的工具调用实现和 MCP 的设计开发
Day 22 |为什么 LLM 一定需要工具
学习内容
- LLM 的三大天然缺陷
- 工具在系统中的角色
- 工具 / 技能 / 智能体 的层级关系
Day 23 | 工具调用的基本机制
学习内容
- 什么是工具调用(Tool / Function Calling)
- Tool Schema 的本质(能力描述)
- 模型在 Tool Calling 中做了什么
Day 24 | 基于 Langchain 的工具调用
学习内容
- LangChain 在工具调用里做了什么?
- 一个最小可用示例
- LangChain 工具调用流程拆解
Day 25 | MCP 介绍
学习内容
- 工具调用的问题
- 什么是 MCP
Day 26 | MCP 实战
学习内容
- 基于 fastmap 实现一个 MCP Server
- 基于 cherry studio 连接 MCP Server
Day 27 |从工具到技能
学习内容
- 什么是技能
- 技能实战
Day 28 |思考 & 补充学习资料
反思问题
- 如果不使用工具,LLM 的能力上限在哪里?
- 当工具越来越多时,会发生什么?
- 如果把模型换掉(更弱 / 更强),你当前的工具系统还能正常工作吗?
Week 5 | RAG
本周目标
了解 RAG 的基本原理,学习 RAG 完整链路
Day 29 |RAG 是怎么工作的
学习内容
- RAG 核心链路拆解:理解从“用户提问”到“检索上下文”再到“LLM 合成答案”的完整闭环(Indexing -> Retrieval -> Generation)。
- 向量化(Embedding)原理:学习如何将非结构化的文本转化为数学向量,以及余弦相似度如何度量语义相关性。
- RAG vs 微调(Fine-tuning):对比两种技术在实时性、成本和准确度上的优劣,明确 RAG 在处理私有、易变数据时的优势。
Day 30 | 文档处理与数据加载
学习内容
- 多格式解析(Loaders):学习使用工具(如 mineru, marker)解析 PDF、Image 和 Excel 等格式。
- 数据清洗(ETL)规范:处理文档中的乱码、无意义空格及特殊符号,提升后续 Embedding 的信号质量。
- 元数据(Metadata)管理:学习在加载时保留页码、作者、日期等关键信息,为后续的精准过滤做准备。
Day 31 | 文本分块 (Chunking)
学习内容
- 分块策略的选择:对比“固定长度切分”与“语义切分(如递归字符切分)”,寻找语义完整性与模型上下文窗口的平衡点。
- 重叠窗口(Overlap)设计:学习如何通过设置重复字符来保持上下文的连续性,防止核心信息在切分点丢失。
- 分块粒度对检索的影响:探讨“颗粒度过粗”导致的冗余噪音与“颗粒度过细”导致的上下文缺失问题。
Day 32 | 检索技术 (Retrieval)
学习内容
- 向量库(Vector Store)选型:了解常用的向量数据库(如 Pinecone, Milvus, FAISS),并实现基础的增删改查。
- 混合检索(Hybrid Search):结合“语义向量检索”与“关键词 BM25 检索”,解决专有名词和缩写匹配不准的问题。
- 多向量检索方案:学习针对同一分块生成多个概括性问题(Multi-vector)以提升复杂提问的匹配率。
Day 33 | 重排序 (Rerank)
学习内容
- Rerank 的必要性:理解初筛(Retrieval)虽然快但不够准,学习如何利用 Cross-Encoder 对 Top-K 结果进行精细化打分。
- 主流重排序模型应用:实操如何调用 BGE-Reranker 或 Cohere Rerank API 提升检索精度。
- 上下文压缩(Context Compression):在重排后剔除低分块,仅保留最有价值的段落以减少 Token 消耗并降低干扰。
Day 34 | 问题改写与答案生成
学习内容
- Query Transformation 技术:学习利用 LLM 将模糊的用户提问改写为更专业的“检索词”(如 Hyde 假设性回答或 Multi-query)。
- Prompt 工程实践:设计结构化的 System Prompt,要求模型必须基于检索内容回答,并处理“搜不到相关内容”时的拒答逻辑。
- 引用归属(Citations)实现:学习如何让模型在回答中自动标注出处(如 [1]),增强 RAG 答案的可信度和可追溯性。
Day 35 |思考 & 补充学习资料
反思问题
- RAG 在 Agent 系统中的位置
- RAG 能解决的上限
- RAG 不能解决的问题
Week 6 |上下文工程(Context Engineering)
本周目标
学习上下文工程并基于 langchain 进行实战
Day 36 |什么是上下文工程
学习内容
- 什么是上下文工程
- 从注意力机制到上下文工程
- 上下文工程的边界
Day 37 | 上下文的组成结构
学习内容
- 一次调用里通常有哪些信息
- 不同信息的优先级
- 顺序是否重要
Day 38 |多轮对话与上下文增长问题
学习内容
- 多轮对话是如何线性膨胀的
- 为什么不能“全部塞进去”
- 历史对话对当前推理的真实价值
- 常见失败模式
Day 39 |上下文裁剪与压缩策略
学习内容
- 裁剪 vs 摘要 vs 重写
- 时间窗口策略
- 语义摘要策略
- 结构化摘要
Day 40 |外部检索信息如何进入上下文
学习内容
- 检索结果不是越多越好
- 分片与上下文的关系
- 检索结果放在什么位置最合理
- 为什么外部信息会“干扰推理”
Day 41 |上下文工程实战
学习内容
- 基于 langchain 进行上下文工程实战
Day 42 |思考 & 补充学习资料
反思问题
- 上下文在 Agent 系统中的位置
- 常见上下文设计反模式
- 哪些问题该用上下文解决,哪些问题不该用上下文解决
Week 7 |记忆系统(Memory System)
本周目标
了解记忆系统及常见分类,并基于 langchain 和 mem0 进行实战
Day 43 |为什么 Agent 需要记忆
学习内容
- Context 的上限与不可持续性
- 没有记忆的 Agent 的能力边界(它“记不住”时还能做到什么)
- 记忆带来的行为一致性与“人格感”
Day 44 |记忆的分类与写入
学习内容
- 记忆 vs 上下文 vs 外部知识:三者各管什么
- 记忆的基本分类:短期记忆、长期记忆、用户画像、任务态势等
- 写入策略:什么时候记、记什么、记多少
- “克制地记忆”:避免把所有对话都当记忆
Day 45 |记忆的更新、遗忘与冲突
学习内容
- 记忆覆盖 vs 追加:何时替换、何时累积
- 时间衰减与“遗忘曲线”:记忆随时间如何自然“淡化”
- 冲突记忆如何处理:最新为准 / 来源优先级 / 置信度加权
- 为什么“忘记”是能力的一部分:防止污染、保持系统健壮
Day 46 |记忆如何进入上下文
学习内容
- 记忆检索的触发条件:什么时候“需要去翻记忆”
- 相关性过滤:按任务 / 用户 / 时间筛选合适记忆
- 记忆摘要如何进入上下文:放在什么位置、用什么形式
- 记忆注入失败的常见原因:记错 / 塞错位 / 被截断 / 被噪音稀释
Day 47 | langchain 记忆功能实战
学习内容
- 了解 LangChain 内置 Memory 类型(Buffer、BufferWindow、Summary 等)
- 基于对话构造简单的个性化记忆(如用户偏好)并在后续轮次中使用
Day 48 | mem0 记忆功能实战
学习内容
- 学习基于 mem0 实现记忆写入、检索与更新
- 对比 LangChain 内置 Memory 与 mem0 的适用场景
Day 49 |思考 & 补充学习资料
反思问题
- 记忆系统 在 Agent 架构中的位置
- 上下文工程 与 记忆系统 的边界
- 常见记忆系统反模式
- 记忆系统与 RAG/工具的协同方式
- 未来可扩展方向(如多模态记忆、跨会话长期记忆等)
Week 8 | Agent 架构与思维模式的转变
本周目标
学习 Agent 的基本架构与组成,完成开发者心智模型的转变,并动手实现一个可用的 Agent
Day 50 |什么是 Agent
学习内容
- Agent 的准确定义:与“纯 LLM 调用”“脚本/工作流”的区别
- Agent 的核心特征:感知、决策、行动、循环与自主性
- 为什么需要 Agent:从“一问一答”到“多步规划与执行”
Day 51 | Agent 基本组成
学习内容
- 大脑(LLM):推理与决策
- 工具(Tools):感知与行动的外延
- 记忆与上下文:状态与历史的承载
- 规划与执行循环:ReAct、Plan-and-Execute 等范式简介
- 各组成部分如何协同:一次典型 Agent 调用的数据流
Day 52 | Agent 开发者的“思维模式”转变
学习内容
- 从“写死流程”到“设定目标与边界、让模型决策”
- 从“单次调用”到“多轮推理与工具调用循环”
- 从“追求确定输出”到“处理不确定性、失败与重试”
- 提示词与工具设计如何影响 Agent 行为:可观测、可约束、可纠错
Day 53 | Agent 的失败模式
学习内容
- 幻觉与错误工具使用:错误参数、错误时机、错误工具选择
- 循环与死锁:重复调用、无法结束
- 上下文与记忆问题:丢状态、记错、检索不到
- 如何观测与缓解:日志、trace、人工兜底与 guardrail
Day 54 |基于 LangChain 开发 Agent
学习内容
- LangChain / LangGraph 中的 Agent 抽象:Runnable、Tool、AgentExecutor 等
- 工具的定义、绑定与调用流程
- 实现一个完整 Agent:接收用户输入 → 多轮推理与工具调用 → 返回最终结果
- 与上下文、记忆的衔接(可选结合 Week 6、7 内容)
Day 55 |基于 Agno 开发 Agent
学习内容
- Agno 的定位与基本用法:与 LangChain 的差异与适用场景
- 在 Agno 中定义 Agent、工具与执行流程
- 实现一个完整 Agent 并跑通端到端
- 对比 LangChain 与 Agno 的选型考量
Day 56 |思考 & 补充学习资料
反思问题
- 向别人解释什么是 Agent、和“带 API 的聊天机器人”有何不同
- 你写的 Agent 在什么情况下会失败、根本原因是什么
- 如果把 LangChain / Agno 拿走,你是否仍然能说清 Agent 应由哪些部分组成、如何设计循环与失败处理
Week 9 |反思模式(Reflection)
本周目标
理解反思模式在 Agent 中的必要性,掌握触发机制与输入输出设计,并动手为 Agent 加入反思节点
Day 57 |为什么 Agent 一定需要反思
学习内容
- 没有反思的 Agent 会发生什么:重复错误与错误放大
- 单向执行系统的天然缺陷
- 人类问题解决中的“复盘机制”及其对 Agent 设计的启发
Day 58 |什么是反思模式
学习内容
- 反思模式的定义与在 Agent 中的角色
- 反思与推理的区别:何时“再想一遍”而非“继续推一步”
- 反思在循环中的位置:执行前 / 执行后 / 异常时
Day 59 |反思触发机制
学习内容
- 常见触发条件:失败、超时、置信度低、人工标记等
- 按步骤触发 vs 按结果触发的取舍
- 触发频率与成本:避免“反思泛滥”或“从不反思”
Day 60 |反思的输入与输出设计
学习内容
- 反思输入:当前状态、执行历史、错误信息、上下文片段
- 反思输出:结论类型(继续 / 调整 / 停止)与结构化格式
- 输出如何反馈到主循环:改计划、换工具、重试或交给人
Day 61 |反思与上下文
学习内容
- 哪些反思结果可以进入记忆(经验、教训、偏好)
- 哪些只能作为一次性判断(当轮决策,不沉淀)
- 为什么反思结论不能直接当事实:避免“自我强化谬误”
Day 62 |实战:为 Agent 加入反思节点
学习内容
- 开发反思独立模块:输入输出接口与调用时机
- 可配置触发条件(如失败次数、超时阈值)
- 明确“继续 / 调整 / 停止”三类输出并在主流程中分支处理
Day 63 |思考 & 补充学习资料
反思问题
- 你的 Agent 是在什么时候触发反思的?触发条件是否清晰可配置?
- 反思发生时,Agent 停止了什么?又接管了什么(决策权、上下文、下一步动作)?
- 如果把“反思”模块拿掉,系统会以什么方式退化?如何用日志或指标验证?
Week 10 |任务分解模式(Task Decomposition)
本周目标
理解任务分解为何是 Agent 的核心能力,掌握线性、树状、并行与汇合等分解策略,并能处理常见失败模式,动手构建任务分解型 Agent
Day 64 |为什么任务分解是 Agent 的核心能力
学习内容
- 人类如何自然分解复杂问题:子目标、依赖与顺序
- 一步到位为什么必然失败:复杂任务的不可一次性与上下文限制
- 什么是“好”的任务分解:可执行、可验证、依赖清晰、粒度合理
Day 65 |分解策略一:线性分解
学习内容
- 适用场景:强顺序依赖、前后步骤有明确输入输出关系
- 抽象结构:步骤链、每步输入来自上一步输出
- 风险:某步失败导致后续全废、难以并行、步数膨胀
Day 66 |分解策略二:树状分解
学习内容
- 优势:按主题或维度拆分、子任务可独立推进、便于回溯与剪枝
- 风险:分支过多导致步数爆炸、汇合与去重逻辑复杂、依赖关系易遗漏
Day 67 |分解策略三:并行与汇合
学习内容
- 适用场景:子任务彼此独立或可并行执行、最后需汇总结果
- 抽象结构:DAG、并行节点与汇合节点、结果合并策略
- 风险:并行度与资源/限流冲突、汇合时冲突或重复、部分失败时的降级策略
Day 68 |任务分解的失败模式与修复
学习内容
- 常见失败:分解过粗/过细、漏子任务、依赖错序、重复执行、汇合冲突
- 修复策略:重分解、插入校验与重试、显式依赖与执行顺序、去重与合并规则
Day 69 |实战:任务分解模式 Agent
学习内容
- 设计“分解 → 执行子任务 → 汇总”的 Agent 流程
- 子任务表示与状态追踪、依赖与顺序约束
- 与工具、反思、上下文的衔接;可选结合 Week 8–9 的 Agent 与反思节点
Day 70 |思考 & 补充学习资料
反思问题
- 你的 Agent 是在什么时候触发任务分解的?触发条件是否清晰(如用户目标复杂度、单步不可完成)?
- 任务分解发生时,Agent 停止了什么?又接管了什么(规划权、子任务调度、结果汇总)?
- 如果把“任务分解”模块拿掉,系统会以什么方式退化?如何用日志或指标验证?
Week 11 | HITL(Human-in-the-Loop)模式
本周目标
理解为什么 Agent 系统必然需要人的参与,掌握 HITL 的三种介入模式与触发条件设计,并动手为 Agent 加入可配置的 HITL 能力
Day 71 |为什么 Agent 系统一定需要人
学习内容
- 为什么自动化一定会遇到“不可判定区间”:模糊边界、价值判断、合规与责任
- 模型与 Agent 的责任边界:什么适合交给模型、什么必须保留给人
- 全自动系统的三种必然失败:不可判定时的误判、越权与合规、无法兜底
Day 72 |什么是 HITL
学习内容
- Human-in-the-Loop 的定义:人在关键节点参与决策或修正,而非事后补救
- 与“人工兜底”的区别:HITL 是设计内的一环、触发与界面明确;人工兜底多为事后补救、边界模糊
Day 73 |HITL 的三种介入模式
学习内容
- Approval(审批型):执行前需人批准(如发邮件、下单),通过/拒绝/修改后再继续
- Correction(修正型):执行后由人修正结果或输入,Agent 根据修正继续或重试
- Takeover(接管型):人直接接管控制权,Agent 暂停或转为辅助,由人完成剩余动作
Day 74 |HITL 的触发条件设计
学习内容
- 常见触发条件:高风险动作前、置信度低、失败/异常、业务规则(金额/权限)、定时复核
- 按场景选择触发点:审批型多在执行前,修正型多在结果异常时,接管型多在连续失败或用户请求时
- 触发频率与体验:避免过度打断与漏触发之间的权衡
Day 75 |HITL 的上下文与信息呈现
学习内容
- 人类介入时必须看到的信息:当前意图、即将执行的动作/参数、相关上下文与风险提示
- 错误示例与正确示例:信息过载/过少、缺少决策依据;简洁可操作的摘要与关键字段高亮
Day 76 |实战:为 Agent 加入 HITL
学习内容
- 设计“触发 → 暂停 → 呈现信息 → 等待人决策 → 根据决策继续/修正/接管”的流程
- 可配置触发条件与三种介入模式的接口(审批通过/拒绝、修正内容、接管确认)
- 与现有 Agent 循环、反思节点的衔接;可选结合 Week 9 反思的“停止/交给人”分支
Day 77 |思考 & 补充学习资料
反思问题
- 人是在什么情况下被拉进系统的?触发条件是否清晰、可配置、可观测?
- 人进来之后,能做什么、不能做什么?审批/修正/接管的边界是否在界面与文档中明确?
- 人的决策是否会反向影响 Agent 的后续行为?如何把人的选择写回上下文或配置?
Week 12 |实战:Gateway + Agent Runtime 核心架构
本周目标
搭建一个类似 OpenClaw 的 Agent 平台核心:Gateway(路由、会话、状态管理)与 Agent Runtime(上下文组装、工具调用循环、流式响应),为后续插件化与多通道打下基础
对照参考:OpenClaw 中文文档 — 项目完整拆解主线(Gateway 运行时编排、控制平面、执行主链)、AI 核心框架(上下文、状态机、工具策略、模型回退、记忆、Hook)
Day 78 |Gateway 架构设计
学习内容
- Gateway 的职责:路由决策、会话管理、状态持久化、多通道协调
- Hub-and-Spoke 架构:Gateway 作为控制平面,Agent Runtime 作为执行节点
- 接口设计:Gateway API(接收请求、路由到 Agent、返回响应)、会话与状态管理接口
Day 79 |路由策略与决策
学习内容
- 路由策略:规则路由、Embedding 相似度路由、LLM 决策路由、混合路由
- Router 的职责边界:只负责“去哪”,不做业务细节
- 误路由检测与降级:重路由、回退到通用 Agent、转人工
Day 80 |Agent Runtime 核心循环
学习内容
- Agent Runtime 的职责:上下文组装、LLM 调用、工具执行、流式响应、状态持久化
- 与 Week 8-11 的衔接:在 Runtime 中嵌入反思节点、任务分解、HITL 能力
- 一次请求在 Runtime 中的完整流程:接收 → 组装上下文 → 推理 → 工具 → 反思 → 响应
Day 81 |上下文组装与会话管理
学习内容
- 会话状态管理:用户会话、Agent 会话、工具调用历史
- 上下文组装策略:历史对话、记忆检索、工具结果、反思结论的合并与优先级
- 跨 Agent 的上下文共享与隔离:何时共享、何时隔离
Day 82 |工具系统与执行引擎
学习内容
- 工具注册与发现:工具 schema、工具池管理、按能力/场景筛选
- 工具执行引擎:参数校验、执行、错误处理、结果格式化
- 工具链与组合:多工具顺序执行、并行执行、条件分支
Day 83 |实战:Gateway + Runtime 最小可用版本
学习内容
- 实现 Gateway 核心接口:接收请求、路由决策、会话管理
- 实现 Agent Runtime:上下文组装、工具调用循环、流式响应
- 端到端跑通:用户请求 → Gateway → Runtime → 工具执行 → 返回结果
Day 84 |思考 & 补充学习资料
反思问题
- Gateway 与 Agent Runtime 的职责边界是否清晰?如何避免职责重叠?
- 路由决策的准确性如何评估?误路由发生时如何快速定位与修复?
- 如何设计 Gateway 与 Runtime 的接口,使其易于扩展与替换?
Week 13 |实战:插件系统 + 多通道
本周目标
在 Week 12 核心架构基础上,实现插件系统(Provider、Tool、Memory、Channel)与多通道支持(CLI + Web),使平台具备可扩展性与多入口能力
对照参考:OpenClaw 通道适配器框架(接口合同、注册链路、账号生命周期、入站路由与出站发送)、Hook 与插件注入、多插件冲突治理
Day 85 |插件系统架构设计
学习内容
- 插件接口设计:ProviderPlugin(LLM 提供者)、ToolPlugin(工具扩展)、MemoryPlugin(记忆后端)、ChannelPlugin(通道)
- 插件生命周期:注册、加载、卸载、热更新
- 插件依赖与版本管理:插件间依赖、版本兼容性、向后兼容策略
Day 86 |ProviderPlugin 与 ToolPlugin 实现
学习内容
- ProviderPlugin:统一 LLM 调用接口,支持多模型切换(OpenAI、DashScope、本地模型等)
- ToolPlugin:工具插件的注册、发现、执行;工具元数据(名称、描述、参数 schema、权限要求)
- 实战:实现一个自定义 ToolPlugin(如文件操作、API 调用),并在平台上加载使用
Day 87 |MemoryPlugin 与 ChannelPlugin 实现
学习内容
- MemoryPlugin:记忆后端的抽象接口(写入、检索、更新、删除);支持多种后端(内存、数据库、向量库)
- ChannelPlugin:通道接口(接收消息、发送响应、状态同步);实现 CLI 通道与 Web 通道(简化版)
- 实战:实现一个 MemoryPlugin(如基于 SQLite 的记忆)和一个 ChannelPlugin(CLI),接入平台
Day 88 |多通道适配与会话隔离
学习内容
- 多通道的会话管理:每个通道独立的会话 ID、会话状态隔离、跨通道共享(可选)
- 通道适配层:将不同通道的消息格式统一为平台内部格式
- 状态同步:多通道下的状态一致性、冲突处理、最终一致性策略
Day 89 |状态持久化与会话恢复
学习内容
- 会话状态持久化:对话历史、工具调用记录、Agent 状态、用户偏好
- 会话恢复:断线重连、历史加载、状态重建
- 数据模型设计:会话表、消息表、工具调用表、状态快照表
Day 90 |实战:完整平台基础功能
学习内容
- 整合 Gateway + Runtime + 插件系统 + 多通道
- 实现一个完整流程:CLI 通道接收请求 → Gateway 路由 → Runtime 执行(带工具) → 返回结果 → Web 通道展示
- 验证插件化:加载自定义 ToolPlugin、切换不同 ProviderPlugin、使用不同 MemoryPlugin
Day 91 |思考 & 补充学习资料
反思问题
- 插件系统的扩展性如何验证?新增插件是否无需修改核心代码?
- 多通道下的会话隔离与共享策略是否合理?如何平衡隔离与复用?
- 状态持久化的性能与一致性如何权衡?如何设计数据模型以支持快速查询与恢复?
Week 14 |实战:在平台上实现垂直场景 Agent
本周目标
在 Week 12-13 搭建的平台上,实现两个垂直场景 Agent(DeepResearch、ChatBI)作为插件,展示平台的可扩展性与场景化能力
Day 92 |DeepResearch Agent 需求与设计
学习内容
- DeepResearch 问题范式:开放问题、多来源、多轮验证、证据管理
- 研究流程设计:Problem framing → Plan → Search → Read → Synthesize → Critique
- 作为平台上的“高级 Tool”:DeepResearch 不是独立系统,而是平台上的复杂工具链 Agent
Day 93 |DeepResearch Agent 实现:规划与检索
学习内容
- 研究计划生成:用任务分解模式将研究问题拆成子问题
- 多轮检索与证据池:调用搜索工具、RAG 工具,维护证据池(来源、时间、置信度)
- 去重与冲突处理:多来源信息冲突时的策略(列出双方证据、标明不确定)
Day 94 |DeepResearch Agent 实现:合成与引用
学习内容
- 证据合成:将多来源证据整合成结构化报告
- 引用与可追溯性:自动生成引用([1][2])和参考文献列表
- 质量评估:自评 prompt(检查覆盖度、平衡性、是否遗漏反对观点)
Day 95 |ChatBI Agent 需求与设计
学习内容
- ChatBI 场景与风险:自然语言问指标、趋势、对比;SQL 注入、误删/写操作、安全范围控制
- 数据源与 schema 建模:从数据库/CSV 抽取 schema,为模型准备“schema 提示”
- 作为平台上的“数据工具链 Agent”:ChatBI 通过 ToolPlugin 接入数据库工具,Agent 逻辑处理自然语言 → SQL → 解释
Day 96 |ChatBI Agent 实现:SQL、Guardrail、可视化与多轮分析
学习内容
- SQL 生成与执行闭环:自然语言 → SQL → SQL review → 执行 → 结果 → 自然语言解释
- Guardrail 与权限控制:禁止写操作、限制查询范围、行级权限
- 指标定义与语义对齐:自然语言指标与实际字段/计算的映射
- 可视化建议:返回结构化结果,指导前端做简单图表(折线、柱状、数字卡片)
- 多轮对话上下文:保持“当前分析会话”的上下文(筛选条件、粒度、时间范围)
- 指标计算与缓存:复杂指标计算逻辑、结果缓存策略
Day 97 |实战:两个场景 Agent 在平台上运行
学习内容
- 将 DeepResearch 与 ChatBI 作为 ToolPlugin 或自定义 Agent 接入平台
- 展示插件化优势:新增场景 Agent 无需修改核心代码,只需实现插件接口
- 端到端演示:用户通过 CLI/Web 发起研究或 BI 查询,平台路由到对应 Agent,返回结果
Day 98 |思考 & 补充学习资料
反思问题
- 垂直场景 Agent 作为“高级 Tool”与独立系统的区别是什么?插件化的优势在哪里?
- DeepResearch 与 ChatBI 的通用能力(如任务分解、反思、HITL)是否应该抽取为平台能力?
- 如何设计场景 Agent 的接口,使其既能复用平台能力,又能灵活定制业务逻辑?
Week 15 |实战:监控、评估、生产化 + 终极复盘
本周目标
为平台接入监控与可观测性(Langfuse),实现成本、安全、权限控制,并完成从 Week 1 到 Week 15 的终极复盘:所有模块如何在一个完整系统中协同
Day 99 |监控与可观测性
学习内容
- 指标收集:请求量、延迟、错误率、成本
- 日志与 trace:结构化日志、分布式 trace、调用链追踪
- 接入 Langfuse:trace 记录、成本统计、性能分析
Day 100 |评估与测试
学习内容
- Agent 评估指标:任务完成率、准确性、用户满意度、成本效率
- 测试用例设计:单元测试、集成测试、端到端测试
- A/B 测试:Agent 策略、路由策略、模型版本的对比
Day 101 |安全与权限控制
学习内容
- API 密钥管理:密钥存储、轮换、访问控制
- 用户权限:角色与权限模型(RBAC)、资源访问控制
- 数据隔离与审计日志:多租户隔离、操作审计、合规要求
Day 102 |性能优化
学习内容
- 缓存策略:结果缓存、LLM 响应缓存、工具结果缓存
- 并发控制:请求队列、限流(令牌桶)、超时控制
- 数据库优化与 LLM 调用优化:索引、连接池、批处理、流式响应
Day 103 |部署与运维
学习内容
- 容器化部署:Docker、Docker Compose、Kubernetes
- 配置管理:环境变量、配置文件、密钥管理
- 健康检查与回滚策略:健康检查端点、自动重启、版本回滚
Day 104 |实战:生产就绪的平台
学习内容
- Week 1-2:LLM 本质理解 → 第一个 Agent 项目(英语学习 Agent)
- Week 3-7:Agent 关键组成(Prompt、工具、RAG、上下文、记忆)→ 每个模块的职责与边界
- Week 8-11:Agent 模式(架构、反思、任务分解、HITL)→ 从“单次调用”到“多步系统”的思维转变
- Week 12-15:完整平台(Gateway + Runtime + 插件 + 多通道)→ 所有模块如何在一个系统中协同
- 未来路线图:多模态、在线学习、长期记忆、多租户配置、企业级部署
Day 105 |思考 & 补充学习资料
反思问题
- 从 Week 1 到 Week 15,你最大的认知转变是什么?哪些是“必须理解”的,哪些是“可以后补”的?
- 搭建完整 Agent 平台与写单个 Agent demo 的区别在哪里?平台化思维的核心是什么?
- 如何评估一个 Agent 系统的“生产就绪度”?监控、安全、成本、可扩展性哪个最重要?