当前位置: 首页 > article >正文

OpenClaw 源码解析(六):openclaw agent 如何触发一次 Agent 运行?

1. 本期要解决的问题前几期我们已经从项目整体结构、CLI 命令体系、配置加载、Gateway 运行机制等角度理解了 OpenClaw 的基础框架。到了这一期可以进一步进入 OpenClaw 最核心的使用动作用户在终端中执行一条openclaw agent --message ...命令后系统内部究竟发生了什么从官方文档看openclaw agent的定位非常明确它用于通过 Gateway 运行一次 agent turn同时也可以通过--local参数强制走本地嵌入式执行路径命令需要至少提供一个会话选择器例如--to、--session-key、--session-id或--agent。(OpenClaw)也就是说openclaw agent并不是一个简单的“大模型问答命令”它本质上是一个带有会话路由、Agent 选择、模型覆盖、回复投递和容错回退能力的任务调度入口。2. 命令入口agent是核心 CLI 命令之一在 CLI 命令描述文件中agent被注册为一个核心命令其说明是 “Run one agent turn via the Gateway”即通过 Gateway 运行一次 Agent 回合。这个定义说明默认情况下 OpenClaw 倾向于让 Agent 请求经过 Gateway而不是直接在当前 CLI 进程里裸跑模型调用。(GitHub)可以把它理解为用户输入命令 ↓ openclaw agent ↓ 构造一次 Agent 请求 ↓ 优先交给 Gateway 执行 ↓ 得到回复后输出到终端或投递到指定聊天渠道这种设计的好处是CLI 不需要自己承担全部运行状态。Gateway 可以统一管理会话、通道、插件、模型、工具、消息投递和长期运行状态。3. 第一层校验消息和目标会话必须存在agent-via-gateway.ts中的agentViaGatewayCommand首先会取出用户传入的message并进行空值校验。如果用户没有传入消息体源码会直接抛出错误提示使用openclaw agent --message ... --agent id或者使用已有会话参数。(GitHub)紧接着它还会检查目标会话是否明确。源码要求用户至少提供--to、--session-id、--agent或--session-key中的一种否则系统不知道这次消息应该发给哪个 Agent 或哪个会话。(GitHub)这一步可以概括为message 为空 → 报错 没有任何会话选择器 → 报错 agent id 不存在 → 报错这个设计很关键。因为 OpenClaw 支持多个 Agent也支持把不同聊天渠道映射到不同会话。如果没有明确的目标选择规则系统就无法判断这次 Agent turn 应该继承哪段上下文也无法判断后续回复应该投递到哪里。4. 第二层准备解析 sessionKey、timeout、model override通过基础校验之后源码会继续解析运行参数。它会根据配置和用户传入的agentId、to、sessionId、sessionKey等信息解析出最终使用的sessionKey。同时它还会解析超时时间、消息渠道、幂等 key以及可选的模型覆盖参数--model。(GitHub)这一段代码的核心作用不是“调用模型”而是把用户输入的 CLI 参数转换为一次标准化的 Agent 运行请求。可以理解为用户参数 ↓ 规范化 agentId ↓ 检查 agent 是否存在 ↓ 解析 sessionKey ↓ 解析 timeout ↓ 解析 model override ↓ 生成 idempotencyKey其中idempotencyKey很值得注意。它用于标识一次请求避免同一个请求在 Gateway 中被重复执行。源码中还专门处理了in_flight状态如果相同 run 已经在执行中CLI 会提示当前 Agent run 已经在进行而不是再启动一个重复任务。(GitHub)5. Gateway 路径真正向 Gateway 发起agent调用参数准备完成后OpenClaw 会通过callGateway向 Gateway 发起请求。这里的请求方法名是agent请求参数包括message、agentId、model、to、sessionId、sessionKey、thinking、deliver、channel、replyChannel、timeout、lane和idempotencyKey等。(GitHub)从这一点可以看出openclaw agent命令发出的不是一个简单文本请求而是一个完整的 Agent 执行请求包。这个请求包同时携带了要说什么message 由谁执行agentId 使用哪个上下文sessionKey / sessionId 是否覆盖模型model 是否投递回复deliver 投递到哪里channel / replyChannel / replyTo 如何控制运行timeout / thinking / lane 如何避免重复idempotencyKey因此Gateway 不是被动转发文本而是承担了 Agent 运行控制中心的角色。6. 输出处理JSON 输出与普通文本输出分开Gateway 返回结果后CLI 会根据用户是否传入--json选择不同输出方式。如果是 JSON 模式源码会把 Gateway 响应写成结构化 JSON如果不是 JSON 模式则会提取payloads逐个格式化后输出到终端。(GitHub)这说明 OpenClaw 同时面向两类使用方式人直接在终端使用 → 输出可读文本 脚本或自动化系统调用 → 输出可解析 JSON这一点对于 CLI 工具非常重要。人类用户需要清晰的终端反馈而自动化脚本需要稳定的结构化返回值。7. 本地路径与回退路径为什么有--local官方文档说明Gateway 模式失败时会回退到 embedded agent而--local可以直接强制使用嵌入式执行同时--local仍会预加载插件注册表以便插件提供的 provider、tool 和 channel 在本地运行中仍然可用。(OpenClaw)源码中的agentCliCommand也体现了这个分支逻辑如果用户设置了--local系统会直接调用agentCommand如果没有设置--local则优先尝试agentViaGatewayCommandWithTransientRetries也就是 Gateway 路径。(GitHub)可以概括成openclaw agent ↓ 是否 --local ├─ 是直接 agentCommand 本地执行 └─ 否优先 Gateway 执行 ↓ Gateway 失败或超时 ├─ 是embedded fallback └─ 否返回 Gateway 结果这一设计增强了可用性。Gateway 正常时系统走统一服务路径Gateway 不可用或超时时CLI 仍然有机会在当前进程中完成一次嵌入式 Agent 执行。8. 嵌入式执行内部agentCommand做了什么当系统进入本地执行或 embedded fallback 时会调用agentCommand相关逻辑。agent-command.ts中的prepareAgentCommandExecution会再次检查消息体和会话选择器并解析配置、Agent、会话、工作区、模型上下文等运行信息。(GitHub)随后系统会解析 session得到sessionId、sessionKey、会话存储、是否新会话、持久化 thinking / verbose 设置等信息还会解析 Agent 所属工作目录、Agent 目录以及模型 manifest 上下文。(GitHub)进入真正执行阶段后源码会调用acpManager.runTurn并监听运行过程中的事件。对于text_delta事件系统会把模型输出的增量文本累积起来再通过运行时事件发送出去。(GitHub)执行结束后源码会整理最终文本持久化 transcript并调用投递逻辑deliverAgentCommandResult处理最终输出或消息发送。(GitHub)因此嵌入式执行链路可以写成agentCommand ↓ prepareAgentCommandExecution ↓ 解析会话、Agent、工作区、模型上下文 ↓ 准备 skills snapshot ↓ acpManager.runTurn ↓ 接收 text_delta / done 等事件 ↓ 累积最终回复 ↓ 保存 transcript ↓ 输出或投递结果9. 整体流程图用户执行 openclaw agent --agent ops --message Summarize logs ↓ agentCliCommand ↓ 规范化参数、校验 sessionKey、生成 runId ↓ 判断是否 --local ↓ ┌─────────────────────────────┐ │ Gateway 优先路径 │ │ agentViaGatewayCommand │ └─────────────────────────────┘ ↓ 校验 message / session selector / agentId ↓ 解析 sessionKey / timeout / model override ↓ callGateway({ method: agent, params: ... }) ↓ Gateway 执行 Agent turn ↓ 返回 response ↓ JSON 输出或 payload 文本输出 ↓ 如果 Gateway 失败或超时 ┌─────────────────────────────┐ │ embedded fallback │ │ agentCommand │ └─────────────────────────────┘ ↓ 解析配置、会话、Agent、工作区、模型、技能 ↓ acpManager.runTurn ↓ 保存 transcript ↓ 返回或投递结果10. 本期小结这一期我们重点分析了openclaw agent命令的执行链路。它表面上只是一个发送消息的 CLI 命令但源码中实际包含了完整的 Agent 运行调度逻辑。它的核心设计可以总结为三点第一openclaw agent是一次会话化 Agent turn不是简单的大模型 completion。系统会通过sessionKey、sessionId、agentId等信息明确上下文归属。第二OpenClaw 采用Gateway-first的执行策略。正常情况下CLI 把请求交给 Gateway由 Gateway 统一处理 Agent、模型、工具、通道和消息投递。第三OpenClaw 设计了embedded fallback机制。当 Gateway 路径失败或超时时CLI 可以回退到本地嵌入式执行从而提高命令可用性。理解了这一期之后我们就能更清楚地看出 OpenClaw 的核心思想它不是把 LLM 调用简单包装成 CLI而是围绕“多 Agent、多会话、多通道、可回退执行”构建了一套完整的 Agent 运行基础设施。

相关文章:

OpenClaw 源码解析(六):openclaw agent 如何触发一次 Agent 运行?

1. 本期要解决的问题 前几期我们已经从项目整体结构、CLI 命令体系、配置加载、Gateway 运行机制等角度理解了 OpenClaw 的基础框架。到了这一期,可以进一步进入 OpenClaw 最核心的使用动作:用户在终端中执行一条 openclaw agent --message "...&q…...

OpenClaw 源码解析(五):setup / onboard 与本地配置初始化

1. 本期目标 上一期我们分析了 OpenClaw 的 CLI 启动链路:用户输入 openclaw 命令后,程序会先经过 entry.ts、run-main、Commander Program 构建和命令注册流程,然后再进入具体命令逻辑。 这一期继续往下看,重点分析两个最基础的…...

动物森友会岛屿设计终极指南:用Happy Island Designer打造梦想岛屿

动物森友会岛屿设计终极指南:用Happy Island Designer打造梦想岛屿 【免费下载链接】HappyIslandDesigner "Happy Island Designer (Alpha)",是一个在线工具,它允许用户设计和定制自己的岛屿。这个工具是受游戏《动物森友会》(Anim…...

OpenTK 3.3.3实现3D旋转立方体:C# OpenGL入门实战

1. 为什么一个旋转立方体是3D图形编程真正的“Hello World” 很多人第一次接触OpenGL或现代图形API时,总想直接上手做粒子系统、PBR渲染或者实时阴影——结果卡在顶点缓冲对象(VBO)绑定失败、着色器编译报错、甚至窗口根本没显示出来。我带过…...

在多模型聚合场景下利用Taotoken实现API调用的自动降级与容灾

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在多模型聚合场景下利用Taotoken实现API调用的自动降级与容灾 对于依赖大模型API的生产系统而言,服务的连续性与稳定性…...

ABS+神经网络:端到端宇宙学参数推断新范式解析

1. 项目概述:当ABS遇上神经网络,一个端到端宇宙学参数推断新范式的诞生 在宇宙学研究的核心地带,有一项任务既令人着迷又充满挑战:如何从宇宙微波背景(CMB)这张宇宙婴儿时期的“照片”中,精准地…...

机器学习势函数在高温超导材料缺陷与相变研究中的应用

1. 项目概述:当机器学习“遇见”高温超导的微观世界高温超导体,尤其是像YBa2Cu3O7(YBCO)这样的铜氧化物,一直是凝聚态物理和材料科学领域的“明星”材料。它们能在相对较高的温度下实现零电阻,为能源传输、…...

基于ESP32与MQTT的智能时钟:从硬件驱动到物联网系统集成实战

1. 项目概述:一个基于ESP32和MQTT的智能卧室时钟几年前,我在一个旧货市场淘到了四块巨大的SA40-19SRWA七段数码管,它们一直躺在我的零件箱里吃灰。直到ESP32这颗功能强大的物联网芯片变得唾手可得,我才终于为它们找到了完美的归宿…...

量子机器学习多编码框架MEDQ:提升模型泛化能力与参数效率

1. 项目概述:为什么量子机器学习需要“多编码”?量子机器学习(QML)这几年火得不行,但真正上手做过的人都知道,它有个挺让人头疼的“怪病”:模型在某些数据集上表现神勇,换到另一个看…...

3分钟掌握中兴光猫配置解密:ZET工具终极快速指南

3分钟掌握中兴光猫配置解密:ZET工具终极快速指南 【免费下载链接】ZET-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/ze/ZET-Optical-Network-Terminal-Decoder 想要自由掌控家中网络却总被光猫配置限制?中兴光猫…...

Video2X专业级AI视频增强实战指南:GPU加速无损放大的深度技术解析

Video2X专业级AI视频增强实战指南:GPU加速无损放大的深度技术解析 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trendi…...

独家首发|DeepSeek官方未公开的IP检查API接口文档(含沙箱环境调用密钥获取路径)

更多请点击: https://kaifayun.com 第一章:DeepSeek知识产权检查 DeepSeek系列大模型(如DeepSeek-V2、DeepSeek-Coder、DeepSeek-MoE)由深度求索(DeepSeek)公司自主研发,其权重、训练代码、推…...

监控摄像头小众场景爆发,融合类产品成新蓝海

随着户外运动热潮的持续和物联网技术的全面落地,打猎相机市场在2025年迎来了真正的爆发期,并在2026年继续向智能化、网联化深度演进。根据最新的行业监测数据,2025年全球消费类IPC(网络摄像机)出货量突破1.92亿台&…...

DeepSeek代码审查配置避坑清单:12个被99%团队忽略的关键参数(含生产环境校验脚本)

更多请点击: https://intelliparadigm.com 第一章:DeepSeek代码审查功能概览 DeepSeek 提供的代码审查(Code Review)能力基于其大语言模型对编程语义、安全规范与工程实践的深度理解,支持多语言静态分析、漏洞识别、可…...

为什么选择Mesa框架?Python智能体建模的终极指南与实战秘籍

为什么选择Mesa框架?Python智能体建模的终极指南与实战秘籍 【免费下载链接】mesa Mesa is an open-source Python library for agent-based modeling, ideal for simulating complex systems and exploring emergent behaviors. 项目地址: https://gitcode.com/g…...

机器学习势函数进阶:Hessian矩阵如何提升化学反应模拟精度与稳定性

1. 项目概述:当机器学习势函数“看见”势能面的曲率 在计算化学和材料模拟的日常工作中,我们这些“炼丹师”最头疼的莫过于在精度和效率之间走钢丝。量子化学方法(如DFT)算得准,但慢得让人心焦,算个稍大点的…...

QKeyMapper完整指南:Windows上最强大的免费按键映射解决方案

QKeyMapper完整指南:Windows上最强大的免费按键映射解决方案 【免费下载链接】QKeyMapper [按键映射工具] QKeyMapper,Qt开发Win10&Win11可用,不修改注册表、不需重新启动系统,可立即生效和停止。支持游戏手柄映射到键鼠&…...

8大网盘文件直链一键获取:LinkSwift让你的下载速度突破限速瓶颈

8大网盘文件直链一键获取:LinkSwift让你的下载速度突破限速瓶颈 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云…...

Unity中文语言包安装失败?手动部署全流程详解

1. 为什么Unity编辑器中文语言包总在安装时“卡住”或报错? Unity编辑器自带多语言支持,但中文语言包的安装过程却常年被开发者吐槽——点开Preferences → Localization → Install Language Pack,选中Chinese (Simplified),点击…...

免费解锁八大网盘限速!LinkSwift直链下载助手终极指南

免费解锁八大网盘限速!LinkSwift直链下载助手终极指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…...

HiveWE地图编辑器:告别卡顿,开启魔兽争霸III地图制作新纪元

HiveWE地图编辑器:告别卡顿,开启魔兽争霸III地图制作新纪元 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE 还在为魔兽争霸III原版编辑器的缓慢加载和频繁卡顿而烦恼吗?你…...

城通网盘直链解析终极指南:3分钟告别广告等待

城通网盘直链解析终极指南:3分钟告别广告等待 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 还在为城通网盘下载而烦恼吗?每次下载都要面对烦人的广告等待,还要输入…...

三步解锁WeMod专业版:终极本地增强工具配置指南

三步解锁WeMod专业版:终极本地增强工具配置指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为WeMod专业版的订阅费用烦恼吗&#xf…...

Godot4地图分层绘制实战:从图层混乱到专业场景管理的避坑指南

Godot4地图分层绘制实战:从图层混乱到专业场景管理的避坑指南当你第一次在Godot4中完成一个复杂场景的TileMap绘制时,那种成就感无与伦比。但随着场景复杂度提升,你是否遇到过这些头疼问题:角色明明站在树后却被树叶遮挡&#xff…...

麒麟桌面CVE-2024-1086漏洞深度修复指南

1. 这个漏洞不是“修个补丁就完事”:麒麟桌面系统CVE-2024-1086的真实威胁图谱你可能刚在安全通告里看到“麒麟桌面系统修复CVE-2024-1086”,顺手点了个更新,心里想着“又一个内核提权漏洞,打上补丁不就完了?”——我去…...

问卷数据分析避坑指南:你的验证性因子分析(CFA)模型为什么总拟合不好?

问卷数据分析避坑指南:验证性因子分析(CFA)模型拟合不良的深度诊断 当你满怀期待地将精心设计的问卷数据导入统计软件,准备验证理论模型时,却发现拟合指标一片飘红——卡方值高得离谱,RMSEA超出临界值&…...

SafeExamBrowser虚拟机检测绕过实战:双路径技术决策与深度破解

SafeExamBrowser虚拟机检测绕过实战:双路径技术决策与深度破解 【免费下载链接】safe-exam-browser-bypass A VM and display detection bypass for SEB. 项目地址: https://gitcode.com/gh_mirrors/sa/safe-exam-browser-bypass SafeExamBrowser&#xff08…...

Unity Spine换装系统:骨骼映射与Skin动态管理实战

1. 为什么Spine换装不能只靠“替换贴图”——一个被低估的骨骼绑定难题 在Unity里做Spine换装,很多人第一反应是:把新衣服的Atlas和SkeletonData拖进去,用 SkeletonRenderer 的 skeletonDataAsset 字段一换,完事。我去年接手一…...

ESP32屏幕项目救星:用TFT_eSPI库的Touch_calibrate例程,5分钟搞定LittleVGL触摸校准

ESP32屏幕开发实战:5分钟完成LittleVGL触摸校准的高效方法论 当一块全新的ILI9341XPT2046电阻屏摆在你面前时,大多数开发者会迫不及待地跳进LittleVGL的配置深渊。但真正高效的硬件开发者知道,在编写任何图形界面代码之前,有一个关…...

MFCC与可解释机器学习:构建可解释的L2发音AI诊断系统

1. 项目概述:当语音技术遇见二语教学 作为一名在语音技术和教育技术交叉领域摸爬滚打了十多年的从业者,我常常思考一个问题:我们能用算法“听”出一个人说外语时,他的母语口音吗?更进一步,我们能否不仅“听…...