Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
README.md

🚀 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 系统的“生产就绪度”?监控、安全、成本、可扩展性哪个最重要?

关于 About

100 天搞定 Agent 开发

语言 Languages

Jupyter Notebook60.1%
Python39.7%
Dockerfile0.1%

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
75
Total Commits
峰值: 23次/周
Less
More

核心贡献者 Contributors