00 从零手写 Agent 路线图

QuibblerAgentQuibblerAgent 2026-11-13 约 13 分钟 13 次阅读

Agent 框架两年里冒了一茬又一茬:LangGraph、Claude Agent SDK、AutoGen……选型对比看多了,一个朴素的事实反而被盖住——Agent 的核心不依赖任何框架。一个模型 API、一份工具清单、一个 while 循环,三百行以内的 Python 就能写出一个能干活的 Agent。本系列共 13 篇,立场只有一条:不引框架,从裸 HTTP 请求开始,把 Agent 从零到一亲手写出来。

本文是第 0 篇路线图:先给 Agent 一个能落地的定义,盘清手写需要的全部零件并跑通第一个脚本,再把 13 篇的完整地图摊开,最后给出读法建议。

1、为什么从零手写

框架解决的是"快",代价是"看不见"。用 SDK 三行代码调起大模型,用 LangGraph 十行代码建一张图,都很快;可一旦出问题——账单莫名暴涨、循环不终止、工具结果没进上下文——没读过协议层的人,只能在框架的配置项里挨个试。

框架的更替速度也值得一算:今天选定的框架,半年后大概率已在重写 API;协议层的 JSON 却稳得多——messages 数组、stop_reason、事件流,这些字段几年没有大变。把理解建立在协议上,框架的更替就只是换一层皮。

手写一遍的收益集中在三处:

  • 排障:错误发生在 HTTP 层还是循环逻辑,一眼定位
  • 选型:知道框架替你做了什么,才知道何时不需要它
  • 成本:账单上的每一个 token 都能对上一行代码

这三条收益会在系列里反复兑现:第 2 篇算清记忆的账单,第 7 篇治理上下文膨胀,第 11 篇拿手写版与官方 SDK 对账——每一篇都在还这里许下的愿。

1.1、框架遮住了什么

剥到协议层,一切 Agent 框架都是同两样东西:一个 messages 列表装着全部历史,一个 while 循环驱动模型与工具交替工作。LangGraph 的图、Claude Agent SDK 的会话,最终都落回这对组合——这不是比喻,第 11、12 篇会拿框架逐项对账。

看不见这层的人,把框架当黑盒崇拜;看清这层的人,把框架当工具挑拣。差距不在天赋,在有没有亲手写过一遍。

2、Agent 的最小定义

扔掉所有营销词,Agent 可以落成一句话:接收任务后,循环执行"模型推理 + 工具调用",直到任务完成并给出答案的程序。拆开是三个零件:模型是脑,工具是手,循环是心脏。

一轮工作的完整流向如下:

flowchart TD A[用户任务] --> B[模型思考] B --> C{需要工具?} C -->|是| D[执行工具] D --> E[结果写回历史] E --> B C -->|否| F[输出答案]

图里最要紧的是"结果写回历史"指向"模型思考"的那条回边:工具结果不是给用户看的,是写回对话历史、喂给模型做下一轮决策的。模型每一步都基于"任务加已发生的全部"重新决策,这是 Agent 与"一问一答"的本质区别。

2.1、循环是心脏

全系列的核心循环长什么样,先睹为快:

while response.stop_reason == "tool_use":
    results = execute_tools(response)      # 执行模型点名的工具
    history.append_tool_results(results)   # 结果写回对话历史
    response = call_model(history)         # 带着新历史再问模型

三行代码,是 Claude Code、LangGraph 以及一切 Agent 框架共同的心脏。stop_reason 等于 tool_use 表示模型说"我要用工具",循环再转一圈;模型说完了,循环自然停止。第 5 篇会把这三行扩成完整实现,此处记住形状即可。

2.2、什么不是 Agent

定义的反面同样有用。单次调用不是 Agent——一问一答没有循环,谈不上"完成任务";固定流程的管线也不是——步骤写死在代码里,模型没有决策权,只是一个贵一点的文本变换函数。判断标准就一条:下一步做什么,是代码写死的,还是模型看着历史决定的。前者是工作流,后者才是 Agent。

工作流并非低级——大量生产场景用固定管线更稳、更便宜、更好测试,硬套 Agent 反而是浪费。第 12 篇做选型收束时,这个区分会反复出现:先问任务需不需要模型决策,再决定要不要 Agent。

3、手写前的零件清单

手写 Agent 不需要 GPU,不需要机器学习基础,零件只有四样:Python 3.10 以上、httpx 库、一个兼容 Anthropic Messages 协议的端点、一把 API key。官方 API 与各家兼容网关(如智谱开放平台)均可,系列代码在两者之间不改一行。

安装依赖只要一条命令:

pip install httpx python-dotenv

httpx 负责发 HTTP 请求,python-dotenv 负责从 .env 文件读密钥——密钥永远不进代码、不进 git。.env 模板如下:

ANTHROPIC_BASE_URL=https://你的兼容端点地址
ANTHROPIC_API_KEY=你的密钥

零件是否齐全,用一个连通性自检脚本验证。这是全系列第一个能跑的程序:

import os
import sys
import httpx
from dotenv import load_dotenv

sys.stdout.reconfigure(encoding="utf-8")   # Windows 控制台中文防乱码
load_dotenv(override=True)                 # 防预设同名变量覆盖,第 1 篇展开

response = httpx.post(
    os.environ["ANTHROPIC_BASE_URL"] + "/v1/messages",
    headers={
        "x-api-key": os.environ["ANTHROPIC_API_KEY"],
        "anthropic-version": "2023-06-01",
        "content-type": "application/json",
    },
    json={
        "model": "glm-4.6",
        "max_tokens": 64,
        "messages": [{"role": "user", "content": "只回复四个字:零件齐全"}],
    },
    timeout=60,
)
print(response.status_code, response.json()["content"][0]["text"])

实测记录(一次真实运行)的输出如下:

200 零件齐全

状态码 200 加上模型回话,四样零件全部就位。脚本里两行防御性代码不是玄学:中文 Windows 的 GBK 编码与预设环境变量,是新手最先撞上的两个坑,第 1 篇的踩坑实录会完整解剖它们。整个系列写完,核心代码不过三百行——没有一处需要框架。

代码组织上,系列的全部代码都在一个 agent.py 里逐步生长:第 2 篇加历史管理,第 5 篇长出循环,第 6 篇挂上工具,第 7 篇接上持久化。每篇结束你手里都有一个能跑的完整版本——这比散落十几个互不相干的示例文件的教程,好维护也好复习得多。

开工前还有两笔账要心里有数。预算上,本系列每篇实验的开销在几分到几毛钱量级——用 max_tokens 卡住输出、用便宜模型跑通流程,是大模型开发的通用省钱姿势,第 1 篇会把这笔账算到字段级。安全上,密钥只放 .env 并确认它已进 .gitignore;到第 6 篇给 Agent 装上文件与代码执行工具后,安全边界会升级成一个专门话题。

4、十三篇路线图

13 篇各写一块拼图,完整地图如下:

篇目 主题 你将写出什么
00 路线图(本篇) 连通性自检脚本
01 大模型 API 的真相 裸 HTTP 调用与错误处理
02 对话记忆的真相 多轮对话与缓存实测
03 流式输出原理 SSE 事件流解析
04 工具调用原理 一次完整工具往返
05 Agent Loop 手写实现 完整 Agent 循环
06 给 Agent 装上真实工具 文件与代码执行工具
07 Agent 上下文管理 摘要压缩与磁盘持久化
08 子 Agent 派工 上下文隔离的分身
09 RAG 最小实现 numpy 向量检索管线
10 结构化输出与评估 可解析结果与评测集
11 Claude Agent SDK 对比 手写版与官方 SDK 对账
12 LangGraph 图式 Agent 图式重写与选型收束

4.1、协议层三篇

第 1 到 3 篇只做一件事:看清协议。请求体、响应体、错误体、事件流,全部用裸代码拆开看一遍。这三篇没有任何 Agent 功能,却是后面所有篇目的地基——第 4 篇之后的每一个"玄妙机制",拆开都是这三篇里的 JSON 字段。

这三篇还顺手把开发环境里最常见的坑清掉:环境变量覆盖、Windows 编码、企业代理,后面所有篇目默认它们不再是问题。

4.2、Agent 核心四篇

第 4 到 7 篇把 Agent 组装出来:工具调用让模型长出手,循环让它连续工作,真实工具让它能碰文件系统,上下文管理让它干长活不死机。写完第 7 篇,你手里是一个完整可用的 Agent——它可能只有两百行,但每一个 token 的去向你都清楚。

这四篇也是系列里实验最密集的部分:你会亲眼看到模型点错工具、循环停不下来、上下文爆掉,修复它们的经验与生产环境的事故一一对应。

4.3、进阶与收官五篇

第 8 到 12 篇向外扩:子 Agent 解决上下文隔离,RAG 接上私有知识,结构化输出与评估补上工程化的两条腿;最后两篇请出 Claude Agent SDK 与 LangGraph,拿手写版逐项对账,回答"框架到底替你做了什么、值不值得用"。手写在先、对账在后,得出的选型结论才有分量。

评估篇值得工程背景的读者格外期待:它是把"感觉变好了"变成数字的唯一途径,没有它,前面所有优化都只是印象。

5、怎么读这个系列

三点读法建议。其一,按序读收益最大:每篇只引入一个新概念,跳读会撞上没铺垫的术语。其二,代码亲手敲一遍再跑:本系列所有脚本都在一个兼容端点上实测过,数字口径注明"实测记录",换任何兼容端点结论不变。其三,把每篇的实验做掉:失忆实验、伪造历史、并行派工,这些破坏性操作建立的理解,比十遍正向演示都深。

前置知识只要两样:Python 基础语法,以及"HTTP 请求大致是什么"的常识。涉及框架的对比篇会给出官方文档入口,如 LangGraph 文档与 Claude Agent SDK 文档,不需要预先读过。

两个常见疑问先给定性答案。其一,需要多强的模型?协议层的篇目用任意能跑的模型即可;从第 4 篇工具调用起,模型能力开始影响成败——弱模型会点错工具、编错参数,这是实测里会反复撞上的现象,也正好是观察模型差异的窗口。其二,一共要花多少钱?跟着做完全部实验,成本大约等于一杯咖啡,前提是每篇先用小 max_tokens 跑通流程,再放大做实验。

6、总结

Agent 是模型、工具、循环三个零件的组合,核心代码三百行以内,不需要任何框架;手写一遍换来排障、选型、成本三方面的主动权。本系列 13 篇按"协议层、Agent 核心、进阶与收官"三段推进,每篇带可跑代码与实测记录。对于准备出发的读者,建议先把本文第 3 节的自检脚本跑通、确认零件齐全,再进入第 1 篇:大模型 API 的真相——丢开 SDK,用 httpx 裸发第一次请求。httpx 用法见 官方文档,端点与模型选型参考 智谱开放平台与 Anthropic 文档。

相关推荐

获取系统SDK版本、判断手机ROM
精选Code

获取系统SDK版本、判断手机ROM

Build获取系统SDK版本Android中部分API的使用,需要在特定的SDK版本之后才能使用,因此在兼容老版本SDK的时候,经常需要判断API的版本。各种Android版本的对应关系参考《Android各版本对应的SDK版本》判断手机ROM有时候需要判断手机系统的ROM,检测ROM是MIUI、EMUI还是Flyme,可以使用getprop命令,去系统build.prop文件(关于build.p

4.3k
AndroidStudio中各种中文乱码问题
精选Code

AndroidStudio中各种中文乱码问题

AndroidStudio中各种中文乱码问题1、编译Java错误信息乱码在出现这个Annotation processors must be explicitly declared now...问题的时候,正好也发现AndroidStudio Build Output错误信息都乱码。经常遇到各种问题,习惯了,现在遇到的问题,都是以后的答案。 1.1、修改项目build.gradle(无效)在整个p

2.8k
Multi-Agent 详解:多智能体协作架构与实践
精选Agent

Multi-Agent 详解:多智能体协作架构与实践

一个智能体配上一套工具,已经能完成相当多任务。但让它同时“当产品经理、写后端、跑测试、做代码评审”,很快就会露馅:上下文里塞满了互相干扰的指令,十几件工具的清单来回切换,任务做到一半忘了开头。解法看起来很自然——像人类团队一样分工:让多个智能体各司其职,由一个协调者调度,这就是 Multi-Agent(多智能体)系统。它也是 2026 年智能体工程里讨论度最高、误用率也最高的架构。本文按“架构模式…

144