RSS

Agent 原理与开发实战:从 30 行循环到多智能体 Harness

难度
入门
章节
21 章
阅读时长
约 145 分钟
最后更新

你大概已经调用过大模型 API:传一段 messages,拿回一段文本,很顺手。可一旦你想让它”帮我把这个项目跑起来”,事情就变了味——模型写出一条命令,你复制、粘贴到终端、执行、再把输出贴回去;它接着写下一条,你再复制一次。十几个来回之后你会发现一件尴尬的事:真正在干活的是你,模型只是在旁边出主意。你成了这套系统里的中间件。

Agent 要解决的就是这件事。但”Agent”这个词在过去两年被用得太滥了:有人说它是提示词工程,有人说它是工作流编排,有人说要靠一个更聪明的模型。这些说法都绕开了最关键的一句话——

智能来自模型,落地来自 harness。

Harness(承载层)就是模型和真实世界之间的那层代码:它把工具递给模型、执行模型的决定、把结果喂回去、在危险动作前踩刹车、在上下文塞满时腾地方、在任务变大时拆解和分工。这层代码里没有魔法,全是可以一行行读懂的工程。

这份教程会带你把这层代码从零建起来。它有一个不太寻常的结构:第1章写出的那段 while True 循环,到第20章一个字都不会变。中间的十九章,每一章都只做一件事——发现一个具体痛点,然后在循环外面挂上一个机制来解决它。到最后你手上会有二十个机制、一个循环,以及一张能自己判断”什么时候该加哪个机制”的地图。

读完之后你应该能做到:

你需要准备的: 会读会写基础 Python,知道大模型 API 大致长什么样。不需要任何 Agent 框架经验。所有示例都用 Anthropic 的 Messages API 与官方 Python SDK(pip install anthropic),模型统一用 claude-opus-5;换成别家的 SDK,循环结构是一样的。

一个安全提醒放在最前面: 后面的代码会让模型生成并执行 shell 命令。请始终在一个临时目录、或者容器 / 虚拟机里跑这些示例,不要在你的主目录或有重要数据的仓库里直接运行。第3章会教你怎么给它装刹车,但在装上刹车之前,请自己当刹车。

路线图。 全书按五层推进,越往后越接近生产:

层章节回答的问题
工具与执行第1–4章模型怎么真的动手,动手时怎么不闯祸
计划与控制第5–8章长任务怎么不跑偏,上下文怎么不塞爆
记忆与身份第9–10章换个会话怎么还记得,身份怎么按状态拼装
韧性、并发与调度第11–14章出错怎么恢复,慢活怎么并行,周期性工作谁来记
多智能体平台第15–19章一个 Agent 扛不动时怎么分工、怎么不互相踩

第20章把二十个机制装回同一个循环,第21章给你一套动手项目和自检清单。

读完之后你应该能够

  • 用不到一页纸的代码写出一个真正能干活的 Agent,并说清它为什么能干活
  • 逐个说出工具调度、权限、钩子、计划、子代理、技能、压缩、记忆、提示词组装、错误恢复、任务图、后台任务、定时、团队、协议、自治、隔离、MCP 这些机制各自由什么痛点触发
  • 画出一次完整 Agent turn 的时序,指出每个机制挂在哪个位置
  • 面对一个真实需求时,判断"这个功能现在该不该加",而不是把所有机制一股脑装上
适合谁会写一点 Python、想真正搞懂 Agent 怎么跑起来的开发者与技术产品人
前置要求基础 Python 语法;知道大模型 API 大致怎么调用;不要求了解 Agent 框架

章节目录

21 章 · 约 145 分钟
  1. 01 一个 while 循环:Agent 的最小内核 让你变成中间件的那个瞬间:三十行 while 循环,加一个 stop_reason 判断,Agent 就能自己动手了。 8 min
  2. 02 工具调度表:从一把钥匙到一串钥匙 从一把 bash 到五把专用工具,循环只改一行——能力横向扩展,内核纵向不动。 6 min
  3. 03 三道权限闸门:把危险挡在执行之前 安全写在提示词里不管用:硬拒绝、规则匹配、人工确认三道闸门,以及为什么拒绝也要回传给模型。 6 min
  4. 04 钩子系统:把扩展挂在循环外面 挂在循环上,不要写进循环里:四个事件点承接权限、日志、审计与强制续跑。 7 min
  5. 05 计划可见性:让长任务不跑偏 一个不产生任何副作用的工具,为什么能显著提高长任务完成率。 7 min
  6. 06 子代理:用上下文隔离换取专注 把子任务丢进独立对话只带结论回来:一笔算得清的上下文收支账,以及你为此放弃了什么。 6 min
  7. 07 技能装载:目录常驻,正文按需 目录常驻一百 token,正文按需两千 token:二十个技能的常驻成本可以和两个一样低。 6 min
  8. 08 上下文压缩:先便宜的,后昂贵的 四层压缩先便宜后昂贵,其中有一处顺序调换就会永久丢数据。 6 min
  9. 09 记忆层:跨会话留住真正重要的事实 压缩是有损的,换个会话更是清零:四类记忆、两条装载路径,以及什么绝对不该记住。 8 min
  10. 10 系统提示词组装:按运行时状态拼装身份 把系统提示词从死字符串变成按运行时状态拼装的分段,条件依据是真实状态而不是关键词。 6 min
  11. 11 错误恢复:先分类,再决定重试什么 截断、超长、限流三类故障各有各的恢复动作和次数上限——不分类就重试,纯烧钱。 7 min
  12. 12 任务系统:把目标拆成可依赖、可跨会话的图 落盘的、带 blockedBy 依赖图的、可被认领的工作单元:完成一个任务要主动扫出被解锁的下游。 7 min
  13. 13 后台任务:让慢命令不再阻塞推理 慢命令丢进守护线程,结果用独立通知回注——它为什么不能挂回原来那个 tool_use。 7 min
  14. 14 定时调度:让 Agent 自己醒过来 周期性工作应由 harness 创建而不是让模型记住:四层调度通路,以及 durable 到底保证了什么。 9 min
  15. 15 Agent 团队:常驻队友与文件信箱 常驻队友加文件信箱:多智能体的收益来自通信省下的返工,不是人多力量大。 8 min
  16. 16 团队协议:请求-响应的显式契约 优雅关闭与方案审批是同一个东西:request_id 做关联、type 做校验、状态机记生命周期。 9 min
  17. 17 自治代理:从被指派到自己认领 做完一轮进入空闲而不是退出:队友自己扫任务板认领,Lead 一次指派都不用发。 5 min
  18. 18 Worktree 隔离:并行不打架 一任务一 worktree:冲突不会消失,但可以从静默覆盖变成合并时的显式报错。 6 min
  19. 19 MCP 工具:用一套协议接住外部世界 发现加调用两个动作接住整个外部世界,以及连接之后为什么必须重建工具池和提示词缓存。 7 min
  20. 20 综合装配:很多机制,一个循环 十九个机制按它在一次 turn 中的位置归位,中间那四步从第1章起一个字没变。 7 min
  21. 21 实战演练、自检清单与下一步 三个递进项目、三层自检清单、四档自评,以及一张「现在疼在哪里就加哪个机制」的对照表。 7 min

参考资料与延伸阅读:本教程引用的官方文档清单 →

常见问题

需要先学某个 Agent 框架吗?

不需要,反而建议先别学。全篇只用官方 SDK 调 Messages API,二十个机制全是几十行可读的普通代码。先把这层看懂,你再去读任何框架时就知道它替你做了什么、以及它在哪里替你做了错误的决定。

这和「写好提示词」是什么关系?

基本无关,这是全书最反直觉的一点。跑偏靠计划清单解决,超限靠压缩解决,危险操作靠权限闸门解决,遗忘靠记忆层解决——二十章里几乎没有一个问题的答案是改提示词。提示词很重要,但它不是这些问题的解药。

二十个机制是不是都得做出来?

恰恰相反。每个机制都有代码复杂度、token 开销和新的失败模式,应该由一次真实的疼痛触发,而不是因为教程里有这一章。第21章给了一张「现在疼在哪里」的对照表,大多数场景三到五个机制就够了。

代码能直接用到生产吗?

不能。正文是教学实现,为了可读性做了大量简化:字符串匹配的权限规则、无锁的任务认领、无环检测的依赖图、模拟的 MCP 服务端。每章的「工程现实」小节标注了生产系统在该处额外要做的事,真正的隔离还得靠容器与网络白名单。

API 参数会不会很快过时?

会,所以正文刻意不依赖易变参数。思考模式、努力程度、服务端压缩这类参数近年多次变更,本书只依赖长期稳定的循环语义与消息结构——stop_reason、tool_use 与 tool_result 的配对关系。具体参数请以你动手时的官方文档为准。