Skip to content

Agent 架构图解

图 1: 整体分层架构

┌────────────────────────────────────────────────────────────────────────┐
│                          用户层 (User Layer)                           │
│                   CLI / TUI / Web API / MCP                            │
└────────────────────────────────────────────────────────────────────────┘


┌────────────────────────────────────────────────────────────────────────┐
│                     SessionPrompt 层                                    │
│  ┌─────────────────────────────────────────────────────────────────┐  │
│  │  prompt() ──▶ createUserMessage() ──▶ loop()                    │  │
│  │                                                                  │  │
│  │  ┌──────────┐   ┌──────────┐   ┌──────────┐   ┌──────────┐   │  │
│  │  │ Agent    │   │ Message  │   │ Prompt   │   │ Instruction│   │  │
│  │  │ Selection │   │ Creation │   │ Resolve  │   │  Inject   │   │  │
│  │  └──────────┘   └──────────┘   └──────────┘   └──────────┘   │  │
│  └─────────────────────────────────────────────────────────────────┘  │
└────────────────────────────────────────────────────────────────────────┘

                    ┌───────────────┼───────────────┐
                    │               │               │
                    ▼               ▼               ▼
         ┌──────────────────┐ ┌──────────┐ ┌──────────────────┐
         │  Subtask Handler │ │Compaction│ │  Normal Handler  │
         │  (子Agent调用)    │ │(压缩)    │ │                  │
         └────────┬─────────┘ └────┬─────┘ └────────┬─────────┘
                  │                │                │
                  ▼                │                ▼
         ┌──────────────────┐       │      ┌──────────────────┐
         │  TaskTool       │       │      │SessionProcessor  │
         │  .execute()     │       │      │  .process()      │
         └────────┬─────────┘       │      └────────┬─────────┘
                  │                 │               │
                  ▼                 │               ▼
         ┌──────────────────┐       │      ┌──────────────────┐
         │ 子Session 创建   │       │      │   LLM.stream()   │
         │ + 递归 prompt()  │       │      └────────┬─────────┘
         └──────────────────┘       │               │
                                     │               ▼
                                     │      ┌──────────────────┐
                                     │      │  ToolRegistry    │
                                     │      │  工具解析        │
                                     │      └────────┬─────────┘
                                     │               │
                                     │       ┌───────┴───────┐
                                     │       ▼               ▼
                                     │  ┌──────────┐   ┌──────────┐
                                     │  │ 内置工具 │   │ MCP工具  │
                                     │  │Bash/Edit │   │ Server   │
                                     │  │Read/Grep │   │ Tools    │
                                     │  └──────────┘   └──────────┘

└─────────────────────────────────────┴─────────────────────────────────┘


┌────────────────────────────────────────────────────────────────────────┐
│                        Storage 层 (MessageV2)                          │
│              Session.messages / Session.updateMessage                   │
└────────────────────────────────────────────────────────────────────────┘

图 2: 主子 Agent 调度流程

┌─────────────────────────────────────────────────────────────────────────┐
│                        主 Agent 调度时序图                              │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  用户          会话           Agent            TaskTool        子Agent  │
│   │             │              │                │               │      │
│   │ 输入消息    │              │                │               │      │
│   │────────────▶│              │                │               │      │
│   │             │              │                │               │      │
│   │             │ prompt()     │                │               │      │
│   │             │──────────────▶                │               │      │
│   │             │              │                │               │      │
│   │             │              │ loop()         │               │      │
│   │             │              │────┐           │               │      │
│   │             │              │    │           │               │      │
│   │             │              │◀───┘ 循环      │               │      │
│   │             │              │                │               │      │
│   │             │              │ LLM决定调用    │               │      │
│   │             │              │ @explore       │               │      │
│   │             │              │                │               │      │
│   │             │              │ execute()      │               │      │
│   │             │              │───────────────▶               │      │
│   │             │              │                │               │      │
│   │             │              │                │ 1.权限检查    │      │
│   │             │              │                │─────────────▶│      │
│   │             │              │                │               │      │
│   │             │              │                │ 2.创建子Session│     │
│   │             │              │                │─────────────▶│      │
│   │             │              │                │               │      │
│   │             │              │                │ prompt()      │      │
│   │             │              │                │──────────────▶│      │
│   │             │              │                │               │      │
│   │             │              │                │               │ ◀────│
│   │             │              │                │   子Agent执行  │
│   │             │              │                │               │ ────▶│
│   │             │              │                │               │      │
│   │             │              │                │◀───────────────│      │
│   │             │              │                │ 3.返回结果     │
│   │             │              │◀───────────────│               │      │
│   │             │              │                │               │      │
│   │             │              │ 继续循环处理    │               │      │
│   │             │              │────┐           │               │      │
│   │             │              │    │           │               │      │
│   │             │              │◀───┘           │               │      │
│   │             │              │                │               │      │
│   │ 返回结果    │              │                │               │      │
│   │◀────────────│              │                │               │      │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

图 3: Session 与 Agent 关系

┌─────────────────────────────────────────────────────────────────────────┐
│                          Session 层级结构                               │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ Root Session (sess_root_xxx)                                    │   │
│  │                                                                 │   │
│  │  agent: "build" (主 Agent)                                      │   │
│  │  parentID: undefined                                            │   │
│  │                                                                 │   │
│  │  ┌─────────────────────────────────────────────────────────┐   │   │
│  │  │ Message: user                                           │   │   │
│  │  │   agent: "build"                                        │   │   │
│  │  │   parts: [                                              │   │   │
│  │  │     { type: "text", text: "帮我搜索代码..." },          │   │   │
│  │  │     { type: "subtask", agent: "explore", prompt: "..." } │   │   │
│  │  │   ]                                                     │   │   │
│  │  └─────────────────────────────────────────────────────────┘   │   │
│  │                                                                 │   │
│  │  ┌─────────────────────────────────────────────────────────┐   │   │
│  │  │ Message: assistant                                      │   │   │
│  │  │   agent: "build"                                        │   │   │
│  │  │   parts: [                                              │   │   │
│  │  │     { type: "tool", tool: "task",                       │   │   │
│  │  │       state: { status: "completed", output: "..." } }  │   │   │
│  │  │   ]                                                     │   │   │
│  │  └─────────────────────────────────────────────────────────┘   │   │
│  │                                                                 │   │
│  └─────────────────────────────┬───────────────────────────────────┘   │
│                                │                                        │
│                                │ Session.parentID                       │
│                                ▼                                        │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ Child Session (sess_child_yyy) ─── 由 TaskTool 创建              │   │
│  │                                                                 │   │
│  │  agent: "explore" (子 Agent)                                    │   │
│  │  parentID: "sess_root_xxx"  ◀── 关联父会话                      │   │
│  │                                                                 │   │
│  │  ┌─────────────────────────────────────────────────────────┐   │   │
│  │  │ Message: user                                           │   │   │
│  │  │   agent: "explore"                                      │   │   │
│  │  │   parts: [                                              │   │   │
│  │  │     { type: "text", text: "搜索代码..." }               │   │   │
│  │  │   ]                                                     │   │   │
│  │  └─────────────────────────────────────────────────────────┘   │   │
│  │                                                                 │   │
│  │  ┌─────────────────────────────────────────────────────────┐   │   │
│  │  │ Message: assistant                                      │   │   │
│  │  │   agent: "explore"                                      │   │   │
│  │  │   parts: [ ... 搜索结果 ... ]                          │   │   │
│  │  └─────────────────────────────────────────────────────────┘   │   │
│  │                                                                 │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

图 4: 权限检查流程

┌─────────────────────────────────────────────────────────────────────────┐
│                       PermissionNext 权限流程                            │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  ┌───────────────┐                                                     │
│  │ Tool 执行请求  │                                                     │
│  └───────┬───────┘                                                     │
│          │                                                             │
│          ▼                                                             │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │  PermissionNext.ask({                                            │   │
│  │    permission: "bash",                                          │   │
│  │    patterns: ["/tmp/test.sh"],                                   │   │
│  │    ruleset: [agent.permission, session.permission]                │   │
│  │  })                                                              │   │
│  └───────┬───────────────────────────────────────────────────────────┘   │
│          │                                                             │
│          ▼                                                             │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │  evaluate("bash", "/tmp/test.sh", ...ruleset)                    │   │
│  │                                                                 │   │
│  │  1. 合并 ruleset                                                │   │
│  │  2. findLast() 从后往前找匹配的规则                              │   │
│  │     ┌─────────────────────────────────────────────────────┐     │   │
│  │     │ Agent.permission:                                    │     │   │
│  │     │   { permission: "bash", pattern: "*", action: "ask" }│     │   │
│  │     │   { permission: "edit", pattern: "*", action: "deny" }│     │   │
│  │     │                                                       │     │   │
│  │     │ Session.permission:                                   │     │   │
│  │     │   { permission: "bash", pattern: "/tmp/*", action: "allow" }│   │
│  │     │                                                       │     │   │
│  │     │ 合并后 findLast("bash", "/tmp/test.sh")              │     │   │
│  │     │   → { permission: "bash", pattern: "/tmp/*", action: "allow" }│ │
│  │     │   (因为是最后一个匹配,且 /tmp/* 匹配 /tmp/test.sh)    │     │   │
│  │     └─────────────────────────────────────────────────────┘     │   │
│  └───────┬───────────────────────────────────────────────────────────┘   │
│          │                                                             │
│          ▼                                                             │
│  ┌───────────────┐     ┌───────────────┐     ┌───────────────┐       │
│  │ action =      │     │ action =      │     │ action =      │       │
│  │ "allow"       │     │ "ask"         │     │ "deny"        │       │
│  └───────┬───────┘     └───────┬───────┘     └───────┬───────┘       │
│          │                     │                     │                 │
│          ▼                     ▼                     ▼                 │
│  ┌───────────────┐     ┌───────────────┐     ┌───────────────┐       │
│  │ 直接执行工具   │     │ 弹出用户确认   │     │ 抛出错误      │       │
│  │               │     │                │     │ DeniedError   │       │
│  │ ┌───────────┐ │     │ ┌───────────┐ │     │               │       │
│  │ │ bash tool │ │     │ │ ┌───────┐ │ │     │ ┌───────────┐ │       │
│  │ │ .execute()│ │     │ │ │ Allow?│ │ │     │ │ Error:    │ │       │
│  │ └───────────┘ │     │ │ │Once│All│ │ │     │ │ Permission│ │       │
│  │               │     │ │ └───────┘ │ │     │ │ denied    │ │       │
│  │               │     │ └───────────┘ │     │ └───────────┘ │       │
│  └───────────────┘     └───────┬───────┘     └───────────────┘       │
│                                │                                     │
│                     ┌──────────┴──────────┐                          │
│                     │                     │                          │
│                     ▼                     ▼                          │
│              ┌───────────────┐     ┌───────────────┐               │
│              │ 用户选择 Allow │     │ 用户选择 Deny │               │
│              │ 记住选项       │     │               │               │
│              └───────────────┘     └───────────────┘               │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

图 5: Loop 循环状态机

┌─────────────────────────────────────────────────────────────────────────┐
│                      SessionPrompt.loop() 状态机                        │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│                          ┌─────────────┐                                │
│                          │   START     │                                │
│                          └──────┬──────┘                                │
│                                 │                                        │
│                                 ▼                                        │
│                    ┌────────────────────────┐                           │
│                    │  1. 加载消息历史       │                           │
│                    │ 2. 提取 user/assistant │                           │
│                    │ 3. 查找 pending tasks  │                           │
│                    └───────────┬────────────┘                           │
│                                │                                        │
│                                ▼                                        │
│                    ┌────────────────────────┐                           │
│                    │   检测 Subtask?        │                           │
│                    └───────────┬────────────┘                           │
│                           ┌────┴────┐                                    │
│                          Yes      No                                     │
│                           │       │                                     │
│                           ▼       │                                     │
│                    ┌─────────────┐ │                                    │
│                    │ executeTask │ │                                    │
│                    │ (调用子Agent) │                                    │
│                    └──────┬──────┘ │                                    │
│                           │       │                                     │
│                           │       │                                     │
│                           ▼       │                                     │
│                    ┌────────────────────────┐                           │
│                    │   检测 Compaction?     │                           │
│                    └───────────┬────────────┘                           │
│                           ┌────┴────┐                                    │
│                          Yes      No                                     │
│                           │       │                                     │
│                           ▼       │                                     │
│                    ┌─────────────┐ │                                    │
│                    │  doCompact  │ │                                    │
│                    │ (上下文压缩) │ │                                    │
│                    └──────┬──────┘ │                                    │
│                           │       │                                     │
│                           │       │                                     │
│                           ▼       │                                     │
│                    ┌────────────────────────┐                           │
│                    │   检测 Overflow?       │                           │
│                    │ (token超限)           │                           │
│                    └───────────┬────────────┘                           │
│                           ┌────┴────┐                                    │
│                          Yes      No                                     │
│                           │       │                                     │
│                           ▼       │                                     │
│                    ┌─────────────┐ │                                    │
│                    │ createAuto   │ │                                    │
│                    │ Compaction   │ │                                    │
│                    └──────┬──────┘ │                                    │
│                           │       │                                     │
│                           │       │                                     │
│                           ▼       │                                     │
│                    ┌────────────────────────┐                           │
│                    │   正常处理流程         │                           │
│                    │                       │                           │
│                    │ ┌───────────────────┐ │                           │
│                    │ │ resolveTools()    │ │                           │
│                    │ │ SessionProcessor  │ │                           │
│                    │ │   .process()     │ │                           │
│                    │ │       │          │ │                           │
│                    │ │   ┌───┴───┐      │ │                           │
│                    │ │   ▼       ▼      │ │                           │
│                    │ │ LLM    工具     │ │                           │
│                    │ │       执行      │ │                           │
│                    │ └───────────────────┘ │                           │
│                    └───────────┬────────────┘                           │
│                                │                                        │
│                    ┌───────────┴───────────┐                           │
│                    │                       │                           │
│                    ▼                       ▼                           │
│           ┌─────────────┐         ┌─────────────┐                       │
│           │ result =    │         │ result =    │                       │
│           │ "stop"      │         │ "continue"   │                       │
│           └──────┬──────┘         └──────┬──────┘                       │
│                  │                       │                              │
│                  ▼                       ▼                              │
│           ┌─────────────┐         ┌─────────────┐                       │
│           │   END       │         │  继续循环   │                       │
│           │ (loop结束)  │         │  step++     │                       │
│           └─────────────┘         └──────┬──────┘                       │
│                                         │                               │
│                                         └───────────────────────────────┘

架构图版本: 1.0 生成时间: 2026-03-28