AI Agent · 架构原理

Agent 运行时架构:Reasoning Loop 的闭环迭代

一个 Agent 拿到「帮我分析上周的广告投放数据并优化建议」这样一句自然语言,是怎么一步步把它做完的?答案不是一条从上到下的流水线,而是一个持续「思考 → 行动 → 观察 → 调整」的智能循环。这篇把整张架构图拆开讲透。

🔁 闭环迭代🧰 资源按需调用🧠 模型反复调用📦 状态持续累积
🗺️ 架构图逐块拆解 🎯 面向理解原理 ⏱️ 约 12 分钟阅读
Overview

🧭 一张图看懂 Agent 在做什么

整张架构图讲的是同一件事:用户丢来一句自然语言需求,一个 AI Agent 如何自主地把它完成。 图顶端的例子很典型——「帮我分析上周的广告投放数据并优化建议」。这句话既不给步骤、也不给数据路径,Agent 得自己想清楚要做什么、调什么工具、看结果对不对,直到交出答案。

要理解这张图,先记住它最想强调的一句话,它写在整张图的最底部:

💡 整张图的题眼

不是一条从上到下的流水线,而是一个持续迭代的智能循环。Agent 通过不断的思考、行动、观察和调整,逐步完成复杂任务。

换句话说:图里那些框框看起来是自上而下排的,但真正的执行顺序是绕圈跑的。理解了这一点,下面每一块才对得上位置。我们按「底座 → 核心循环 → 模型交互 → 总结」的顺序拆:先看托住一切的运行时底座,再看在它上面转的思考循环,最后看循环里模型怎么被调用、结果怎么流回来。

🔗 类比:Agent 像一位边做边想的分析师

把 Agent 想成一位刚接到任务的分析师坐在工位上。运行时(Runtime)是他的办公室——桌子、文件柜、日程本、报销额度都在这;思考循环(Reasoning Loop)是他脑子里「想一下 → 动手做一步 → 看看结果 → 再想」的工作节奏;可调用资源是他随手能用的工具(数据库、浏览器、报表模板);基础模型就是他这颗会推理的大脑。他不会一口气把整份报告写完,而是查一段、看一眼、调整方向,循环着把活干完。

The Big Picture

🗺️ 闭环全景:五块拼在一起

在钻进细节前,先建立一张整体地图。整个系统由五块构成,它们的关系不是「谁在谁上面」,而是「谁围着谁转」:

User · 自然语言需求 Agent Runtime(Harness)运行时底座 · 不负责推理 状态 · 记忆 · 上下文 · 预算 · 循环控制 · 重试 · 工具调度 Reasoning Loop Think 思考 Act 行动 Observe 观察 (可选)Plan 可调用资源 Skills · Workflow Tools / MCP 按需横向调用 Foundation Model GPT·Claude·Gemini… 在循环内反复调用 Runtime Context(状态)· 贯穿整个循环,每轮持续累积更新 会话历史 · 记忆 · 工具结果 · 变量 · RAG 检索 · 草稿 …
全景图:运行时底座托住一切,思考循环在中间绕圈,模型和资源被循环按需调用,状态贯穿整个过程持续累积。蓝色实线=控制流,绿色线=状态/数据回流。

这五块分别是:① Agent Runtime(运行时底座)② Reasoning Loop(思考循环)③ 可调用资源④ Foundation Model(基础模型)⑤ Runtime Context(贯穿全程的状态)。下面逐块拆。

Layer 1 · The Harness

🏗️ Agent Runtime(Harness):托住一切的运行时底座

Agent Runtime(运行时环境 / Harness)

是什么一个全局运行环境,贯穿整个 Agent 生命周期。图里特别标注了一句关键限定:它「不负责推理」
为什么推理(想问题)是基础模型的事;但一个 Agent 光会想还不够,它得有人管住状态、控制循环别跑飞、调度工具、处理报错、盯着预算别烧超。这些「杂活」抽出来交给 Runtime,模型才能专心推理。分工:模型负责「想」,Runtime 负责「管」。
例子就像一场手术里,外科医生(模型)专注决策与操作,而手术室(Runtime)提供无影灯、器械台、监护仪、麻醉与计时——医生不用自己去搬设备。

Runtime 具体负责这七件事,也就是图里 Harness 那一排的七个组件:

🗄️

状态管理 State

维护 Agent 当前所处的状态,记录「进行到哪一步了」。

🧠

记忆管理 Memory

管理短期与长期记忆,让 Agent 记得住之前发生过什么。

🧩

上下文聚合 Context

把散落各处的信息聚合成模型每一轮的输入。

📊

预算管理 Budget

控制资源消耗(token、调用次数、成本),避免无限烧下去。

🔄

循环控制器 Loop Controller

驱动并管住 Reasoning Loop,决定继续迭代还是退出。

♻️

重试与恢复 Retry / Recovery

出错时重试或恢复,让流程不至于一崩到底。

🔧

工具调度器 Tool Dispatcher

接住模型的工具调用指令,实际去执行工具并取回结果。

📌 一句话概括 Runtime 的职责

状态维护、上下文聚合、循环控制、工具调度、错误处理、资源管理、预算控制。它是贯穿整个 Agent 生命周期的全局运行环境,但自己不做推理。

Layer 1b · The State

📦 Runtime Context:贯穿始终、持续累积的「状态」

如果说 Runtime 是办公室,那 Runtime Context 就是这间办公室里那张越堆越满的工作台。它是 Agent 的状态,图里明确写着它「贯穿整个循环,每轮持续更新」——每转一圈,新信息就往里加,越积越多。

状态里都装着什么(图中列出的八类)

💬 会话历史🗂️ 长期记忆👤 用户信息📁 文件 / 数据 🔧 工具结果🔣 变量 / 状态🔎 RAG 检索📝 临时草稿 Scratchpad

这八类信息合在一起,就是 Agent 在任意时刻「知道的一切」。注意最后一项 临时草稿 Scratchpad:它是 Agent 边做边打的草稿纸,记录中间推演和临时结论。

🔑 关键性质:每轮更新,持续累积

Context 不是一次性填好的输入,而是随着循环一圈圈转、持续累积的。第一轮它可能只有用户那句话;跑了几轮之后,它已经装满了工具查回来的数据、模型的中间判断、检索到的文档。正是这份不断变厚的状态,让 Agent 能「记着上文」把长任务接着往下做。

💬 换个说法讲一遍:Context 就像一份边写边加的项目笔记
你接手一个项目,手边有本笔记。刚开始只写着老板一句话「分析上周广告数据」。你查了后台,把数字抄进去;你问了同事,把结论记下来;你算了个 ROI,顺手写在旁边。笔记越来越厚,而你每次决定下一步,都是翻着整本笔记来判断——不是只看老板最初那句话。Runtime Context 就是这本笔记,「每轮持续更新、持续累积」就是你不停往里加内容的过程。
Layer 2 · The Core Loop

🔁 Reasoning Loop:Think → (Plan) → Act → Observe

这是整张图的核心控制流,图里给它的定性是「闭环迭代」,并写明循环会一直转,直到任务完成或达成退出条件。它由四个阶段组成(其中 Plan 是可选的):

🧠 Think 理解 · 分析 · 回忆 发现关键点 · 形成思路 📋 Plan 可选 · 制定计划 拆任务 · 定下一步 ⚡ Act 选资源(Skill/ Workflow/Tool)· 执行 👁️ Observe 接结果 · 评估进展 完成了吗?要调整吗? 未完成 → 带着新观察,回到 Think 再转一圈 已完成 / 达退出条件 → 交付
四步闭环:每一轮从 Think 出发,到 Observe 收尾判断;没完成就带着新观察回到 Think 再转一圈,完成或触发退出条件才跳出循环。

逐步拆开这四个阶段

  1. Think(思考 / 推理)

    理解问题、分析现状、回忆相关信息、发现关键点、形成思路。这是每一轮的起点——先想清楚「现在是什么情况、该往哪走」。

  2. (可选)Plan(计划)

    制定计划、拆解任务、选择策略、确定下一步。图里特别标注:Plan 是可选的,「部分范式中并入 Think」——也就是说有些 Agent 不单独设 Plan 阶段,而是把规划直接揉进思考里。

  3. Act(行动)

    选择要使用的资源(Skill / Workflow / Tool)并执行行动。这是唯一真正「动手」的阶段——图里强调「每轮 Act 时按需调用资源」,资源是在这一步被挑选和触发的。

  4. Observe(观察 / 反馈)

    接收结果、分析反馈、评估进展,并回答两个决定命运的问题:「是否完成?」「需要调整吗?」 这一步的判断决定了:跳出循环交付,还是带着新观察回到 Think 再转一圈。

🎯 为什么是「闭环」而不是「流水线」

流水线是走一遍就完(A→B→C→出货);闭环是Observe 会把控制权送回 Think,形成回路。正因如此,Agent 才能在中途发现「数据不对/方向偏了」时自我纠偏,而不是一条道走到黑。图底部那句「不断的思考、行动、观察和调整」说的就是这个回路。

Layer 2b · Callable Resources

🧰 可调用资源:横向调用,不是顺序流水线

Act 阶段要「选资源」,那有哪些资源可选?图里列了三类,并特别用一句话点明它们的关系:「横向调用,不是顺序流水线」——意思是这三类不是「先用这个再用那个」的固定次序,而是每一轮 Act 按当下需要横向挑一个来用。

三类资源

① Skills(能力)

是什么高层能力封装,直接解决特定类型问题。
示例写代码、数据分析、写 PRD、SEO 优化、广告优化、合同审查……

② Workflow(流程)

是什么多步骤流程执行,用来实现复杂任务。一个 Workflow 内部本身是有序的一串步骤。
示例一个「数据分析 Workflow」内部依次是:
读取数据 数据清洗 数据分析 生成图表 生成报告 检查与验证 导出结果

③ Tools / MCP(工具)

是什么外部工具与服务,通过 API 或 MCP 连接。(MCP = Model Context Protocol,一种把外部工具接给模型用的标准协议。)
示例GitHub、Slack、Browser(浏览器)、SQL Database、Figma、Notion、本地文件系统、Email / Calendar……
⚠️ 别误解:三类资源是「横向并列」的选项库

很容易把 Skills → Workflow → Tools 看成三道先后工序,那是错的。图里明说是横向调用:它们是三个并列的资源池,Agent 在每轮 Act 时,按这一步到底需要什么,横向地从中挑一个(可能是调一个 Skill,可能是跑一个 Workflow,也可能是点一个 Tool)。Workflow 内部才是有顺序的;三类资源之间没有固定顺序。

🔗 类比:厨房里的三种取用方式

Skills 像大厨的拿手菜(「来一份宫保鸡丁」一句话搞定);Workflow 像一张菜谱流程(备料→切→炒→装盘,一步步走);Tools 像厨房里的各种电器与外部供应(冰箱、烤箱、外卖平台)。做每道菜时,你是横向地看「这一步该用拿手菜、走菜谱、还是开个电器」,而不是被逼着「必须先用完拿手菜才能碰烤箱」。

Layer 3 · Assembling Input

🧩 组装本轮模型输入:动态聚合 Context

循环转到要「问模型」的时候,Runtime 得先把一堆零散信息拼成这一轮喂给模型的输入。图里把这一步叫「组装本轮模型输入(动态聚合 Context)」,并列出了拼进去的七种成分:

System Prompt 角色设定 Instructions 任务指令 Memory 记忆 History 历史对话 Tool Schema 工具描述 Observations 工具结果 Retrieved Docs RAG 动态聚合 = 本轮 Model Context Foundation Model 理解·推理·规划·生成
七种成分被「动态聚合」成这一轮的 Model Context(模型输入),再喂给基础模型。「动态」的意思是:每一轮拼出来的内容都不同,因为记忆、历史、工具结果都在变。

七种成分是:System Prompt(角色设定) + Instructions(任务指令) + Memory(记忆) + History(历史对话) + Tool Schema(工具描述) + Observations(工具结果) + Retrieved Docs(RAG 检索),聚合后 → 生成本轮 Model Context(输入)

🔑 关键词:「动态」

为什么强调「动态聚合」?因为这不是一份写死的 prompt。每转一轮,History 更长了、Observations 换成了最新的工具结果、Memory 也可能更新——所以每一轮拼给模型的 Context 都是当轮现攒的、内容各不相同。这正是前面 Context「持续累积」在模型输入侧的体现。

Layer 3b · The Brain

🧠 Foundation Model:循环里被反复调用的大脑

Foundation Model(基础模型)

是什么GPT、Claude、Gemini、Llama…… 这类大模型。图里写明它「在循环内被反复调用」,职责是理解、推理、规划和生成
为什么它是整个 Agent 里唯一「会思考」的部件。Runtime 不推理、资源只执行,真正把 Context 读进去、判断下一步该干什么的,是它。所以它不是被调用一次就完,而是循环的每一轮都要被喂一次最新 Context、吐一次决策。

模型的输出只有两种(图里的关键分叉)

模型读完这一轮的 Model Context 后,产出会走向两条路之一:

输出 A:Final Answer(最终答案)

任务完成,返回最终结果。这条路意味着循环可以结束、把答案交给用户。

🔧

输出 B:Tool Call(工具调用)

需要调用工具,返回调用指令与参数。这条路意味着还没完,得先去动手用个工具,再看结果继续转。

🔀 这个分叉,就是循环「继续还是结束」的开关

模型每轮输出要么是 Final Answer(→ 结束,交付),要么是 Tool Call(→ 继续,去执行工具再回来)。理解这个二选一,就理解了闭环是怎么被驱动、又是怎么被终止的:只要模型还在吐 Tool Call,循环就继续;一旦吐出 Final Answer,循环就收尾。

Layer 3c · Tool Loop

🔧 工具调用流程与 Observation 回流

当模型选了「Tool Call」这条路,接下来发生的事由 Runtime 执行。图里把它拆成三步,并接上最关键的一环——结果如何流回去:

模型决定 调用工具 工具调度器 实际执行工具 返回结果 Observation Runtime Context(状态 / 记忆 / 历史) 更新后作为下一轮输入 写回 · 回流 驱动下一轮
工具调用回路:模型决定 → 调度器执行 → 返回 Observation;Observation 被写回 Runtime Context,更新状态后成为下一轮的输入,驱动模型再想一步。
  1. 模型决定调用工具

    模型输出一个 Tool Call,指明要用哪个工具、传什么参数。

  2. 工具调度器执行工具

    Runtime 里的工具调度器接过指令,实际去把这个工具跑起来。

  3. 返回结果 = Observation

    工具执行完,产出结果,这个结果就是 Observation(观察)

Observation(观察 / 反馈)= 上方 Observe 步骤的落地实现

是什么图里画了一条明确的对应关系:底部工具流里的 Observation,正是核心循环里 Observe 步骤的具体实现。前面 Reasoning Loop 讲的「观察」是概念,这里的 Observation 是它真正发生的地方。
为什么关键因为它负责回流:Observation 会把工具结果(或其他反馈)写回 Runtime Context,更新状态、记忆、历史等,作为下一轮输入。没有这一步回流,循环就断了——模型永远不知道自己上一步动作的结果。
例子模型说「查一下上周广告花费」(Tool Call)→ 调度器跑 SQL 工具 → 返回「花了 ¥8,200」(Observation)→ 这个数字被写回 Context → 下一轮模型带着这个数字继续想「ROI 是多少、该不该加预算」。
♻️ 工具结果回流:闭环真正「闭」上的那一笔

「工具执行结果 Observation 回流到 Runtime Context,驱动下一轮推理与行动」——这句话是整张图的枢纽。它把「模型的输出」变回「模型下一轮的输入」,让一次次孤立的调用串成一个真正转起来的循环。

Key Concepts

📚 关键概念说明 & 核心原则

图右侧的「关键概念说明」和右下的「核心原则」,其实是把前面所有块提炼成几条要点。放在一起对照,正好收束全篇。

五条关键概念(图右侧栏)

关键概念说的是什么
闭环迭代Agent 通过 Think → Act → Observe 的循环不断逼近目标,直到完成。
资源按需调用Skills / Workflow / Tools 在每一轮 Act 阶段按需选择和调用(横向,不是固定顺序)。
Context 贯穿全程Runtime Context 持续累积和更新,每一轮动态聚合为模型输入。
模型在循环内调用Foundation Model 在循环的每一轮被调用,输出驱动下一步决策。
工具结果回流工具执行结果 Observation 回流到 Runtime Context,驱动下一轮推理与行动。

四条核心原则(图右下角)

🧷 五概念与四原则其实一一呼应

「资源按需调用」对应资源横向挑;「状态持续累积 + Context 贯穿全程」对应那份越堆越厚的 Runtime Context;「模型反复调用」对应大脑在循环里被反复喂输入;「闭环迭代 + 工具结果回流」对应 Observation 把结果送回去、把循环闭上。本质上,它们都在说同一件事的不同侧面:一个会自我更新、自我驱动的循环。

Takeaway

🌀 一句话记住这张图

用户给一句自然语言需求;Runtime(Harness)这个不推理的底座,管着状态、循环、工具与预算,托住整场运行;在它之上,Reasoning Loop 以「Think →(Plan)→ Act → Observe」一圈圈转;每轮 Act 时,从 Skills / Workflow / Tools 里横向按需取一个来用;每轮都把七类信息动态聚合成 Context,喂给 Foundation Model 这颗大脑;模型要么给出 Final Answer 收尾,要么发一个 Tool Call;工具跑完的 Observation 回流进 Context,驱动下一轮——如此往复,直到任务完成。

所以最后再强调一次图底部那句题眼:

这不是一条从上到下的流水线,而是一个持续迭代的智能循环。Agent 通过不断的思考、行动、观察和调整,逐步完成复杂任务。

阅读顺序建议:先看第 2 节「闭环全景图」建立整体地图,再按底座 → 循环 → 模型交互往下读;看完回到第 10 节的表格,就能把整张架构图默画出来。