Files
MineNasAI/CLAUDE.md
2026-02-05 16:21:25 +08:00

277 lines
7.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 TUISSH + 深度编程)
### 模块结构
```
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 TUI14 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 检查后再提交