← Research

AI Critique

Agent 是循环,难的是循环体

这句话对了一半。Agent 的骨架确实就是个 while 循环:让大模型看一眼现状、决定下一步、调用工具、把结果塞回去,再来一遍——主流框架(Claude Code、Cursor、LangGraph)全长这样。"昂贵"也没说错:每转一圈烧一次 token,上下文越滚越长,账单按二次方涨。但"只不过"是个陷阱——选哪个工具、什么时候停、出错怎么救,agent 所有值钱的难题,全藏在那句 while 盖住的循环体里。

"AI Agent 只不过是一个昂贵的 while 循环",这句话怎么理解? 读时~16 min
路线图

把这句话拆成三个词来验

这句话有三个词要拆。第一站验"while 循环"——它对,agent 骨架真是个循环;第二站验"昂贵"——它也对,而且贵得有讲究;第三、四站验"只不过"——这是陷阱,循环体和停止条件里藏着全部难题,第三站直接戳破它;最后一站给个用法:这句话当祛魅可以,当全景不行。

戳破"只不过" 01 是循环 对的一半 02 昂贵 二次方涨 03 只不过 难在循环体 04 怎么停 也是难题 05 怎么用 祛魅非轻视
Roadmap. 橙色第三站是钥匙:承认它是循环、承认它贵,关键是看穿"只不过"——难和贵的东西全在 while 盖住的循环体里。

对的那一半:骨架真就是个循环

先把这句话承认对的部分给足。剥掉所有玄乎的说法,一个最小可用的 agent 真的只有十来行:一个 while 循环,每轮把当前对话和可用工具发给大模型;模型要么回一个工具调用、要么说"我答完了";有工具调用就执行、把结果追加回上下文,进下一轮;没有就停。

这不是个人奇谈——Anthropic 给 agent 下的定义就一句话:大模型在循环里用工具,靠环境的反馈一步步往前走1 🟢 high。更说明问题的是:几乎所有主流框架——Claude Code、Codex、Cursor、LangGraph、smolagents——最后都收敛到同一个结构:一个 while 循环,调模型、看有没有工具调用、有就执行、没有就停2

看现状 模型决定下一步 执行工具 结果塞回上下文 说"做完了"→退出 每圈=1 次模型调用
Fig 1. 一圈:看现状 → 模型决定 → 执行工具 → 结果回填 → 再看。模型觉得做完了就跳出循环。这就是 agent 的全部骨架。

而且这个循环"出奇地好用"——把方向盘交给模型,让它自己一步步试、看结果、再调整,编程类 agent(Claude Code、Cursor、Aider 那一批)的爆发就建在这个简单结构上2。这套"想一步、做一步、看一步"的打法学名叫 ReAct(推理 + 行动),2022 年就有论文把它讲清楚了3

先想一下

同样是让程序自动干活,agent 跟传统"工作流"差在哪一点?

试着先答

工作流是人把步骤提前写死——先 A 再 B 再 C,控制流固定。agent 是把控制流交给模型:下一步走哪、调哪个工具,由模型每一圈自己决定。这点"模型自己定方向",正是它叫 agent 而不是脚本的原因。

别神化 agent——它的骨架,真就是个让模型反复"看-想-做"的循环。

"昂贵"在哪:每圈都把账单重烧一遍

"昂贵"这个词也没冤枉它,而且贵得有讲究。表面上,每转一圈就是至少一次大模型调用,要钱、要等。真正狠的在后面:每一圈,都要把之前所有对话历史重新塞进上下文发一遍。模型没有记忆,全靠你每次把完整历史再喂给它。

结果是:消息历史只是线性变长,但你被计费的输入 token 却是二次方增长。一个 20 步、每步生成 1000 token 的循环,累计计费的输入不是直觉里的 2 万 token,而是 21 万4 🟢 high。agentic 任务烧的 token 常是普通对话的几十倍,贵就贵在这反复重发的输入上。

到第几步历史长度(线性)这一步重发的输入累计计费输入(二次方)
第 1 步1 千1 千1 千
第 5 步5 千5 千1.5 万
第 10 步1 万1 万5.5 万
第 20 步2 万2 万21 万

失控时更吓人:有记录的一个 agent 卡在无意义循环里跑了 264 小时,每次调用都拖着越来越长的上下文,最后账单 4.7 万美元4。这就是为什么"昂贵"不只是吐槽,是这个结构自带的成本曲线。

先想一下

一个跑 20 步的 agent,花的钱为什么远不止"20 次模型调用"那么简单?

试着先答

因为每一步都要把之前全部历史重新发一遍。第 20 步发的不是 1 份新内容,是积累了 20 步的长上下文。把每一步重发的量加起来,总账单按步数的平方涨,不是按步数线性涨。

"昂贵"不是夸张——循环加上每圈重发上下文,成本按平方涨,失控还能烧穿预算。

"只不过"才是真陷阱:难的全在循环体里

前两半都对,问题出在"只不过"这三个字。while 这个关键字本身只有一行,它是个空壳。真正决定一个 agent 行不行的,全在循环体里:

  • 模型每一圈的判断:现在该调哪个工具、给什么参数、上一步的结果说明了什么——这是模型的推理质量,循环只是反复调用它。
  • 套在模型外面的 harness(脚手架):工具怎么设计、上下文喂多少、长了怎么剪裁、出错怎么重试、权限和沙箱怎么管。这一层叫 harness 工程。

业界反复撞见同一个结论:决定成败的常常不是模型,是 harness5 🟡 med。一个普通模型配好 harness,能打赢一个强模型配烂 harness。LangChain 团队有次没换底层模型,光优化 harness,就把自己的编程 agent 在某个榜单上从第 30 名拉到第 5 名5。模型不变,结果天差地别——差距全在 while 盖住的那部分。

你来补

"agent 只不过是个 while 循环"这句的"只不过",错在哪?提示:while 关键字本身只有 ?,真正决定 agent 行不行的是 ?

对答案

while 本身只有一行(一个空壳);真正决定成败的是循环体里的东西——模型每一圈的判断质量,加上套在外面的 harness(工具设计、上下文管理、出错重试、停止逻辑)。"只不过"把这些全抹掉了,等于把功劳记在了空壳上。

这种话术有个通用模板。说"agent 只不过是 while 循环",跟说"CPU 只不过是个取指令的循环""大脑只不过是些化学反应"是同一个套路:结构上都对,但把所有难度和能力一笔抹掉了。循环是空壳,模型的判断和外面的 harness 才是肉。

连"什么时候停"都不是小事

再看"循环"本身。普通 while 循环的条件一眼就能写死:i < 10 之类。Agent 的停止条件却是个判断题——什么时候算"做完了"?大多数时候,是模型自己说一句"我答完了"就退出。可模型的这个判断会错:要么没做完就早早收手,要么钻进死胡同、绕着同一个工具转、永远觉得"还没好"。

所以真实系统都得在外面加护栏:最大步数(max iterations)、花费上限、墙钟超时。你在框架里常看到的那句报错"Agent stopped due to max iterations",就是护栏在替你踩刹车——模型自己没说停,循环撞到预设的步数上限,被强行掐断6 🟢 high

常见错答

"循环条件不就是 while not done 嘛,能有多难。"

错在哪:done 由谁判断?是模型的主观判断,不可靠——它可能假装完成,也可能永不满足。于是"什么时候停"在 agent 里成了一个工程难题:要靠提示词把"完成"定义清楚、再叠加步数/预算/超时三道硬护栏。它不是一个能写死的布尔表达式。

连循环的"停"都得靠模型判断加人为护栏——这恰恰说明它不是一个普通的 while 循环。

这句话,当祛魅可以,当全景不行

那这句话到底该信几分?看你拿它干什么。

祛魅用,它很好。Agent 不是有自我意识的神秘智能,剥开外壳就是模型在循环里调工具,没有什么黑魔法般的"涌现自主性"。用这句话去治"AI agent 无所不能"的虚火,正合适——它提醒你 agent 的能力上限,基本就是里面那个模型的能力上限。

全景或轻视用,它就错了。循环体里模型的判断质量、harness 工程、二次方的成本控制、什么时候停的护栏,每一样都是真难题。正是这些,把一个"能跑的 demo"和一个"能用的产品"分开。说"只不过",等于宣称这些难题不存在。

反证

有一派(比如 Hacker News 上讲"unreasonable effectiveness"的人)会说:这个循环简单到家,恰恰是它的优点,别把它讲复杂了2

这话有道理——简单确实是 agent 范式的力量来源,越少人为约束、越把决定权交给模型,往往越好用。但"简单"和"只不过"是两回事:架构简单,不等于做好简单。一把吉他构造也简单,不等于人人弹得好。本讲承认骨架简单,反对的是用"只不过"把循环体里的真功夫一笔勾销。

用它戳破神话可以,用它否定难度不行——架构简单,把它做好一点都不简单。

综合判断

三个词,一句话各给个判决

"AI Agent 只不过是个昂贵的 while 循环",拆成三个词验:"while 循环"对——骨架就是让模型反复看-想-做的循环,主流框架全这样;"昂贵"对——每圈一次模型调用、还得重发全部上下文,成本按二次方涨,失控能烧到几万美元;"只不过"错——它把循环体里所有真东西一笔抹掉:模型每一步的判断、工具与上下文的 harness 工程、什么时候停的护栏。一句话收口:这是个好用的祛魅,坏的全景。

怎么用它?听到这句,接受前两段、警惕"只不过"。判断一个 agent 强不强,别盯着"它有没有 while 循环"(都有),要盯循环体:选工具准不准、上下文管得好不好、该停时停不停得住、成本控不控得住——这些才是 while 那个关键字盖住的、真正分高下的地方。什么时候这句话彻底失效?当有人用它论证"agent 没技术含量、谁都能做"——那是把祛魅滑成了轻视,正好一脚踩进"只不过"的坑里。

关键不确定性

这些地方要老实说明

  • "harness 比模型更决定成败"是当前(2025–2026)业界很强的经验共识,有多个团队佐证,但带 vibe 成分 🟡 med。随着模型变强、自己能扛更多活,这个平衡可能往"模型"那边移。
  • 二次方成本是"朴素实现"的情形 🟡 med。上了提示词缓存、上下文剪裁、把旧历史压缩成摘要之后,实际曲线没那么陡——但"重发上下文导致超线性增长"这个方向是确定的。
  • "agent"这个词本身在漂移 🟡 med。有人把多智能体、固定工作流也算进来。本讲讲的是最核心、也最贴这句话的那种:单个模型在循环里自己决定下一步、用工具。
自测

读完盖住,试着答这几题

  1. 这句话里"while 循环"这半句,为什么是对的?

    试着先答

    因为 agent 的最小骨架真的就是一个循环:调模型→看有没有工具调用→有就执行并把结果塞回上下文→没有就停。Anthropic 的定义和几乎所有主流框架都收敛到这个结构。

  2. "昂贵"具体贵在哪?为什么是二次方而不是线性?

    试着先答

    模型没记忆,每一圈都要把全部历史重新发一遍。历史线性变长,但把每步重发的量加起来,累计计费输入按步数的平方涨。20 步约 21 万 token,不是 2 万。

  3. "只不过"错在哪?用一句话说清。

    试着先答

    while 只是个一行的空壳,真东西全在循环体里——模型每圈的判断 + 外面的 harness(工具、上下文、重试、停止)。"只不过"把这些一笔抹掉,等于把功劳记在空壳上。

  4. 为什么说连"什么时候停"都不简单?

    试着先答

    停止条件靠模型自己判断"做完了没",不可靠(会早停或永不停)。所以要叠加 max iterations、预算上限、超时等护栏。"Agent stopped due to max iterations"就是护栏在掐断它。

  5. 应用题:有人用这句话论证"做 agent 没技术含量,谁都能做"。怎么回?

    试着先答

    这是把"祛魅"滑成了"轻视"。架构简单 ≠ 做好简单。能跑的 demo 和能用的产品,差距全在循环体:工具设计、上下文管理、停止护栏、成本控制。"只不过"恰恰跳过了所有真难的地方。

把这几题截图,过两三天再凭记忆答一遍 —— 记得住才算真学会。

引用

Sources

  1. Anthropic, “Building Effective Agents”(agent = LLMs using tools in a loop)— Simon Willison 摘述 — https://simonwillison.net/2024/Dec/20/building-effective-agents/
  2. “The unreasonable effectiveness of an LLM agent loop with tool use”(主流框架都收敛到 while 循环 + 简单即优点)— Hacker News — https://news.ycombinator.com/item?id=43998472
  3. ReAct: Reasoning + Acting(Yao et al. 2022,think–act–observe 循环)— MindStudio 解说 — https://www.mindstudio.ai/blog/what-is-react-loop-ai-agent-reasoning
  4. AI Agent Loop Token Costs(上下文每步重发,计费输入二次方增长;264 小时跑到 $47K)— Augment Code — https://www.augmentcode.com/guides/ai-agent-loop-token-cost-context-constraints
  5. Harness Engineering(决定成败的是 harness 不是模型;不换模型只优化 harness,榜单 30→5)— Addy Osmani / MindStudio — https://addyosmani.com/blog/agent-harness-engineering/
  6. Termination & Guardrails / “Agent stopped due to max iterations”(停止条件与护栏)— Microsoft Learn — https://learn.microsoft.com/en-us/agent-framework/agents/middleware/termination