HANDS-ON LAB
动手做一个 mini Agent
十章指南告诉你 Pi 是怎么设计的;这个专栏让你亲手写一个。 零依赖、零框架,6 关从一次裸 fetch 开始,逐关加工具、流式、压缩、REPL,最后给会话装上分叉时光机。 每关结尾对照 Pi 源码——读完理论再来动手,或者动手卡住了回去翻理论,都行。
动手前只要三样东西
Node 20+
自带全局 fetch,不用装任何依赖
一个 API Key
任意 OpenAI 兼容供应商(DeepSeek / 通义 / 智谱…)
一个终端
全部代码 node 直接跑,没有构建步骤
01
一次调用:看懂 messages 数组
热身messages零依赖不写任何框架,用一次裸 fetch 调用大模型,看清"对话"的唯一真相——一个不断增长的 messages 数组。
开始这一关
02
工具调用:Agent Loop 的最小闭环
Agent Looptool calling核心关卡给模型三个文件工具,写一个 while 循环处理它的工具调用——你就徒手实现了一个能读文件的 Agent。
开始这一关
03
流式事件:看见 Agent 的呼吸
streamingSSE事件把请求改成 stream: true,亲手解析 SSE 事件流——文字逐字吐出、工具调用实时出现,终端 UI 的秘密就在这里。
开始这一关
04
上下文压缩:对话太长怎么办
压缩上下文工程token给 Agent 装上"记忆压缩术":估算 token、超限就总结前段历史、替换成摘要消息——第 9 章算法的最小可行版。
开始这一关
05
组装:一个能日常用的 mini agent
总装REPL系统工程交互式 REPL、系统提示词、工具异常回包、成本统计、轮次护栏——把前四关拼成一个真正能陪你看代码的小助手。
开始这一关
06
会话分叉:给 Agent 装上时光机
会话树JSONL收官关卡会话不是一条数组,而是一棵树——只追加的 JSONL + parentId 指针,/branch 一条命令回到任意时间点重新生长。
开始这一关
专栏代码均为原创教学示例,已开源在 pi-mini-agent,MIT 许可,随意取用