架构概述
ChatAI Plugin 采用模块化分层架构设计,本文档概述整体架构。
架构图
┌─────────────────────────────────────────────────────────────────┐
│ 业务层 (Apps) │
│ chat.js / ChatListener.js │
└─────────────────────────────┬───────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Skills Agent 层 │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ SkillsAgent - 统一技能接口、权限过滤、参数自动填充 │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────┬───────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ MCP 层 │
│ ┌───────────────┐ ┌───────────────┐ ┌───────────────────────┐ │
│ │ McpManager │ │ McpClient │ │ BuiltinMcpServer │ │
│ │ 工具注册管理 │ │ 协议传输实现 │ │ 内置工具管理 │ │
│ └───────────────┘ └───────────────┘ └───────────────────────┘ │
└─────────────────────────────┬───────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 工具实现层 │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────────┐ │
│ │ 内置工具 │ │ JS 工具 │ │ 外部 MCP 服务器 │ │
│ │ src/mcp/tools │ │ data/tools │ │ npm包/stdio/SSE/HTTP │ │
│ └──────────────┘ └──────────────┘ └──────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘核心概念
三层架构
| 层级 | 说明 | 主要模块 |
|---|---|---|
| 应用层 | 消息处理、命令响应 | apps/, ChatListener |
| 服务层 | 业务逻辑、API 服务 | services/, agent/ |
| 核心层 | 基础设施、适配器 | core/, mcp/ |
MCP 系统
MCP (Model Context Protocol) 是 Anthropic 提出的标准协议,用于定义 AI 与工具的交互:
McpManager- 统一管理所有工具来源McpClient- 支持多种传输协议(stdio/npm/SSE/HTTP)BuiltinMcpServer- 管理内置工具和自定义 JS 工具
Skills Agent
Skills Agent 是 MCP 之上的业务抽象层:
- 整合所有工具为统一的"技能"概念
- 提供权限过滤和参数自动填充
- 支持预设级别的工具访问控制
目录结构
chatgpt-plugin/
├── apps/ # 应用模块(Yunzai 插件入口)
│ ├── chat.js # 主聊天处理
│ ├── Commands.js # 命令处理
│ ├── Management.js # 管理命令
│ └── ... # 其他功能模块
├── config/ # 配置管理
├── data/ # 运行时数据
│ ├── presets/ # 预设文件
│ ├── tools/ # 自定义 JS 工具
│ ├── mcp-servers.json # MCP 服务器配置
│ └── chatai.db # SQLite 数据库
├── src/
│ ├── core/ # 核心层
│ │ ├── adapters/ # LLM 适配器
│ │ │ ├── AbstractClient.js # 抽象基类
│ │ │ ├── openai/ # OpenAI 客户端
│ │ │ ├── claude/ # Claude 客户端
│ │ │ └── gemini/ # Gemini 客户端
│ │ ├── types/ # 类型定义
│ │ └── utils/ # 工具函数
│ ├── mcp/ # MCP 系统
│ │ ├── McpManager.js # MCP 管理器
│ │ ├── McpClient.js # MCP 客户端
│ │ ├── BuiltinMcpServer.js # 内置工具服务器
│ │ └── tools/ # 内置工具(20个类别)
│ └── services/ # 服务层
│ ├── agent/ # Skills Agent
│ ├── llm/ # LLM 服务
│ ├── storage/ # 存储服务
│ ├── routes/ # API 路由
│ └── webServer.js # Web 服务
└── index.js # 插件入口核心组件
| 组件 | 文件 | 职责 |
|---|---|---|
| AbstractClient | src/core/adapters/AbstractClient.js | LLM 适配器抽象基类 |
| OpenAIClient | src/core/adapters/openai/OpenAIClient.js | OpenAI/兼容 API 客户端 |
| McpManager | src/mcp/McpManager.js | 工具注册与调用管理 |
| McpClient | src/mcp/McpClient.js | MCP 协议客户端(stdio/npm/SSE/HTTP) |
| BuiltinMcpServer | src/mcp/BuiltinMcpServer.js | 内置工具服务器与上下文管理 |
| SkillsAgent | src/services/agent/SkillsAgent.js | 技能代理与权限控制 |
| ToolFilterService | src/services/tools/ToolFilterService.js | 工具过滤服务 |
设计原则
- 模块化 - 功能解耦,独立维护
- 可扩展 - 支持自定义工具和适配器
- 标准化 - 遵循 MCP 协议规范
- 安全性 - 完善的权限控制机制
详细文档
- 分层架构 - 详细的层次结构说明
- MCP 系统 - MCP 协议实现详解
- Skills Agent - 技能代理系统
- 数据流 - 请求处理流程