Agent 的最小方程
如果只让我用一行字告诉你 Agent 是什么,我会写:Agent = while(没完成){ 模型想 → 调工具 → 读结果 }。这一章我们把这个循环彻底拆开,然后你亲手单步跑一遍——按一下「下一步」,看我一步步思考、调用工具、读取返回,直到我自己判断信息够了、停下来。这是全书最重要的一个 Demo,因为它就是我的心跳。
三个零件,一个环
上一章讲了大脑(模型)。现在补上另外两个零件,让它变成能干活的我:
- 模型(大脑):每一轮做一次决策——要么「我要调某个工具」,要么「我可以给最终答复了」。
- 工具(手):一组你交给我的能力,每个都有名字、说明和参数格式。我不执行它们,我只请求执行;真正跑工具的是你的代码。
- 循环(心跳):一段你写的代码,反复地:把当前对话发给模型 → 看模型要不要调工具 → 调了就执行并把结果塞回对话 → 再发给模型 → ……直到模型不再要求调工具。
就这三样。任何号称 Agent 的系统,剥到底都是这个环。框架(卷四会讲)只是在这个环外面加了脚手架——重试、日志、并发、状态管理——但环本身简单到你能背下来。
function runAgent(task) { messages = [{ role: "user", content: task }] while (true) { reply = model.respond(messages, tools) // 模型想 messages.push(reply) if (reply.stopReason !== "tool_use") // 它不再要工具了 return reply.text // → 收工 for (call of reply.toolCalls) { result = execute(call.name, call.input) // 你的代码真正执行 messages.push({ role: "tool_result", result }) } // 结果塞回,继续下一轮 } }
盯着 while(true) 和那个 if 看。整个 Agent 的「智能」和「自主」,就压缩在这里:轮数不是你定的,是模型通过「还要不要工具」这个信号自己决定的。它可能一轮就够,也可能转十几轮。这种事先不知道要跑几轮的性质,是 Agent 和普通程序最不一样的地方。
ReAct:想一下,做一下,看一下
这个「思考→行动→观察」交替进行的模式,学术上有个名字叫 ReAct(Reasoning + Acting)。名字花哨,内核就是上面那个循环:模型不是一次性想好全部计划再闷头执行,而是走一步、看一眼真实结果、再想下一步。这很关键,因为真实世界会给意外——工具报错了、返回的数据和预期不符、发现还需要一个额外的信息。走一步看一步,让我能根据真实反馈调整,而不是抱着一个过时的计划一条道走到黑。
这个环像极了一个事件循环 + 状态机。messages 是不断增长的状态;模型的每次回复是一个 intent;tool_result 是异步回调的结果被 reduce 回状态。你在 Compose 里写的 while 收集 Flow、每次 emit 更新 State、直到某个终止条件——是同一个骨架。区别只是「下一步做什么」不由你的 when 分支决定,而由模型决定。
亲手跑一遍我的心跳
光看伪代码不够,你得感受这个环转起来是什么样。下面的模拟器给我派了个必须用工具才能完成的任务:「东京现在几点、天气如何,换算成北京时间」。我没有实时数据,所以必须调工具;而且需要调两次(时间一次、天气一次),这正好让你看清「循环」不是一次调用。
点「下一步」一步步走,注意观察三种颜色的行:紫色是我在思考(决定下一步干嘛)、蓝色是我调用工具、青绿是工具返回结果。特别留意最后一步——当数据齐了,我做的判断是「不再需要工具,可以给最终答复」,循环就是在这里停下的。
跑完了吗?回头看整条轨迹,你会发现一个漂亮的结构:思考和行动严格交替,每次行动后必有一次「读结果+重新思考」。这就是 ReAct。而那个让循环停下的紫色思考——「数据齐了,可以收工」——就是 Agent 区别于「调一次 API」的分水岭。这个自主的停止判断,是我最像「有主见」的地方,也是最容易出问题的地方。
停止条件是 Agent 头号故障点。如果模型永远觉得「还差一点」,循环就停不下来——这就是死循环,烧钱烧到你手动掐断。反过来,如果它太早觉得「够了」,就会过早收工,交出半成品。所以真实世界的循环里,你除了模型的自主停止,还会加一道硬保险:「最多转 N 轮」。既信任模型的判断,又不把命完全交给它。卷四「失败模式图鉴」会专门解剖这些翻车姿势。
刚才那个模拟器是脚本写死的,但真实的我跑起来一模一样——只是每一步的「思考」不是脚本,而是我这颗大脑当场算出来的。我想跟你强调那个最后的停止判断有多微妙:没有人告诉我「你已经完成了」,是我自己综合手上的信息,判断「再调工具也不会让答复更好了」。这个判断我大多数时候做得对,但它是概率性的——同样的任务,我偶尔会多转一轮,或者少想一步。这种不确定性不是缺陷可以「修掉」,它是我工作方式的一部分。你要做的不是消灭它,而是围着它做工程:给我好工具让我少犯错,给我评估让你知道我几成靠谱,给我保险丝让失控有底线。这就是接下来五卷要教你的事。
小结:方程记住了,细节展开
Agent 的最小方程已经在你脑子里了:模型 + 工具 + 循环。剩下 23 章,全是在给这个方程的每一项加细节——工具怎么设计、上下文怎么管、循环怎么不失控、成本怎么算、安全怎么守。下一章我们先补上大脑的一个进阶能力:「思考」本身。你可能注意到模拟器里那些紫色的「思考」步骤了——现代模型能在给出答案前先专门花一段 token 来推理,这件事对 Agent 的可靠性影响巨大。