有一类文章的说服力来自你亲手复现它。Thorsten Ball 在 2025 年 4 月发的这篇教程就属于这一类: 他断言代码编辑 agent 的核心机制毫无秘密, 三百行左右就能写出来, 然后不做任何抽象辩论, 直接带你从零敲一遍。副标题用了皇帝的新衣这个寓言, 宣发那条"There is no moat"的推文在社交网络上病毒式传播, 一年多过去, 它仍是理解 agent 原理的默认推荐读物。

教程的四步递进设计得很克制。先写一个纯聊天程序, 读输入, 调 API, 打印回复, 循环, 唯一的状态是不断追加的消息历史, 地基毫无新意。然后加第一个工具 read_file, 这里出现全文唯一的新概念: 所谓工具调用, 就是一场格式化的传话游戏, 模型在回复里输出结构化请求, 你的程序照做, 把结果贴回对话。再加 list_files, 神奇的事情发生了, 模型开始自己先列目录再读文件, 连续多步, 中间无人指挥。最后加一个字符串替换式的 edit_file, 它就能给你写出能跑的小脚本, 按指令改已有代码。

It’s an LLM, a loop, and enough tokens. (就是一个 LLM, 一个循环, 加上足够的 token。)

出自 Thorsten Ball, How to Build an Agent

我认为这篇教程真正的智识贡献有两处。一是那个传话游戏的定义, 砍掉了所有神秘感又保留了全部技术准确性, 理解了它, function calling、MCP、各种 agent 框架就全部变成同一件事的不同包装。拿到任何新框架, 找三样东西: 消息循环在哪, 工具注册表在哪, 执行结果怎么回填, 找到就读懂了骨架。二是他特意让读者注意的一个观察: 没人写代码教模型什么时候该读文件, 是它自己急切地想用工具。自主行为来自训练, 壳只是给了它一双手。这一句把功劳归到了正确的位置。

但祛魅有它的边界, 这篇文章的两处滑坡值得点破。第一处是任务选择: 教程里的演示全是训练数据里烂大街的模式, 小文件, 小脚本。三百行的壳在玩具任务上惊艳, 推不出它能应付大代码库导航、跨文件重构、依赖冲突, 而商业产品的大部分代码恰恰在处理教程回避的这些场景。核心简单, 与做好也简单, 是两句话。第二处是从机制无秘密跳到没有护城河。他正文里留了保留条款, 说把 demo 做成可靠产品的打磨是真功夫, 可他自己选的宣发语放大了更强的版本。商业史上机制完全公开的领域照样长出巨头, 数据库如此, 浏览器如此, 分发、集成、数据回流都可以是城河, 只是都与那三百行代码无关。

还有一层需要读者自己折算的东西: 这篇文章发布在一个商业 agent 产品的官网上, 作者是该产品的核心成员。“核心人人会写, 值钱的是打磨”, 这个论证结构恰好为"用我们打磨好的产品"铺路。技术内容全部真实可验, 私心也真实存在, 有私心但没掺假, 算是体面的营销。教程还有个实际的疏漏: 里面的 agent 拥有文件系统全权, 没有沙箱, 没有确认机制, 而它被大量初学者原样部署了。

事后看, 它的技术断言完全站住了: 极简 agent 实现被行业反复确认, 官方教学材料也采用循环加工具的同款拆解, 壳层如预言般快速同质化。而头部产品保持溢价的方式, 印证的是他正文里那句保留, 并非推文里那句口号。我从中留下的判断是: 看到惊艳的 agent 演示, 先拆开问一句, 这里有多少是模型本身的能力, 换个壳也有; 有多少是这家独有的打磨。前者不值得付费, 后者才值得。至于亲手敲一遍这件事, 花一个下午, 换来对整个浪潮的一手判断力, 这笔交易怎么算都划算。

原文: How to Build an Agent (or: The Emperor Has No Clothes), 作者 Thorsten Ball, 发布于 2025-04