# 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: 界面展示多维度对比结果 ✅