Skip to content

分层架构

ChatAI Plugin 采用三层架构设计:应用层、服务层、核心层。

层次图

┌─────────────────────────────────────────┐
│              应用层 (Apps)               │
│  消息监听、命令处理、事件响应             │
├─────────────────────────────────────────┤
│              服务层 (Services)           │
│  业务逻辑、API 服务、工具代理             │
├─────────────────────────────────────────┤
│              核心层 (Core)               │
│  LLM 适配器、缓存、工具函数               │
└─────────────────────────────────────────┘

应用层 (Apps)

应用层处理用户交互,包括消息监听和命令响应。

主要模块

模块文件职责
chatapps/chat.js聊天消息处理
ChatListenerapps/ChatListener.js消息监听与触发判断
Managementapps/Management.js管理命令处理

处理流程

消息事件 → ChatListener → 触发判断 → chat.js → 响应

代码示例

javascript
// apps/ChatListener.js
export class ChatListener extends plugin {
  constructor() {
    super({
      name: 'ChatAI-Listener',
      event: 'message',
      priority: 100
    })
  }

  async accept(e) {
    // 触发条件检查
    if (!this.shouldTrigger(e)) return false
    
    // 调用聊天处理
    return await handleChat(e)
  }
}

服务层 (Services)

服务层封装业务逻辑,提供统一的服务接口。

主要服务

服务目录职责
LLM 服务services/llm/AI 模型调用
Agent 服务services/agent/技能代理
存储服务services/storage/数据持久化
Web 服务services/webServer.jsHTTP API
路由services/routes/API 路由定义

ChatService

javascript
// services/llm/ChatService.js
export class ChatService {
  async chat(options) {
    const { messages, model, tools } = options
    
    // 1. 获取适配器
    const adapter = this.getAdapter(model)
    
    // 2. 构建请求
    const request = this.buildRequest(messages, tools)
    
    // 3. 发送请求
    const response = await adapter.chat(request)
    
    // 4. 处理工具调用
    if (response.toolCalls) {
      return await this.handleToolCalls(response)
    }
    
    return response
  }
}

SkillsAgent

javascript
// services/agent/SkillsAgent.js
export class SkillsAgent {
  // 获取可执行技能
  getExecutableSkills() {
    // 应用权限过滤
    return this.filterByPermission(this.allTools)
  }
  
  // 执行技能
  async execute(skillName, args) {
    // 权限检查
    this.checkPermission(skillName)
    
    // 参数填充
    args = this.fillAutoParams(args)
    
    // 调用 MCP
    return await McpManager.callTool(skillName, args)
  }
}

核心层 (Core)

核心层提供基础设施和通用能力。

主要模块

模块目录职责
适配器core/adapters/LLM API 适配
缓存core/cache/Redis/内存缓存
工具core/utils/通用工具函数

适配器模式

javascript
// core/adapters/BaseAdapter.js
export class BaseAdapter {
  async chat(request) {
    throw new Error('Not implemented')
  }
  
  async stream(request, callback) {
    throw new Error('Not implemented')
  }
}

// core/adapters/OpenAIAdapter.js
export class OpenAIAdapter extends BaseAdapter {
  async chat(request) {
    return await this.client.chat.completions.create(request)
  }
}

层间通信

依赖规则

应用层 → 服务层 → 核心层
   ↓         ↓
   └────→ 核心层
  • 上层可以依赖下层
  • 下层不能依赖上层
  • 同层之间通过接口通信

事件机制

层间可以通过事件进行解耦通信:

javascript
// 发布事件
EventEmitter.emit('tool:executed', { name, result })

// 订阅事件
EventEmitter.on('tool:executed', (data) => {
  // 记录日志
})

模块依赖

mermaid
graph TD
    Apps[应用层] --> Services[服务层]
    Services --> Core[核心层]
    Services --> MCP[MCP 系统]
    MCP --> Core

扩展点

扩展点位置说明
LLM 适配器core/adapters/支持新的 AI 模型
内置工具src/mcp/tools/添加新的工具类别
自定义工具data/tools/用户自定义工具
API 路由services/routes/扩展 API 接口

下一步

基于 MIT 许可发布