Files
MineNasAI/设计文档.md

19 KiB
Raw Permalink Blame History

MineNASAI 设计文档

项目名称: MineNASAI 版本: v1.0-design 创建日期: 2025-02-03 目标: 基于NAS的智能个人AI助理支持企业微信/飞书通讯集成Claude Code CLI编程能力


1. 项目概述

1.1 目标

构建一个自我进化的个人全能AI助理,具备以下核心能力:

  • 多渠道通讯: 企业微信、飞书(可扩展)
  • 强权限操作: 对NAS环境拥有足够权限
  • 编程能力: 唤起Claude Code CLI进行复杂编程
  • 快速验证: Python解释器直接验证简单任务
  • 工具扩展: 支持MCP Server、Skills插件
  • 联网能力: 搜索查询、API调用
  • 自主运行: 定时任务、主动触发
  • 多Agent协作: 复杂任务多Agent讨论

1.2 设计原则

  • 智能分流: 简单任务快速处理,复杂任务深度分析
  • 用户可控: 智能路由默认行为,用户可显式覆盖
  • 安全优先: 沙箱隔离、权限分级、审计日志
  • 可扩展: MCP/Skills插件化架构

2. 整体架构

┌─────────────────────────────────────────────────────────────────────────┐
│                        通讯接入层 (Channels)                             │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐                   │
│  │ 企业微信Bot   │  │  飞书Bot     │  │ Web UI(预留) │                   │
│  │ (Webhook)    │  │ (Webhook)    │  │             │                   │
│  └──────────────┘  └──────────────┘  └──────────────┘                   │
└─────────────────────────────┬───────────────────────────────────────────┘
                              │
┌─────────────────────────────┴───────────────────────────────────────────┐
│                    Gateway 服务 (FastAPI)                                │
│  - WebSocket协议 (类OpenClaw协议设计)                                    │
│  - 消息队列/流控/重试                                                     │
│  - 设备配对/权限验证                                                      │
│  - 事件分发 (agent/chat/presence/cron)                                  │
└─────────────────────────────┬───────────────────────────────────────────┘
                              │
┌─────────────────────────────┴───────────────────────────────────────────┐
│                   智能路由层 (SmartRouter)                               │
│  - 任务复杂度评估 (token预估/工具需求分析)                               │
│  - 单/多Agent决策                                                        │
│  - 快速通道 vs 深度讨论                                                   │
│  - 用户指令覆盖 (/快速 /深度 /确认)                                     │
└─────────────────────────────┬───────────────────────────────────────────┘
                              │
┌─────────────────────────────┴───────────────────────────────────────────┐
│                  工具管理层 (ToolManager)                                │
│  ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐           │
│  │   MCP      │ │  Skills    │ │ 系统命令    │ │Claude Code │           │
│  │  Server    │ │  插件化     │ │  封装      │ │  CLI桥接   │           │
│  │ (动态加载) │ │(AgentSkills)│ │(权限分级)  │ │ (编程任务) │           │
│  └────────────┘ └────────────┘ └────────────┘ └────────────┘           │
│         ↓ 权限白名单 / 危险操作确认 / 执行日志 / 沙箱隔离                │
└─────────────────────────────┬───────────────────────────────────────────┘
                              │
         ┌────────────────────┼────────────────────┐
         ↓                    ↓                    ↓
   ┌─────────────┐     ┌─────────────┐     ┌─────────────┐
   │快速执行通道  │     │深度讨论组   │     │定时任务器   │
   │Python直验   │     │多Agent协作  │     │Cron触发     │
   │沙箱执行     │     │Sub-agents  │     │自主任务     │
   └─────────────┘     └─────────────┘     └─────────────┘
                              │
┌─────────────────────────────┴───────────────────────────────────────────┐
│                       信息三层架构                                        │
│  ┌──────────┐  ┌──────────┐  ┌──────────────────────────────────────┐   │
│  │记忆层     │  │ 知识库层  │  │ 文件索引 + Web搜索                  │   │
│  │(对话上下) │  │(RAG向量) │  │ NAS文件 │                          │   │
│  │Session    │  │Qdrant     │  │                                         │   │
│  └──────────┘  └──────────┘  └──────────────────────────────────────┘   │
└───────────────────────────────────────────────────────────────────────────┘

3. 技术选型

层级 技术选择 说明
后端框架 FastAPI (Python) WebSocket支持、异步高性能、类型安全
Agent Runtime Anthropic SDK 直接API调用稳定可靠
消息队列 Redis + Celery 任务调度、定时任务、并发控制
通讯接入 企业微信API + 飞书API Webhook回调支持应用消息/机器人
HTTPS Caddy 自动HTTPS配合lucky转发
工具层 内置工具 + MCP(可选) 简化实现,后期可扩展
Claude集成 Anthropic API + Web TUI 简单任务用API复杂任务用Web终端
Web终端 xterm.js + WebSocket Web前端终端模拟器
SSH连接 paramiko (Python) SSH客户端库连接localhost
Python沙箱 Docker / restricted Python 隔离执行
向量数据库 Qdrant (可选) 轻量、高性能Phase 2
文件索引 基础文件系统 (可选) Phase 2扩展
存储 SQLite + JSONL 配置、状态、会话
日志 structured JSON + logrotate 结构化日志

4. 数据流设计

4.1 消息处理流程(企业微信/飞书)

企业微信/飞书消息 → Gateway WebSocket接收
                 ↓
            消息网关 (解析/去重/用户识别)
                 ↓
            智能路由 (复杂度评估)
         ↙          ↘          ↘
    快速查询        中等任务     编程任务
      ↓              ↓            ↓
  Python沙箱    → 单Agent    → 通知用户
  直接执行          执行        "请用TUI处理"
      ↓              ↓
      └───────→ 结果聚合
                 ↓
            知识库更新 (RAG入库)
                 ↓
            回传通讯工具

4.2 Web TUI + SSH 编程流程(推荐方案)

用户收到消息提示
    ↓
"此任务需要在Web TUI中处理"
    ↓
用户点击链接 → 打开Web界面
    ↓
    ┌───────────────────────────────────┐
    │  Web Terminal (xterm.js)         │
    │      ↓                            │
    │  WebSocket连接后端                │
    │      ↓                            │
    │  SSH连接 localhost (NAS自身)     │
    │      ↓                            │
    │  $ claude "实现一个xxx功能"       │
    │  → Claude分析/编码/执行           │
    │  → 实时输出显示在Web终端          │
    │  → 用户直接在浏览器中交互         │
    └───────────────────────────────────┘
    ↓
完成 → (可选)结果同步到知识库

核心优势:

  • 无需进程间通信 - 避免subprocess的所有问题
  • 完整CLI能力 - 用户直接与Claude CLI交互
  • 实现简单 - 成熟的Web终端方案xterm.js
  • 权限隔离 - SSH本身提供隔离机制
  • 跨平台访问 - 浏览器即可使用

4.3 双界面模式

界面 用途 技术方案 示例
通讯工具 日常交互/简单任务 Anthropic API "NAS状态?"、"搜索xxx"、"定时提醒"
Web TUI 深度编程/复杂项目 xterm.js + SSH + Claude CLI "重构这个模块"、"实现新功能"、"调试问题"

5. 核心组件

5.1 Gateway核心模块

src/gateway/
├── __init__.py
├── server.py              # WebSocket服务器入口
├── protocol/              # 协议定义
│   ├── schema.py          # TypeBox/JSON Schema
│   └── frames.py          # 帧构造/解析
├── channels/              # 通讯渠道
│   ├── __init__.py
│   ├── base.py            # 基类
│   ├── wework.py          # 企业微信
│   └── feishu.py          # 飞书
├── router.py              # 智能路由
├── tool_registry.py       # 内置工具注册
├── anthropic_client.py    # Anthropic API客户端
├── session_manager.py     # 会话管理
└── scheduler.py           # 定时任务

5.2 Agent Runtime

src/agent/
├── __init__.py
├── runtime.py             # Agent运行时
├── tools/                 # 内置工具
│   ├── read.py
│   ├── exec.py
│   ├── python.py          # Python沙箱
│   └── web_search.py
├── memory.py              # 记忆管理
├── knowledge.py           # RAG知识库
└── subagent.py            # Sub-agent支持

5.3 Web TUI界面

src/webtui/
├── __init__.py
├── server.py              # WebSocket服务器终端通信
├── static/                # 前端静态文件
│   ├── index.html         # Web终端页面
│   ├── xterm.css          # xterm.js样式
│   └── app.js             # 前端逻辑
├── ssh_manager.py         # SSH连接管理paramiko
└── auth.py                # 用户认证

实现细节:

  • 前端: xterm.js创建Web终端
  • 通信: WebSocket双向传输终端I/O
  • 后端: paramiko连接SSH到localhost
  • 认证: 基于Token或Session的用户验证

5.4 文件结构

~/.config/minenasai/
├── config.json5           # 主配置文件
├── database.db            # SQLite数据库
├── workspace/             # 主Agent工作目录
│   ├── skills/            # 自定义Skills
│   ├── AGENTS.md          # Agent指令/记忆
│   ├── SOUL.md            # 人格/边界
│   └── TOOLS.md           # 工具使用规范
├── agents/                # 多Agent状态
│   └── <agentId>/
│       ├── sessions/      # JSONL对话历史
│       └── auth.json      # 认证配置
├── skills/                # 共享Skills
├── knowledge/             # Qdrant数据目录
├── logs/                  # 日志文件
│   ├── gateway.log
│   └── audit.jsonl
└── mcp-servers/           # MCP Server配置
    └── config.json

6. 数据模型

6.1 SQLite Schema

-- Agents表
CREATE TABLE agents (
    id TEXT PRIMARY KEY,
    name TEXT NOT NULL,
    workspace_path TEXT NOT NULL,
    model TEXT DEFAULT 'anthropic/claude-sonnet-4-5',
    sandbox_mode TEXT DEFAULT 'workspace',
    created_at INTEGER,
    updated_at INTEGER
);

-- Sessions表
CREATE TABLE sessions (
    id TEXT PRIMARY KEY,
    agent_id TEXT REFERENCES agents(id),
    channel TEXT,               -- 'wework', 'feishu', 'tui'
    peer_id TEXT,               -- 用户ID
    session_key TEXT,           -- agent:main:xxx
    status TEXT DEFAULT 'active',
    created_at INTEGER,
    updated_at INTEGER,
    metadata JSON               -- 扩展字段
);

-- Messages表轻量详细在JSONL
CREATE TABLE messages (
    id TEXT PRIMARY KEY,
    session_id TEXT REFERENCES sessions(id),
    role TEXT NOT NULL,         -- 'user', 'assistant', 'system'
    content TEXT,
    tool_calls JSON,
    timestamp INTEGER,
    tokens_used INTEGER
);

-- Cron任务表
CREATE TABLE cron_jobs (
    id TEXT PRIMARY KEY,
    agent_id TEXT REFERENCES agents(id),
    name TEXT NOT NULL,
    schedule TEXT NOT NULL,     -- cron表达式
    task TEXT NOT NULL,
    enabled BOOLEAN DEFAULT 1,
    last_run INTEGER,
    next_run INTEGER
);

-- 审计日志表
CREATE TABLE audit_logs (
    id TEXT PRIMARY KEY,
    agent_id TEXT,
    tool_name TEXT NOT NULL,
    danger_level TEXT,
    params JSON,
    result TEXT,
    duration_ms INTEGER,
    timestamp INTEGER
);

7. 权限与安全控制

7.1 权限分级

DANGER_LEVELS = {
    "safe": [],              # 只读操作:查询文件、读取状态
    "low": ["read"],         # 低风险写入工作目录、Python验证
    "medium": ["exec"],      # 中风险系统命令、Docker操作
    "high": [],              # 高风险:删除文件、系统配置
    "critical": []           # 极高危:格式化磁盘、清空数据库
}

7.2 确认策略

等级 处理方式
safe/low 自动执行
medium AI评估后决定
high/critical 强制用户确认

7.3 沙箱隔离

  • Python快速验证restricted Python或Docker容器
  • MCP Server独立进程运行限资源/网络
  • Claude Code CLI指定工作目录限制可访问路径

7.4 配置示例

{
  agents: {
    list: [
      {
        id: "main",
        tools: {
          allow: ["read", "python", "web_search", "claude_cli"],
          deny: ["delete", "system_config"],
        },
        sandbox: {
          mode: "workspace",
        },
      },
    ],
  },
}

8. 代理服务支持

8.1 代理配置

PROXY_CONFIG = {
    "enabled": true,
    "mode": "system",
    "system": {
        "http_proxy": "http://127.0.0.1:7890",
        "https_proxy": "http://127.0.0.1:7890",
        "no_proxy": "localhost,127.0.0.1,.local",
    },
    "api_specific": {
        "anthropic": "http://127.0.0.1:7890",
        "openai": "http://127.0.0.1:7890",
        "github": "http://127.0.0.1:7890",
    },
    "auto_detect": true,
    "fallback_ports": [7890, 7891, 1080, 1087, 10808],
}

8.2 代理支持场景

  • LLM API调用
  • MCP Server
  • Web搜索
  • ClawHub同步
  • Git操作

9. 错误处理与容错

9.1 错误分类

ERROR_HANDLING = {
    "retryable": [
        "network_timeout", "api_rate_limit",
        "mcp_unavailable", "proxy_timeout",
    ],
    "degrade": [
        "vector_db_down", "web_search_fail",
        "claude_cli_timeout", "proxy_unavailable",
    ],
    "critical": [
        "auth_failed", "sandbox_escape",
        "disk_full", "proxy_auth_failed",
    ],
}

9.2 重试策略

  • 指数退避1s → 2s → 4s → 8s最多3次
  • Circuit Breaker连续失败后暂停5分钟

9.3 优雅降级

  • RAG离线 → 直接对话
  • MCP挂了 → 其他MCP继续
  • Claude CLI不可用 → 通知用户

10. 实现路线图

Phase 1核心框架MVP

  • Gateway基础服务 + WebSocket协议
  • 企业微信/飞书通讯接入
  • 智能路由基础逻辑
  • Python沙箱执行
  • 基础配置管理

Phase 2工具与知识库

  • MCP Server动态加载
  • Skills系统AgentSkills兼容
  • RAG向量库集成
  • NAS文件索引

Phase 3Web TUI与Claude集成

  • Anthropic API集成日常任务
  • xterm.js Web终端界面
  • SSH连接管理paramiko
  • WebSocket终端通信
  • 用户认证与会话

Phase 4高级特性

  • 多Agent协作Sub-agents
  • 定时任务调度器
  • 主动任务触发

Phase 5生产就绪

  • 完整权限控制
  • 审计日志
  • 错误处理与监控
  • Docker部署

11. 技术栈总结

层级 技术选择
Gateway FastAPI + WebSocket
通讯 企业微信API + 飞书API
Agent Anthropic SDK
Claude集成 API简单任务+ Web TUI复杂任务
Web终端 xterm.js + paramiko SSH
工具 内置工具可扩展MCP
存储 SQLite + JSONL
队列 Redis + Celery
代理 system/http(s)_proxy

附录:参考项目

  • OpenClaw: Gateway架构、AgentSkills、多Agent设计
  • Claude Code: CLI集成、工具调用模式
  • FastMCP: MCP Server开发框架

文档版本: v1.0 最后更新: 2025-02-03