ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AI Agent 对比系列(五):Agent Loop — AI Agent 是怎么「干活」的?

AI Agent 对比系列(五):Agent Loop — AI Agent 是怎么「干活」的? AI Agent 对比系列五Agent Loop — AI Agent 是怎么「干活」的《AI Agent 对比系列》第五篇 · 整合对比版本系列通过对比两个真实开源 AI Agent——OpenClaw和Hermes Agent——带你深入理解 AI Agent 是什么、能做什么、怎么工作。上一篇感知系统篇——AI Agent 怎么看世界、怎么听见你、怎么读取环境。本篇Agent Loop 篇——AI Agent 的大脑是怎么转起来的推理循环、工具选择、上下文管理、中断与恢复。先来做个实验对Hermes说帮我看看 D 盘 workspace 里有哪些目录然后告诉我最大的一个文件夹叫什么。注意观察——它不会一口气回答。它会思考 → 调用工具看目录 → 看结果 → 再调用工具查大小 → 输出答案。如果它干到一半你补一句「等等改成查 C 盘的」——它会停下来处理你的新消息再继续。对OpenClaw说先打开会话输入/verbose on查一下今天的天气顺便把结果写成一份 Markdown 文件保存到工作区。你会看到一条条工具调用记录刷出来先web_search搜天气再write写文件最后才给出回复。两个实验展示的是同一个东西你看到的不只是最终答案而是 Agent 一步步「思考 → 动手 → 看结果 → 再思考」的完整过程。这个循环就是今天的主角——Agent LoopAgent 干活循环。核心认知AI Agent 的本质是一个「循环」不是一次「回答」这是整篇文章最重要的句子AI Agent 不是问一句、答一句的对话工具——它收到任务后会进入一个「思考 → 决定 → 动手 → 看结果 → 再思考」的循环循环里每一步都可能调用工具直到任务完成、或它认为自己已经尽力。这个循环就叫 Agent Loop。传统 AI 和 AI Agent 的区别用两段对话对比传统 AI你问它答 你今天上海天气怎么样 AI上海今天多云24~31℃。回答完毕结束 AI Agent你派活它干 你帮我查上海今天天气如果下雨就提醒我带伞。 Agent好的我来查。 → 思考需要天气数据调用天气工具 → 调用工具获取天气 → 看到结果多云无雨 → 思考无雨不需要提醒带伞 → 输出上海今天多云 24~31℃无雨不需要带伞。为什么会有这个区别因为大模型本身是一锤子买卖——你给它一段 prompt它吐一段文字完事。它没有做一件事的概念只有生成一段文字的概念。当它输出我要调用 web_search参数是……时那只是一段文字指令——真正去执行这段指令的是外面的程序。这个外面的程序就是 Agent Loop思考模型生成下一步该做什么 ↓ 行动执行工具调用拿到结果 ↓ 观察把结果喂回给模型 ↓ 再思考根据结果决定下一步……大模型负责想Agent Loop 负责动和看。没有 Loop大模型只是个只会说话的百科全书有了 Loop它才是个能跑腿的实习生。循环架构对比一个 9 步一个六站Hermes9 步 Turn LifecycleHermes 的 Agent Loop 由run_agent.py的AIAgent类驱动每轮turn官方定义 9 步run_conversation() 一轮循环 1. 生成 task_id如果还没有 2. 把用户消息追加到对话历史 3. 构建或复用缓存的系统提示词 4. 检查是否需要预压缩上下文 50% 时 5. 用对话历史组装 API 请求 6. 注入临时提示层预算警告、上下文压力 7. Anthropic 模型时打缓存标记 8. 发起可中断的模型调用 9. 解析响应 ├── 带工具调用 → 执行工具 → 结果追加回历史 → 回到第 5 步 └── 纯文本 → 保存会话、需要时刷新记忆、返回OpenClaw六站旅程OpenClaw 把一次循环定义为六站你发消息查天气写成文件 ↓ ① 入队 —— 消息进入串行队列等待轮到自己 ↓ ② 组装上下文 —— 人格 技能 记忆 历史 你的消息 ↓ ③ 模型推理 —— 模型思考输出文字回复或工具调用指令 ↓ 需要调用工具吗 ├── 是 → ④ 执行工具 → 结果回填上下文 → 回到③ └── 否 → ⑤ 流式输出最终回复 ↓ ⑥ 持久化 —— 写入会话记录下次还能续上核心差异哲学Hermes 把循环做成显式的 9 步生命周期——文档公开、源码可读每一轮的边界预算检查、压缩检查、可中断调用都是明确的一步OpenClaw 把循环做成六站旅程——从入队到持久化一镜到底强调消息在管道里的完整流转。一个像手术台上的流程清单一个像工厂里的流水线。逐机制对比机制一消息怎么进入循环这是两个 Agent 差异最大的地方之一。Hermes直接进上下文你的消息 → 追加到对话历史 → 组装进下一轮 API 请求 → 模型看到没有队列层。消息进循环的方式简单直接来了就进。OpenClaw串行队列lane每个会话一条专属通道lane→ 同一时刻只有一个循环在跑 所有通道汇入全局通道 → 限制总并发数为什么串行因为同一场对话里两件事同时干会打架——一个在写文件、另一个在删文件上下文就撕裂了。OpenClaw 用队列保证「宁可排队不可乱序」。队列还有四种模式控制正在干活时新消息来了怎么办模式行为适合steer默认新消息注入当前循环干完当前这步立刻处理日常聊天感觉最流畅followup不打断排成后续任务长任务进行中collect一小段时间内的消息合并成一条再处理群聊刷屏、多平台轰炸interrupt中断当前任务立刻处理新消息紧急插话“停下先做这个”Hermes 的对应机制是可中断调用见机制四——用户新消息可以打断正在进行的模型调用效果类似interrupt模式但没有显式的队列模式选择。机制二上下文组装——Agent 每次醒来看到什么两边思路一致模型没有记忆每次推理前都要重新拼一份眼前的世界。HermesOpenClaw系统提示10 层 PromptSOUL.md → 工具指导 → 记忆快照 → Skills 索引 → Context Files → 平台提示System Prompt基础人格 技能说明 启动文件 会话级指令历史消息对话历史OpenAI 兼容格式最近完整消息 更早的压缩摘要记忆MEMORY.md USER.md 快照记忆召回相关长期记忆本条消息本轮用户输入你刚发的这条消息共同认知模型每次推理都是失忆后重新读档案上下文组装就是把档案摊到桌上给它看。摊得越多它越聪明但桌子上下文窗口是有限的。机制三思考——模型推理Hermes推理内容存进assistant_msg[reasoning]可通过reasoning_callback显示。模型调用被包在_interruptible_api_call()里见机制四。消息角色必须严格交替User → Assistant → Tool → Assistant…这是模型服务商校验的交通规则。OpenClaw有一个 Hermes 没有的旋钮——思考级别Thinking Level级别含义off不思考直接答快、省但容易出错minimal/low简单想一下medium默认档位high/xhigh/max深度思考慢、贵但复杂任务更稳可以单条临时指定/think high 帮我设计这个架构、设会话默认/think:high、或打开思考过程展示/reasoning on。思考级别是深度换质量的杠杆——简单任务用低档省钱省时复杂推理用高档求稳。机制四工具调用——循环的心脏这是 Agent Loop 和普通聊天框的分水岭。Hermes模型返回带tool_calls的响应时for each tool_call in response.tool_calls: 1. 从注册表找到工具处理函数 2. 触发 pre_tool_call 插件钩子 3. 检查是否危险命令 → 是则弹批准请求等用户确认 4. 执行工具传入参数 task_id 5. 触发 post_tool_call 插件钩子 6. 把 {role: tool, content: 结果} 追加进历史单个工具调用 → 主线程直接执行多个 →ThreadPoolExecutor并发结果按原调用顺序插回例外交互式工具如clarify强制串行——要等用户输入部分工具是 Agent 级拦截的todo/memory/session_search/delegate_task直接改 Agent 状态不走注册表OpenClaw模型输出tool call → web_search({query: 上海 天气}) ↓ OpenClaw 执行工具真实地访问搜索引擎 ↓ 工具返回结果一大段网页摘要 ↓ 结果清洗截断过长内容、处理图片数据 ↓ 回填上下文 → 模型继续思考每一步工具调用都在tool事件流上广播start → update → end——/verbose on看到的就是它回复整形reply shaping过滤静默标记NO_REPLY、合并工具摘要、工具报错时给兜底回复两边都遵守同一铁律工具结果不是给用户看的是给模型看的——它是模型下一步思考的新事实。机制五防止死循环——钱包保险模型会卡死循环——反复调同一个工具、拿到同样结果、还不死心。两个 Agent 各有护栏护栏HermesOpenClaw迭代预算IterationBudget默认 500agent.max_turns子代理独立预算默认 50预算用尽 → 停止并返回已完成工作的摘要单次循环超时默认 48 小时agents.defaults.timeoutSeconds强制中止循环检测无显式工具tools.loopDetection.enabled监控最近的工具调用历史检测重复模式默认关闭小模型建议打开压缩后护栏压缩触发按上下文阈值见机制六compaction_loop_persisted上下文溢出→压缩→重试后仍重复同一(工具, 参数, 结果)三元组 → 直接终止看门狗可中断调用 超时模型长时间不吐字idle时看门狗中断请求用户取消/stop或新消息打断/stop或点停止翻译成人话一个防止同一个动作做 20 遍还不放弃一个防止压缩完记忆还转圈圈烧钱——这俩都是给钱包上保险的。机制六上下文压缩——循环跑久了会喘气循环每转一圈历史就变长撑爆上下文窗口前必须压缩HermesOpenClaw触发时机预压缩上下文 50%网关自动压缩 85%接近上下文上限时自动触发或手动/compact压缩方式提炼关键信息成摘要继续循环较早的对话总结成摘要最近的保持原样数据安全压缩前需要时刷新记忆压缩前先提醒 Agent把重要的写进记忆文件memory flush——防止总结把关键细节弄丢完整历史保留在会话存储完整历史仍在磁盘上压缩只改模型这次看到什么OpenClaw 的比喻压缩就像期末复习把整学期的笔记浓缩成一页重点。浓缩完你还能接着学但细节只能靠记忆文件兜底。机制七持久化——干完活记下来Hermes第 9 步返回纯文本时——保存会话、需要时刷新记忆flush persistent memory before context is lost。OpenClaw第 ⑥ 站把完整记录写回会话文件transcript这是 Agent 能续上上一轮的原因。写入有细节会话写锁session write lock——任何改写会话记录的操作正常写入、压缩重写、截断都要先拿锁防止多进程同时改坏一个文件。机制八子代理——干活循环的分身术一个循环不够用时两个 Agent 都能派子代理HermesOpenClaw派活工具delegate_tasksessions_spawn隔离每个子代理独立上下文、独立会话独立会话默认互相隔离可开沙箱不污染主对话工具权限子代理有独立工具集默认不继承主代理的会话工具——防止乱动主会话完成方式结果回传主代理推送式主代理派完活结束本轮子代理干完自动汇报预算独立预算默认 50 次迭代独立 token 开销批量任务建议配便宜模型多智能体雏形✅✅多个子代理并行干活最后汇总主 Agent ├─ 派活去调研选题A ──→ 子代理A独立会话并行干活 ├─ 派活去调研选题B ──→ 子代理B独立会话并行干活 └─ 派活去调研选题C ──→ 子代理C独立会话并行干活 ↓ 主 Agent 结束本轮等子代理们汇报 ↓ 子代理完成后结果推送回主会话 → 主 Agent 汇总成最终报告机制九可观测与拦截——你能看着它干活HermesOpenClaw工具过程tool_progress_callbackCLI spinner / 网关进度消息configdisplay.tool_progress: all/verbose on显示每次工具调用的过程思考过程reasoning_callback显示模型推理内容/reasoning on显示模型思考过程状态status_callback/step_callback每轮完成回调/status看会话状态、压缩次数、模型信息干预插件钩子pre/post tool_call 危险命令审批Hook 钩子循环各节点可插脚本拦截推理前注入、工具前审批、循环后检查——自动化/定时任务接进循环的入口/status里有个隐藏信息 Compactions: 次数——压缩次数越多说明对话越长寿。 更多实战记录见我的博客鱼日先生全景对比能力HermesOpenClaw思考 → 动手 → 观察 → 再思考✅ 9 步 Turn Lifecycle✅ 六站旅程消息进入方式直接进上下文串行队列lane 四模式思考级别调节❌ 无显式旋钮✅/think off~max多工具并发执行✅ ThreadPoolExecutor✅ 工具事件流中途打断/改主意✅ 可中断 API 调用✅ steer/interrupt 队列模式迭代预算✅ 默认 500本机 150✅ 循环超时 48h卡死循环检测❌ 无显式检测✅ loop detection 压缩后护栏上下文压缩✅ 50% / 85% 双阈值✅ 自动 /compact压缩前记忆兜底✅ 刷新记忆✅ memory flush持久化✅ 会话保存✅ transcript 会话写锁子代理✅ delegate_task✅ sessions_spawn可观测✅ 回调 tool_progress✅ /verbose /reasoning /status循环拦截✅ 插件钩子 危险命令审批✅ Hook 钩子能做 / 不能做能做 ✅不能做 ❌多步推理思考→动手→观察→再思考两边都是无限循环——预算/超时/护栏会收尾循环中随时调用工具搜索/读文件/执行命令不能同时回答和干活——每轮只能选一个中途被打断重新调整方向被打断时已开始的工作会丢弃不保留半截状态多个工具并行执行交互式工具提问/审批不能并行长时间任务通过压缩机制持续运行上下文超出窗口前必须压缩压缩会丢细节子代理并行干活最后汇总子代理有独立预算/开销不是免费分身人类类比理解 Agent Loop可以想象一个刚入职、干劲十足的新员工Agent Loop 概念类比收到任务老板把你叫到工位交代一个活儿思考你在心里盘算这活儿该怎么做、分几步调用工具你打开电脑查资料、翻文档、打电话问同事观察结果你看到查到的资料、同事的回答再思考根据新信息调整做法输出答案你交活把结果汇报给老板串行队列公司规定一个工位一次只能干一件事排队处理消息打断老板随时能打断你“先别弄这个了改做那个”迭代预算公司规定加班最多到晚上 9 点到点必须下班汇报上下文压缩干了一整天你翻备忘录把重点记下来忘掉细节子代理忙不过来时叫帮手各干各的最后汇总给你关键区别人类可以一心多用Agent 一次循环只能专注一件事——但它循环得极快一轮只需几秒而且从不觉得重复枯燥。选择指南场景更推荐想要完整的循环架构文档、能读源码研究机制Hermes9 步生命周期完全公开群聊刷屏、多平台轰炸时消息不乱套OpenClawcollect 模式合并处理想按任务难度调节思考深度省 tokenOpenClaw/think 级别旋钮用本地小模型7B-30B怕卡死循环烧钱OpenClawloop detection 可开需要细粒度控制循环中的每一步Hermes插件钩子 危险命令审批希望开箱即用、命令简单/verbose /statusOpenClaw子代理批量并行调研两者都可以delegate_task / sessions_spawn本系列完结到这里《AI Agent 对比系列》五篇全部完成#主题核心一句话01入门篇AI Agent 有手有脚有脑子你派活它干02记忆系统篇AI 没有真正的记忆它靠读写文件来模拟03工具系统篇手脚 工具系统能力边界由工具决定04感知系统篇没有感官一切感知都是把世界转成文本塞进上下文05Agent Loop 篇本质是循环思考 → 动手 → 观察 → 再思考从是什么到怎么记忆、“怎么动手”、“怎么感知”、“怎么干活”——五篇合起来就是 AI Agent 的完整解剖图。理解这些你就理解了市面上任何 Agent 产品的底层逻辑它们都是大模型 循环 工具 记忆的不同组合区别只在设计和取舍。两个 Agent 的完整独立版本可从各自工作区获取对照阅读最能体现不同设计哲学。信息源声明Hermes 信息来源Agent Loop Internals、Tools、本地config.yamlagent.max_turns: 150、display.tool_progress: all、本地工作日志实测OpenClaw 信息来源docs.openclaw.ai/concepts/agent-loop、docs.openclaw.ai/concepts/queue、docs.openclaw.ai/concepts/context-engine、docs.openclaw.ai/concepts/compaction、docs.openclaw.ai/tools/thinking、docs.openclaw.ai/tools/loop-detection、docs.openclaw.ai/tools/subagents、OpenClaw 本地运行时文档本文以 Hermes 的分析框架为主线组织融合 OpenClaw 的视角进行对比。两个 Agent 的完整独立版本可从各自工作区获取。本系列通过对比两个真实运行的开源 AI Agent——OpenClaw 和 Hermes——来解构 AI Agent 的本质到此全五篇完结。
返回列表