Skip to content

Tiny-Agent —— 从第一性原理学习现代 AI Agent

Tiny-Agent:从一次模型调用,到真正的 Agent 系统

Language: English | 简体中文

很多 Agent 教程从安装框架开始,然后很快写出 create_agent()。代码能跑,但当 Agent 第一次重复调用 Tool、把检索结果当成事实、在审批前产生副作用,或者因为 Context 越塞越长开始行为异常时,往往很难回答:这一层到底是谁负责?

Tiny-Agent 走另一条路。

这是一门从零开始的 Agent 工程课程。我们先把模型调用、Structured Output、Tool Calling、Runtime、Workflow、State、Retrieval 这些基础机制一层层搭起来,再进入 MCP、Memory、Context Engineering、Skills、Safety、Evaluation、Multi-Agent、Sandbox、Production 与 Long-Horizon。

框架会出现,但不会比问题更早出现。最终目标也不是记住一套 2026 年流行 API,而是面对一个新的 Agent 系统时,能够自己判断:哪些决定真的需要模型,哪些控制逻辑应该留在普通代码里,模型能提出什么又真正有权做什么,以及系统怎样停止、恢复、审批、评估和上线。


课程地图

课程使用连续的 00–15 Stage。每一章只解决前一章自然暴露出来的新问题。

Stage 主题 这一章真正要回答的问题
00 Foundations 模型调用怎样从“返回一段文字”变成程序可用的接口?
01 ReAct Runtime Tool Call 怎样形成一个有边界、会停止的 Agent Loop?
02 Workflow / Routing / Planning 哪些控制权该留给代码,哪些判断值得交给模型?
03 Stateful Orchestration 流程复杂以后,怎样把 State 与状态转移摊到桌面上?
04 Retrieval / Agentic RAG Agent 怎样获取外部 Evidence,并知道什么时候证据不够?
05 MCP 外部 Tool、Resource、Prompt 怎样跨标准协议边界接入?
06 Memory / Persistence / HITL 进程消失以后怎样继续?什么值得长期记住?什么时候必须等人?
07 Context Engineering 已经保存了这么多信息,这一轮模型到底应该看到什么?
08 Agent Skills 可复用 Procedure 怎样被发现,并只在需要时加载?
09 Reliability / Safety Agent 真能行动以后,怎样限制权限、重试、循环、错误与预算?
10 Evaluation / Observability 怎样知道 Agent 为什么这样做,以及改版到底有没有变好?
11 Multi-Agent 什么时候真的需要第二个 Agent,而不是多画几个方框?
12 Workspace / Sandbox Agent 能读写文件、运行代码以后,执行边界在哪里?
13 Production Service 一个本机 Demo 怎样变成有身份、队列、Backpressure 和 Durable Run 的服务?
14 Long-Horizon Harness Worker 消失以后,长任务怎样靠 Ledger、Lease 和 Artifact 换班继续?
15 Capstone 面对真实业务,怎样只选择真正需要的 Agent 机制?

建议严格按顺序学习。课程里很多边界是前面一层层建立的,直接跳到后面往往只能看到“怎么写”,看不到“为什么现在才需要它”。


每一章怎么学

标准 Stage 结构只有三部分:

stages/XX-topic/
├── README.md
├── README.zh-CN.md
└── code/

README 是完整课程正文。正文里的代码块只展示当前正在讲的局部机制;完整可执行程序放在本章 code/

推荐学习节奏:

读一段讲解
    ↓
看当前局部代码
    ↓
解释它解决了什么问题
    ↓
运行本章完整 Demo
    ↓
运行 checks.py / runtime_checks.py
    ↓
故意改坏一个不变量
    ↓
解释为什么检查失败

不要只运行 Happy Path。Agent 工程里,真正值得学习的地方经常藏在“错误输入应该怎样被拒绝”“不该发生的副作用是否真的没有发生”这些边界里。


运行代码

课程以 Python 3.10+ 为基线。大量后半程示例只使用标准库,可以直接运行:

python stages/06-memory-persistence-hitl/code/demo.py
python stages/06-memory-persistence-hitl/code/checks.py

有外部依赖的章节,在自己的 code/requirements.txt 中声明依赖。例如:

python -m pip install -r stages/05-mcp/code/requirements.txt
python stages/05-mcp/code/in_memory_client.py
python stages/05-mcp/code/checks.py

课程不要求在仓库根目录安装一个“大而全”的 Agent 环境。学习某一章时,只安装这一章真正需要的依赖。

Stage 00、01 等章节包含真实模型 Provider 的教学 Adapter;对应环境变量和运行方式写在章节正文。课程检查尽量使用 Deterministic Model Double、Fake Client 或离线数据,因为 Runtime 是否越权、是否无限循环、是否重复副作用,本来就不该依赖一次随机在线模型调用来证明。


为什么先讲机制,再讲框架

一个抽象只有在你知道它替你做了什么以后,才真正有价值。

Stage 03 先从 State / Node / Edge / Reducer 推到 Graph,再映射 LangGraph;Stage 04 先从 Chunk / Embedding / Similarity / Top-K 推到向量后端;Stage 05 先分清 Function Calling 和外部协议边界,再进入 MCP。

这不是反框架。恰恰相反,它会让框架更容易学:看到一个高层 API 时,你不需要死记参数,而是知道它正在替你承担哪一层责任。


一条贯穿全课的原则:Proposal 不等于 Authority

如果只记住 Tiny-Agent 的一句话,可以记这句。

模型可以提出 Tool Call、Route、Plan、Memory Candidate、Refund Action 或 Delegation;Retriever 可以返回高相关内容;Skill 可以建议使用某个 Tool;另一个 Agent 也可以请求协作。

这些都不自动获得执行权。

应用拥有的 Validation、Policy、Ownership、Approval、Authorization 与 Execution Boundary 必须继续存在。

Agent 工程的很多事故,本质上都是把“建议”错当成了“授权”。


仓库结构

重构后的仓库保持课程本身需要的最小结构:

Tiny-Agent/
├── README.md
├── README.zh-CN.md
├── CONTRIBUTING.md
├── CONTRIBUTING.zh-CN.md
├── LICENSE
└── stages/
    ├── 00-foundations/
    ├── 01-react-runtime/
    ├── ...
    └── 15-capstone-enterprise-agent/

每一章都拥有自己的完整教学实现和可执行检查。没有第二套全局 src/tests/ 需要学生与章节代码来回对照。


适合谁

只要会基础 Python 就可以开始:函数、类、dict / list、异常、基本 JSON 和命令行运行 Python 已经足够。async/await、SQLite、Subprocess、Graph、Service 等知识会在课程真正需要它们时再进入。

学完以后,目标不应该只是“我会用某个 Agent Framework”,而是拿到一个新的业务需求时,能先把模型决策、Tool 权限、State Scope、Durability、Memory Policy、Context Selection、Evidence、Retry、Idempotency、Approval、Authorization、Execution Isolation、Trace、Eval、Service Identity 和 Worker Recovery 的边界说清楚。

当这些问题能在选框架之前回答,框架才真正变成工具。

Stage 00 开始即可。


Star History

Star History Chart

在 Star History 上查看 Tiny-Agent 的成长。