11+++
2- title = " Agent实现原理与实践(一):Agent Loop"
2+ title = " AI Agent实现原理与实践(一):Agent Loop"
33date = 2026-04-25T16:00:00+08:00
44author = " Skyan"
55tags = [" framework" , " programming" , " agents" , " ai" ," llm" ]
66ShowToc = true
77ShowBreadCrumbs = true
88+++
99
10+ ## 导言
11+ 自2025年下半年以来,AI大模型的应用热点从chatbot转变到了智能体Agent。以Claude Code,Codex,OpenClaw等为代表的Agent风靡一时,成为业界热点话题。对于开发者而言,一旦习惯使用Agent来开发代码,就不会再回到过去那种、code completion或者chatbot的开发模式了。随之而来的一个疑问就是,Agent和AI chatbot这样的软件有什么本质区别?事实上,主要经过深入学习和研究Agent原理之后,每个人都会发现一个现象:那就是Agent的开发原理和过去所有的软件都不相同,它是一种** AI时代、新的、纯新、毫无争议的新** 软件架构范式。每一个希望深入应用Agent架构的开发者、希望深入了解Agent的学习者、希望深入优化Agent的高级架构师,都必须先了解Agent的实现原理和最佳实践,才能深刻体会到这种崭新的思想,才能在AI时代快速变化的迷雾中,找到一丝微弱的亮光,指引开发者们前行。
12+
13+ 本系列文章以著名的四个Agent项目:Claude Code,OpenAI Codex,Pi,Nanobot作为基础案例,分别介绍Agent的主要机制的设计原理和最佳实践。共分为六章:「Agent Loop」,「Tool System」,「Context Management」,「SubAgent System」,「Permission, Approval & Sandbox」以及「Observability & Operations」,这六章可以从机制上剖析Agent的基本架构。但实际Agent应用的内涵远不止这些内容,Agent的工业级落地还会面临更为复杂的情况,这可能是另外一个话题了。
14+
1015## 1. 前言
1116
1217随着2022年底以ChatGPT为代表的LLM(大语言模型)爆发式发展,AI Agent(智能体)迅速从概念走向工程实践。从早期简单的单轮对话工具,到如今能够自主规划、调用工具、持续迭代的编程Agent(如Cursor、Claude Code、Codex CLI),Agent已经成为大模型应用落地的核心形态。正如OpenAI在其官方博客中所说,Agent Loop是连接用户、模型和工具的枢纽。
@@ -70,9 +75,9 @@ flowchart TD
7075
7176## 3. 主流项目的Agent Loop设计
7277
73- ### 3.1 Codex CLI [ ^ 1 ] :平台型Runtime
78+ ### 3.1 Codex[ ^ 1 ] :平台型Runtime
7479
75- Codex CLI是OpenAI发布的官方编程Agent工具 ,其Agent Loop设计最像完整的平台级Runtime。它的核心特点是** 分层调度** :外层负责会话级任务调度,内层负责单轮Turn执行,最内层处理模型采样。
80+ Codex是OpenAI发布的官方编程Agent工具 ,其Agent Loop设计最像完整的平台级Runtime。它的核心特点是** 分层调度** :外层负责会话级任务调度,内层负责单轮Turn执行,最内层处理模型采样。
7681
7782Codex的Loop可以概括为:
7883
@@ -232,8 +237,6 @@ pi还创新性地把运行中插入的新消息分成两类:
232237| nanobot | 一条消息处理闭环 | 轻量,但turn语义相对弱 |
233238| pi | Assistant回复 + 整批tool call/result | 最符合tool-using agent的真实运行语义 |
234239
235- pi的定义最值得借鉴:把turn边界定为"assistant + tool batch",比"每次模型请求就是一轮"更符合实际。因为用户和UI关心的是"Agent做完了一件事",而不是"模型被调了一次"。
236-
237240### 4.2 并发与插队输入
238241
239242| 项目 | 并发模型 | 插队机制 |
@@ -243,7 +246,6 @@ pi的定义最值得借鉴:把turn边界定为"assistant + tool batch",比"
243246| nanobot | per-session lock + global gate | 命令在编排层前面处理,不交给模型 |
244247| pi | 单agent单活动loop,其余排队 | steering/follow-up在turn边界注入 |
245248
246- 这里的关键权衡是:** 即时性 vs 完整性** 。Codex和Claude偏向更强的交互控制能力,nanobot和pi偏向更清晰的边界和可恢复性。
247249
248250### 4.3 工具执行模型
249251
@@ -254,7 +256,6 @@ pi的定义最值得借鉴:把turn边界定为"assistant + tool batch",比"
254256| nanobot | 标准LLM->tool calls->execute->results->LLM闭环 |
255257| pi | 三阶段生命周期(prepare/execute/finalize),事件驱动 |
256258
257- Claude的"工具调用单位是invocation pipeline而不是简单函数调用"这一思想非常重要。真实场景中,工具调用涉及权限检查、progress事件、错误格式化、context mutation等,远非` tool(input)->output ` 能概括。新项目实现的时候可以参考,但要避免过度设计。
258259
259260### 4.4 上下文与历史管理
260261
@@ -265,7 +266,6 @@ Claude的"工具调用单位是invocation pipeline而不是简单函数调用"
265266| nanobot | 合法历史约束,append-only session,memory consolidation |
266267| pi | 内部消息模型与provider消息解耦,partial assistant实时写回 |
267268
268- 每个项目在这方面能力都差不多,大同小异。
269269
270270### 4.5 压缩、恢复与后台机制
271271
@@ -276,7 +276,6 @@ Claude的"工具调用单位是invocation pipeline而不是简单函数调用"
276276| nanobot | 请求前token预算判断,请求后异步consolidation,子agent复用主内核 |
277277| pi | Retry/compaction放在session runtime,loop内核保持纯粹 |
278278
279- Claude的多级压缩策略最完整:先减细碎噪声,再收缩局部结果,再做结构化压缩,最后做失败后恢复。但从另外一个角度来说,我强烈怀疑这是Claude一直不断打补丁之后的结果,缺乏一个顶层设计。
280279
281280### 4.6 子Agent与递归复用
282281
@@ -287,7 +286,7 @@ Claude的多级压缩策略最完整:先减细碎噪声,再收缩局部结
287286- ** nanobot** :子Agent复用主执行内核但缩小工具集,结果必须回到主loop
288287- ** pi** :通过extension hook和session runtime接入
289288
290- 多Agent设计是未来Agent程序的高级特性,也是能决定能否实现集群作业的关键能力。各个项目实现不同,但Claude Code同一个loop同时服务主会话和子Agent,采用了单循环、多上下文的架构设计,每个 Agent 拥有独立的上下文,但共享一个事件循环。这样的设计也的确是个迷,越来越像是一个原型项目不断打补丁了。
289+ 多Agent设计是未来Agent程序的高级特性,也是能决定能否实现集群作业的关键能力。
291290
292291## 5. 设计共识
293292
@@ -306,14 +305,7 @@ Claude的多级压缩策略最完整:先减细碎噪声,再收缩局部结
306305
307306Agent Loop是Agent系统的核心机制,它决定了Agent如何思考、行动和与外部世界交互。从朴素的` while(true) ` 到成熟的Runtime,Agent Loop的演进体现了软件工程的核心思想:** 通过清晰的边界和分层,管理复杂度,保证可靠性。**
308307
309- 四个主流项目虽然风格各异,:
310-
311- - ** Codex** 设计重心的是:平台型Agent Runtime如何调度和推进Turn
312- - ** Claude** 不断打的补丁是:可恢复、可流式、可前后台托管的Query Runtime如何工作
313- - ** nanobot** 从学术上定义:消息驱动Agent系统如何用最小内核长期稳定运行
314- - ** pi** 从实践的角度实现:交互式Coding Agent Runtime如何保证消息边界、工具和状态收敛
315-
316- Agent Loop的设计没有银弹,但显而易见的工程原则是:在确定边界上推进状态,在边界之外通过hook和运行时层扩展能力。下一篇,我们将深入探讨Agent的 ** 工具系统(Tool System)** 设计,分析如何让Agent安全、高效、可扩展地调用外部能力。
308+ Agent Loop的设计工程原则一般是:在确定边界上推进状态,在边界之外通过hook和运行时层扩展能力。下一篇,我们将深入探讨Agent的 ** 工具系统(Tool System)** 设计,分析如何让Agent安全、高效、可扩展地调用外部能力。
317309
318310## 参考文献
319311
0 commit comments