sgClaw 指令执行全链路解析

同一个 Agent 框架,面对"简单直调"与"复杂规划"两类指令走完全不同的路径。本文拆解两条路径的内部时序,帮助研发与业务团队建立准确认知。

🔀 0. 指令路由:走哪条路?

sgClaw 在执行任何操作前,先由引擎分析指令语义,判断是否能从技能库中直接命中一个 Skill。
命中率高 → 跳过大模型,走简单路径;  需要拆解 → 交由大模型规划,走复杂路径。

flowchart LR Input(["💬 用户指令"]) Router{"🔍 引擎意图分析\n(语义匹配技能库)"} Simple["⚡ 简单路径\nSingle-Skill Direct\n无 LLM 调用"] Complex["🧠 复杂路径\nReAct Planning Loop\n动态拆解 + 多轮 LLM"] Input --> Router Router -->|"Skill 命中率高\n单一、明确意图"| Simple Router -->|"无匹配 Skill\n模糊或组合目标"| Complex style Simple fill:#eff6ff,stroke:#3b82f6,stroke-width:2px,color:#1e3a8a style Complex fill:#fff7ed,stroke:#f97316,stroke-width:2px,color:#7c2d12 style Router fill:#faf5ff,stroke:#a855f7,stroke-width:2px,color:#6b21a8
对比维度 ⚡ A. 简单指令(Single-Skill) 🧠 B. 复杂指令(ReAct Planning)
典型场景 提取当前页面表格、截图保存 对比A/B公司财报、跨系统数据同步
大模型调用次数 0 次(无需LLM) 2 ~ 8+ 次(规划 + 每步评估)
预计完成时间 < 1 秒 5 ~ 30 秒
Skill 调用数量 1 个 Skill(直接命中) N 个 Skill(动态加载)
记忆系统使用 不写入记忆(一次性操作) 每步写入 L1 短期记忆,汇总写入 L2
失败恢复 无 Critic,直接报错返回 Critic 评估后可自动纠错重试
适用前提 技能库中已有对应 Skill 技能库有原子 Skill,需 LLM 组合编排

A. 简单指令执行 (Single-Skill)

当用户输入目的极其明确的指令(如"提取当前表格"),引擎直接命中对应的预设 Skill, 全程零 LLM 调用,执行延迟 < 1 秒。Skill 在 Deno Core 沙箱中运行,直接向浏览器内核下发 CDP 动作。

sequenceDiagram autonumber actor U as 👤 用户 participant UI as 💻 UI面板(P4) participant Core as ⚙️ 引擎(P1a+P1b) participant Sandbox as 📦 Skill沙箱(Deno) participant Browser as 🌐 浏览器内核(P2) U->>UI: "提取当前页面表格" UI->>Core: 发送执行请求(含页面上下文) rect rgb(239, 246, 255) Note over Core,Sandbox: 语义匹配:命中 TableExtract_Skill,跳过大模型 Core->>Sandbox: 加载并 Ed25519 验签 TableExtract_Skill Sandbox-->>Core: 验签通过,JS 沙箱就绪 end Sandbox->>Browser: 下发 BrowserAction:CDP 获取 DOM 结构 Browser-->>Sandbox: 返回页面 HTML / 表格节点 Sandbox-->>Core: Skill 执行完毕,返回结构化数据 Core-->>UI: 格式化结果(JSON → 可读表格) UI-->>U: 界面展示提取结果 ✅

🧠 B. 复杂指令执行 (ReAct Planning)

面对模糊或组合型任务(如"对比A、B公司最新财报"),引擎依赖大模型进行动态拆解,并多次调用不同 Skill。 每一步执行后经 Critic 评估器判断是否继续或纠错,同时将中间结果写入记忆系统。

sequenceDiagram autonumber actor U as 👤 用户 participant UI as 💻 UI面板(P4) participant Core as ⚙️ 引擎(P1a+P1b) participant LLM as 🤖 大模型底座 participant Memory as 🗄️ 记忆系统(L0/L1/L2) participant Sandbox as 📦 Skill沙箱(Deno) participant Browser as 🌐 浏览器内核(P2) U->>UI: "对比 A 和 B 公司最新财报" UI->>Core: 发送复杂任务请求 rect rgb(255, 247, 237) Note over Core,LLM: Think 阶段:大模型拆解目标 Core->>LLM: 意图分析 + 生成执行计划 (Plan) LLM-->>Core: 返回步骤列表:① 搜 A 财报 → ② 搜 B 财报 → ③ 对比汇总 end rect rgb(254, 242, 242) Note over Core,Browser: ReAct 循环:逐步执行,每步评估 loop 针对每个拆解步骤(Step 1..N) Core->>Sandbox: Act:加载当前步骤对应的 Skill Sandbox->>Browser: 执行 BrowserAction(操作页面) Browser-->>Sandbox: 返回页面反馈(Observation) Sandbox-->>Core: Skill 执行结果 Core->>Memory: 写入 L1 短期记忆(RingBuffer) Core->>LLM: Critic 评估:当前步骤是否成功? LLM-->>Core: 决断:✅ 继续下一步 / ⚠️ 纠错重试 end end Core->>LLM: 汇总所有步骤结果,生成最终报告 LLM-->>Core: 输出多维度财报对比分析 Core->>Memory: 将成功路径写入 L2 长期记忆(SQLite) Core-->>UI: 返回完整分析报告 UI-->>U: 界面展示多维度对比结果 ✅