chore: 更新配置文件和清理文档
This commit is contained in:
276
CLAUDE.md
Normal file
276
CLAUDE.md
Normal file
@@ -0,0 +1,276 @@
|
|||||||
|
# CLAUDE.md
|
||||||
|
|
||||||
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||||
|
|
||||||
|
## 开发命令
|
||||||
|
|
||||||
|
### 安装与设置
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 安装依赖(包含开发工具)
|
||||||
|
pip install -e ".[dev]"
|
||||||
|
|
||||||
|
# 安装 pre-commit 钩子
|
||||||
|
pre-commit install
|
||||||
|
|
||||||
|
# 复制环境变量模板
|
||||||
|
cp .env.example .env
|
||||||
|
# 编辑 .env 文件,填入至少一个 LLM API Key
|
||||||
|
```
|
||||||
|
|
||||||
|
### 代码质量
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 格式化代码
|
||||||
|
ruff format src tests
|
||||||
|
|
||||||
|
# 检查代码规范
|
||||||
|
ruff check src tests
|
||||||
|
|
||||||
|
# 类型检查
|
||||||
|
mypy src
|
||||||
|
```
|
||||||
|
|
||||||
|
### 测试
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 运行所有测试
|
||||||
|
pytest
|
||||||
|
|
||||||
|
# 带覆盖率报告
|
||||||
|
pytest --cov=minenasai
|
||||||
|
|
||||||
|
# 运行单个测试文件
|
||||||
|
pytest tests/test_core.py -v
|
||||||
|
|
||||||
|
# 运行特定测试
|
||||||
|
pytest tests/test_core.py::test_config_load -v
|
||||||
|
```
|
||||||
|
|
||||||
|
### 运行服务
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Gateway 服务(主服务)
|
||||||
|
python -m uvicorn minenasai.gateway.server:app --port 8000
|
||||||
|
|
||||||
|
# Web TUI 服务(另一个终端)
|
||||||
|
python -m uvicorn minenasai.webtui.server:app --port 8080
|
||||||
|
```
|
||||||
|
|
||||||
|
### Docker 部署
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 构建并启动所有服务
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
# 查看日志
|
||||||
|
docker-compose logs -f gateway
|
||||||
|
|
||||||
|
# 停止服务
|
||||||
|
docker-compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
## 项目架构
|
||||||
|
|
||||||
|
### 核心设计
|
||||||
|
|
||||||
|
MineNASAI 是一个基于 NAS 的智能个人 AI 助理,采用智能路由架构,根据任务复杂度自动选择最优处理方式:
|
||||||
|
|
||||||
|
1. **简单任务** → 快速执行通道(Python 沙箱)
|
||||||
|
2. **中等复杂度** → Agent 执行(多 LLM API)
|
||||||
|
3. **复杂任务** → Web TUI(SSH + 深度编程)
|
||||||
|
|
||||||
|
### 模块结构
|
||||||
|
|
||||||
|
```
|
||||||
|
src/minenasai/
|
||||||
|
├── core/ # 核心基础设施
|
||||||
|
│ ├── config.py # 配置管理(支持环境变量覆盖)
|
||||||
|
│ ├── logging.py # 结构化日志(structlog)
|
||||||
|
│ ├── database.py # 数据库(aiosqlite)
|
||||||
|
│ ├── monitoring.py # 健康检查与监控指标
|
||||||
|
│ └── cache.py # 缓存与限流
|
||||||
|
│
|
||||||
|
├── gateway/ # Gateway 服务(FastAPI)
|
||||||
|
│ ├── server.py # 主服务器
|
||||||
|
│ ├── router.py # 智能路由器(任务复杂度评估)
|
||||||
|
│ ├── protocol/ # WebSocket 消息协议
|
||||||
|
│ └── channels/ # 通讯渠道(企业微信/飞书)
|
||||||
|
│
|
||||||
|
├── llm/ # LLM 集成层
|
||||||
|
│ ├── manager.py # LLM 管理器(统一接口)
|
||||||
|
│ ├── base.py # 基础抽象
|
||||||
|
│ └── clients/ # 各提供商客户端
|
||||||
|
│ ├── anthropic.py # Claude(需代理)
|
||||||
|
│ ├── deepseek.py # DeepSeek(国内)
|
||||||
|
│ ├── zhipu.py # 智谱(国内)
|
||||||
|
│ ├── minimax.py # MiniMax(国内)
|
||||||
|
│ ├── moonshot.py # Moonshot(国内)
|
||||||
|
│ ├── openai_compat.py # OpenAI 兼容接口
|
||||||
|
│ └── gemini.py # Gemini(需代理)
|
||||||
|
│
|
||||||
|
├── agent/ # Agent 运行时
|
||||||
|
│ ├── runtime.py # Agent 执行引擎
|
||||||
|
│ ├── permissions.py # 权限与危险等级管理
|
||||||
|
│ ├── tool_registry.py # 工具注册中心
|
||||||
|
│ └── tools/ # 内置工具
|
||||||
|
│
|
||||||
|
├── webtui/ # Web TUI 服务
|
||||||
|
│ ├── server.py # TUI FastAPI 服务器
|
||||||
|
│ ├── auth.py # 会话认证
|
||||||
|
│ └── ssh_manager.py # SSH 连接管理
|
||||||
|
│
|
||||||
|
└── scheduler/ # 定时任务
|
||||||
|
└── cron.py # Cron 调度器
|
||||||
|
```
|
||||||
|
|
||||||
|
### 配置系统
|
||||||
|
|
||||||
|
配置加载优先级:**环境变量 > 配置文件 > 默认值**
|
||||||
|
|
||||||
|
- 配置文件:`config/config.json5`(JSON5 格式,支持注释)
|
||||||
|
- 环境变量前缀:`MINENASAI_`(嵌套配置使用 `__` 分隔)
|
||||||
|
- 示例:
|
||||||
|
- `MINENASAI_LLM__DEFAULT_PROVIDER=anthropic`
|
||||||
|
- `MINENASAI_PROXY__HTTP=http://127.0.0.1:7890`
|
||||||
|
|
||||||
|
关键配置项:
|
||||||
|
- `router.mode`: 路由模式(`agent` 或 `heuristic`)
|
||||||
|
- `llm.default_provider`: 默认 LLM 提供商
|
||||||
|
- `proxy.enabled`: 是否启用代理(境外 API 需要)
|
||||||
|
|
||||||
|
### 智能路由器
|
||||||
|
|
||||||
|
位置:[gateway/router.py](src/minenasai/gateway/router.py)
|
||||||
|
|
||||||
|
根据以下因素评估任务复杂度:
|
||||||
|
- 文本长度
|
||||||
|
- 关键词匹配(简单/复杂/工具关键词)
|
||||||
|
- 代码块检测
|
||||||
|
- 多步骤指令检测
|
||||||
|
|
||||||
|
支持命令前缀覆盖:
|
||||||
|
- `/快速` 或 `/简单` → 强制快速执行
|
||||||
|
- `/深度`、`/复杂` 或 `/tui` → 强制 Web TUI
|
||||||
|
|
||||||
|
## 编码规范
|
||||||
|
|
||||||
|
### 通用规范
|
||||||
|
|
||||||
|
- **必须使用中文进行交流和注释**
|
||||||
|
- 文件编码:UTF-8
|
||||||
|
- Python 3.11+
|
||||||
|
- 使用类型注解(type hints)
|
||||||
|
- Docstring 使用中文简洁说明
|
||||||
|
- 函数添加必要注释
|
||||||
|
|
||||||
|
### Git 提交规范
|
||||||
|
|
||||||
|
使用中文提交信息:
|
||||||
|
- `feat: 添加xxx功能`
|
||||||
|
- `fix: 修复xxx问题`
|
||||||
|
- `docs: 更新文档`
|
||||||
|
- `refactor: 重构xxx`
|
||||||
|
- `test: 添加测试`
|
||||||
|
|
||||||
|
### 文档规范
|
||||||
|
|
||||||
|
**重要:避免过度文档化**
|
||||||
|
|
||||||
|
- 仅在明确需要时生成文档
|
||||||
|
- 文档必须使用中文命名
|
||||||
|
- 代码优先,文档次之
|
||||||
|
- 先实现 MVP,再迭代优化
|
||||||
|
|
||||||
|
文档命名规范:
|
||||||
|
- 设计文档:`设计-[主题].md`
|
||||||
|
- 技术方案:`方案-[主题].md`
|
||||||
|
- 问题记录:`问题-[描述].md`
|
||||||
|
- 进度跟踪:`进度.md`
|
||||||
|
|
||||||
|
## LLM 提供商
|
||||||
|
|
||||||
|
### 境内 API(无需代理)
|
||||||
|
|
||||||
|
- **DeepSeek**: `deepseek-chat`
|
||||||
|
- **智谱**: `glm-4-flash`
|
||||||
|
- **MiniMax**: `abab6.5s-chat`
|
||||||
|
- **Moonshot**: `moonshot-v1-8k`
|
||||||
|
|
||||||
|
### 境外 API(需要代理)
|
||||||
|
|
||||||
|
- **Anthropic Claude**: `claude-sonnet-4-20250514`
|
||||||
|
- **OpenAI**: `gpt-4o`
|
||||||
|
- **Google Gemini**: `gemini-2.0-flash`
|
||||||
|
|
||||||
|
### 代理配置
|
||||||
|
|
||||||
|
境外 API 需要配置代理(在 `.env` 中):
|
||||||
|
```bash
|
||||||
|
MINENASAI_PROXY__ENABLED=true
|
||||||
|
MINENASAI_PROXY__HTTP=http://127.0.0.1:7890
|
||||||
|
MINENASAI_PROXY__HTTPS=http://127.0.0.1:7890
|
||||||
|
```
|
||||||
|
|
||||||
|
系统支持自动检测常见代理端口(7890, 7891, 1080, 1087, 10808)
|
||||||
|
|
||||||
|
## 测试
|
||||||
|
|
||||||
|
当前测试覆盖(131 tests):
|
||||||
|
- `test_core.py`: 配置、日志(9 tests)
|
||||||
|
- `test_gateway.py`: 协议、路由(14 tests)
|
||||||
|
- `test_llm.py`: LLM 客户端(10 tests)
|
||||||
|
- `test_monitoring.py`: 监控、健康检查(17 tests)
|
||||||
|
- `test_cache.py`: 缓存、限流(21 tests)
|
||||||
|
- `test_permissions.py`: 权限、工具注册(17 tests)
|
||||||
|
- `test_scheduler.py`: Cron 调度(15 tests)
|
||||||
|
- `test_tools.py`: 内置工具(14 tests)
|
||||||
|
- `test_webtui.py`: Web TUI(14 tests)
|
||||||
|
|
||||||
|
## API 端点
|
||||||
|
|
||||||
|
| 端点 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| `/health` | 完整健康检查 |
|
||||||
|
| `/health/live` | 存活检查(K8s) |
|
||||||
|
| `/health/ready` | 就绪检查(K8s) |
|
||||||
|
| `/metrics` | 监控指标 |
|
||||||
|
| `/ws` | WebSocket 消息通道 |
|
||||||
|
| `/api/agents` | Agent 列表 |
|
||||||
|
| `/api/sessions` | 会话列表 |
|
||||||
|
| `/webhook/wework` | 企业微信回调 |
|
||||||
|
| `/webhook/feishu` | 飞书回调 |
|
||||||
|
|
||||||
|
## 常见任务
|
||||||
|
|
||||||
|
### 添加新的 LLM 客户端
|
||||||
|
|
||||||
|
1. 在 `src/minenasai/llm/clients/` 创建新文件
|
||||||
|
2. 继承 `BaseLLMClient`([llm/base.py](src/minenasai/llm/base.py))
|
||||||
|
3. 实现 `chat()` 方法
|
||||||
|
4. 在 `llm/manager.py` 注册客户端
|
||||||
|
5. 在 `core/config.py` 添加配置字段
|
||||||
|
6. 在 `.env.example` 添加环境变量模板
|
||||||
|
|
||||||
|
### 添加新的通讯渠道
|
||||||
|
|
||||||
|
1. 在 `src/minenasai/gateway/channels/` 创建新文件
|
||||||
|
2. 继承 `BaseChannel`([channels/base.py](src/minenasai/gateway/channels/base.py))
|
||||||
|
3. 实现 `send_message()` 和 `verify_signature()` 方法
|
||||||
|
4. 在 `config/config.json5` 添加渠道配置
|
||||||
|
5. 在 Gateway 服务器注册 webhook 路由
|
||||||
|
|
||||||
|
### 添加新的 Agent 工具
|
||||||
|
|
||||||
|
1. 在 `src/minenasai/agent/tools/` 创建或扩展工具文件
|
||||||
|
2. 工具函数需要包含类型注解和中文 docstring
|
||||||
|
3. 在 `agent/tool_registry.py` 注册工具
|
||||||
|
4. 在 `config/config.json5` 配置权限级别
|
||||||
|
|
||||||
|
## 注意事项
|
||||||
|
|
||||||
|
- 维护 `进度.md` 文件记录关键进展
|
||||||
|
- 重大技术决策需要记录理由
|
||||||
|
- 遇到问题优先查看现有代码和文档
|
||||||
|
- 不确定时先问,再动手
|
||||||
|
- 所有代码必须通过 ruff 和 mypy 检查后再提交
|
||||||
@@ -18,7 +18,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# 复制项目文件
|
# 复制项目文件
|
||||||
COPY pyproject.toml ./
|
COPY pyproject.toml README.md ./
|
||||||
COPY src/ ./src/
|
COPY src/ ./src/
|
||||||
|
|
||||||
# 安装依赖到虚拟环境
|
# 安装依赖到虚拟环境
|
||||||
|
|||||||
263
PoC总结.md
263
PoC总结.md
@@ -1,263 +0,0 @@
|
|||||||
# MineNASAI - PoC 验证总结
|
|
||||||
|
|
||||||
**日期**: 2025-02-04
|
|
||||||
**状态**: PoC 验证完成
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## PoC 验证结果
|
|
||||||
|
|
||||||
### PoC 1: Claude Code CLI 集成
|
|
||||||
|
|
||||||
**状态**: ⚠️ 部分可行
|
|
||||||
|
|
||||||
**测试结果**:
|
|
||||||
- ✅ Claude CLI 已安装(版本 2.1.31)
|
|
||||||
- ✅ Claude CLI 在命令行可正常运行
|
|
||||||
```bash
|
|
||||||
claude -p "今天上海温度" # 正常返回结果
|
|
||||||
```
|
|
||||||
- ❌ Python `subprocess` 集成失败
|
|
||||||
- 进程卡住不返回
|
|
||||||
- 可能原因:缓冲问题、进程通信问题
|
|
||||||
|
|
||||||
**影响**:
|
|
||||||
- 核心功能(编程能力)依赖CLI,但集成有技术难度
|
|
||||||
- 需要寻找替代方案或深入解决subprocess问题
|
|
||||||
|
|
||||||
**建议方案**:
|
|
||||||
1. **使用 Anthropic API**(最可靠)
|
|
||||||
- 优点:稳定、可控、易集成
|
|
||||||
- 缺点:失去CLI的IDE集成能力
|
|
||||||
|
|
||||||
2. **混合方案**(推荐)
|
|
||||||
- 简单任务:使用API
|
|
||||||
- 复杂编程:在TUI中手动调用CLI
|
|
||||||
- 务实且风险低
|
|
||||||
|
|
||||||
3. **继续研究CLI集成**
|
|
||||||
- 深入调试subprocess问题
|
|
||||||
- 尝试文件重定向、异步IO等方案
|
|
||||||
- 时间成本高,不确定性大
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### PoC 2: 智能路由算法
|
|
||||||
|
|
||||||
**状态**: ✅ 验证通过
|
|
||||||
|
|
||||||
**测试结果**:
|
|
||||||
- ✅ 启发式规则准确率: **85.7%** (6/7)
|
|
||||||
- ✅ 超过70%门槛
|
|
||||||
- ✅ 响应速度快(< 1ms)
|
|
||||||
|
|
||||||
**测试用例**:
|
|
||||||
| 用例 | 消息 | 预期 | 实际 | 结果 |
|
|
||||||
|------|------|------|------|------|
|
|
||||||
| 1 | NAS状态? | fast | fast | ✅ |
|
|
||||||
| 2 | 搜索最新的Python教程 | fast | fast | ✅ |
|
|
||||||
| 3 | 实现一个Web服务 | deep | deep | ✅ |
|
|
||||||
| 4 | 重构这个模块 | deep | deep | ✅ |
|
|
||||||
| 5 | 修改配置文件中的端口 | medium | medium | ✅ |
|
|
||||||
| 6 | 添加一个新的API端点 | medium | medium | ✅ |
|
|
||||||
| 7 | 长文本分析任务 | medium | deep | ❌ |
|
|
||||||
|
|
||||||
**结论**:
|
|
||||||
- 启发式规则足够应对大部分场景
|
|
||||||
- 可后续优化规则或引入LLM增强
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### PoC 3: MCP Server 加载
|
|
||||||
|
|
||||||
**状态**: ⚠️ 测试未完成
|
|
||||||
|
|
||||||
**遇到问题**:
|
|
||||||
- Node.js 和 npx 已安装
|
|
||||||
- MCP Server 进程启动后无响应
|
|
||||||
- 可能原因:协议通信、进程管理问题
|
|
||||||
|
|
||||||
**建议**:
|
|
||||||
- MCP Server集成复杂度较高
|
|
||||||
- 可作为Phase 2或更后期的功能
|
|
||||||
- 先用内置工具和API实现MVP
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 总体评估
|
|
||||||
|
|
||||||
### 可行性结论
|
|
||||||
|
|
||||||
✅ **项目整体可行**,但需要调整技术方案
|
|
||||||
|
|
||||||
| 组件 | 可行性 | 风险 | 建议 |
|
|
||||||
|------|--------|------|------|
|
|
||||||
| Claude CLI | ⚠️ 部分 | 高 | 改用API或混合方案 |
|
|
||||||
| 智能路由 | ✅ 可行 | 低 | 启发式规则足够 |
|
|
||||||
| MCP Server | ⚠️ 待定 | 中 | 延后或简化 |
|
|
||||||
| 其他组件 | ✅ 可行 | 低 | 技术栈成熟 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 推荐技术方案调整
|
|
||||||
|
|
||||||
### 方案A: 使用 Anthropic API(推荐)
|
|
||||||
|
|
||||||
**修改内容**:
|
|
||||||
- Agent运行时直接使用 `anthropic` SDK
|
|
||||||
- 去掉 Claude CLI 桥接模块
|
|
||||||
- TUI仅用于监控和管理
|
|
||||||
|
|
||||||
**优点**:
|
|
||||||
- ✅ 稳定可靠
|
|
||||||
- ✅ 开发速度快
|
|
||||||
- ✅ 易于测试和调试
|
|
||||||
- ✅ 完整的工具调用支持
|
|
||||||
|
|
||||||
**缺点**:
|
|
||||||
- ❌ 失去CLI的特殊能力(如IDE集成)
|
|
||||||
- ❌ 无法利用Claude Code的高级功能
|
|
||||||
|
|
||||||
**影响**:
|
|
||||||
- Phase 3(Claude CLI集成)工作量大幅减少
|
|
||||||
- 整体开发周期缩短约2周
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 方案B: 混合方案(平衡)
|
|
||||||
|
|
||||||
**实现方式**:
|
|
||||||
1. **日常任务**:使用 Anthropic API
|
|
||||||
- 企业微信/飞书消息处理
|
|
||||||
- 简单查询和对话
|
|
||||||
- 工具调用
|
|
||||||
|
|
||||||
2. **复杂编程**:手动调用 Claude CLI
|
|
||||||
- 在TUI中提供CLI快捷入口
|
|
||||||
- 用户主动选择使用CLI模式
|
|
||||||
- 结果可回传到知识库
|
|
||||||
|
|
||||||
**优点**:
|
|
||||||
- ✅ 保留CLI的编程能力
|
|
||||||
- ✅ API部分稳定可靠
|
|
||||||
- ✅ 用户可按需选择
|
|
||||||
|
|
||||||
**缺点**:
|
|
||||||
- ⚠️ 体验不够无缝
|
|
||||||
- ⚠️ 需要手动切换
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 方案C: Web TUI集成(用户建议 ✅ 推荐)
|
|
||||||
|
|
||||||
**实现方式**:
|
|
||||||
1. **简单任务**:使用 Anthropic API
|
|
||||||
- 企业微信/飞书消息处理
|
|
||||||
- 日常查询、简单操作
|
|
||||||
- API稳定高效
|
|
||||||
|
|
||||||
2. **复杂编程任务**:Web TUI + SSH + Claude CLI
|
|
||||||
```
|
|
||||||
消息提示 "请在Web TUI处理"
|
|
||||||
↓
|
|
||||||
用户打开Web终端页面
|
|
||||||
↓
|
|
||||||
xterm.js显示终端界面
|
|
||||||
↓
|
|
||||||
WebSocket连接后端
|
|
||||||
↓
|
|
||||||
paramiko SSH连接localhost
|
|
||||||
↓
|
|
||||||
直接运行 claude 命令
|
|
||||||
↓
|
|
||||||
用户在浏览器中与Claude交互
|
|
||||||
```
|
|
||||||
|
|
||||||
**核心优势**:
|
|
||||||
- ✅ **完全避开subprocess问题** - 不做进程间通信
|
|
||||||
- ✅ **保留CLI完整能力** - 用户直接操作,无限制
|
|
||||||
- ✅ **实现简单** - xterm.js成熟稳定
|
|
||||||
- ✅ **体验自然** - 像使用SSH工具一样
|
|
||||||
- ✅ **权限隔离** - SSH本身就是隔离机制
|
|
||||||
- ✅ **跨平台** - 浏览器即可访问
|
|
||||||
|
|
||||||
**技术栈**:
|
|
||||||
- 前端:xterm.js(Web终端模拟器)
|
|
||||||
- 通信:WebSocket(双向I/O)
|
|
||||||
- 后端:paramiko(Python SSH库)
|
|
||||||
- 连接:SSH localhost
|
|
||||||
|
|
||||||
**影响**:
|
|
||||||
- Phase 3工作量适中(约5-7天)
|
|
||||||
- 无subprocess调试成本
|
|
||||||
- 用户体验最优
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 下一步建议
|
|
||||||
|
|
||||||
### 立即行动
|
|
||||||
|
|
||||||
1. **✅ 采用方案C(Web TUI集成)**
|
|
||||||
- 简单任务用Anthropic API
|
|
||||||
- 复杂任务用Web TUI + SSH + Claude CLI
|
|
||||||
- 避免所有subprocess问题
|
|
||||||
- 保留完整CLI能力
|
|
||||||
|
|
||||||
2. **开始 Phase 0: 项目初始化**
|
|
||||||
- 创建项目结构
|
|
||||||
- 配置开发环境
|
|
||||||
- 设置依赖管理
|
|
||||||
|
|
||||||
3. **✅ 设计文档已更新**
|
|
||||||
- 技术栈已调整
|
|
||||||
- Phase 3为Web TUI集成
|
|
||||||
- 时间估算已优化
|
|
||||||
|
|
||||||
### 风险管理
|
|
||||||
|
|
||||||
**已降低的风险**:
|
|
||||||
- ✅ 智能路由效果 → 85.7%准确率,风险低
|
|
||||||
- ✅ Python技术栈 → 成熟可靠
|
|
||||||
|
|
||||||
**需要关注的风险**:
|
|
||||||
- ⚠️ MCP Server集成 → 建议延后
|
|
||||||
- ⚠️ 性能优化 → 需要后期压力测试
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 资源和时间重估
|
|
||||||
|
|
||||||
### 方案C(Web TUI集成)✅ 采用
|
|
||||||
|
|
||||||
| Phase | 原估算 | 新估算 | 变化 | 说明 |
|
|
||||||
|-------|--------|--------|------|------|
|
|
||||||
| Phase 0 | 2-3天 | 2-3天 | 不变 | 项目初始化 |
|
|
||||||
| Phase 1 | 14-21天 | 14-21天 | 不变 | Gateway + 通讯 |
|
|
||||||
| Phase 2 | 14-21天 | **10-14天** | ⬇️ 简化 | 暂不做MCP/RAG |
|
|
||||||
| Phase 3 | 12-17天 | **7-10天** | ⬇️ 减少 | Web TUI + API |
|
|
||||||
| Phase 4 | 10-14天 | 10-14天 | 不变 | 高级特性 |
|
|
||||||
| Phase 5 | 7-10天 | 7-10天 | 不变 | 生产就绪 |
|
|
||||||
|
|
||||||
**新总计**: 52-81天(优化约7-12天)
|
|
||||||
|
|
||||||
**技术债务降低**:
|
|
||||||
- ❌ 无subprocess调试成本
|
|
||||||
- ❌ 无MCP集成复杂度(可选)
|
|
||||||
- ❌ 无RAG初期成本(可选)
|
|
||||||
- ✅ Web TUI成熟方案
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 附录:PoC 验证文件
|
|
||||||
|
|
||||||
- `poc/router_test/poc_2_heuristic.py` - 智能路由测试(✅ 通过)
|
|
||||||
- `poc/claude_cli_test/poc_1_basic.py` - CLI基础测试(⚠️ 问题)
|
|
||||||
- `poc/mcp_test/poc_3_basic.py` - MCP连接测试(⚠️ 未完成)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**PoC验证完成时间**: 2025-02-04 16:55
|
|
||||||
**方案确定时间**: 2025-02-04 17:10
|
|
||||||
**采用方案**: ✅ 方案C - Web TUI集成
|
|
||||||
**下一步**: 开始Phase 0项目初始化
|
|
||||||
251
README.md
251
README.md
@@ -1,250 +1 @@
|
|||||||
# MineNASAI
|
# MineNasAI
|
||||||
|
|
||||||
基于 NAS 的智能个人 AI 助理,支持企业微信/飞书通讯,集成多 LLM 编程能力。
|
|
||||||
|
|
||||||
[](https://python.org)
|
|
||||||
[](tests/)
|
|
||||||
[](LICENSE)
|
|
||||||
|
|
||||||
## 特性
|
|
||||||
|
|
||||||
- **多 LLM 支持**: Anthropic Claude、OpenAI、DeepSeek、智谱、MiniMax、Moonshot、Gemini
|
|
||||||
- **多渠道通讯**: 企业微信、飞书接入
|
|
||||||
- **智能路由**: 自动识别任务复杂度,选择最优处理方式
|
|
||||||
- **双界面模式**:
|
|
||||||
- 通讯工具:日常交互、简单任务
|
|
||||||
- Web TUI:深度编程、复杂项目
|
|
||||||
- **安全隔离**: Python 沙箱执行、权限分级、确认机制
|
|
||||||
- **生产就绪**: 健康检查、监控指标、Docker 部署
|
|
||||||
- **可扩展**: 工具注册中心、Cron 定时任务
|
|
||||||
|
|
||||||
## 快速开始
|
|
||||||
|
|
||||||
### 环境要求
|
|
||||||
|
|
||||||
- Python 3.11+
|
|
||||||
- Redis (可选,用于任务队列)
|
|
||||||
- SSH 服务 (Web TUI 需要)
|
|
||||||
|
|
||||||
### 安装
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 克隆项目
|
|
||||||
git clone http://jiulu-gameplay.com.cn:13001/congsh/MineNasAI.git
|
|
||||||
cd MineNasAI
|
|
||||||
|
|
||||||
# 创建虚拟环境
|
|
||||||
python -m venv .venv
|
|
||||||
.venv\Scripts\activate # Windows
|
|
||||||
# source .venv/bin/activate # Linux/macOS
|
|
||||||
|
|
||||||
# 安装依赖
|
|
||||||
pip install -e ".[dev]"
|
|
||||||
|
|
||||||
# 安装 pre-commit 钩子
|
|
||||||
pre-commit install
|
|
||||||
```
|
|
||||||
|
|
||||||
### 配置
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 复制环境变量模板
|
|
||||||
cp .env.example .env
|
|
||||||
|
|
||||||
# 编辑 .env 文件,填入 API Key
|
|
||||||
# MINENASAI_ANTHROPIC_API_KEY=sk-ant-xxxxx
|
|
||||||
# MINENASAI_DEEPSEEK_API_KEY=sk-xxxxx
|
|
||||||
```
|
|
||||||
|
|
||||||
### 运行
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 启动 Gateway 服务
|
|
||||||
python -m uvicorn minenasai.gateway.server:app --port 8000
|
|
||||||
|
|
||||||
# 启动 Web TUI 服务(另一个终端)
|
|
||||||
python -m uvicorn minenasai.webtui.server:app --port 8080
|
|
||||||
```
|
|
||||||
|
|
||||||
### Docker 部署
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 构建并启动
|
|
||||||
docker-compose up -d
|
|
||||||
|
|
||||||
# 查看日志
|
|
||||||
docker-compose logs -f gateway
|
|
||||||
|
|
||||||
# 停止服务
|
|
||||||
docker-compose down
|
|
||||||
```
|
|
||||||
|
|
||||||
## 项目结构
|
|
||||||
|
|
||||||
```
|
|
||||||
MineNasAI/
|
|
||||||
├── src/minenasai/
|
|
||||||
│ ├── core/ # 核心模块
|
|
||||||
│ │ ├── config.py # 配置管理
|
|
||||||
│ │ ├── logging.py # 日志系统
|
|
||||||
│ │ ├── database.py # 数据库
|
|
||||||
│ │ ├── monitoring.py # 监控与健康检查
|
|
||||||
│ │ └── cache.py # 缓存与限流
|
|
||||||
│ ├── gateway/ # Gateway 服务
|
|
||||||
│ │ ├── protocol/ # 消息协议
|
|
||||||
│ │ ├── router.py # 智能路由
|
|
||||||
│ │ ├── server.py # FastAPI 服务
|
|
||||||
│ │ └── channels/ # 通讯渠道
|
|
||||||
│ ├── llm/ # LLM 集成
|
|
||||||
│ │ ├── base.py # 基础接口
|
|
||||||
│ │ ├── manager.py # LLM 管理器
|
|
||||||
│ │ └── clients/ # 各提供商客户端
|
|
||||||
│ ├── agent/ # Agent 运行时
|
|
||||||
│ │ ├── runtime.py # Agent 执行
|
|
||||||
│ │ ├── permissions.py # 权限管理
|
|
||||||
│ │ ├── tool_registry.py # 工具注册
|
|
||||||
│ │ └── tools/ # 内置工具
|
|
||||||
│ ├── scheduler/ # 定时任务
|
|
||||||
│ │ └── cron.py # Cron 调度器
|
|
||||||
│ └── webtui/ # Web TUI
|
|
||||||
│ ├── server.py # TUI 服务器
|
|
||||||
│ ├── auth.py # 认证管理
|
|
||||||
│ ├── ssh_manager.py # SSH 管理
|
|
||||||
│ └── static/ # 前端文件
|
|
||||||
├── tests/ # 测试用例 (131 tests)
|
|
||||||
├── config/ # 配置模板
|
|
||||||
├── Dockerfile # Docker 构建
|
|
||||||
└── docker-compose.yml # 容器编排
|
|
||||||
```
|
|
||||||
|
|
||||||
## 架构概述
|
|
||||||
|
|
||||||
```
|
|
||||||
┌─────────────────────────────────────────────────────────────┐
|
|
||||||
│ 通讯接入层 (Channels) │
|
|
||||||
│ 企业微信Bot 飞书Bot Web UI │
|
|
||||||
└────────────────────────────┬────────────────────────────────┘
|
|
||||||
│
|
|
||||||
┌────────────────────────────┴────────────────────────────────┐
|
|
||||||
│ Gateway 服务 (FastAPI) │
|
|
||||||
│ WebSocket协议 / 监控指标 / 健康检查 / CORS │
|
|
||||||
└────────────────────────────┬────────────────────────────────┘
|
|
||||||
│
|
|
||||||
┌────────────────────────────┴────────────────────────────────┐
|
|
||||||
│ 智能路由层 (SmartRouter) │
|
|
||||||
│ 任务复杂度评估 / 单/多Agent决策 │
|
|
||||||
└────────────────────────────┬────────────────────────────────┘
|
|
||||||
│
|
|
||||||
┌───────────────────┼───────────────────┐
|
|
||||||
↓ ↓ ↓
|
|
||||||
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
|
||||||
│ 快速执行通道 │ │ 多 LLM │ │ Web TUI │
|
|
||||||
│ Python沙箱 │ │ API │ │ SSH+Claude │
|
|
||||||
└─────────────┘ └─────────────┘ └─────────────┘
|
|
||||||
│
|
|
||||||
┌───────────────────┼───────────────────┐
|
|
||||||
↓ ↓ ↓
|
|
||||||
Anthropic Claude DeepSeek/智谱 OpenAI/Gemini
|
|
||||||
```
|
|
||||||
|
|
||||||
## 支持的 LLM 提供商
|
|
||||||
|
|
||||||
| 提供商 | 模型示例 | 区域 | 代理 |
|
|
||||||
|--------|----------|------|------|
|
|
||||||
| Anthropic | claude-sonnet-4-20250514 | 境外 | 需要 |
|
|
||||||
| OpenAI | gpt-4o | 境外 | 需要 |
|
|
||||||
| Google | gemini-2.0-flash | 境外 | 需要 |
|
|
||||||
| DeepSeek | deepseek-chat | 国内 | 不需要 |
|
|
||||||
| 智谱 | glm-4-flash | 国内 | 不需要 |
|
|
||||||
| MiniMax | abab6.5s-chat | 国内 | 不需要 |
|
|
||||||
| Moonshot | moonshot-v1-8k | 国内 | 不需要 |
|
|
||||||
|
|
||||||
## API 端点
|
|
||||||
|
|
||||||
| 端点 | 方法 | 说明 |
|
|
||||||
|------|------|------|
|
|
||||||
| `/` | GET | 服务状态 |
|
|
||||||
| `/health` | GET | 完整健康检查 |
|
|
||||||
| `/health/live` | GET | 存活检查 (K8s) |
|
|
||||||
| `/health/ready` | GET | 就绪检查 (K8s) |
|
|
||||||
| `/metrics` | GET | 监控指标 |
|
|
||||||
| `/ws` | WebSocket | 消息通道 |
|
|
||||||
| `/api/agents` | GET | Agent 列表 |
|
|
||||||
| `/api/sessions` | GET | 会话列表 |
|
|
||||||
|
|
||||||
## 开发
|
|
||||||
|
|
||||||
### 代码规范
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 格式化代码
|
|
||||||
ruff format src tests
|
|
||||||
|
|
||||||
# 检查代码
|
|
||||||
ruff check src tests
|
|
||||||
|
|
||||||
# 类型检查
|
|
||||||
mypy src
|
|
||||||
```
|
|
||||||
|
|
||||||
### 测试
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 运行所有测试
|
|
||||||
pytest
|
|
||||||
|
|
||||||
# 带覆盖率
|
|
||||||
pytest --cov=minenasai
|
|
||||||
|
|
||||||
# 详细输出
|
|
||||||
pytest -v --tb=short
|
|
||||||
```
|
|
||||||
|
|
||||||
### 当前测试覆盖
|
|
||||||
|
|
||||||
- **test_core.py**: 配置、日志 (9 tests)
|
|
||||||
- **test_gateway.py**: 协议、路由 (14 tests)
|
|
||||||
- **test_llm.py**: LLM 客户端 (10 tests)
|
|
||||||
- **test_monitoring.py**: 监控、健康检查 (17 tests)
|
|
||||||
- **test_cache.py**: 缓存、限流 (21 tests)
|
|
||||||
- **test_permissions.py**: 权限、工具注册 (17 tests)
|
|
||||||
- **test_scheduler.py**: Cron 调度 (15 tests)
|
|
||||||
- **test_tools.py**: 内置工具 (14 tests)
|
|
||||||
- **test_webtui.py**: Web TUI (14 tests)
|
|
||||||
|
|
||||||
## 配置说明
|
|
||||||
|
|
||||||
配置文件: `config/config.json5`
|
|
||||||
|
|
||||||
主要配置项:
|
|
||||||
|
|
||||||
| 配置项 | 说明 | 默认值 |
|
|
||||||
|--------|------|--------|
|
|
||||||
| `gateway.port` | Gateway 端口 | 8000 |
|
|
||||||
| `webtui.port` | Web TUI 端口 | 8080 |
|
|
||||||
| `llm.default_provider` | 默认 LLM 提供商 | anthropic |
|
|
||||||
| `llm.default_model` | 默认模型 | claude-sonnet-4-20250514 |
|
|
||||||
| `proxy.enabled` | 是否启用代理 | false |
|
|
||||||
| `router.mode` | 路由模式 | agent |
|
|
||||||
|
|
||||||
## 环境变量
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# LLM API Keys
|
|
||||||
MINENASAI_ANTHROPIC_API_KEY=sk-ant-xxx
|
|
||||||
MINENASAI_OPENAI_API_KEY=sk-xxx
|
|
||||||
MINENASAI_DEEPSEEK_API_KEY=sk-xxx
|
|
||||||
MINENASAI_ZHIPU_API_KEY=xxx
|
|
||||||
MINENASAI_MINIMAX_API_KEY=xxx
|
|
||||||
MINENASAI_MOONSHOT_API_KEY=sk-xxx
|
|
||||||
MINENASAI_GEMINI_API_KEY=xxx
|
|
||||||
|
|
||||||
# 代理设置 (境外 API)
|
|
||||||
MINENASAI_PROXY_ENABLED=true
|
|
||||||
MINENASAI_PROXY_HTTP=http://127.0.0.1:7890
|
|
||||||
MINENASAI_PROXY_HTTPS=http://127.0.0.1:7890
|
|
||||||
```
|
|
||||||
|
|
||||||
## 许可证
|
|
||||||
|
|
||||||
MIT License
|
|
||||||
|
|||||||
@@ -30,9 +30,9 @@ services:
|
|||||||
- MINENASAI_PROXY_HTTP=${PROXY_HTTP:-}
|
- MINENASAI_PROXY_HTTP=${PROXY_HTTP:-}
|
||||||
- MINENASAI_PROXY_HTTPS=${PROXY_HTTPS:-}
|
- MINENASAI_PROXY_HTTPS=${PROXY_HTTPS:-}
|
||||||
volumes:
|
volumes:
|
||||||
- minenasai-data:/app/data
|
- /volume2/docker/mineNasAi/data:/app/data
|
||||||
- minenasai-logs:/app/logs
|
- /volume2/docker/mineNasAi/logs:/app/logs
|
||||||
- ./config:/app/config:ro
|
- /volume2/docker/mineNasAi/config:/app/config:ro
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "curl", "-f", "http://localhost:8000/health/live"]
|
test: ["CMD", "curl", "-f", "http://localhost:8000/health/live"]
|
||||||
interval: 30s
|
interval: 30s
|
||||||
@@ -59,8 +59,8 @@ services:
|
|||||||
- MINENASAI_WEBTUI_HOST=0.0.0.0
|
- MINENASAI_WEBTUI_HOST=0.0.0.0
|
||||||
- MINENASAI_WEBTUI_PORT=8080
|
- MINENASAI_WEBTUI_PORT=8080
|
||||||
volumes:
|
volumes:
|
||||||
- minenasai-data:/app/data
|
- /volume2/docker/mineNasAi/data:/app/data
|
||||||
- minenasai-logs:/app/logs
|
- /volume2/docker/mineNasAi/logs:/app/logs
|
||||||
command: ["python", "-m", "uvicorn", "minenasai.webtui.server:app", "--host", "0.0.0.0", "--port", "8080"]
|
command: ["python", "-m", "uvicorn", "minenasai.webtui.server:app", "--host", "0.0.0.0", "--port", "8080"]
|
||||||
networks:
|
networks:
|
||||||
- minenasai-network
|
- minenasai-network
|
||||||
@@ -87,10 +87,6 @@ services:
|
|||||||
|
|
||||||
# ==================== 数据卷 ====================
|
# ==================== 数据卷 ====================
|
||||||
volumes:
|
volumes:
|
||||||
minenasai-data:
|
|
||||||
driver: local
|
|
||||||
minenasai-logs:
|
|
||||||
driver: local
|
|
||||||
redis-data:
|
redis-data:
|
||||||
driver: local
|
driver: local
|
||||||
|
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]:
|
|||||||
setup_logging(settings.logging)
|
setup_logging(settings.logging)
|
||||||
|
|
||||||
# 设置监控
|
# 设置监控
|
||||||
setup_monitoring(app)
|
# setup_monitoring(app) moved to module level to avoid "Cannot add middleware after application has started"
|
||||||
|
|
||||||
# 注册健康检查
|
# 注册健康检查
|
||||||
health_checker = get_health_checker()
|
health_checker = get_health_checker()
|
||||||
@@ -124,6 +124,9 @@ app.add_middleware(
|
|||||||
allow_headers=["*"],
|
allow_headers=["*"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# 设置监控 (必须在应用启动前添加中间件)
|
||||||
|
setup_monitoring(app)
|
||||||
|
|
||||||
|
|
||||||
@app.get("/")
|
@app.get("/")
|
||||||
async def root() -> dict[str, str]:
|
async def root() -> dict[str, str]:
|
||||||
|
|||||||
Reference in New Issue
Block a user