Skip to main content

架构概览

PilotDeck 采用分层模块化架构,每个模块职责清晰、接口明确。以下从上到下介绍整体架构。

系统全景

User Interaction LayerCLIChannelTUIChannelWeb UIChannelDesktopElectronFeishuChannelGatewayWS / HTTPMessage Gateway LayerSessionRouterCreate / Find / ManageSession Routing LayerAgentSessionTurnRunnerAgentLoopAgent Runtime LayerRouterModelContextMemoryToolSessionStore

模块清单

PilotDeck 的 src/ 目录包含以下核心模块:

模块目录职责
Adapterssrc/adapters/Channel 适配器(CLI、TUI、Feishu)和 Web 静态资源挂载
Agentsrc/agent/AgentSession、TurnRunner、AgentLoop —— Agent 执行引擎
Always-Onsrc/always-on/Discovery 主动发现运行时
CLIsrc/cli/命令行入口(server、tui、cron 子命令)
Contextsrc/context/Prompt 组装、消息投影、Token 预算、Compaction、Memory
Cronsrc/cron/定时任务运行时
Extensionsrc/extension/生命周期 Hooks、Plugins、贡献注册
Gatewaysrc/gateway/In-Process / WebSocket Gateway 与 SessionRouter
Lifecyclesrc/lifecycle/生命周期运行时和 Hook 效果处理
MCPsrc/mcp/Model Context Protocol 客户端集成
Modelsrc/model/标准模型协议、Provider 适配器、流式处理
Permissionsrc/permission/权限策略和决策运行时
Pilotsrc/pilot/路径管理和配置加载
Routersrc/router/场景路由、Fallback、TokenSaver、自定义路由器
Sessionsrc/session/Transcript 读写、会话元数据、会话列表、恢复
Tasksrc/task/后台任务管理
Toolsrc/tool/工具注册、运行时、内置工具、调度器
Websrc/web/Web 静态资源服务

Agent 执行层

Agent 执行层是 PilotDeck 的核心引擎,负责处理每一轮对话。

AgentSession

AgentSession 是单个会话的运行时容器,管理:

  • 对话历史 (Transcript)
  • 上下文状态 (Context)
  • 工具注册 (ToolRegistry)
  • 模型路由 (Router)

TurnRunner

TurnRunner 管理单个 Turn 的完整生命周期:

用户输入


┌─────────────────┐
│ 上下文准备 │ ← PromptAssembler + MessageProjector + MemoryResolver
└────────┬────────┘


┌─────────────────┐
│ 模型路由决策 │ ← Router.decide()
└────────┬────────┘


┌─────────────────┐
│ 模型请求执行 │ ← Router.execute() → ModelRuntime.stream()
└────────┬────────┘


┌─────────────────┐
│ 工具调用处理 │ ← ToolRuntime.execute() (可能循环多次)
└────────┬────────┘


┌─────────────────┐
│ 响应输出 │ ← 流式事件 → Gateway → Channel
└─────────────────┘

AgentLoop

AgentLoop 是 TurnRunner 内部的核心循环,处理模型的多轮工具调用:

  1. 发送请求到模型
  2. 接收模型响应(可能包含工具调用)
  3. 如果有工具调用,执行工具并将结果加入上下文
  4. 重复步骤 1-3,直到模型停止调用工具

上下文管理层

Context 模块管理 Agent 每次请求的完整上下文窗口:

┌─────────────────────────────────────┐
│ Context Runtime │
├─────────────────────────────────────┤
│ PromptAssembler │
│ ├── 核心系统指令 │
│ ├── 项目指令 (InstructionDiscovery) │
│ ├── 扩展贡献 (Skills / Commands) │
│ ├── 长期记忆 (MemoryResolver) │
│ └── 工具定义 │
├─────────────────────────────────────┤
│ MessageProjector │
│ ├── 历史消息投影 │
│ └── 上下文窗口裁剪 │
├─────────────────────────────────────┤
│ TokenBudgetManager │
│ ├── Token 计数 │
│ ├── 预算监控 │
│ └── 预警 │
├─────────────────────────────────────┤
│ CompactionEngine │
│ ├── AutoCompactionPolicy │
│ ├── MicroCompaction │
│ ├── SnipEngine │
│ └── ContextOverflowRecovery │
└─────────────────────────────────────┘

模型抽象层

Model 模块提供统一的模型协议抽象,支持多种 Provider:

Canonical Protocol

所有 Provider 的请求和响应都被转换为 PilotDeck 的 Canonical Protocol

  • CanonicalModelRequest - 统一请求格式
  • CanonicalModelEvent - 统一流式事件格式
  • CanonicalMessage - 统一消息格式
  • CanonicalUsage - 统一 Token 用量格式

支持的协议

协议Provider 示例
anthropicAnthropic API、兼容的代理
openaiOpenAI API、Azure OpenAI、DeepSeek、兼容的代理

工具系统

Tool 模块提供丰富的内置工具和扩展能力:

内置工具

工具说明
bash执行 Shell 命令
read_file读取文件内容
write_file写入文件
edit_file编辑文件(查找替换)
glob文件模式匹配
grep正则搜索
web_fetch抓取网页内容
web_search搜索引擎查询
agent创建子 Agent
ask_user_question向用户提问
structured_output结构化输出
task_create/list/output/stop后台任务管理

工具调度

支持两种调度策略:

  • ConcurrentToolScheduler:并行执行多个工具调用
  • SequentialToolScheduler:顺序执行

MCP 工具

通过 MCP (Model Context Protocol) 集成外部工具服务器:

# 通过 mcporter.json 配置 MCP 服务器
{
"mcpServers": {
"browser-agent": {
"command": "path/to/mcp-server"
}
}
}

扩展系统

Extension 模块提供插件和技能扩展机制:

  • Plugins:全局或项目级插件,可以注入生命周期 Hook
  • Skills:技能定义,提供额外的上下文和提示词
  • Contributions:扩展贡献的命令和 MCP 服务器指令